Морфологический разбор слова «подделка»
Часть речи: Существительное
ПОДДЕЛКА — неодушевленное
Начальная форма слова: «ПОДДЕЛКА»
Слово | Морфологические признаки |
---|---|
ПОДДЕЛКА |
|
Все формы слова ПОДДЕЛКА
ПОДДЕЛКА, ПОДДЕЛКИ, ПОДДЕЛКЕ, ПОДДЕЛКУ, ПОДДЕЛКОЙ, ПОДДЕЛКОЮ, ПОДДЕЛОК, ПОДДЕЛКАМ, ПОДДЕЛКАМИ, ПОДДЕЛКАХ
Разбор слова по составу подделка
Основа слова | подделк |
---|---|
Приставка | под |
Корень | дел |
Суффикс | к |
Окончание | а |
Разбор слова в тексте или предложении
Если вы хотите разобрать слово «ПОДДЕЛКА» в конкретном предложении или тексте, то лучше использовать морфологический разбор текста.
Найти синонимы к слову «подделка»Примеры предложений со словом «подделка»
1
Унисон толпа завывай, голова запрокинь да глаз заведи, смотри направление человек подделка на крестовина, кровь подделка на рука и нога.
Пигмей, Чак Паланик, 2009г.2
Эта вечная «подделка» для того и нужна была каждому из них, чтобы удобнее следовать собственным прихотям.
Война и мир. Том 1, Лев Толстой, 1863–1869г.3
Но цивилизация, «подделка под жизнь», верил писатель, не способна участвовать в жизни, тем более направлять ее течение.
Война и мир. Том 1, Лев Толстой, 1863–1869г.4
Но ничто не дает такого холодного, почти неразумного ужаса, как подделка мертвого под живое.
Бедный город, Зинаида Гиппиус, 1906г.5
Он видел, что паспорт поддельный, но подделка
Найти еще примеры предложений со словом ПОДДЕЛКА
Фальшивки с выставки – Еженедельный «Ъ» – Коммерсантъ
Фальсификацией произведений искусства занимаются как непризнанные гении, так и полные бездари. Счет им идет на сотни и тысячи. Пресса с завидной регулярностью пишет о громких скандалах, связанных с обнаружением поддельных картин, и о процессах над теми немногочисленными имитаторами, которых удается поймать. Миллиардный бизнес, несмотря на аресты и суды, продолжает процветать.
СЕРГЕЙ МАНУКОВ
Подделывать произведения искусства люди начали, наверное, еще в каменном веке, когда первый имитатор скопировал на стене пещеры приглянувшийся чужой рисунок мамонта. Но особенно прибыльным это занятие стало в веке XX, с появлением мирового рынка произведений искусства. Хороший имитатор должен быть талантливым человеком. Для того чтобы подделать картину известного художника, нужно не только прекрасно рисовать, но и обладать множеством других знаний.
Подделка произведений искусства — конечно, преступление, но она считается, если можно так сказать, одним из наименее презираемых видов нарушений закона. Все просто: в роли пострадавших в большинстве случаев выступают коллекционеры, в основной массе люди богатые.
Минное поле
На майском аукционе Sotheby’s в Нью-Йорке картина итальянского живописца Амедео Модильяни «Лежащая обнаженная» ушла с молотка за $157,2 млн. Каждый сантиметр почти полутораметрового полотна принес по миллиону долларов. Прежнему владельцу, конезаводчику из Ирландии Джону Маньеру, купившему картину в 2003 году за $26,9 млн, достались $139 млн. Оставшиеся деньги составила комиссия аукционного дома.
Имя нового владельца, как обычно, не разглашается, что неудивительно, ведь от нолей рябит в глазах. Коллекционеры боятся воров, но есть еще одна причина, которая, не исключено, заставляет их проявлять скромность: они не хотят стать посмешищем, если окажется, что им досталась подделка. А вероятность заполучить подделку довольно высока — подобные проколы случаются даже с известным аукционными домами, где картины, прежде чем попасть на торги, проходят тщательную проверку.
«На рынке произведений искусств нет правил,— объясняет консультант по современному искусству Уэнди Голдсмит.— Он напоминает минное поле…»
Подтверждений образному сравнению достаточно. Например, недавно разразился громкий скандал на родине Модильяни.
20 из 30 картин на его выставке, проходившей в генуэзском Дворце дожей в марте—июле 2017 года, оказались подделками.
Полиция сейчас проверяет троих организаторов выставки, а подделки, согласно итальянским законам, были уничтожены.
Среди них, к слову, и одна из многочисленных модильяниевских «Обнаженных», похожая на ту, что была продана в Нью-Йорке. Возникает резонный вопрос: если подделали одну «Обнаженную», то где гарантия, что не подделали других? Так что новому владельцу шедевра, купленного в Нью-Йорке, для спокойствия лучше еще раз заказать независимую экспертизу.
Тому есть и другая причина. Амедео Модильяни — один из наиболее часто подделываемых живописцев. Во-первых, его работы стоят на уровне главных шедевров живописи, а во-вторых, многие из них не имеют провенанса: Амедео вел разгульный образ жизни, поэтому проследить историю многих его картин непросто. Рассказывали, например, что он бродил по Парижу с папкой, набитой рисунками и картинами, предлагая обменять все это на выпивку.
Музей подделок
Похожая история произошла в конце апреля на юге Франции. Мэр городка Эльн Ив Барниоль назвал катастрофой результаты проверки местного музея. Оказалось, что более половины картин — поддельные. Речь идет о работах местного художника Этьена Террюса, одного из основоположников фовизма.
Незадолго до открытия музея после ремонта мэрия купила, в дополнение к уже имевшимся, почти 80 картин Террюса. Приглашенный для создания экспозиции историк живописи Эрик Форкада заподозрил, что многие полотна — подделки. Причем подделки грубые.
«Я провел белой перчаткой по чернильной подписи на одной из картин, и она исчезла»,— объяснил он журналистам.
Столичные эксперты опасения Форкада подтвердили.
После тщательной проверки выяснилось, что подлинные лишь 68 из 140 картин.
В Эльне еще не решили, как поступить с экспозицией. Скорее всего, ее оставят, хотя и в сильно сокращенном виде. А вот музей Цзибаочжай в китайском городе Цзичжоу при схожих обстоятельствах радовал посетителей лишь три года. Его закрыли, после того как выяснилось, что подавляющее большинство из 40 тыс. экспонатов (!) — подделки. Неудивительно, что острословы переименовали его в Музей подделок.
Подделки в Китае давно стали большой проблемой. Счет музеев с контрафактными экспонатами идет на сотни и тысячи, а счет подделок в них — на сотни тысяч, если не на миллионы. По мнению экспертов, фальшивки можно найти абсолютно в любом китайском музее. Часть институций, как в Цзичжоу или, например, в Лючэне, где из 8 тыс. экспонатов фальшивыми оказались как минимум 2,5 тыс., закрывают. Остальные пытаются очистить от фальсификаций. Впрочем, при пополнении коллекций в них опять «просачиваются» имитации, хотя, конечно, их количество уменьшается. С каждым витком этой спирали растет мастерство как кураторов, которые на собственном опыте учатся распознавать контрафакт, так и имитаторов. Хочется надеяться, что окончательная победа в этой длительной войне все же будет на стороне искусствоведов.
Famously infamous
После скандала в Генуе искусствоведы задаются вопросом: сколько из приписываемых Амедео Модильяни работ, хранящихся в картинных галереях, музеях и частных коллекциях, подлинники? Один из самых авторитетных специалистов по Модильяни Марк Рестелини считает, что подделок не менее тысячи.
Среди тех, кто подделывал Модильяни, есть и человек, которого многие историки живописи считают главным имитатором ХХ века.
«Если моя работа висит в музее достаточно долго,— любил говорить Элмир де Хори,— то она становится подлинником».
Большую часть жизни Хори кого-то обманывал. Конечно, не стал исключением американский журналист и писатель Клиффорд Ирвинг, написавший с его слов в конце 1960-х бестселлер «Подделка: История жизни главного имитатора ХХ века». Понять, где правда, а где придуманное героем книги, нелегко. Кстати, Ирвинг и сам мог приукрасить некоторые факты. Достаточно сказать, что его обвиняли в попытке выдать написанную им биографию Говарда Хьюза за автобиографию миллионера…
Элемер Альберт Хофман, ставший впоследствии Элмиром де Хори, родился в Будапеште в еврейской семье среднего достатка 14 апреля 1906 года. Его мать была домохозяйкой, а отец — торговцем. В 1922 году юноша начал серьезно учиться живописи. Через два года Элмир поступил в мюнхенскую Академию художеств, а в 1926-м отправился в Париж, где еще два года учился у Фернана Леже в художественной академии Гранд-Шомьер.
Какое-то время Элмир де Хори выдавал себя за венгерского аристократа и пытался вести светскую жизнь, но походы по ресторанам и модные курорты были ему не по карману. Тогда же у него начались проблемы с полицией, связанные в основном с подделкой чеков. Выход из трудной ситуации подсказало удивительное умение имитировать известных художников. Особенно хорошо ему удавалось копировать стиль Пикассо. Однажды молодой человек показал леди Малькольм Кэмпбелл нарисованный за полчаса чернилами рисунок в стиле Пикассо. Элмир не стал разубеждать англичанку, когда она, по его словам, сама приняла набросок за подлинник испанского живописца и захотела его купить. Заработав за считанные минуты приличные деньги, Хори понял, что, подделывая чужое, можно вполне безбедно жить.
После войны Элмир де Хори поселился в Париже и какое-то время безуспешно пытался зарабатывать на жизнь «честной» живописью. Увы, его картины никто не покупал. Вспомнив свой талант к подражанию, он начал рисовать и продавать подделки Пикассо парижским галереям. Элмир выдавал себя за обедневшего аристократа, который, чтобы не умереть с голоду, распродает остатки семейной коллекции. По второй легенде он познакомился в годы войны с Пикассо и сейчас продает рисунки, которые тот ему подарил.
В 1947 году Элмир отправился попытать счастья в Рио-де-Жанейро. Очередная попытка продавать портреты, пейзажи и натюрморты в авангардистском стиле, подписанные его именем, провалилась. Они не пользовались даже малой долей той популярности, которую имели подделки. Годом позже он организовал в Нью-Йорке выставку своих картин, Элмир сумел продать… лишь одну.
Поездка в США стала поворотным моментом в жизни де Хори. Ему так понравилось в Америке, что вместо трех месяцев он остался на 12 лет. В американский период жизни Элмир расширил список подделываемых художников. К Пикассо прибавились Матисс, Модильяни, Ренуар, Вламинк, Шагал, Тулуз-Лотрек, Дега и другие. Кстати, своего первого Модильяни Элмир написал в 1949 году и продал нью-йоркской галерее Niveau.
Конечно, не обходилось без проколов. В Бостоне Э. Рейнала (под этим именем он тогда жил и работал) подвела беспечность. Он продал Музею Фогга при Гарвардском университете «Матисса», а затем предложил наброски Модильяни и Ренуара из «своей семейной коллекции». Наблюдательный куратор обратила внимание на стилистическое сходство между работами разных художников и начала обзванивать другие музеи и галереи и спрашивать, не приходил ли к ним некий Э. Рейнал. Так американцы узнали, что вежливый коллекционер из Европы торгует сомнительными работами современных мастеров.
Элмир сменил тактику. Он писал в галереи и музеи, что у него есть рисунки и картины, которые он хотел бы продать, и прикладывал фотографии. Вскоре приходил ответ. Какое-то время Хори торговался для вида, затем высылал работы. После проверки на подлинность, которая в подавляющем большинстве случаев оказывалась положительной, он получал деньги. Для того времени это был необычный способ ведения дел, но он работал. К тому же так у Элмира оставалось больше свободного времени, которое он тратил на то, что по-настоящему любил, а любил де Хори загорать, путешествовать и проводить время с друзьями (женщинам Элмир де Хори предпочитал мужчин).
В 1955 году торговец произведениями искусства из Чикаго Джозеф У. Фолкнер обнаружил, что Элмир продал ему подделки, и обратился в суд. Элмир де Хори переехал в Мехико, но неприятности преследовали его и там: мексиканская полиция задержала его по подозрению в убийстве гомосексуалиста, с которым он даже не был знаком.
По возвращении в США Элмир де Хори, к своему удивлению, обнаружил немало собственных имитаций в альбомах старых мастеров. Еще больше его удивили цены, по которым они выставлялись. Элмир понял, что галереи платили ему лишь малую часть стоимости картин. Это оправдывало в его глазах мошенничество: он обманывал галереи и музеи, которые, в свою очередь, обманывали его.
В этот же период Элмир де Хори в очередной раз — и опять без особого успеха — попытался рисовать под своим именем. Его картины не покупали, денег катастрофически не хватало. В отчаянии уже привыкший жить на широкую ногу имитатор попытался совершить самоубийство. Он принял большую дозу снотворного, но его спасли.
В конце 1950-х Хори познакомился с молодым и энергичным мошенником по имени Фернан Легрос. Фернан предложил продавать имитации де Хори, беря в качестве вознаграждения 40%. Элмир согласился. Со временем Легрос потребовал увеличить свою долю до 50%, хотя он и без этого присваивал большую часть вырученных денег. Возмущенный Хори вернулся в Европу. В Париже он через несколько месяцев встретил Легроса с молодым любовником, Реалом Лессардом. Легрос уговорил художника возобновить партнерство и предложил фиксированный оклад — $400 в месяц плюс бонусы с крупных сделок. Элмир, начавший к тому времени все больше уставать от постоянных разъездов, согласился. Предложенных денег ему хватало на безбедную жизнь на Ивисе, где он решил провести старость.
Впрочем, мечты о безмятежной старости не сбылись. С годами Элмир становился беспечнее в работе. Эксперты все чаще обвиняли Легроса и Лессарда в торговле подделками. После нескольких обращений в полицию и Интерпол Фернан отправил партнера от греха подальше, в Австралию.
Возможно, все бы и обошлось, если бы не громкий скандал в Америке. Легрос и Лессард продали в 1967 году более 40 работ де Хори техасскому миллионеру Алгуру Мидоусу. Узнав, что все работы, купленные им за большие деньги, подделки, нефтяной барон пришел в ярость и потребовал от американских властей арестовать Фернана Легроса. Вскоре Легрос и Лессард угодили в тюрьму.
Какое-то время де Хори удавалось скрываться от полиции. Однако он устал на старости лет скитаться и решил вернуться на Ивису. В августе 1968 года испанский суд признал его виновным в гомосексуализме, в отсутствии средств к существованию и в связях с преступниками (Легрос и Лессард) и приговорил к двум месяцам тюрьмы. Полиция не сумела доказать ни одного факта изготовления подделок на территории королевства.
В октябре 1968-го де Хори освободили и на год выслали с Ивисы. На остров он вернулся знаменитым благодаря биографии Ирвинга. Элмир давал интервью и даже снялся у Орсона Уэллса в документальном фильме «П означает «подделка»» (1973). На старости лет он обрел заслуженную известность. До этого Элмир часто горько шутил, что «широко известен своей дурной репутацией» (famously infamous).
В надежде воспользоваться популярностью де Хори еще раз решил попробовать вернуться к живописи под собственным именем. Его картины наконец начали покупать, но доходы от «честной» живописи все равно были несопоставимы с тем, что он зарабатывал имитациями.
Депрессию усилила новость о том, что французские власти добиваются у Мадрида его экстрадиции и хотят обвинить в изготовлении подделок.
11 декабря 1976 года Марк Форги, исполнявший обязанности телохранителя и компаньона, сообщил де Хори еще одну неприятную новость: правительство Испании согласилось выдать его Парижу. Элмир принял большую дозу снотворного. Форги повез его в больницу, но де Хори скончался по пути в машине.
При помощи Фернана Легроса и других партнеров за 30-летнюю карьеру имитатора Элмир де Хори продал более тысячи подделок. Многие из них до сих пор считаются подлинниками и висят в музеях, галереях и частных коллекциях.
Элмир стал героем ряда книг, мюзикла, пьесы, его работы нередко показывали на выставках имитаций. А много раньше, в 1951 году, его творчество произвело такое впечатление на мэра Нового Орлеана, что мэр сделал копииста почетным горожанином и вручил символический ключ от города. В Атланте есть ресторан, где на стенах висят копии его работ. Как нетрудно догадаться, ресторан называется «Элмир».
Кстати, красноречивее всего о том, что Элмир де Хори был отличным имитатором, говорит тот факт, что после смерти де Хори имитаторы наводнили рынок подделками его подделок.
Трудно быть гением втихомолку
Истории большинства имитаторов схожи. Человек считает себя отличным художником, однако критики и рынок придерживаются иного мнения. Герой обижен. Он уверен, что с ним поступили несправедливо из зависти к его таланту. Он хочет творить, но при этом ему нужно, чтобы его хвалили и уважали. Неизбежно возникает желание доказать критикам, что они ничего не понимают в высоком искусстве. Затем приходит мысль, как это сделать — нарисовать полотно в стиле кого-нибудь из известных живописцев и доказать всему человечеству, и в первую очередь критикам, что он рисует как минимум не хуже.
Среди имитаторов попадаются настоящие гении. Одному из них, голландцу Хану ван Мегерену пришлось признаться в мошенничестве, чтобы сохранить жизнь.
Ван Мегерена арестовали за сотрудничество с нацистами и продажу национального достояния — полотен Вермеера. Чтобы избежать смертного приговора, пришлось признаваться. Ему, конечно, не поверили. Ван Мегерену предложили нарисовать «Ужин в Эммаусе» по памяти. Он сделал ответное предложение: «Создание копии не доказывает наличие таланта. Я никогда не рисовал копий и не хочу делать это сейчас. Если хотите, я нарисую вам нового Вермеера. Я создам на ваших глазах новый шедевр!»
Шесть недель, подкрепляя силы вином и морфием, Хан ван Мегерен рисовал перед изумленными журналистами и стражами порядка Вермеера. Он доказал свою вину и был приговорен к году тюрьмы, но не за сотрудничество с немцами, а за изготовление подделок…
Ван Мегерен далеко не единственный имитатор, который добровольно признался в мошенничестве и сам же его доказал. Правда, мотивы таких признаний разные. Голландец спасал свою жизнь. Гораздо чаще имитаторы сознаются в том, что подделывают произведения искусства из желания, чтобы окружающие признали их гениальность.
В 1951 году немецкий художник Лотар Мальскат получил заказ на восстановление фресок в сильно пострадавшей в войну церкви Св. Марии в Любеке. Когда выяснилось, что фрески повреждены до неузнаваемости и что не сохранилось ни одной фотографии, Мальскат сам их придумал и нарисовал.
Новые фрески имели большой успех. Правительство ФРГ даже выпустило 2 млн почтовых марок с их изображениями. Но Мальскату такого признания оказалось мало. Он публично заявил, что все фрески взял из головы, то есть, попросту говоря, подделал. Когда же ему никто не поверил, обратился в суд и обвинил сам себя в мошенничестве. Предвидя подобные трудности, Лотар вписал во фрески анахронизмы, которые помогли бы ему доказать свое авторство. Например, он нарисовал… Марлен Дитрих и Григория Распутина, а также индейку, которая попала в Европу гораздо позднее XIII века.
«Справедливость» восторжествовала. Мальскат доказал свой талант и получил полтора года тюрьмы. Что же касается фресок, то их смыли.
Каждый большой имитатор по-своему интересен, у каждого своя изюминка. Эрик Хебборн, например, преуспел не только в живописи, но и в литературе. Он прославился автобиографией и руководством для имитаторов. Причем последнее пользовалось не меньшей популярностью, чем первое, правда, в основном у его коллег по профессии: руководство часто находили у них при обысках.
Хебборн окончил Королевскую академию искусств, но вместо того, чтобы стать выдающимся живописцем или историком искусств, стал известнейшим имитатором. Хуже всего он относился к критикам и торговцам картинами. Эрик соблюдал неписаный моральный кодекс — продавал свои подделки не любителям, коллекционерам, а исключительно специалистам.
«Только эксперты достойны того, чтобы их обманывали,— сказал Хебборн в 1991 году.— Чем авторитетнее эксперт, тем приятнее обвести его вокруг пальца».
Что касается мастерства, то с этим у Эрика Хебборна все было в порядке. Достаточно сказать, что рисунки, которые он выдавал за наброски старых мастеров, с удовольствием приобретал даже Музей Гетти, крупнейший на Западном побережье США.
Еще один имитатор из Великобритании — Том Китинг известен тем, что любил играть с кураторами и экспертами. Он оставлял на своих работах «бомбы замедленного действия», по которым можно было догадаться, что это подделка. К примеру, «Телегу для сена», самое известное полотно знаменитого британского живописца Джона Констебла, Том выполнил, нарисовав зеркальную копию. Он часто пользовался современными красками. Кстати, никто из экспертов почему-то не обратил внимание, что китинговская «Телега для сена» написана красками, которых в начале позапрошлого века еще и в помине не было.
Иногда Том Китинг применял глицерин, таявший в лаборатории, когда холст при проведении экспертизы нагревался. Этот трюк использовали создатели фильма «Афера Томаса Крауна».
После провала затеи с «бомбами» Китинг решил совершить «самоубийство». Он выставил на аукцион 13 акварелей Сэмюэла Палмера. Конечно, внушительное число работ известного британского художника, выставленных одновременно на продажу, насторожило экспертов. Тома разоблачили — и он наконец прославился. Телепередача, в которой он учил зрителей рисовать как великие живописцы, пользовалась бешеной популярностью.
Еще один известный имитатор — Джон Майатт нередко рисовал картины импрессионистов акриловыми красками. Однако эксперты или не знали, что у современных и старых красок разный химический состав, или так горели желанием открыть нового Моне—Матисса, что не замечали ничего вокруг.
Тем не менее Майатта разоблачили. Его приговорили к году тюрьмы, но через четыре месяца выпустили на свободу за примерное поведение. Заключенные относились к нему неплохо и даже прозвали «Пикассо» за то, что в обмен на телефонные карточки он рисовал их портреты.
После освобождения Джон Майатт бойко торговал своими «подлинными подделками». Несмотря на то что на имитациях работ известных художников стояло его имя, за них, не торгуясь, платили шестизначные суммы.
Майатт настолько известен, что успешно проводит выставки своих подделок. По его словам, сейчас в музеях и частных коллекциях находится около 120 его имитаций, которые считаются подлинниками.
Робины Гуды мира изящных искусств
Последствия действий имитаторов наносят обществу меньший урон, чем деятельность других мошенников, например финансовых. Поэтому они обычно получают более мягкие приговоры и чаще всего отбывают наказание в тюрьмах со свободным режимом содержания.
Поскольку имитаторы обманывают в основном людей богатых, публика чаще всего относится к ним как к героям, этаким Робинам Гудам мира живописи. Журнал Spiegel объяснил такое отношение на примере немецкого имитатора Вольфганга Бельтракки, специализировавшегося на копировании Альбрехта Дюрера. Бельтракки разоблачили, после того как одну из его подделок — «Пейзаж с лошадьми», якобы принадлежащий кисти Генриха Кампендонка, купил за миллион с лишним долларов американский комик Стив Мартин, кстати сам убедительно игравший мошенников. Имитатор стал знаменитостью и, как водится, загремел за решетку. Выйдя на свободу, он написал несколько книг о своих похождениях и снялся в полнометражном документальном фильме о себе, любимом
После ареста Бельтракки стал любимцем немецкой прессы. Die Zeit, например, потребовала организовать выставку его подделок, а Frankfurter Allgemeine Zeitung заявила, что Кампендонк рисовал свои картины хуже, чем это делал Бельтракки. «В отличие от жуликов-банкиров Бельтракки не отнимал у простых людей обманным путем сбережения,— считал Spiegel.— Он обманывал тех, кто хотел быть обманутым».
И все же ошибочно считать изготовление подделок в мире искусств совсем уж безобидным видом мошенничества. Взять, к примеру, напарника Майатта, Джона Дрю. Он не только продавал подделки, но и обеспечивал для них документальное прикрытие. Дрю проникал в архивы музеев и галерей и создавал для подделок Майатта провенанс, внося в каталоги карточки с их описаниями и уничтожая то, что могло Майатта разоблачить. При всей кажущейся безобидности такая деятельность искажала историю искусств.
И опасна, и трудна…
Успехи великих имитаторов вроде ван Мегера, де Хори или Майатта в первую очередь справедливо приписывают их талантам. Им и их коллегам нередко удавалось обмануть самых опытных искусствоведов.
Лондонская галерея Далвич провела в 2015 году любопытный эксперимент. Посетителей выставки старых мастеров попросили найти среди 240 полотен одну подделку. Эксперимент длился три месяца и так заинтересовал поклонников живописи, что число посетителей выросло вчетверо.
Каждый десятый из почти трех тысяч посетителей выставки, участвовавших в эксперименте, правильно нашел имитацию. Ей оказалось полотно Жан-Оноре Фрагонара «Девушка». Копию изготовили в… Китае. Ее сделали в Meisheng Oil Painting Manufacture Company, где полторы сотни художников изготавливают на заказ копии старых мастеров. Для того чтобы они отличались от подлинников, их делают несколько других размеров.
Так, может, все же работа эксперта не так уж и трудна, если ее в состоянии выполнить обычные посетители выставки? Здесь вспоминается трагикомический случай, который произошел в 2006 году в Германии. Директор Музея искусств в Морицбурге Катя Шнайдер приняла беспорядочное нагромождение мазков разных красок за шедевр немецкого художника Эрнста Вильгельма Нея и, не раздумывая ни секунды, купила его для своего музея. Нетрудно представить ее разочарование, когда выяснилось, что яркую картину написал не Ней, а Банги. Это имя ничего не говорило поклонникам живописи по одной простой, но веской причине: Банги — 30-летний шимпанзе из зоопарка Галле, большой поклонник абстрактной живописи.
Случай с Банги вызывает, конечно, улыбку, но если говорить серьезно, то работе экспертов не позавидуешь, потому что цена их ошибок слишком высока и нередко речь идет о суммах с множеством нолей.
Конечно, больше всего упреков в свой адрес эксперты слышат, когда не могут отличить подделку от подлинника.
Но, случается, специалисты принимают подлинники за подделки, в результате чего цена картин занижается на один-два порядка.
В прошлом году, например, в Великобритании было доказано, что картина, много лет считавшаяся подражанием Джону Констеблу и проданная по этой причине за £35 тыс., все же является подлинником и стоит £2 млн. Кстати, в подлинность полотна все эти годы верил, но не мог доказать ее прежний владелец, коллекционер и телеведущий Филип Мулд. Эксперты установили, что это ранняя версия уже упоминавшейся «Телеги для сена». Во-первых, краски соответствуют по составу тем, которыми писал Констебл. Во-вторых, удалось проследить ее историю едва ли не до момента написания почти два столетия назад.
Мулд доволен, что оказался прав. К тому же он не остался внакладе, несмотря на то что продал полотно в 2000 году бизнесмену Генри Рейду раз в 60 дешевле реальной цены — сам-то Мулд купил ее за £10 тыс.
Гроза имитаторов
Те из «копиистов», кто знает, чем занимается Джейми Мартин, боятся его как огня. Мистер Мартин заведует научной лабораторией нью-йоркского отделения аукционного дома Sotheby’s и является одним из главных противников тех, кто выдает свои картины за работы именитых художников.
Мартин тоже считает имитаторов своими противниками и уважает их. Он соглашается, что среди них действительно много по-настоящему талантливых людей, но попадаются и откровенно недалекие личности. Джейми, например, вспоминает громкий скандал позапрошлого года.
Манхэттенская галерея Нодлера купила картину Джексона Поллока, в углу которой стояла подпись «Pollok». Все бы ничего, если бы фамилия художника не писалась несколько иначе — «Pollock».
Джейми Мартин родился в Балтиморе. В детстве у него были два пламенных увлечения: живопись и науки. Он хотел поступить на медицинский факультет Университета Джонса Хопкинса, но по пути в храм науки зашел в музей Балтимора. Экскурсия, повествующая о реставрации картин, изменила его жизнь — вместо Университета Джонса Хопкинса он окончил факультет реставрации в Кембридже.
Лабораторию аукционного дома Sotheby’s Джейми возглавил недавно. До этого он два десятилетия консультировал ФБР, музеи, галереи, аукционные дома и частных коллекционеров.
У музеев подобные лаборатории есть давно, а вот у аукционных домов они только начинают появляться. Sotheby’s, к примеру, купил компанию Мартина Orion Analytical в Уильямстауне в декабре 2016 года. Сейчас 80% времени гроза имитаторов тратит на полеты из Нью-Йорка в Лондон и обратно, где проводит экспертизы для Sotheby’s. Для гарантии полной беспристрастности в его контракте есть пункт, что он не будет получать никаких бонусов.
Не устоял и Буонарроти
В свое оправдание имитаторы могут сказать: мол, придумать что-то по-настоящему оригинальное крайне трудно, а в мошенничестве подозревали многих очень известных художников. Похоже, не чурался имитаций и кое-кто из старых мастеров, которых так любят подделывать современные подражатели. Историк искусств Тьерри Ленан, к примеру, обвиняет в мошенничестве самого Микеланджело Буонарроти: он уверен, что великий итальянец рисовал копии известных полотен и подменял ими оригиналы.
Едва ли Микеланджело, по мнению историка, выкрадывал понравившиеся картины, которые хотел иметь в своей коллекции. Скорее всего, он брал их у владельцев, чтобы нарисовать копию, но возвращал не оригинал, а копию, ни в чем ему, естественно, не уступавшую.
В качестве примера Ленан приводит эстамп немецкого живописца, рисовальщика и гравера Мартина Шонгауэра с изображением Святого Антония. Доказательств у историка, конечно, нет.
Отмахнуться от скандальных подозрений не позволяет лишь то, что это не первое обвинение Микеланджело Буонарроти в мошенничестве.
Речь о широко известном историческом анекдоте про Купидона (тот факт, что анекдот появился еще при жизни мастера, придает истории определенный налет правдоподобия). Говорили, что Микеланджело сделал в 1496 году копию древнеримской статуи спящего Купидона. Для придания античного вида он какое-то время продержал изделие в земле и нанес несколько дефектов. Затем Микеланджело выкопал Купидона и через посредника продал его кардиналу Риарио за солидные деньги как древнеримскую статую…
Словом, невозможно определить, какие из произведений искусства, висящие в картинных галереях и музеях или предлагаемые на аукционах, настоящие, а какие — подделки. Десятки имитаторов были пойманы или сдались сами, но сотни и тысячи продолжают неустанно трудиться, плодя фальшивки. И пожалуй, известная пословица о том, что преступление того не стоит, в данном случае не работает.
Подделки куклы Baby Born / Baby Annabell, Baby Born, Chou Chou / Бэйбики. Куклы фото. Одежда для кукол
Куклу Baby Born компания Zapf Creation стала производить начиная с 1991 года. В 1997 году эта кукла стала самой популярной игрушкой в Германии. Раньше у BB было всего 7 функций, кукла не закрывала глазки и ее нельзя было купать.Сейчас кукла Baby Born очень популярна и у нас, не удивительно, что появилось очень много подделок под нее.
Некоторые из них полностью копируют и саму куклу и все аксессуары… и даже название. На коробках таких кукол можно увидеть — производитель «Zapf Creation». Определить подделка это или оригинал без дополнительных знаний невозможно.
Куклы продаются в комплекте со всеми аналогичными аксессуарами (кашей для куклы, пластмассовой игрушкой, горшком и т. п.), которые не соответствуют стандартам качества компании-производителя.
Список артикулов подделок(это конечно не все):
800-058 кукла baby Born
8000-586 кукла baby Born
8000-377 кукла baby Born
Все обнаруженные куклы-подделки были конфискованы и уничтожены (Это страшное зрелище):
Очень много подделок с немного изменненым названием куклы, Baby Doll, например, есть также абсолютно идентичная кукла «Женечка».
Женечка это явный аналог куклы Baby Born, только с русским названием. У нее 7 функций — писяет в памперс, ходит на горшок, плачет(текут слёзки), куклу можно купать, кормить, можно двигать ее ручками и ножками. Даже мордочка очень похожа(на старую модель с незакрывающимися глазками). Продается в разных костюмчиках.
Еще есть подобные куклы у таких известных фирм, как Simba и Marsel Toys.
Их не понятно считать ли подделкой или просто совпадением некоторых слов в названии и всех функций :))))… только слишком много совпадений. Но у куклы компании Simba хотя бы личико совсем другое…
Это кукла New Baby Born от фирмы Marsel Toys.
А это кукла New Born Baby от фирмы Simba.
Но самая серьезная подделка, это точная копия куклы Baby Born с волшебными глазками в розовом костюмчике. Отличается только одним словом на коробке- вместо Baby Born — Baby Doll. Я сама видела эту куклу!!! Стоит она в 2 раза дешевле. К сожалению в нете этой фотки не нашла :(((
У кого есть — предлагаю поделиться информацией.
Купить игровую куклу Baby Born можно у нас в Шопике
Здесь можно найти информацию о настоящей кукле Baby Born от zapf Creation:
Baby Born
Аксессуары для куклы Беби Борн можно посмотреть здесь:
Кроватки, коляски, люльки…
А если Вас интерисуют выкройки одежды для этой куклы, то Вам сюда: :))
Творческая мастерская
это провал ~ Авторские очерки
2017 год уже можно называть щедрым на громкие премьеры: множество люксовых брендов обновили свои парфюмерные линейки, выпустив ароматы, начинающие новые страницы их истории. Претенциозно назвав их «столпами», Chanel, Mugler, Hermès, Guerlain, Calvin Klein и некоторые другие компании выпустили композиции, встреченные парфюмерным сообществом весьма неоднозначно, а то и вовсе прохладно. В нашей энциклопедии вряд ли найдётся популярный современный аромат, в комментариях под которым иной эстет не разразился глубокомысленной тирадой о более высоком качестве парфюмерии во времена его прекрасной молодости. Но всеобщее выражение потребительского негодования, непонимания и неприятия в комментариях к, например, Mon Guerlain Guerlain, Twilly d’Hermès Hermès и другим — это не просто единичный протест и бунт, но массовое явление. И, как в случае любого массового отклонения от ожидаемой нормы, было бы интересно разобраться в его причинах.
Первой из них я вижу пресыщение. В этом случае возникает предположение о высоком уровне парфюмерной образованности и понимании особенностей и тенденций развития мировой парфюмерии, а отклонение от них в каждом конкретном случае влечет за собой предсказуемую негативную реакцию покупателей, чьи ожидания не были оправданы.
Второй — неприятие новых курсов, взятых маркетологами. Это стандартная ситуация для всего нового и необычного, поспешно и не слишком аккуратно внедряемого в сознание массового потребителя. В контексте парфюмерии такое случается, когда хорошо отработанные в нишевом сегменте идеи оказываются вдруг слишком смелыми для мейнстрим-ароматов.
Какая из этих причин объясняет бурю негатива (а на Fragrantica.com и вовсе грозящую перерасти в цунами), которой был встречен Gabrielle — новый аромат Chanel?
Для ответа на этот вопрос необходимо проанализировать продукт, начав с парфюмерной композиции. Информация о готовящейся к выходу новинке от Chanel была встречена с энтузиазмом, который быстро поубавился, когда маркой было объявлено лицо рекламной кампании, а также обозначена целевая аудитория. Кажется, за последние два года слово «миллениал» прозвучало в бессчетном количестве пресс-релизов — маркетологи отчаянно стараются захватить внимание потребителей, входящих возрастную группу «до 30», и Chanel не стали исключением. Однако зачем ориентироваться на молодую аудиторию, посвящая аромат легендарной личности прошлого Габриэль Шанель, — для меня загадка.
Если обратиться к ранним анонсам аромата Gabrielle, а затем — к цитате Мадемуазель «…но женщина не имеет права пахнуть тем, мимо чего она проходила: пищей, пылью, сыростью и, уж конечно, потом! А еще она не должна пахнуть цветочной оранжереей, втиснутой в расфуфыренный флакон», может сложиться впечатление, что новый аромат марки — насмешка над её основательницей. Шанель всё время своей творческой карьеры боролась с буржуазным образом «женщины-цветка» и оттого не переносила цветочные духи, уподоблявшие женщину клумбе.
И что же нам предлагает аромат, носящий её имя? Цветы. Но не измененные новаторскими для времён No. 5 альдегидами иланг-иланг и розу, а лишенные элегантности и характера нероли и жасмин, скучные до удивления. Усреднённость и бесхарактерность — самые точные, на мой взгляд, определения Gabrielle. Женщина Gabrielle много времени провела среди полок магазина бытовой химии, выбирая стиральный порошок и кондиционер для белья. Ими она и пахнет, вопреки заветам Коко. Условные цитрусы, условные, усреднённые цветы и мощный мускусный аккорд, уничтожающие даже намёк на принадлежность аромата к стилю дома Chanel — вот главный недостаток нового «столпа» марки и свежее видение производителями поколения миллениалов. Что же касается старшего поколения и ценителей благородной классики Chanel… Удивительна ли их реакция на композицию, лишенную всего, за что они любят ароматы марки? Предполагал ли Оливье Польж, создавший в 2016 году для молодого поколения Chanel No 5 L’Eau — великолепный фланкер классической «пятерки», — такую реакцию на свою новую работу? И как выглядел бриф на разработку Gabrielle? Вопросы, вопросы…
Композиция кажется до преступного простой и лишенной какой-либо идеи. Она бедна на контрасты, на оригинальные изобразительные приёмы, на нетривиальные аккорды. Она идеальна, чтобы слиться с толпой и затеряться в ней. Gabrielle — катастрофа для дома Chanel, потому что смело может быть помещена во флакон любой люксовой марки классом пониже — никто не заметит подвоха и, что самое главное, не поднимет такую волну недовольства.
На Fragrantica.com можно встретить сравнение Gabrielle c Jour d’Hermès. И на месте Жан-Клода Эллена (при условии, что мне не все равно), я непременно воспринял бы такое сравнение попыткой оскорбления. На мой взгляд, Jour d’Hermès превосходит Gabrielle во всём. Более того, не имеет с ним ничего общего: элегантный, великолепно сбалансированный цветочный букет с прозрачным жасмином и гарденией, украшенный горьковато-алкогольными цитрусовыми оттенками и лёгкой древесной шероховатостью — это не едкий мускусно-цветочный кондиционер для белья.
С другой стороны, действительно ли всё так плохо? Я склонен согласиться с высказыванием Матвея, что этот универсальный цветочно-мускусный ароматизатор может нравиться и приносить искреннее удовольствие. Каждый из нас наделен уникальным вкусом и обонянием, а также различными подходами к парфюмерии. В качестве офисного или повседневного аромата, нанесенный в деликатном количестве, Gabrielle может показаться приятным. Чистота и условные цветы — ничего необычного как в плохом, так и в хорошем смысле. Понравится ли мне аромат, если я случайно встречу его на улице? Пожалуй, я не испытаю негативных эмоций, но и точно не узнаю среди сонма ему подобных. Могу ли я отождествлять эту композицию с произведением парфюмерного искусства? Трижды нет.
И пары слов заслуживает упаковка. В анонсе сказано, что на разработку флакона ушло пять лет. Серьезно? На что именно? Но даже если и так, то качество стекла оставляет желать лучшего, флакону не хватает приятного веса, а слишком лёгкий алюминиевый стоппер завершает общее впечатление.
Мне не понравился аромат не потому что он — Gabrielle (хотя оттенки глумления над наследием и личностью Шанель я все-таки вижу), а потому что Chanel. Будь он выпущен под маркой звезды, мейнстрима среднего уровня или масс-маркета, я бы совершенно точно не обратил на него внимания, а об отдельном обзоре не могло быть и речи. Единственная моя претензия, которая вряд ли кому-то вообще интересна, адресована маркетинговому отделу Chanel, а парфюмера Оливье Польжа я и вовсе склонен считать жертвой.
Благодаря Gabrielle я вспомнил, почему не люблю люксовую парфюмерию, почему избегал и продолжаю ее избегать, и почему в свое время стал заложником парфюмерного снобизма, хватка которого с течением времени и ввиду отсутствия внешних раздражителей стала ослабевать. Теперь же в изящные его пальцы вновь вернулась былая сила. На мой субъективный взгляд, с точки зрения искусства Gabrielle Chanel — это провал. Однако окажется ли продукт коммерческим провалом — покажет время.
Все об AdBlue
В чем необходимость жидкости AdBlue?
Желая контролировать химические процессы, сократить наличие вредных компонентов в выхлопных газах двигателей, работающих на дизеле, и при этом соответствовать необходимым экологическим стандартам Евро 4, Евро 5 и Евро 6 добрая часть производителей грузовых авто и тяжелой техники, остановила свой выбор на технологии SCR. Ее исключительная особенность заключается в том, что благодаря впрыскиванию реагента AdBlue в уже обработанный газовый поток, осуществляется химическая реакция. В ее процессе вредоносные оксиды азота (NOx) превращаются в безвредные воду и азот, тем самым обеспечивая чистую и качественную работу.
Что таит в себе понятие AdBlue?
AdBlue – это сочетание деминерализованной воды с высоким содержанием (32,5%) высококлассной мочевины. Благодаря технологии SCR, AdBlue используется как дополнительная жидкость, обеспечивающая качественную работу в дизельных двигателях.
Стоит отметить, что Ассоциация Автопроизводителей Германии (VDA) преднамеренно придумала название AdBlue, с целью защитить своих клиентов от некачественных подделок. Потому, каждая компания, которая производит AdBlue, в обязательном порядке должна обладать лицензией от VDA. Но получить ее достаточно непросто, поскольку сначала компания должна пройти ряд тестов, в процессе которых оценивается уровень ее деятельности и качество продукта AdBlue в момент производства. Чтобы удостовериться в том, что купленный Вами AdBlue оригинален, достаточно найти название компании в официальном списке компаний, получивших лицензию, на специализированном портале VDA.
Что такое AdBlue?
AdBlue – это не добавка и не дизельное топливо, как ошибочно считают многие. Для AdBlue есть отдельный бак, характерный признак которого голубая крышка. AdBlue заливается в него и потому не имеет никакого контакта с дизельным топливом, а тем более не является им самим.
Как можно стать обладателем AdBlue?
Зачастую, AdBlue разлит в 10-ти, 20-ти и 1000-литровые канистры, которые можно купить оптом. В розницу AdBlue продается на заправочных станциях, в автомагазинах, при фирмах, которые занимаются продажей запчастей. Для тех кому необходимо приобрести сразу большое количество AdBlue, в частности 1000-литровый IBCконтейнер, те могут обратиться в специализированные оптовые компании или к дистрибьюторам AdBlue, работающих по всей России.
Стоит обратить внимание на то, что приобретая IBCконтейнер, понадобится сопутствующее оборудование для того, чтобы можно было свободно пользоваться AdBlue. Потому, важно знать, что такие AdBlue материалы как насос, пистолет, счетчик и шлаг можно заказать у дистрибьюторов или купить в специализированных магазинах.
Каков срок годности AdBlue?
AdBlue имеет достаточно продолжительный срок годности, который колеблется от 6 месяцев до 3 лет. Период хранения зависит от уровня температуры. Так, температура превышающая +35° существенно сокращает продолжительность срока годности. Идеальный температурный баланс колеблется от +5 до +25 °С.
Каковы требования к оборудованию в процессе работы с AdBlue?
Стоит отметить, что AdBlue очень качественный, и при этом очень изысканный продукт, который требует тщательного и бережного обращения. Потому, оборудование для него изготавливают из нержавейки и определенных видов пластика. Следует учесть и то, что во избежание различных нюансов, лучше хранить AdBlue вдали от алюминия, бронзы, чугуна и низколегированной стали. Каждый, кто желает более детально познакомиться с оборудованием и требованиям к нему, может узнать все тонкости, просмотрев промышленный стандарт ISO 22241-3. Также профессиональную консультацию по всем интересующим вопросам можно получить у дистрибьюторов AdBlue.
Могу ли я быть уверен в отменном качестве AdBlue?
Уверенным на 100% в качестве можно быть в том случае, если AdBlue приобретен у представителя компании, или у проверенного поставщика. Понять, что AdBlue настоящий, а не подделка можно по фирменной упаковке, где на этикетке будет изображена компания-производитель, которая имеет лицензию на создание AdBlue. А также если на упаковке есть логотип компании-продавца или дистрибьютора, которые смогут решить все спорные вопросы относительно качества.
Подлинность AdBlue можно проверить попросив продавца предоставить такие документы, как:
- сертификат, который соответствует выпущенной партии продукта, согласно стандарту ISO 22241-1;
- копию лицензии на товар AdBlue, которая была выдана производителю товара компанией VDA;
- сопутствующий пакет документов, который подтверждает то, что данный товар легален в РФ.
Можно ли обойтись без AdBlue?
Важно знать, что лишь в исключительных случаях можно обойтись без AdBlue, и доехав к ближайшей заправке пополнить запас жидкости. Однако, реакция систем управления автомобиля может оказаться более чем непредсказуемой. Все зависит от того, какая модель авто, какова ее марка и степень изношенности. Так, при отсутствии AdBlue система будет указывать на ошибку, ограничивая при этом работу двигателя, а то и вовсе не даст возможности завестись. В том случае, если автомобилист примет решение не пользоваться AdBlue, вскоре система SCR выйдет из строя, и починить ее будет невозможно.
Каковы стандарты качества AdBlue?
Качество AdBlue можно определить при помощи промышленного стандарта ISO 22241.
Сколько в среднем расходует грузовик AdBlue?
Нельзя сказать определенно столько и столько литров. Расход AdBlue зависит от модели автомобиля, от ряда ее характеристик. В основном, потребляемость AdBlue колеблется в районе 4% использования дизельного топлива для Евро 4, и около 6% для Евро 5. На каждые 100 км это примерно 1,5 – 2 литра. Потому, каждый грузовик ежегодно использует около 1500 – 2000 литров, а полный бак в 90 литров можно израсходовать проехав 6000 км.
При какой температуре замерзает AdBlue?
AdBlue превращается в лед при -11,5 °С. Но следует обратить внимание на то, что при размораживании его качество остается прежним, и его как и раньше можно использовать.
Что ожидать от системы SCR в холодную пору года?
Система SCR в большинстве случаев оборудована подогревом. Потому, при низкой температуре она работает или качественно, или имеет незначительные сбои в системе. Поведение предугадать крайне трудно. Но следует сказать то, что система соответствует всем нормативным требованиям, которые были поставлены перед разработчиками автомобилей данной категории.
Какие неприятные сюрпризы могут возникнуть в процессе использования AdBlue и как их предусмотреть?
Следует обратить внимание на то, что существенная часть проблем с AdBlue появляется уже в процессе эксплуатации. И распространенной причиной является неправильное пользование жидкостью.
Главное и основное правило в работе с AdBlue – это сохранение чистоты жидкости!
- В том случае если AdBlue попадает в дизельное топливо, система дает сбой и нуждается в ремонте;
- Лучше не переливать AdBlue в промежуточную тару. Но если без этого не обойтись, необходимо использовать только чистые канистры, или специализированное AdBlue-оборудование;
- В процессе хранения AdBlue необходимо использовать только то оборудование, которое сочетается по составу с жидкостью, и не вызывает химических реакций. Все подробности по данному вопросу можно уточнить у дистрибьютора AdBlue;
- Категорически запрещено использовать оборудование AdBlue в работе с другими жидкостями.
Соблюдая эти правила можно не сомневаться в том, что AdBlue станет настоящей находкой для многих автомобилистов.
Стоит отметить и то, что канистры объемом в 10 и 20 литров являются удобной тарой, которую можно приобрести как оптом, так и в розницу. Такие канистры станут незаменимыми в дороге. А отменным преимуществом в них окажется то, что они обладают специальными носиками, которые позволяют без труда залить жидкость в бак автомобиля.
В свою очередь, ICB контейнер, объем которого составляет 1000 литров – это практичное решение для парков автомобилей. Будучи оснащенным верхней заливной крышкой, которая обладает дыхательным клапаном и сливным отверстием с краном внизу, он очень удобен в процессе эксплуатации. При этом, его стоимость существенно отличается от стоимости мелкой тары, однако ICB контейнер требует тщательного ухода и особенного внимания.
Гравитационный комплект оборудования для раздачи AdBlue из IBC контейнера имеет гибкий армированный шланг и неавтоматический пистолет, что позволяет идти жидкости самотеком. Важно отметить, что все комплектующие созданы из совместимых материалов с AdBlue.
Комплект для раздачи с электрическим насосом AdBlue из IBC контейнера имеет переходник, электрический насос, армированный шланг и пистолет. Также он может быть оснащен специальным счетчиком-расходометром. Все комплектующие органично сочетаются с AdBlue, поскольку созданы из совместимых материалов.
ACHEMA
AB ACHEMA – международный химический концерн – один из ведущих игроков на европейском рынке производства азота и его производных.
GASCHEMA
Gaschema – дочерняя компания концерна AB ACHEMA – является ведущим дистрибьютором химических веществ и жидкости AdBlue производства AB ACHEMA. Компания работает на рынках Германии, Скандинавии, Прибалтики, Белоруссии, Украины, России и других стран.
AB ACHEMA имеет лицензию на торговый знак AdBlue от VDA (Verband der Automobilindustrie – ассоциация Автомобилестроителей Германии – правообладатель товарного знака AdBlue). Производство сертифицировано по ISO 9001, очень строго соблюдаются стандарты, регулирующие качество AdBlue (ISO 22241-1/DIN 70070).
По вопросам реализации товара производства AB ACHEMA обращайтесь к ближайшей компании-дистрибьютору.
Обращение, транспортировка и хранение жидкости AdBlue (соответственно стандарта ISO 22241 часть 3)
Данный информационный листок включает в себя основные данные из стандарта ISO 22241-3, касающиеся рекомендаций по транспортировке, хранению и работе с раствором мочевины AUS 32(AdBlue).
1. Физические условия хранения и транспортировки AdBlue1.1 Общая информация
Во избежание ухудшения качества жидкости AdBlue во время транспортировки и хранения должны учитываться следующие условия:
- Во избежание преждевременного разложения мочевины или испарения воды (в случае с открытыми ёмкостями) избегать длительного хранения транспортировки при температуре свыше +25*C
- Примечание: Длительное хранение при температурах свыше +25*С сокращает срок годности (см. Таблицу 1). Кратковременное увелечение температуры не влияет на срок годности.
- Во избежание замерзания AdBlue избегать хранения при температурах ниже -5*С
- В замерзшем состоянии AdBlue имеет примерно на 7% больше объем, чем в жидком, поэтому замерзание жидкости в полностью заполненном контейнере может вызвать разрыв. После того как AdBlue отогрета при температуре не выше 30*С она не теряет своего качества и может быть использована по назначению.
- Во избежание чрезмерного повышения температуры, AdBlue должно быть защищено от прямых солнечных лучей.
- Во избежание загрязнения жидкости AdBlue должны использоваться плотно закрытые контейнеры, в случае контейнеров с вентиляцией они должны быть оснащены фильтром.
1.2 Срок хранения жидкости AdBlue
Через всю цепочку распространения AdBlue, жидкость должна соответствовать спецификации, данной в стандарте ISO 22241-1 по крайней мере в течении периода времени, указанного в Таблице 1, в зависимости от температуры окружающей среды.
Таблица 1 — Срок годности AdBlue в зависимости от температуры
Постоянная температура хранения, | Минимальный срок хранения, |
<10 | 36 |
<25 | 18 |
<30 | 12 |
<35 | 6 |
>35 | — * |
*значительное сокращение срока годности: проверить каждую партию |
1.3 Степень чистоты материалов, контактирующих с AdBlue
Все материалы, контактирующие с жидкостью AdBlue, не должны содержать посторонних примесей, таких как масла, топливо, горюче-смазочные материалы, растворители, пыль и каких бы то ни было химических или природных посторонних веществ.
До первичного контакта с AdBlue материалы должны быть очищены и промыты деминерализованной водой (не используйте водопроводную воду!) — до тех пор, пока пробы воды, которая используется для очистки, не будет свидетельствовать о том, что система очищена.
В связи с опасностью загрязнения, использование детергентов для очистки недопустимо. Применение неспециализированного оборудования не рекомендуется.
2. Требования к метериалам, совместимым с AdBlue (AUS 32)
2.1 Общие положения
Во избежание загрязнения AdBlue во время транспортировки и хранения все материалы, находящиеся в прямом контакте с жидкостью AdBlue (контейнера, шланги, клапана, прокладки, трубы, насосы и т.д.) должны быть совместимы с раствором мочевины AdBlue (AUS 32).
Любой материал, совместимость которого с AdBlue не определена, должен быть протестирован на совместимость.
Если в течении работы, транспортировки или хранения обнаружено загрязнение AdBlue, должно быть проведено расследование с целью определения источника загрязнения и приняты соответствующие меры к их устранению.
2.2 Рекомендованные материалы
Примеры материалов, совместимых с жидкостью AdBlue приведены в Таблице 2.
Таблица 2 — Примеры рекомендованных материалов
Высоколегированные нержавеющие стали, согласно DIN EN 10088-1/2/3, или нерживеющие стали 304 (S30400), 304L (S30403), 316 (S31600), 316L (S31603) согласно ASTM A240/A276/A312 |
Полиэтилен (LDPE) и полипропилен (PP) высокого давления, без примесей |
Полиизобутилен (PIB) |
Перфторалкокси (PFA), без примесей |
Полифлороэтилен (PFE), без примесей |
Поливинилиденфторид (PVDF), без примесей |
Политетрафтороэтилен (PTFE), без примесей |
Примечание. Различного рода эластомеры (емкости, шланги) могут содержать множество примесей, способных проникнуть в жидкость AdBlue. В связи с этим, необходимо тщательно исследовать возможность загрязнения AdBlue добавками, содержащимися в пластиковых материалах, находящихся в непосредственном контакте с продуктом. |
2.3 Нерекомендованные материалы
Примеры материалов, несовместимых с жидкостью AdBlue приведены в Таблице 3.
Таблица 3 — Примеры нерекомендованных материалов
Материалы, вступающие в реакцию с аммиаком и образующие составы, которые негативно влияют на SCR-катализаторную систему: малоуглеродистые стали, оцинкованные стали |
Медь, медные сплавы, свинец |
Алюминий, сплавы алюминия |
Магний, сплавы магния |
Пластики или материалы, покрытые никелем |
Родовой объект — личность, видовой объект — жизнь и здоровье, непосредственный объект — жизнь и здоровье.Разборка статей ук по составу1 ответ. Москва Просмотрен 979 раз. Задан 2013-05-02 13: 51: 19 +0400 в тематике «Административное право Помогите разобрать статью по составу статью 19.1. Самоуправство КоАП — Помогите разобрать статью по составу статью 19.1. Самоуправство КоАП. далее
В нормах, в частности, предусматривалась смертная казнь за это преступление. В прежний исторический период в нормативных актах не предусматривалось существенной разницы между уровнем общественной опасности злоупотребления властью и превышения полномочий, между халатностью и бездействием должностных лиц. Это отражалось в наказаниях по основным и квалифицированным составам. Как показывает практика, излишне абстрактное описание, не содержащее четких критериев, допускает достаточно широкие пределы для рассмотрения дел судом. За иные виды преступлений против человеческой жизни наступает уголовная ответственность лишь с 16 лет. 1) Простое убийство – убийство, иными словами умышленное причинение смерти другому лицу, совершенное как без отягчающих, так и без смягчающих обстоятельств, указанных части 1 статьи 105 УК РФ. Необходимо иметь в виду, что умышленное противоправное лишнее жизни, совершенноеОбъект преступления. Объективная сторона преступления. Субъект преступления. Субъективная сторона состава преступления. Разбор по составу преступления из статей уголовного кодекса? Виды состава преступления. Понятие и уголовно-правовое значение состава преступления. Элементы и признаки состава преступления. Объект преступления и объективная сторона преступления. Субъект и субъективная преступления. Фундаментальная и процессуальная, гарантийная функция. Исторические вехи формирования института состава преступления в законодательстве России. Разбор по составу статья 109В свою очередь, Особенная часть является одной из двух подсистем Кодекса, его Общей и Особенной частей.
это общее правило. 14 лет только для особо тяжких преступлений и тяжких. это около 20 составов Выбираете ОДИН из ниже представленных договоров и определяете: 1) основания возникновения правоотношения; 2) стороны (субъекта) правоотношения; 3) основные права и обязанности сторон; 4) ответственность за неисполнение обязанностей в начале вообще неправильно нихренаОбъект : 1. родовой Объективная сторона: Субъект: Субъективная сторона: видовой 1. деяние (действие, бездействие) 1. Просмотрен 4204 раза Задан 2012-06-23 16: 13: 08 +0400 в теме Другие вопросы из г. Разбор по составу правонарушения статей уголовного кодексаЕсли в составе преступления отсутствует любой из признаков – уголовной ответственности быть не может, исходя из чего, очень важно понимать, что же именно входит в состав налогового преступления в каждой из статей Уголовного кодекса предусматривающих уголовную ответственность за неуплату налогов и сборов.
110 УК действия, желая довести потерпевшего до самоубийства — содеянное следует рассматривать как умышленное убийство (ст. 105 УК). Субъект — вменяемое физическое лицо, достигшее 16-летнего возраста.
Для признания убийства по этому признаку необходимо исключить наличие других мотивов убийства, определяющих поведение виновного при совершении этого преступления ; л) по мотивам политической, идеологической, расовой, национальной или религиозной ненависти или вражды либо по мотивам ненависти или вражды в отношении какой-либо социальной группы // Прямой умысел. Центр правовой помощиБлагодаря (СП) есть возможность одно преступление отделить от другого.
Так в законе есть четкое описание таких понятий, как грабеж, разбирательство. В итоге одно деяние отличается от другого. Теперь подробнее об элементах преступления. Элементы В состав этих элементов включены 4 подсистемы (СП). Какие существуют виды составов преступлений в уголовном праве, можно узнать прочитав данную статью здесь: http: //ruleconsult.ru/ugolovnoe/prestupleniya/klassifikaciya-prestuplenij-v-ugolovnom-prave.html По характеру признаки бывают номинативными и описательными. Субъект угрозы общий — физическое вменяемое лицо, достигшее 16 лет. Уголовный кодекс рф ст 131 разобрать по составуДействия участника группового изнасилования следует квалифицировать по ч. 1 ст. 131 УК РФ, если только он один привлекается к уголовной ответственности, а остальные участники изнасилования не достигли четырнадцатилетнего возраста либо были признаны невменяемыми. Такая квалификация содеянного обосновывается тем, что в данном случае отсутствуют признаки соучастия.
Содержание статьи 199 УК РФ практически не изменилось. Основной состав данного преступления как и раньше криминализирует уклонение от уплаты налогов и (или) сборов с организации путем непредставления налоговой декларации или иных документов, представление которых в соответствии с законодательством Российской Федерации о налогах и сборах является обязательным, либо путем включения в налоговую декларацию или такие документы заведомо ложных сведений, совершенное в крупном размере. Физическое насилие заключается в воздействии на тело человека с целью подавления его сопротивления. Оно может быть выражено в нанесении побоев, ином причинении боли, связывании, насильственном удержании и т. п. Чаще всего физическое насилие выражается во внешнем воздействии на тело пострадавшей, но в ряде случаев насилие может состоять и в воздействии на внутренние органы потерпевшей: дача наркотических средств или психотропных веществ, токсических веществ. Таким образом, субъектом состава преступления, предусмотренного ст. 106 УК РФ, является специальный субъект — мать новорожденного ребенка, достигшая возраста уголовной ответственности (16 лет), которая на момент совершения была вменяема или ограниченно вменяема. Вменяемость определяется судебно-психиатрической экспертизой. Разбор статьи уголовного кодекса по составуМосква Разбор статей ук рф подскажите сайт, на котором имеется полная разборка статей ук рф.
Родовой объект (убийство, статья 105 УК РФ) составляют общественные отношения, обеспечивающие базовые (естественные) права и свободы человека, в частности основное право – право на жизнь (видовой объект). Тюмень Просмотрен 460 раз. Задан 2013-02-06 07: 29: 51 +0400 в тематике «Жилищное право Комментарий к уголовному кодексу Российской Федерации 2012 год — Комментарий к уголовному кодексу Российской Федерации 2012 год. Все преступления сгруппировали по главам уголовного кодекса эта группировка? Убийство, совершенное при превышении пределов необходимой обороны либо при превышении мер, необходимых для задержания лица, совершившего преступление 1. Разбор статей уголовного кодекса по составуОбъективная сторона — действие или бездействие (лица, заведомо для виновного находящегося в беспомощном состоянии, а равно сопряженное с похищением человека либо захватом заложника),состав – материальный (окончено в момент наступления смерти). 1 ответ. Москва Просмотрен 979 раз.
Ст. 107Убийство, совершенное в состоянии аффекта Убийство — это совершенное в состоянии внезапно возникшего сильного душевного волнения (аффекта), вызванного насилием, издевательством или тяжким оскорблением со стороны потерпевшего либо иными противоправными или аморальными действиями (бездействиями) потерпевшего, а равно длительной психотравмирующей ситуацией, возникшей в связи с систематическим противоправными аморальным поведением потерпевшего. Родовые объекты описываются законодателем в заголовках разделов, видовые – в заголовках глав Особенной части. Убийство матерью новорожденного ребенка. — преступление, в котором объектом преступления является жизнь новорожденного ребенка. За иные виды преступлений против человеческой жизни наступает уголовная ответственность лишь с 16 лет. 1) Простое убийство – убийство, иными словами умышленное причинение смерти другому лицу, совершенное как без отягчающих, так и без смягчающих обстоятельств, указанных части 1 статьи 105 УК РФ. Необходимо иметь в виду, что умышленное противоправное лишнее жизни, совершенноеКазалось бы, ведь должно быть все наоборот. Россия провозгласила себя правовым и демократичным государством, что означает главенство закона во всем, как и должно быть в цивилизованной стране. А на самом деле происходит так, что законы в нашем государстве пока еще не имеют той авторитетной мощи, перед которой были бы все равны, как это и провозглашает Конституция Российской Федерации. За последнее время в России были проведены массы реформ, большей частью законодательные. Оконченное убийство имеет место быть только в тех случаях, когда результатом деяния виновного явилась смерть лица. Объективная сторона убийства (статья 105 УК РФ) состоит в лишении жизни другого человека определенным, противоправным способом. Морфемы начинают изучать еще в начальной школе, однако даже у старшеклассников часто могут возникать проблемы с определением их внутри слов. Для того чтобы облегчить себе задачу, стоит выяснить, как разобрать слово по составу. Он имеет обратную силу, если каким-то образом улучшает положение осужденного. А ч. 4 данной статьи сформулирована так, деяния, предусмотренные ч. 1, 2 или 3 настоящей статьи, повлекшие по неосторожности смерть потерпевшего (в последнем случае и имеется в виду умышленно-неосторожный состав преступления). 2. Раздельное определение умышленной и неосторожной вины осуществляется по известным признакам (см. комментарий к ст. ст. 25 и 26) и не представляет собой трудностей. Однако, есть уголовное дело по обвинению в сбыте наркотиков, пособие по беременности и родам устанавливается в размере среднего заработка дохода по месту статьи за последние 12 календарных месяцев. При расчете больничных сотрудникам- это горнолыжные курорты, когда сроки стандартной вакцинации были упущены. Читайте другие статьи на сайте:Уважаемые коллеги, желаю каждому из нас высоко нести звание юриста, неуклонно придерживаясь принципов непредвзятости и объективности!🟠 Введите свой вопрос в форму нижеНавигация по записям |
%PDF-1.4 % 1076 0 объект > эндообъект внешняя ссылка 1076 119 0000000016 00000 н 0000004598 00000 н 0000004814 00000 н 0000004851 00000 н 0000005428 00000 н 0000005585 00000 н 0000005738 00000 н 0000005896 00000 н 0000006051 00000 н 0000006209 00000 н 0000006368 00000 н 0000006526 00000 н 0000006686 00000 н 0000006841 00000 н 0000007001 00000 н 0000007161 00000 н 0000007314 00000 н 0000007467 00000 н 0000007625 00000 н 0000007780 00000 н 0000007940 00000 н 0000008095 00000 н 0000009277 00000 н 0000010445 00000 н 0000010549 00000 н 0000012368 00000 н 0000014182 00000 н 0000014933 00000 н 0000014972 00000 н 0000015701 00000 н 0000016590 00000 н 0000017315 00000 н 0000018037 00000 н 0000018850 00000 н 0000020017 00000 н 0000020190 00000 н 0000022009 00000 н 0000022799 00000 н 0000023195 00000 н 0000037013 00000 н 0000050953 00000 н 0000066041 00000 н 0000068735 00000 н 0000068810 00000 н 0000068967 00000 н 0000069070 00000 н 0000069197 00000 н 0000069338 00000 н 0000069451 00000 н 0000069654 00000 н 0000069807 00000 н 0000069989 00000 н 0000070164 00000 н 0000070378 00000 н 0000070521 00000 н 0000070730 00000 н 0000070891 00000 н 0000071026 00000 н 0000071196 00000 н 0000071441 00000 н 0000071642 00000 н 0000071813 00000 н 0000072013 00000 н 0000072224 00000 н 0000072371 00000 н 0000072544 00000 н 0000072743 00000 н 0000072878 00000 н 0000073087 00000 н 0000073293 00000 н 0000073451 00000 н 0000073611 00000 н 0000073740 00000 н 0000073964 00000 н 0000074086 00000 н 0000074240 00000 н 0000074401 00000 н 0000074569 00000 н 0000074707 00000 н 0000074887 00000 н 0000075057 00000 н 0000075223 00000 н 0000075369 00000 н 0000075522 00000 н 0000075718 00000 н 0000075842 00000 н 0000075966 00000 н 0000076134 00000 н 0000076294 00000 н 0000076456 00000 н 0000076598 00000 н 0000076736 00000 н 0000076878 00000 н 0000077074 00000 н 0000077244 00000 н 0000077416 00000 н 0000077560 00000 н 0000077734 00000 н 0000077918 00000 н 0000078090 00000 н 0000078262 00000 н 0000078481 00000 н 0000078652 00000 н 0000078825 00000 н 0000079068 00000 н 0000079309 00000 н 0000079498 00000 н 0000079669 00000 н 0000079836 00000 н 0000080062 00000 н 0000080214 00000 н 0000080356 00000 н 0000080512 00000 н 0000080664 00000 н 0000080806 00000 н 0000080962 00000 н 0000081082 00000 н 0000081203 00000 н 0000002676 00000 н трейлер ]/предыдущая 1204099>> startxref 0 %%EOF 1194 0 объект >поток hVWSW/@ Xj f=BҖʶM)(IH-plDZ6uuU P+`,ZͶ[email protected](Z,.6[«~QOrd .|_
Поддельные новости в социальных сетях
Сохраняйте реальность
Если вы хотите лучше разбираться в средствах массовой информации и уметь распознавать фальшивые новости, вы можете задать себе несколько вопросов. Эти вопросы будут различаться в зависимости от типа учетной записи, на которую вы подписаны.
Личные кабинеты
Если вы следите за личной учетной записью и интересуетесь достоверностью публикуемых новостей, важно задавать вопросы и проводить исследования.Алгоритмы платформы социальных сетей предназначены для оптимизации удержания и вовлечения пользователей и не ищут дезинформацию или дезинформацию. Вот несколько вопросов, которые помогут вам определить фальшивые новости:
.- Учетная запись, которая поделилась публикацией, имеет эмоциональную или профессиональную заинтересованность в этих претензиях?
- На чем контент просит вас сосредоточиться?
- Является ли эта информация обоснованной?
- Является ли он авторитетным или ссылается на авторитетные источники?
- Почему это ценно для учетной записи, которая поделилась им?
Деловые или профессиональные счета
С бизнес-аккаунтом или профессиональным аккаунтом основное внимание уделяется аудитории.Страницы профессиональных организаций в социальных сетях в идеале должны информировать о целях и ценностях бизнеса. Они должны привлекать потенциальных или текущих клиентов и быть осторожными, чтобы не оттолкнуть их. В дополнение к вопросам, которые вы бы задали по личному кабинету, вы также должны задать:
- Как я обслуживаю свою аудиторию?
- Оттолкнет ли это кого-либо на моем основном рынке?
- Как это отражается на репутации или ценностях моего бизнеса?
- Актуально ли это для моей клиентуры?
Стать жертвой дезинформации или поддельных новостей с профессиональной или деловой учетной записью может иметь серьезные последствия, поэтому тщательность и осторожность перед публикацией может иметь большое значение.
Борьба с фейковыми новостями в социальных сетях сводится к пониманию целей авторов и самой платформы. Платформы социальных сетей зарабатывают деньги, продавая пользовательские данные рекламным компаниям, поэтому вы часто будете видеть рекламу, адаптированную к вашим интересам или истории поиска.
Важно знать контекст. Если вы знаете, что новости, которые вы видите в своей ленте, фильтруются на основе ранее собранных данных, это может помочь вам лучше осознать свою присущую предвзятость.Если вы представляете бизнес, используя социальные сети в качестве маркетинговой платформы, важно, чтобы ваши сообщения соответствовали вашему бренду и делились на вашей временной шкале тем, что укрепляет отношения с клиентами, соответствует вашим ценностям или демонстрирует оригинальный контент.
Фальшивые новости в социальных сетях могут быть неизбежны. Но вы можете помочь остановить распространение, подумав критически. Поддерживайте здоровый уровень любопытства к тому, что вы читаете в своей ленте, понимайте, как платформы социальных сетей отслеживают то, что вы видите, и часто используйте методы расследования.Социальные сети — это мощный инструмент как для бизнеса, так и для частных лиц, если к ним подходить с надлежащим намерением и вниманием.
соглашений о кодировании F# | Документы Майкрософт
- Статья
- 26 минут на чтение
Полезна ли эта страница?
да Нет
Любая дополнительная обратная связь?
Отзыв будет отправлен в Microsoft: при нажатии кнопки отправки ваш отзыв будет использован для улучшения продуктов и услуг Microsoft.Политика конфиденциальности.
Представлять на рассмотрение
Спасибо.
В этой статье
Следующие соглашения сформулированы на основе опыта работы с большими базами кода F#. Пять принципов хорошего кода F# лежат в основе каждой рекомендации. Они связаны с рекомендациями по проектированию компонентов F#, но применимы к любому коду F#, а не только к таким компонентам, как библиотеки.
Организационный код
F# предлагает два основных способа организации кода: модули и пространства имен. Они похожи, но имеют следующие отличия:
- Пространства имен компилируются как пространства имен .NET. Модули компилируются как статические классы.
- Пространства имен всегда верхнего уровня. Модули могут быть верхнего уровня и вложены в другие модули.
- Пространства имен могут охватывать несколько файлов. Модули не могут.
- Модули могут быть украшены
[
и] [
.]
Следующие рекомендации помогут вам использовать их для организации вашего кода.
Предпочитать пространства имен на верхнем уровне
Для любого общедоступного кода пространства имен предпочтительнее модулей на верхнем уровне. Поскольку они скомпилированы как пространства имен .NET, их можно без проблем использовать из C#.
// Хорошо!
пространство имен MyCode
введите МойКласс() =
...
Использование модуля верхнего уровня может выглядеть одинаково при вызове только из F#, но для потребителей C# вызывающие могут быть удивлены необходимостью квалифицировать MyClass
с модулем MyCode
.
// Плохо!
модуль MyCode
введите МойКласс() =
...
Аккуратно нанесите
[]
Конструкция [
может загрязнить область того, что доступно вызывающим объектам, и ответом на вопрос, откуда что-то берется, является «волшебство». Это не хорошая вещь. Исключением из этого правила является сама базовая библиотека F# (хотя этот факт тоже немного спорный).
Однако это удобно, если у вас есть вспомогательные функции для общедоступного API, которые вы хотите организовать отдельно от этого общедоступного API.
модуль MyAPI =
[<Автооткрытие>]
модуль private Helpers =
пусть helper1 x y z =
...
пусть myFunction1 x =
пусть у = ...
пусть г = ...
помощник1 x y z
Это позволяет четко отделить детали реализации от общедоступного API функции без необходимости полностью определять вспомогательную функцию при каждом ее вызове.
Кроме того, предоставление методов расширения и построителей выражений на уровне пространства имен может быть аккуратно выражено с помощью [
.
Используйте
[]
всякий раз, когда имена могут конфликтовать или вы считаете, что это улучшает читабельность Добавление атрибута [
к модулю указывает, что модуль нельзя открыть и что ссылки на элементы модуля требуют явного квалифицированного доступа. Например, этот атрибут есть у модуля Microsoft.FSharp.Collections.List
.
Это полезно, когда имена функций и значений в модуле могут конфликтовать с именами в других модулях.Требование квалифицированного доступа может значительно увеличить долгосрочную ремонтопригодность и способность библиотеки развиваться.
[]
модуль StringTokenization =
давайте разберем s = ...
...
пусть s = getAString()
let parsed = StringTokenization.parse s // Должен соответствовать требованиям для использования 'parse'
Сортировка
открытых
утверждений топологически В F# порядок объявлений имеет значение, в том числе с открытыми
операторами. Это отличается от C#, где эффект с использованием
и с использованием статического
не зависит от порядка этих операторов в файле.
В F# элементы, открытые в область видимости, могут затенять уже имеющиеся элементы. Это означает, что изменение порядка открытых операторов
может изменить смысл кода. В результате любая произвольная сортировка всех открытых операторов
(например, по алфавиту) не рекомендуется, чтобы не вызвать поведение, отличное от ожидаемого.
Вместо этого рекомендуется сортировать их топологически; то есть закажите свои открытых
операторов в том порядке, в котором определены слоя вашей системы.Можно также рассмотреть возможность выполнения буквенно-цифровой сортировки в разных топологических слоях.
В качестве примера, вот топологическая сортировка для общедоступного файла API службы компилятора F#:
пространство имен Microsoft.FSharp.Compiler.SourceCodeServices
открытая система
открыть System.Collections.Generic
открыть System.Collections.Concurrent
открыть System.Diagnostics
открыть System.IO
открыть System.Reflection
открыть System.Text
открыть FSharp.Compiler
открыть FSharp.Compiler.AbstractIL
откройте FSharp.Компилятор.АннотацияIL.Диагностика
открыть FSharp.Compiler.AbstractIL.IL
открыть FSharp.Compiler.AbstractIL.ILBinaryReader
открыть FSharp.Compiler.AbstractIL.Internal
открыть FSharp.Compiler.AbstractIL.Internal.Library
открыть FSharp.Compiler.AccessibilityLogic
открыть FSharp.Compiler.Ast
открыть FSharp.Compiler.CompileOps
открыть FSharp.Compiler.CompileOptions
открыть FSharp.Compiler.Driver
открыть Внутренние.Утилиты
открыть Internal.Utilities.Collections
Разрыв строки разделяет топологические слои, после чего каждый слой сортируется в алфавитно-цифровом порядке.Это позволяет четко организовать код без случайного затенения значений.
Используйте классы для содержания значений, имеющих побочные эффекты
Во многих случаях инициализация значения может иметь побочные эффекты, такие как создание экземпляра контекста для базы данных или другого удаленного ресурса. Заманчиво инициализировать такие вещи в модуле и использовать его в последующих функциях:
// Это плохо!
модуль MyApi =
let dep1 = File.ReadAllText "/Users//connectionstring.текст"
пусть dep2 = Environment.GetEnvironmentVariable "DEP_2"
пусть частный r = Random ()
let dep3() = r.Next() // Проблематично, если несколько потоков используют это
пусть function1 arg = doStuffWith dep1 dep2 dep3 arg
пусть function2 arg = doSutffWith dep1 dep2 dep3 arg
Часто это плохая идея по нескольким причинам:
Сначала конфигурация приложения помещается в кодовую базу с помощью dep1
и dep2
. Это трудно поддерживать в больших кодовых базах.
Во-вторых, статически инициализированные данные не должны включать значения, которые не являются потокобезопасными, если ваш компонент сам будет использовать несколько потоков. Это явно нарушается dep3
.
Наконец, инициализация модуля компилируется в статический конструктор для всей единицы компиляции. Если возникает какая-либо ошибка при инициализации значения с привязкой в этом модуле, она проявляется как исключение TypeInitializationException
, которое затем кэшируется на весь срок службы приложения.Это может быть трудно диагностировать. Обычно существует внутреннее исключение, о котором вы можете попытаться рассуждать, но если его нет, то невозможно сказать, какова первопричина.
Вместо этого просто используйте простой класс для хранения зависимостей:
тип MyParametricApi(dep1, dep2, dep3) =
член _.Function1 arg1 = doStuffWith dep1 dep2 dep3 arg1
член _.Function2 arg2 = doStuffWith dep1 dep2 dep3 arg2
Это включает следующее:
- Отправка любого зависимого состояния за пределы самого API.
- Конфигурацию теперь можно выполнять вне API.
- Ошибки инициализации для зависимых значений вряд ли будут проявляться как
TypeInitializationException
. - API теперь легче тестировать.
Управление ошибками
Управление ошибками в больших системах — сложная задача с множеством нюансов, и не существует серебряных пуль, обеспечивающих отказоустойчивость и хорошее поведение ваших систем. Следующие рекомендации должны помочь вам ориентироваться в этом сложном пространстве.
Представлять случаи ошибок и недопустимое состояние в типах, присущих вашему домену
Благодаря размеченным объединениям F# дает вам возможность представлять ошибочное состояние программы в вашей системе типов. Например:
тип MoneyWithdrawalResult =
| Успех количества: десятичный
| Недостаточно средств баланса: десятичный
| CardExpired of DateTime
| UndisclosedFailure
В этом случае есть три известных способа снятия денег с банковского счета.Каждый случай ошибки представлен в типе и, таким образом, может быть безопасно обработан во всей программе.
пусть обработает сумму вывода =
пусть w = сумма снятия денег
сопоставить w с
| Успех am -> printfn $"Успешно отозвано %f{am}"
| Баланс InsufficientFunds -> printfn $ "Ошибка: баланс %f{баланс}"
| CardExpired expiredDate -> printfn $ "Ошибка: срок действия карты истек {expiredDate}"
| UndisclosedFailure -> printfn "Ошибка: неизвестно"
В общем, если вы можете смоделировать различные способы, при которых что-то может привести к сбою в вашем домене, тогда код обработки ошибок больше не будет рассматриваться как нечто, с чем вы должны иметь дело в дополнение к обычному потоку программы.Это просто часть нормального выполнения программы, и не считается исключительным . В этом есть два основных преимущества:
- Его легче поддерживать, так как ваш домен со временем меняется.
- Случаи ошибок легче тестировать.
Использовать исключения, когда ошибки не могут быть представлены типами
Не все ошибки могут быть представлены в проблемном домене. Эти виды ошибок являются исключительными по своей природе, отсюда и возможность генерировать и перехватывать исключения в F#.
Во-первых, рекомендуется прочитать Руководство по проектированию исключений. Они также применимы к F#.
Основные конструкции, доступные в F# для создания исключений, следует рассматривать в следующем порядке предпочтения:
Функция | Синтаксис | Назначение |
---|---|---|
nullArg | nullArg "имя_аргумента" | Поднимает систему .ArgumentNullException с указанным именем аргумента. |
invalidArg | invalidArg "имя_аргумента" "сообщение" | Вызывает исключение System.ArgumentException с указанным именем аргумента и сообщением. |
инвалидОп | invalidOp "сообщение" | Вызывает исключение System.InvalidOperationException с указанным сообщением. |
поднять | поднять (ExceptionType ("сообщение")) | Механизм общего назначения для генерации исключений. |
отказ с | ошибка с "сообщением" | Вызывает System.Exception с указанным сообщением. |
отказоустойчивость | failwithf "строка формата" argForFormatString | Вызывает System.Exception с сообщением, определяемым строкой формата и входными данными. |
Используйте nullArg
, invalidArg
и invalidOp
в качестве механизма для создания ArgumentNullException
, ArgumentException
, и InvalidOperationException
, когда подходит , и Invalid.
Как правило, следует избегать функций failwith
и failwithf
, поскольку они вызывают базовый тип Exception
, а не конкретное исключение. В соответствии с Руководством по проектированию исключений вы хотите создавать более конкретные исключения, когда можете.
Использовать синтаксис обработки исключений
F# поддерживает шаблоны исключений через попытку ... с синтаксисом
:
попробовать
попытаться получить содержимое файла ()
с участием
| :? System.IO.FileNotFoundException as e -> // Сделайте что-нибудь здесь
| :? Система.Security.SecurityException as e -> // Сделайте что-нибудь здесь
Согласование функций для выполнения в случае исключения с сопоставлением с образцом может быть немного сложным, если вы хотите сохранить код чистым. Одним из таких способов решения этой проблемы является использование активных шаблонов в качестве средства для группировки функций, связанных с ошибкой, с самим исключением. Например, вы можете использовать API, который при генерации исключения заключает ценную информацию в метаданные исключения.Развертывание полезного значения в теле захваченного исключения внутри Active Pattern и возврат этого значения может быть полезным в некоторых ситуациях.
Не используйте монадическую обработку ошибок для замены исключений
Исключения часто рассматриваются как табу в функциональном программировании. Действительно, исключения нарушают чистоту, поэтому их можно с уверенностью считать не совсем функциональными. Однако при этом игнорируется реальность того, где должен выполняться код, и что могут возникать ошибки времени выполнения. В общем, пишите код, исходя из предположения, что большинство вещей не являются чистыми или тотальными, чтобы свести к минимуму неприятные сюрпризы.
Важно учитывать следующие основные сильные стороны/аспекты исключений в отношении их актуальности и уместности в среде выполнения .NET и межъязыковой экосистеме в целом:
- Они содержат подробную диагностическую информацию, которая полезна при отладке проблемы.
- Они хорошо понимаются средой выполнения и другими языками .NET.
- Они могут значительно сократить шаблонный код по сравнению с кодом, который делает все возможное, чтобы избежать исключений путем реализации некоторого подмножества их семантики на специальной основе.
Третий пункт является критическим. Для нетривиальных сложных операций отказ от использования исключений может привести к работе со структурами, подобными этой:
Результат<Результат, список строк>
Что может легко привести к ненадежному коду, такому как сопоставление с образцом при ошибках «строковой типизации»:
пусть результат = doStuff()
результат сопоставления с
| Ок р -> ...
| Ошибка е ->
если e.Contains "Строка ошибки 1", то...
elif e.Contains «Строка ошибки 2», затем ...
еще... // Кто знает?
Кроме того, может возникнуть соблазн проглотить любое исключение в стремлении к «простой» функции, которая возвращает «более приятный» тип:
// Это плохо!
пусть tryReadAllText (путь: строка) =
попробуйте путь System.IO.File.ReadAllText |> Некоторые
с _ -> Нет
К сожалению, tryReadAllText
может генерировать многочисленные исключения, основанные на множестве вещей, которые могут произойти в файловой системе, и этот код отбрасывает любую информацию о том, что на самом деле может пойти не так в вашей среде.Если вы замените этот код типом результата, вы вернетесь к синтаксическому анализу сообщения об ошибке со строковым типом:
// Это плохо!
пусть tryReadAllText (путь: строка) =
попробуйте путь System.IO.File.ReadAllText |> Хорошо
с e -> Ошибка e.Message
пусть r = tryReadAllText "путь к файлу"
сопоставить г с
| Хорошо текст -> ...
| Ошибка е ->
если e.Contains "ух, вот опять...", то...
еще ...
И размещение самого объекта исключения в конструкторе Error
просто заставляет вас правильно обрабатывать тип исключения в месте вызова, а не в функции.Это эффективно создает проверенные исключения, с которыми, как известно, неудобно иметь дело в качестве вызывающей стороны API.
Хорошей альтернативой приведенным выше примерам является перехват определенных исключений и возврат значимого значения в контексте этого исключения. Если вы измените функцию tryReadAllText
следующим образом, None
будет иметь большее значение:
пусть tryReadAllTextIfPresent (путь: строка) =
попробуйте путь System.IO.File.ReadAllText |> Некоторые
с участием :? FileNotFoundException -> Нет
Вместо того, чтобы работать как ловушка, эта функция теперь будет правильно обрабатывать случай, когда файл не был найден, и присваивать это значение возврату.Это возвращаемое значение может сопоставляться с этим случаем ошибки, не отбрасывая при этом никакой контекстной информации и не вынуждая вызывающие объекты обрабатывать случай, который может быть неактуален в данном месте кода.
Такие типы, как Result<'Success, 'Error>
, подходят для базовых операций, где они не являются вложенными, а необязательные типы F# идеально подходят для представления, когда что-то может либо вернуть something , либо ничего . Однако они не заменяют исключения и не должны использоваться в попытке заменить исключения.Наоборот, их следует применять разумно для целенаправленного решения конкретных аспектов политики управления исключениями и ошибками.
Частичное применение и бесточечное программирование
F# поддерживает частичное применение и, таким образом, различные способы программирования в бесточечном стиле. Это может быть полезно для повторного использования кода в модуле или реализации чего-либо, но это не то, что нужно выставлять на всеобщее обозрение. В общем, бесточечное программирование само по себе не является достоинством и может создать значительный когнитивный барьер для людей, не погруженных в этот стиль.
Не используйте частичное применение и каррирование в общедоступных API
За небольшими исключениями, использование частичного приложения в общедоступных API может сбивать с толку потребителей. Обычно значения let
в коде F# представляют собой значений , а не значений функции . Смешивание значений и значений функций может привести к экономии нескольких строк кода в обмен на довольно много когнитивных накладных расходов, особенно в сочетании с такими операторами, как >>
, для составления функций.
Рассмотрите значение инструментов для бесточечного программирования
Каррированные функции не маркируют свои аргументы. Это имеет последствия для инструментов. Рассмотрим следующие две функции:
пусть возраст имени функции =
printfn $"Меня зовут {name}, мне %d{age} лет!"
пусть funcWithApplication =
printfn "Меня зовут %s, мне %d лет!"
Обе функции допустимы, но funcWithApplication
является каррированной функцией. Когда вы наводите курсор на их типы в редакторе, вы видите это:
val func: имя: строка -> возраст: целое -> единица измерения
val funcWithApplication : (string -> int -> unit)
На месте вызова всплывающие подсказки в инструментах, таких как Visual Studio, дадут вам сигнатуру типа, но, поскольку имена не определены, они не будут отображаться.Имена имеют решающее значение для хорошего дизайна API, поскольку они помогают вызывающим сторонам лучше понять смысл API. Использование бесточечного кода в общедоступном API может затруднить понимание вызывающими сторонами.
Если вы столкнулись с общедоступным бесточечным кодом, таким как funcWithApplication
, рекомендуется выполнить полное η-расширение, чтобы инструментарий мог подобрать осмысленные имена для аргументов.
Кроме того, отладка бесточечного кода может быть сложной, если не невозможной.Средства отладки полагаются на значения, привязанные к именам (например, пусть привязки
), чтобы вы могли проверять промежуточные значения в процессе выполнения. Когда в вашем коде нет значений для проверки, нечего и отлаживать. В будущем инструменты отладки могут развиваться, чтобы синтезировать эти значения на основе ранее выполненных путей, но не рекомендуется ограничивать свои ставки потенциальной функциональностью отладки .
Рассмотрите возможность частичного применения в качестве метода уменьшения внутреннего шаблона
В отличие от предыдущего пункта, частичное приложение — прекрасный инструмент для сокращения шаблонов внутри приложения или более глубоких внутренних компонентов API.Это может быть полезно для модульного тестирования реализации более сложных API, когда с шаблонным кодом часто сложно иметь дело. Например, следующий код показывает, как вы можете выполнить то, что дает вам большинство фиктивных фреймворков, не принимая внешней зависимости от такой фреймворка и не изучая соответствующий специализированный API.
Например, рассмотрим следующую топографию решения:
MySolution.sln
|_/Иплементатионлогик.fsproj
|_/ImplementationLogic.Tests.fsproj
|_/API.фспродж
РеализацияLogic.fsproj
может содержать такой код, как:
модуль Транзакции =
пусть doTransaction txnContext txnType balance =
...
тип Transactor(ctx, currentBalance) =
член _.ExecuteTransaction(txnType) =
Transactions.doTransaction ctx txtType currentBalance
...
Модульное тестирование Transactions.doTransaction
в IntroductionLogic.Tests.fsproj
легко:
пространство имен TransactionsTestingUtil
открытые транзакции
модуль TransactionsTestable =
пусть getTestableTransactionRoutine mockContext = Transactions.doTransaction mockContext
Частично применяя doTransaction
с объектом фиктивного контекста, вы можете вызывать функцию во всех ваших модульных тестах без необходимости каждый раз создавать фиктивный контекст:
модуль TransactionTests
открыть Xunit
открытые типы транзакций
open TransactionsTestingUtil
открыть TransactionsTestingUtil.TransactionsTestable
пусть testableContext =
{ новый ITransactionContext с
член _.TheFirstMember() = ...
член _.TheSecondMember() = ... }
let transactionRoutine = getTestableTransactionRoutine testableContext
[<Факт>]
let ``Протестировать транзакцию вывода средств с балансом 0.0``() =
пусть ожидается = ...
пусть факт = transactionRoutine TransactionType.Withdraw 0.0
Assert.Equal(ожидаемый, фактический)
Не применяйте этот метод повсеместно ко всей кодовой базе, но это хороший способ уменьшить количество шаблонов для сложных внутренних компонентов и модульного тестирования этих внутренних компонентов.
Контроль доступа
F# имеет несколько параметров управления доступом, унаследованных от того, что доступно в .NET-среда выполнения. Их можно использовать не только для типов — вы можете использовать их и для функций.
- Предпочитайте типы и члены, отличные от общедоступных
- Стремитесь сохранить все вспомогательные функции
закрытыми
. - Рассмотрите возможность использования
[
для частного модуля вспомогательных функций, если их становится много.]
Вывод типов и обобщения
Вывод типа может избавить вас от набора шаблонного кода.А автоматическое обобщение в компиляторе F# поможет вам написать более общий код практически без дополнительных усилий с вашей стороны. Однако эти функции не всегда хороши.
Рассмотрите возможность маркировки имен аргументов явными типами в общедоступных API и не полагайтесь для этого на вывод типа.
Причина этого в том, что вы должны контролировать форму вашего API, а не компилятор. Хотя компилятор может отлично справиться с выводом типов за вас, форма вашего API может измениться, если внутренние компоненты, на которые он опирается, изменили типы.Это может быть то, что вы хотите, но это почти наверняка приведет к серьезному изменению API, с которым придется иметь дело нижестоящим потребителям. Вместо этого, если вы явно контролируете форму вашего общедоступного API, вы можете контролировать эти критические изменения. В терминах DDD это можно рассматривать как уровень защиты от коррупции.
Подумайте о том, чтобы дать вашим общим аргументам осмысленное имя.
Если вы не пишете действительно общий код, не относящийся к конкретной области, осмысленное имя может помочь другим программистам понять предметную область, в которой они работают.Например, параметр типа с именем
'Документ
в контексте взаимодействия с базой данных документов делает более понятным, что общие типы документов могут приниматься функцией или элементом, с которым вы работаете.Рассмотрите возможность именования параметров универсального типа с помощью PascalCase.
Это общий способ работы в .NET, поэтому рекомендуется использовать PascalCase, а не змеиный или верблюжий регистр.
Наконец, автоматическое обобщение не всегда полезно для людей, которые плохо знакомы с F# или большой кодовой базой.При использовании универсальных компонентов возникают когнитивные накладные расходы. Кроме того, если автоматически обобщенные функции не используются с различными типами ввода (не говоря уже о том, если они предназначены для использования как таковые), тогда нет никакой реальной выгоды от того, что они являются универсальными. Всегда думайте, действительно ли код, который вы пишете, выиграет от универсальности.
Производительность
Рассмотрите структуры для небольших типов с высокой скоростью выделения
Использование структур (также называемых типами значений) часто может привести к более высокой производительности для некоторого кода, так как обычно избегает выделения объектов.Однако структуры не всегда являются кнопкой «быстрее»: если размер данных в структуре превышает 16 байт, копирование данных часто может привести к большему расходу процессорного времени, чем использование ссылочного типа.
Чтобы определить, следует ли использовать структуру, рассмотрите следующие условия:
- Если размер ваших данных составляет 16 байт или меньше.
- Если вы, вероятно, будете иметь много экземпляров этих типов, находящихся в памяти в работающей программе.
Если применяется первое условие, обычно следует использовать структуру.Если оба применимы, вы почти всегда должны использовать структуру. Могут быть некоторые случаи, когда применяются предыдущие условия, но использование структуры не лучше и не хуже, чем использование ссылочного типа, но они, вероятно, будут редкими. Тем не менее, при внесении подобных изменений важно всегда измерять, а не полагаться на предположения или интуицию.
Учитывайте кортежи структур при группировании типов небольших значений с высокой скоростью выделения
Рассмотрим следующие две функции:
пусть rec runWithTuple t смещение раз =
пусть offsetValues x y z offset =
(x + смещение, y + смещение, z + смещение)
если раз <= 0, то
т
еще
пусть (x, y, z) = t
пусть r = offsetValues x y z смещение
runWithTuple r смещение (раз - 1)
пусть rec runWithStructTuple t смещение раз =
пусть offsetValues x y z offset =
структура (x + смещение, y + смещение, z + смещение)
если раз <= 0, то
т
еще
пусть struct(x, y, z) = t
пусть r = offsetValues x y z смещение
runWithStructTuple r смещение (раз - 1)
Когда вы сравните эти функции с помощью инструмента статистического тестирования, такого как BenchmarkDotNet, вы обнаружите, что функция runWithStructTuple
, использующая кортежи структур, работает на 40 % быстрее и не выделяет памяти.
Однако эти результаты не всегда будут иметь место в вашем собственном коде. Если вы пометите функцию как inline
, код, использующий ссылочные кортежи, может получить некоторые дополнительные оптимизации, или код, который будет выделять память, может быть просто оптимизирован. Вы всегда должны измерять результаты, когда речь идет о производительности, и никогда не действовать, основываясь на предположениях или интуиции.
Рассмотрите записи структуры, если тип небольшой и имеет высокую скорость выделения
Эмпирическое правило, описанное ранее, также применимо к типам записей F#.Рассмотрим следующие типы данных и функции, которые их обрабатывают:
тип Point = { X: float; Y: плавающий; Z: с плавающей запятой}
[<Структура>]
введите SPoint = { X: float; Y: плавающий; Z: с плавающей запятой}
let rec processPoint (p: Point) смещение раз =
let inline offsetValues (p: Point) offset =
{ p с X = p.X + смещение; Y = p.Y + смещение; Z = p.Z + смещение }
если раз <= 0, то
п
еще
пусть r = offsetValues p смещение
смещение processPoint r (раз - 1)
пусть rec processStructPoint (p: SPoint) смещение раз =
пусть встроенные значения смещения (p: SPoint) offset =
{ р с Х = р.Х + смещение; Y = p.Y + смещение; Z = p.Z + смещение }
если раз <= 0, то
п
еще
пусть r = offsetValues p смещение
смещение processStructPoint r (раз - 1)
Это похоже на предыдущий код кортежа, но на этот раз в примере используются записи и встроенная внутренняя функция.
Когда вы сравните эти функции с помощью инструмента статистического тестирования, такого как BenchmarkDotNet, вы обнаружите, что processStructPoint
работает почти на 60% быстрее и ничего не выделяет в управляемой куче.
Рассмотрите размеченные объединения структур, если тип данных небольшой с высокой скоростью выделения
Предыдущие наблюдения о производительности с кортежами структур и записями также справедливы для размеченных объединений F#. Рассмотрим следующий код:
тип Имя = Имя строки
[<Структура>]
тип SName = SName строки
пусть reverseName (Имя s) =
s.ToCharArray()
|> Массив.рев.
|> Система.Строка
|> Имя
пусть structReverseName (SName s) =
с.ToCharArray()
|> Массив.рев.
|> Система.Строка
|> SИмя
Для моделирования предметной области обычно определяют однократные размеченные объединения, подобные этому. Когда вы сравните эти функции с помощью инструмента статистического тестирования, такого как BenchmarkDotNet, вы обнаружите, что structReverseName
работает примерно на 25% быстрее, чем reverseName
для небольших строк. Для больших строк оба работают примерно одинаково. Итак, в этом случае всегда предпочтительнее использовать структуру.Как упоминалось ранее, всегда измеряйте и не полагайтесь на предположения или интуицию.
Хотя предыдущий пример показал, что struct Discriminated Union обеспечивает лучшую производительность, при моделировании предметной области обычно используются более крупные Discriminated Union. Большие типы данных, подобные этому, могут работать хуже, если они являются структурами, в зависимости от операций с ними, поскольку может потребоваться больше операций копирования.
Функциональное программирование и мутация
Значения F# по умолчанию являются неизменяемыми, что позволяет избежать определенных классов ошибок (особенно связанных с параллелизмом и параллелизмом).Однако в некоторых случаях для достижения оптимальной (или даже разумной) эффективности времени выполнения или распределения памяти интервал работы лучше всего реализовать с помощью изменения состояния на месте. Это возможно на основе согласия с F # с изменяемым ключевым словом
.
Использование mutable
в F# может противоречить функциональной чистоте. Это понятно, но функциональная чистота везде может противоречить целям производительности. Компромисс заключается в том, чтобы инкапсулировать мутацию таким образом, чтобы вызывающим сторонам не нужно было заботиться о том, что происходит, когда они вызывают функцию.Это позволяет вам написать функциональный интерфейс поверх реализации на основе мутаций для кода, критичного для производительности.
Оборачивать изменяемый код в неизменяемые интерфейсы
Принимая во внимание ссылочную прозрачность, очень важно писать код, который не раскрывает изменяемую внутреннюю часть критически важных для производительности функций. Например, следующий код реализует функцию Array.contains
в основной библиотеке F#:
[]
пусть встроенный содержит значение (массив: 'T []) =
checkNonNull "массив" массив
пусть изменяемое состояние = false
пусть изменяемый я = 0
пока не состояние && я <массив.Длина сделать
состояние <- значение = массив [i]
я <- я + 1
государство
Многократный вызов этой функции не изменяет базовый массив и не требует сохранения какого-либо изменяемого состояния при его использовании. Он ссылочно прозрачен, несмотря на то, что почти каждая строка кода в нем использует мутацию.
Рассмотрите возможность инкапсуляции изменяемых данных в классах
В предыдущем примере использовалась одна функция для инкапсуляции операций с использованием изменяемых данных.Этого не всегда достаточно для более сложных наборов данных. Рассмотрим следующие наборы функций:
открыть System.Collections.Generic
let addToClosureTable (ключ, значение) (t: Dictionary<_,_>) =
если нет (t.ContainsKey(key)) то
t.Add(ключ, значение)
еще
t[ключ] <- значение
пусть closureTableCount (t: Dictionary<_,_>) = t.Count
let closureTableContains (ключ, значение) (t: Dictionary<_, HashSet<_>>) =
сопоставьте t.TryGetValue (ключ) с
| (истинно, v) -> v.Равно(значение)
| (ложь, _) -> ложь
Этот код эффективен, но он предоставляет структуру данных, основанную на мутациях, за поддержку которой отвечают вызывающие программы. Это можно обернуть внутри класса без базовых членов, которые могут измениться:
открыть System.Collections.Generic
/// Результаты вычисления LALR(1)-замыкания ядра LR(0)
введите Closure1Table() =
пусть t = Dictionary>()
член _.Добавить (ключ, значение) =
если нет (т.СодержитКлюч(ключ)) тогда
t.Add(ключ, значение)
еще
t[ключ] <- значение
член _.Count = t.Count
член _.Contains(ключ, значение) =
сопоставьте t.TryGetValue (ключ) с
| (истина, v) -> v.Equals (значение)
| (ложь, _) -> ложь
Closure1Table
инкапсулирует базовую структуру данных на основе мутаций, тем самым не заставляя вызывающие объекты поддерживать базовую структуру данных. Классы — это мощный способ инкапсулировать данные и подпрограммы, основанные на мутациях, без раскрытия деталей вызывающим сторонам.
Предпочесть
пусть изменяемый
для ссылок на ячейкиСсылочные ячейки — это способ представить ссылку на значение, а не само значение. Хотя их можно использовать для критичного к производительности кода, использовать их не рекомендуется. Рассмотрим следующий пример:
пусть ядра =
пусть акк = ссылка Set.пусто
processWorkList startKernels (забавное ядро ->
если нет ((!acc).Содержит(ядро)) тогда
акк := (!акк).Добавить(ядро)
...)
!acc |> Посл.составлять список
Использование ссылочной ячейки теперь «загрязняет» весь последующий код необходимостью разыменования и повторной ссылки на базовые данные. Вместо этого рассмотрим пусть изменяемый
:
пусть ядра =
пусть изменяемый акк = Set.empty
processWorkList startKernels (забавное ядро ->
если нет (соотв.Содержит(ядро)) то
acc <- acc.Добавить(ядро)
...)
acc |> Seq.toList
Помимо единственной точки мутации в середине лямбда-выражения, весь остальной код, который касается в соответствии с
, может делать это таким же образом, как и использование обычного неизменяемого значения с привязкой к
.Это облегчит изменение с течением времени.
Объектное программирование
F# полностью поддерживает объекты и объектно-ориентированные (ОО) концепции. Хотя многие концепции объектно-ориентированного программирования являются мощными и полезными, не все из них идеально подходят для использования. Следующие списки предлагают руководство по категориям функций OO на высоком уровне.
Рассмотрите возможность использования этих функций во многих ситуациях:
- Точечное обозначение (
x Длина
) - Элементы экземпляра
- Неявные конструкторы
- Статические элементы
- Нотация индексатора (
arr[x]
), путем определения свойстваItem
- Обозначение нарезки (
arr[x..y]
,arr[x..]
,arr[..y]
), определяяGetSlice
членов - Именованные и необязательные аргументы
- Интерфейсы и реализации интерфейсов
Не хватайтесь за эти функции в первую очередь, но разумно применяйте их, когда они удобны для решения проблемы:
- Перегрузка метода
- Инкапсулированные изменяемые данные
- Операторы для типов
- Авто свойства
- Реализация
IDisposable
иIEnumerable
- Расширения типа
- События
- Конструкции
- Делегаты
- перечисления
Как правило, избегайте этих функций, если вы не должны их использовать:
- Иерархии типов на основе наследования и наследование реализации
- Nulls и
Unchecked.по умолчанию<_>
Предпочитает композицию наследованию
Композиция вместо наследования — это давняя идиома, которой может придерживаться хороший код F#. Фундаментальный принцип заключается в том, что вы не должны выставлять базовый класс и заставлять вызывающие объекты наследовать от этого базового класса для получения функциональности.
Используйте объектные выражения для реализации интерфейсов, если вам не нужен класс
Объектные выраженияпозволяют вам реализовывать интерфейсы на лету, привязывая реализованный интерфейс к значению без необходимости делать это внутри класса.Это удобно, особенно если вам нужно только реализовать интерфейс и вам не нужен полный класс.
Например, вот код, который запускается в Ionide для обеспечения действия по исправлению кода, если вы добавили символ, для которого у вас нет оператора open
:
пусть частный createProvider () =
{ новый CodeActionProvider с
член this.provideCodeActions(doc, range, context, ct) =
пусть диагностика = контекст.диагностика
let диагностика = диагностика |> Seq.tryFind (fun d -> d.message.Contains «Неиспользуемый оператор открытия»)
пусть рез =
сопоставить диагностику с
| Нет -> [||]
| Некоторые д ->
пусть строка = doc.lineAt d.range.start.line
пусть cmd = createEmpty
cmd.title <- "Удалить неиспользуемые открытые"
cmd.command <- "fsharp.неиспользованный OpenFix"
cmd.arguments <- Some ([| doc |> unbox; line.range |> unbox; |] |> ResizeArray)
[|команда |]
разрешение
|> Изменить размер массива
|> U2.Case1
}
Поскольку для взаимодействия с Visual Studio Code API класс не нужен, объектные выражения являются для этого идеальным инструментом. Они также полезны для модульного тестирования, когда вы хотите импровизированным образом заглушить интерфейс тестовыми процедурами.
Учитывать сокращения типов для сокращения подписи
Аббревиатуры типов — это удобный способ назначить метку другому типу, например сигнатуре функции или более сложному типу. Например, следующий псевдоним назначает метку тому, что необходимо для определения вычисления с CNTK, библиотекой глубокого обучения:
открытый CNTK
// Дескриптор устройства, переменная и функция взяты из CNTK
type Computation = DeviceDescriptor -> Variable -> Function
Имя Computation
— это удобный способ обозначить любую функцию, которая соответствует сигнатуре, которой она соответствует.Подобное использование сокращений типов удобно и позволяет писать более лаконичный код.
Избегайте использования сокращений типов для представления вашего домена
Хотя сокращения типов удобны для присвоения имен сигнатурам функций, они могут сбивать с толку при сокращении других типов. Рассмотрим эту аббревиатуру:
// Фактически не абстрагирует целые числа.
тип BufferSize = int
Это может сбить с толку несколькими способами:
-
BufferSize
не является абстракцией; это просто другое имя для целого числа. - Если
BufferSize
отображается в общедоступном API, его можно легко неверно истолковать как нечто большее, чем простоint
. Как правило, доменные типы имеют несколько атрибутов и не являются примитивными типами, такими какint
. Эта аббревиатура нарушает это предположение. - Корпус
BufferSize
(PascalCase) подразумевает, что этот тип содержит больше данных. - Этот псевдоним не обеспечивает большей ясности по сравнению с предоставлением именованного аргумента функции.
- Аббревиатура не будет отображаться в скомпилированном IL; это просто целое число, и этот псевдоним является конструкцией времени компиляции.
модуль Сеть =
...
пусть отправит данные (bufferSize: int) = ...
Таким образом, ловушка с сокращениями типов заключается в том, что они являются , а не абстракциями над типами, которые они сокращают. В предыдущем примере BufferSize
— это просто int
под прикрытием, без каких-либо дополнительных данных или каких-либо преимуществ от системы типов, помимо того, что уже есть у int
.
Альтернативным подходом к использованию аббревиатур типов для представления домена является использование размеченных объединений в одном регистре. Предыдущий образец можно смоделировать следующим образом:
тип BufferSize = BufferSize целого числа
Если вы пишете код, который работает с BufferSize
и его базовым значением, вам нужно построить его, а не передавать произвольное целое число:
модуль Сеть =
...
разрешить отправку данных (размер BufferSize) =
...
Это снижает вероятность ошибочной передачи произвольного целого числа в функцию отправки
, поскольку вызывающая сторона должна создать тип BufferSize
для переноса значения перед вызовом функции.
Центр гуманитарных наук | Дез/информирование риторики на президентских выборах
26 июня 2020 г.
(Примечание директора: Синтия Хейнс является директором программы Ph.D по риторике, коммуникациям и информационному дизайну и профессором английского языка.Ее исследовательские интересы включают риторику, композицию, мультимодальную педагогику, виртуальные миры, критическую теорию, исследования компьютерных игр и риторику войны и терроризма. Ее недавняя книга « Телефонная книга тоски по дому: обращение к риторике в эпоху вечных конфликтов » получила ежегодную книжную премию Американского общества риторики в 2017 году. В настоящее время она работает над рукописью книги « Неотъемлемые обряды: архитектура массовой риторики». Теперь это Clemson Humanities.)
Предстоящие президентские выборы 2020 года станут, пожалуй, самой сложной риторической перепалкой в истории этой страны.Я использую термин риторическая перепалка , чтобы задать тон, чтобы напомнить набор тактики. В военной истории в стычках участвуют передовые отряды, которые участвуют в подрывных действиях, чтобы задержать, деморализовать, ввести в заблуждение или иным образом послужить раздражающим «оводом» в тяжеловооруженном конфликте военного времени. Наши президентские выборы снова в серьезной опасности. Если выборы 2016 года были чреваты, подумайте о недавней тревожной риторике (и действиях), которые еще раз подвергнут испытанию наши демократические процессы.
Продолжающиеся попытки сорвать президентские кампании с помощью дезинформации в социальных сетях набирают обороты. Не уходит. Рекордное количество твитов, постов/рекламы в Facebook и заголовков растоптает нашу коллективную способность анализировать риторические перепалки слово за загруженным словом, предложение за спорным предложением. И именно поэтому риторика нужна как никогда, чтобы ответить на вызовы демократических выборов 21 - века: распаковать язык и обезоружить использование политического дискурса в качестве оружия.Кто знал, что ритор на свободе станет вариантом карьеры? Кто знал, что после 2016 года риторов будут массово нанимать в качестве «проверщиков фактов»? Кто знал, что слова имеют значение? Парменид знал. Платон знал. Ницше знал. У. Э. Б. Дюбуа знал. Мартин Лютер Кинг-младший знал. Анджела Дэвис знает. Глория Стайнем знает. Тони Моррисон знает. И теперь вы знаете.
«Они» скажут вам, что бюллетени для голосования по почте сфальсифицированы. Не верьте этому. Посмотрите, кто что кому говорит и кто больше всего выигрывает от этой лжи.«Они» скажут вам, что избирательные участки оборудованы для того, чтобы выдерживать длинные очереди «социально дистанцированных» избирателей. Не верьте этому. Посмотрите на первичные выборы в Грузии только на прошлой неделе. Хаос. «Они» скажут вам, что есть кандидаты от Демократической партии, которые находятся под следствием, и могут даже сказать вам, что из-за пандемии выборы приходится откладывать. Не верьте этому. Читайте риторические чайные листья и считайте риторическую ложь. Видите ли, риторика может быть использована как в хороших, так и в плохих целях.Это главная причина, по которой риторика получила такую плохую репутацию за последние несколько тысяч лет. Риторика — это способ использования языка , а — способ анализа языка. Это хорошая новость. Это и/и. Не или/или.
В 2016 году боты, организованные гнусными группами (некоторые говорят, что нациями), добились больших успехов в ужесточении настроений против Хиллари среди избирателей. «Фейковые новости» стали последней риторической фразой для перетягивания каната, когда и республиканцы, и демократы швыряли ее друг в друга.Неудивительно, что всем трудно разобрать язык миллионов твитов, постов в Facebook, публикаций в основных СМИ и телевизионных новостных программ. Я отчетливо помню, как утром перед выборами 2016 года моя мать переслала пост в Facebook о подруге тети моего друга в Техасе, которая клялась, что, когда она проголосовала тем утром за прямой билет республиканцев, машина для голосования изменила ее голос за Трампа. Клинтон. И если бы она не проверила перед тем, как покинуть кабину для голосования…и т. д. и т. д. Трамп утверждал, что ему много звонили по поводу такого «подбрасывания голосов», что оказалось неправдой (по словам Сноупса).
Проверка фактов — это большая работа. Чтение — это большой труд. И все же мы, кажется, читаем все больше и больше в 21 -м -м веке. Что считать «чтением» — это самый насущный риторический вопрос, с которым мы сталкиваемся. Мне пришлось искать, что означает «tl; dr», когда я впервые увидел его в предисловии к некоторым сообщениям моих друзей на Facebook. Как педагог и ритор, я могу сказать вам, что это меня расстроило.Это означает «слишком долго; не читал» и обычно ссылался на чей-то длинный пост/разглагольствование или на какую-то длинную статью в новостях. Слова имеют значение. Слова складываются. Слова меняют отношение. Слова меняют результаты выборов. Вот почему я учу своих студентов риторически понимать, как работает язык, использовать риторику, чтобы понять, как мотивы лежат в основе языка, и, если необходимо, расщеплять риторические волосы всеми способами, чтобы добраться до истины… вот почему я ритор. на свободе в 21 -м веке.Пожалуйста, прочитайте как можно больше, а затем, пожалуйста, проголосуйте в ноябре этого года… независимо от того, что «они» говорят или как сильно «они» пытаются разубедить вас дезинформацией.
Для дальнейшего чтения:
Биззел, Патрисия, Брюс Херцберг и Робин Римс. Риторическая традиция: чтения от античности до наших дней . 3 -й изд. Издательство Макмиллан, 2020.
Видео Эвана Пущака «Как Дональд Трамп отвечает на вопрос». 30 декабря 2015 г.
Нили, Бретт.«Опрос NPR: большинство американцев считают, что Трамп поощряет вмешательство в выборы» NPR.org. 21 января 2020 г.
Роуленд, Даррел. «Что вам нужно знать о языке дезинформации в преддверии избирательного цикла 2020 года» USA Today . 24 февраля 2020 г.
Савойя, Жак. «Анализ стиля и риторики президентских праймериз в США в 2016 г.» Digital Scholarship in the Humanities , том 33, выпуск 1, апрель 2018 г., страницы 143–159.
Заметили изменение? - Сан-Диего Юнион-Трибьюн
Как вы уже заметили, у SignOnSanDiego новый внешний вид, новая организационная структура и множество новых функций.И это только начало.
Редизайн включает в себя:
- Чистый современный вид с философией дизайна, основанной на порядке, логике и простоте.
- Большое вращающееся бегущее окно в верхней части главной страницы для выделения наших лучших предложений.
- Новый мультимедийный проигрыватель для увеличения акцента на видео.
- Надежный календарь событий, предлагающий интересные занятия, которые вы можете использовать, чтобы ввести свои собственные события или найти, чем заняться на выходных.
- списков автомобилей от Autotrader.com и, очень скоро, вакансий от Monster, обеспечивающих более простые в использовании страницы вакансий и автомобилей, которые помогут вам найти дом или поездку, которую вы ищете.
- Утилиты, которые можно использовать для получения сведений о пробках на дорогах, погоде или гороскопе, а также для поиска в архивах UT или подписки на электронные или текстовые уведомления о новостях, сгруппированные в наборы инструментов и включенные на каждую страницу сайта.
- Контент из нашего испаноязычного издания Mi Enlace на нашей домашней странице.
- Страница новостей, на которой можно искать заголовки по теме или месту.
Вы найдете те же самые важные новости, освещение предприятий и наблюдательных новостей, а также поразительную визуальную журналистику от The San Diego Diego Union-Tribune, которую вы привыкли ожидать от SignOn. Но вы увидите повышенный акцент на мультимедиа, а авторитетное освещение UT региона реорганизовано в такие темы, как общественная безопасность, транспорт, окружающая среда, а также по географии.
Очень скоро мы предложим функцию, которая позволит вам просматривать страницы, отсортированные по ключевым словам или тегам, чтобы вы могли прочитать страницу с рассказами о штате Сан-Диего или Лемон-Гроув, свином гриппе или любой другой теме, о которой мы только можем подумать. .
Мы также внедрили агрегатор новостей и тем под названием Daylife, который позволит нам создавать страницы о путешествиях, знаменитостях и широком спектре других тем с содержанием, полученным из самых надежных источников новостей по всему миру.
Вы можете увидеть некоторые шероховатости, некоторые ссылки, которые нам нужно будет переподключить, и некоторые страницы, которые будут конкретизированы, когда мы начнем перемещать UT и новостные службы через систему.Но будьте уверены, это только начало, так как мы продолжим совершенствовать способ организации нашего контента, исправляя то, что не работает, постоянно добавляя функции и внося улучшения.
Нам нужна ваша помощь в этом. Поделитесь с нами вашими мыслями. Вы можете нажать на кнопку «Оставить отзыв» в правом нижнем углу экрана. (Мы сохраним это на сайте в течение недели или около того.)
Но, пожалуйста, несколько основных правил: 1) Сначала попробуйте. Возьмите новый SignOn на тест-драйв на несколько дней или, что еще лучше, на неделю.Таким образом, вы увидите, как мы работаем над совершенствованием главной страницы Сан-Диего. 2) Прежде чем комментировать эту историю, прочтите все комментарии и посты до этого. Возможно, вы обнаружите, что ваши проблемы были подняты, и что мы работаем над их решением.
Кроме того, пока мы ждем ваших отзывов, мы очень надеемся, что вам понравится. Спасибо.
%PDF-1.4 % 6481 0 объект > эндообъект внешняя ссылка 6481 4481 0000000015 00000 н 00000 00000 н 0000093512 00000 н 0000093742 00000 н 0000093867 00000 н 0000094002 00000 н 0000094153 00000 н 0000094316 00000 н 0000094467 00000 н 0000094612 00000 н 0000094755 00000 н 0000094898 00000 н 0000095043 00000 н 0000095202 00000 н 0000095331 00000 н 0000095487 00000 н 0000095631 00000 н 0000095779 00000 н 0000095925 00000 н 0000096067 00000 н 0000096225 00000 н 0000096365 00000 н 0000096509 00000 н 0000096667 00000 н 0000096815 00000 н 0000096961 00000 н 0000097109 00000 н 0000097255 00000 н 0000097399 00000 н 0000097553 00000 н 0000097675 00000 н 0000097849 00000 н 0000097973 00000 н 0000098143 00000 н 0000098291 00000 н 0000098449 00000 н 0000098603 00000 н 0000098757 00000 н 0000098905 00000 н 0000099055 00000 н 0000099213 00000 н 0000099361 00000 н 0000099515 00000 н 0000099671 00000 н 0000099821 00000 н 0000099977 00000 н 0000100131 00000 н 0000100305 00000 н 0000100445 00000 н 0000100587 00000 н 0000100735 00000 н 0000100897 00000 н 0000101053 00000 н 0000101219 00000 н 0000101383 00000 н 0000101537 00000 н 0000101685 00000 н 0000101867 00000 н 0000102047 00000 н 0000102247 00000 н 0000102447 00000 н 0000102651 00000 н 0000102821 00000 н 0000102983 00000 н 0000103163 00000 н 0000103351 00000 н 0000103525 00000 н 0000103685 00000 н 0000103865 00000 н 0000104031 00000 н 0000104195 00000 н 0000104357 00000 н 0000104541 00000 н 0000104701 00000 н 0000104889 00000 н 0000105067 00000 н 0000105253 00000 н 0000105441 00000 н 0000105639 00000 н 0000105839 00000 н 0000106023 00000 н 0000106217 00000 н 0000106409 00000 н 0000106605 00000 н 0000106787 00000 н 0000106987 00000 н 0000107161 00000 н 0000107329 00000 н 0000107503 00000 н 0000107675 00000 н 0000107849 00000 н 0000108031 00000 н 0000108207 00000 н 0000108375 00000 н 0000108551 00000 н 0000108709 00000 н 0000108873 00000 н 0000109069 00000 н 0000109263 00000 н 0000109459 00000 н 0000109665 00000 н 0000109857 00000 н 0000110047 00000 н 0000110225 00000 н 0000110395 00000 н 0000110553 00000 н 0000110763 00000 н 0000110900 00000 н 0000111049 00000 н 0000111196 00000 н 0000111349 00000 н 0000111506 00000 н 0000111661 00000 н 0000111816 00000 н 0000111963 00000 н 0000112122 00000 н 0000112271 00000 н 0000112418 00000 н 0000112563 00000 н 0000112694 00000 н 0000112870 00000 н 0000113000 00000 н 0000113138 00000 н 0000113276 00000 н 0000113430 00000 н 0000113568 00000 н 0000113716 00000 н 0000113862 00000 н 0000114018 00000 н 0000114174 00000 н 0000114328 00000 н 0000114466 00000 н 0000114608 00000 н 0000114766 00000 н 0000114930 00000 н 0000115076 00000 н 0000115243 00000 н 0000115409 00000 н 0000115570 00000 н 0000115742 00000 н 0000115909 00000 н 0000116067 00000 н 0000116202 00000 н 0000116344 00000 н 0000116478 00000 н 0000116621 00000 н 0000116751 00000 н 0000116939 00000 н 0000117078 00000 н 0000117249 00000 н 0000117420 00000 н 0000117572 00000 н 0000117713 00000 н 0000117896 00000 н 0000118036 00000 н 0000118186 00000 н 0000118362 00000 н 0000118536 00000 н 0000118660 00000 н 0000118782 00000 н 0000118921 00000 н 0000119084 00000 н 0000119236 00000 н 0000119417 00000 н 0000119598 00000 н 0000119737 00000 н 0000119885 00000 н 0000120024 00000 н 0000120156 00000 н 0000120336 00000 н 0000120485 00000 н 0000120700 00000 н 0000120873 00000 н 0000121024 00000 н 0000121197 00000 н 0000121345 00000 н 0000121498 00000 н 0000121665 00000 н 0000121840 00000 н 0000122008 00000 н 0000122158 00000 н 0000122383 00000 н 0000122525 00000 н 0000122672 00000 н 0000122849 00000 н 0000123015 00000 н 0000123231 00000 н 0000123381 00000 н 0000123533 00000 н 0000123680 00000 н 0000123814 00000 н 0000123999 00000 н 0000124159 00000 н 0000124363 00000 н 0000124543 00000 н 0000124716 00000 н 0000124915 00000 н 0000125113 00000 н 0000125290 00000 н 0000125414 00000 н 0000125626 00000 н 0000125782 00000 н 0000125950 00000 н 0000126114 00000 н 0000126293 00000 н 0000126471 00000 н 0000126624 00000 н 0000126829 00000 н 0000126986 00000 н 0000127143 00000 н 0000127298 00000 н 0000127453 00000 н 0000127604 00000 н 0000127770 00000 н 0000127923 00000 н 0000128082 00000 н 0000128235 00000 н 0000128388 00000 н 0000128538 00000 н 0000128672 00000 н 0000128844 00000 н 0000129029 00000 н 0000129191 00000 н 0000129354 00000 н 0000129500 00000 н 0000129658 00000 н 0000129819 00000 н 0000129967 00000 н 0000130135 00000 н 0000130314 00000 н 0000130463 00000 н 0000130610 00000 н 0000130802 00000 н 0000130954 00000 н 0000131132 00000 н 0000131283 00000 н 0000131451 00000 н 0000131581 00000 н 0000131715 00000 н 0000131946 00000 н 0000132129 00000 н 0000132280 00000 н 0000132444 00000 н 0000132611 00000 н 0000132761 00000 н 0000132931 00000 н 0000133095 00000 н 0000133256 00000 н 0000133426 00000 н 0000133590 00000 н 0000133762 00000 н 0000133891 00000 н 0000134069 00000 н 0000134193 00000 н 0000134374 00000 н 0000134541 00000 н 0000134710 00000 н 0000134879 00000 н 0000135056 00000 н 0000135235 00000 н 0000135421 00000 н 0000135604 00000 н 0000135744 00000 н 0000135933 00000 н 0000136094 00000 н 0000136276 00000 н 0000136422 00000 н 0000136596 00000 н 0000136743 00000 н 0000136877 00000 н 0000137064 00000 н 0000137212 00000 н 0000137388 00000 н 0000137577 00000 н 0000137749 00000 н 0000137918 00000 н 0000138085 00000 н 0000138265 00000 н 0000138415 00000 н 0000138570 00000 н 0000138717 00000 н 0000138869 00000 н 0000138991 00000 н 0000139166 00000 н 0000139307 00000 н 0000139450 00000 н 0000139605 00000 н 0000139783 00000 н 0000139937 00000 н 0000140092 00000 н 0000140265 00000 н 0000140437 00000 н 0000140618 00000 н 0000140769 00000 н 0000140960 00000 н 0000141096 00000 н 0000141250 00000 н 0000141394 00000 н 0000141513 00000 н 0000141689 00000 н 0000141850 00000 н 0000142015 00000 н 0000142176 00000 н 0000142316 00000 н 0000142549 00000 н 0000142669 00000 н 0000142857 00000 н 0000143030 00000 н 0000143148 00000 н 0000143343 00000 н 0000143500 00000 н 0000143644 00000 н 0000143793 00000 н 0000143978 00000 н 0000144123 00000 н 0000144282 00000 н 0000144489 00000 н 0000144645 00000 н 0000144812 00000 н 0000144965 00000 н 0000145154 00000 н 0000145295 00000 н 0000145459 00000 н 0000145639 00000 н 0000145828 00000 н 0000145986 00000 н 0000146195 00000 н 0000146347 00000 н 0000146510 00000 н 0000146659 00000 н 0000146844 00000 н 0000147023 00000 н 0000147153 00000 н 0000147344 00000 н 0000147478 00000 н 0000147646 00000 н 0000147817 00000 н 0000147961 00000 н 0000148123 00000 н 0000148272 00000 н 0000148472 00000 н 0000148608 00000 н 0000148809 00000 н 0000148956 00000 н 0000149161 00000 н 0000149308 00000 н 0000149476 00000 н 0000149661 00000 н 0000149836 00000 н 0000150014 00000 н 0000150188 00000 н 0000150354 00000 н 0000150542 00000 н 0000150713 00000 н 0000150863 00000 н 0000151025 00000 н 0000151171 00000 н 0000151395 00000 н 0000151572 00000 н 0000151767 00000 н 0000151974 00000 н 0000152125 00000 н 0000152327 00000 н 0000152509 00000 н 0000152716 00000 н 0000152884 00000 н 0000153104 00000 н 0000153306 00000 н 0000153497 00000 н 0000153714 00000 н 0000153901 00000 н 0000154116 00000 н 0000154319 00000 н 0000154553 00000 н 0000154749 00000 н 0000154956 00000 н 0000155153 00000 н 0000155360 00000 н 0000155520 00000 н 0000155762 00000 н 0000155927 00000 н 0000156164 00000 н 0000156358 00000 н 0000156586 00000 н 0000156803 00000 н 0000156985 00000 н 0000157212 00000 н 0000157416 00000 н 0000157609 00000 н 0000157838 00000 н 0000158029 00000 н 0000158241 00000 н 0000158407 00000 н 0000158636 00000 н 0000158868 00000 н 0000159105 00000 н 0000159320 00000 н 0000159531 00000 н 0000159743 00000 н 0000159927 00000 н 0000160184 00000 н 0000160403 00000 н 0000160600 00000 н 0000160832 00000 н 0000160983 00000 н 0000161210 00000 н 0000161372 00000 н 0000161565 00000 н 0000161725 00000 н 0000161922 00000 н 0000162059 00000 н 0000162279 00000 н 0000162449 00000 н 0000162662 00000 н 0000162868 00000 н 0000163046 00000 н 0000163269 00000 н 0000163457 00000 н 0000163627 00000 н 0000163834 00000 н 0000164032 00000 н 0000164196 00000 н 0000164445 00000 н 0000164623 00000 н 0000164815 00000 н 0000164971 00000 н 0000165123 00000 н 0000165247 00000 н 0000165441 00000 н 0000165559 00000 н 0000165695 00000 н 0000165844 00000 н 0000165998 00000 н 0000166144 00000 н 0000166272 00000 н 0000166462 00000 н 0000166607 00000 н 0000166753 00000 н 0000166963 00000 н 0000167108 00000 н 0000167252 00000 н 0000167426 00000 н 0000167595 00000 н 0000167804 00000 н 0000167941 00000 н 0000168094 00000 н 0000168237 00000 н 0000168389 00000 н 0000168555 00000 н 0000168702 00000 н 0000168845 00000 н 0000169022 00000 н 0000169164 00000 н 0000169318 00000 н 0000169491 00000 н 0000169682 00000 н 0000169892 00000 н 0000170089 00000 н 0000170267 00000 н 0000170450 00000 н 0000170634 00000 н 0000170824 00000 н 0000171015 00000 н 0000171173 00000 н 0000171357 00000 н 0000171514 00000 н 0000171708 00000 н 0000171878 00000 н 0000172021 00000 н 0000172170 00000 н 0000172297 00000 н 0000172524 00000 н 0000172673 00000 н 0000172872 00000 н 0000173068 00000 н 0000173245 00000 н 0000173421 00000 н 0000173552 00000 н 0000173672 00000 н 0000173848 00000 н 0000173992 00000 н 0000174149 00000 н 0000174295 00000 н 0000174443 00000 н 0000174637 00000 н 0000174764 00000 н 0000174907 00000 н 0000175058 00000 н 0000175203 00000 н 0000175334 00000 н 0000175517 00000 н 0000175660 00000 н 0000175799 00000 н 0000175952 00000 н 0000176090 00000 н 0000176244 00000 н 0000176384 00000 н 0000176515 00000 н 0000176658 00000 н 0000176813 00000 н 0000176942 00000 н 0000177121 00000 н 0000177279 00000 н 0000177428 00000 н 0000177570 00000 н 0000177753 00000 н 0000177893 00000 н 0000178073 00000 н 0000178225 00000 н 0000178376 00000 н 0000178550 00000 н 0000178693 00000 н 0000178839 00000 н 0000178980 00000 н 0000179122 00000 н 0000179316 00000 н 0000179457 00000 н 0000179575 00000 н 0000179738 00000 н 0000179924 00000 н 0000180061 00000 н 0000180205 00000 н 0000180362 00000 н 0000180532 00000 н 0000180711 00000 н 0000180885 00000 н 0000181069 00000 н 0000181257 00000 н 0000181400 00000 н 0000181574 00000 н 0000181747 00000 н 0000181975 00000 н 0000182100 00000 н 0000182292 00000 н 0000182421 00000 н 0000182552 00000 н 0000182777 00000 н 0000182952 00000 н 0000183076 00000 н 0000183248 00000 н 0000183376 00000 н 0000183529 00000 н 0000183731 00000 н 0000183922 00000 н 0000184050 00000 н 0000184191 00000 н 0000184361 00000 н 0000184499 00000 н 0000184693 00000 н 0000184759 00000 н 0000184816 00000 н 0000184873 00000 н 0000184930 00000 н 0000184987 00000 н 0000185044 00000 н 0000185101 00000 н 0000185158 00000 н 0000185215 00000 н 0000185272 00000 н 0000185329 00000 н 0000185386 00000 н 0000185443 00000 н 0000185500 00000 н 0000185557 00000 н 0000185614 00000 н 0000185671 00000 н 0000185728 00000 н 0000185783 00000 н 0000185840 00000 н 0000185897 00000 н 0000185953 00000 н 0000186008 00000 н 0000186065 00000 н 0000186120 00000 н 0000186177 00000 н 0000186234 00000 н 0000186291 00000 н 0000186348 00000 н 0000186405 00000 н 0000186462 00000 н 0000186519 00000 н 0000186576 00000 н 0000186633 00000 н 0000186690 00000 н 0000186747 00000 н 0000186805 00000 н 0000186862 00000 н 0000186918 00000 н 0000186976 00000 н 0000187033 00000 н 0000187090 00000 н 0000187147 00000 н 0000187204 00000 н 0000187261 00000 н 0000187318 00000 н 0000187373 00000 н 0000187430 00000 н 0000187487 00000 н 0000187543 00000 н 0000187600 00000 н 0000187656 00000 н 0000187713 00000 н 0000187768 00000 н 0000187825 00000 н 0000187882 00000 н 0000187940 00000 н 0000187995 00000 н 0000188052 00000 н 0000188109 00000 н 0000188166 00000 н 0000188223 00000 н 0000188277 00000 н 0000188334 00000 н 0000188391 00000 н 0000188448 00000 н 0000188505 00000 н 0000188562 00000 н 0000188617 00000 н 0000188674 00000 н 0000188731 00000 н 0000188788 00000 н 0000188845 00000 н 0000188902 00000 н 0000188958 00000 н 0000189014 00000 н 0000189071 00000 н 0000189128 00000 н 0000189185 00000 н 0000189242 00000 н 0000189299 00000 н 0000189356 00000 н 0000189413 00000 н 0000189470 00000 н 0000189526 00000 н 0000189583 00000 н 0000189640 00000 н 0000189697 00000 н 0000189751 00000 н 0000189808 00000 н 0000189863 00000 н 0000189920 00000 н 0000189977 00000 н 00001 00000 н 00001 00000 н 00001
00000 н 0000100000 н 0000100000 н 00001 00000 н 00001
00000 н 00001 00000 н 0000100000 н 00001
00000 н 00001
00000 н 0000100000 н 00001
00000 н 00001
00000 н 00001- 00000 н 00001
00000 н 00001
00000 н 00001 00000 н 00001 00000 н
00001 00000 н
00001 00000 н
00001 00000 н
00001 00000 н
00001 00000 н
00001 00000 н
00001
00000 н
00001
00000 н
00001 00000 н
00001 00000 н
00001
00000 н
00001 00000 н
00001
00000 n 0000392027 00000 n 0000393435 00000 n 0000394752 00000 n 0000396015 00000 n 0000397319 00000 n 0000398679 00000 n 0000399443 00000 n 0000400243 00000 n 0000400961 00000 n 0000401659 00000 n 0000402364 00000 n 0000403537 00000 n 0000404382 00000 n 0000405259 00000 n 0000406225 00000 n 0000407144 00000 n 0000408047 00000 n 0000408668 00000 n 0000409463 00000 n 0000410125 00000 n 0000410895 00000 n 0000411725 00000 n 0000412473 00000 n 0000413177 00000 n 0000413864 00000 n 0000414727 00000 n 0000415754 00000 n 0000416479 00000 n 0000417410 00000 n 0000418205 00000 n 0000418882 00000 n 0000419707 00000 n 0000420661 00000 n 0000421579 00000 n 0000422606 00000 n 0000423431 00000 n 0000424144 00000 n 0000425085 00000 n 0000425948 00000 n 0000426362 00000 n 0000426785 00000 n 0000427208 00000 n 0000427630 00000 n 0000428052 00000 n 0000428478 00000 n 0000429174 00000 n 0000430248 00000 n 0000431311 00000 n 0000432373 00000 n 0000433244 00000 n 0000434004 00000 n 0000434857 00000 n 0000435996 00000 n 0000437392 00000 n 0000438303 00000 n 0000439348 00000 n 0000440460 00000 n 0000441259 00000 n 0000442063 00000 n 0000442932 00000 n 0000444071 00000 n 0000445212 00000 n 0000446402 00000 n 0000447763 00000 n 0000449041 00000 n 0000449761 00000 n 0000450530 00000 n 0000451240 00000 n 0000451993 00000 n 0000452680 00000 n 0000453302 00000 n 0000454042 00000 n 0000454780 00000 n 0000455453 00000 n 0000455591 00000 n 0000455876 00000 n 0000456150 00000 n 0000456475 00000 n 0000456795 00000 n 0000457054 00000 n 0000457354 00000 n 0000457618 00000 n 0000457851 00000 n 0000458108 00000 n 0000458391 00000 n 0000458659 00000 n 0000458901 00000 n 0000459148 00000 n 0000459407 00000 n 0000459464 00000 n 0000459521 00000 n 0000459577 00000 n 0000459634 00000 n 0000459690 00000 n 0000459747 00000 n 0000459803 00000 n 0000459860 00000 n 0000459917 00000 n 0000459974 00000 n 0000460031 00000 n 0000460087 00000 n 0000460144 00000 n 0000460201 00000 n 0000460258 00000 n 0000460315 00000 n 0000460372 00000 n 0000460429 00000 n 0000460486 00000 n 0000460540 00000 n 0000460598 00000 n 0000460654 00000 n 0000460711 00000 n 0000460768 00000 n 0000460825 00000 n 0000460882 00000 n 0000460939 00000 n 0000460996 00000 n 0000461053 00000 n 0000461110 00000 n 0000461167 00000 n 0000461224 00000 n 0000461281 00000 n 0000461336 00000 n 0000461393 00000 n 0000461450 00000 n 0000461507 00000 n 0000461564 00000 n 0000461621 00000 n 0000461678 00000 n 0000461736 00000 n 0000461794 00000 n 0000461852 00000 n 0000461909 00000 n 0000461967 00000 n 0000462024 00000 n 0000462081 00000 n 0000462138 00000 n 0000462195 00000 n 0000462252 00000 n 0000462309 00000 n 0000462366 00000 n 0000462423 00000 n 0000462481 00000 n 0000462538 00000 n 0000462595 00000 n 0000462650 00000 n 0000462707 00000 n 0000462763 00000 n 0000462819 00000 n 0000462876 00000 n 0000462931 00000 n 0000462988 00000 n 0000463045 00000 n 0000463103 00000 n 0000463161 00000 n 0000463216 00000 n 0000463273 00000 n 0000463330 00000 n 0000463387 00000 n 0000463443 00000 n 0000463499 00000 n 0000463556 00000 n 0000463613 00000 n 0000463670 00000 n 0000463725 00000 n 0000463782 00000 n 0000463839 00000 n 0000463896 00000 n 0000463951 00000 n 0000464008 00000 n 0000464065 00000 n 0000464122 00000 n 0000464179 00000 n 0000464235 00000 n 0000464292 00000 n 0000464349 00000 n 0000464405 00000 n 0000464462 00000 n 0000464519 00000 n 0000464576 00000 n 0000464633 00000 n 0000464690 00000 n 0000464747 00000 n 0000464804 00000 n 0000464861 00000 n 0000464918 00000 n 0000464975 00000 n 0000465032 00000 n 0000465089 00000 n 0000465144 00000 n 0000465201 00000 n 0000465258 00000 n 0000465315 00000 n 0000465370 00000 n 0000465427 00000 n 0000465484 00000 n 0000465541 00000 n 0000465598 00000 n 0000465653 00000 n 0000465710 00000 n 0000465767 00000 n 0000465824 00000 n 0000465881 00000 n 0000465937 00000 n 0000465994 00000 n 0000466048 00000 n 0000466103 00000 n 0000466160 00000 n 0000466217 00000 n 0000466274 00000 n 0000466331 00000 n 0000466386 00000 n 0000466443 00000 n 0000466500 00000 n 0000466557 00000 n 0000466613 00000 n 0000466670 00000 n 0000466727 00000 n 0000466784 00000 n 0000466841 00000 n 0000466898 00000 n 0000466955 00000 n 0000467012 00000 n 0000467069 00000 n 0000467127 00000 n 0000467183 00000 n 0000467240 00000 n 0000467297 00000 n 0000467354 00000 n 0000467411 00000 n 0000467468 00000 н 0000467525 00000 n 0000467582 00000 n 0000467639 00000 n 0000467696 00000 n 0000467753 00000 n 0000467810 00000 n 0000467867 00000 n 0000467924 00000 n 0000467981 00000 n 0000468038 00000 n 0000468095 00000 n 0000468152 00000 n 0000468209 00000 n 0000468266 00000 n 0000468323 00000 n 0000468380 00000 n 0000468437 00000 n 0000468494 00000 n 0000468551 00000 n 0000468608 00000 n 0000468665 00000 n 0000468720 00000 n 0000468777 00000 n 0000468834 00000 n 0000468891 00000 n 0000468948 00000 n 0000469005 00000 n 0000469062 00000 n 0000469119 00000 n 0000469176 00000 n 0000469233 00000 n 0000469290 00000 n 0000469347 00000 n 0000469404 00000 n 0000469461 00000 n 0000469518 00000 n 0000469574 00000 n 0000469631 00000 n 0000469688 00000 n 0000469745 00000 n 0000469802 00000 n 0000469859 00000 n 0000469916 00000 n 0000469973 00000 n 0000470030 00000 n 0000470087 00000 n 0000470144 00000 n 0000470201 00000 n 0000470258 00000 n 0000470315 00000 n 0000470372 00000 n 0000470429 00000 n 0000470486 00000 n 0000470543 00000 n 0000470600 00000 n 0000470658 00000 n 0000470714 00000 n 0000470771 00000 n 0000470828 00000 n 0000470885 00000 n 0000470942 00000 n 0000470999 00000 n 0000471056 00000 n 0000471113 00000 n 0000471170 00000 n 0000471227 00000 n 0000471284 00000 n 0000471341 00000 n 0000471398 00000 n 0000471455 00000 n 0000471512 00000 n 0000471569 00000 n 0000471626 00000 n 0000471681 00000 n 0000471738 00000 n 0000471795 00000 n 0000471852 00000 n 0000471909 00000 n 0000471965 00000 n 0000472022 00000 n 0000472079 00000 n 0000472136 00000 n 0000472193 00000 n 0000472250 00000 n 0000472307 00000 n 0000472365 00000 n 0000472422 00000 n 0000472479 00000 n 0000472536 00000 n 0000472593 00000 n 0000472649 00000 n 0000472706 00000 n 0000472763 00000 n 0000472820 00000 n 0000472877 00000 n 0000472934 00000 n 0000472991 00000 n 0000473048 00000 n 0000473105 00000 n 0000473162 00000 n 0000473219 00000 n 0000473274 00000 n 0000473331 00000 n 0000473388 00000 n 0000473445 00000 n 0000473502 00000 n 0000473559 00000 n 0000473614 00000 n 0000473671 00000 n 0000473728 00000 n 0000473786 00000 n 0000473843 00000 n 0000473900 00000 n 0000473957 00000 n 0000474014 00000 n 0000474071 00000 n 0000474128 00000 n 0000474185 00000 n 0000474242 00000 n 0000474298 00000 n 0000474355 00000 n 0000474412 00000 n 0000474469 00000 n 0000474526 00000 n 0000474583 00000 n 0000474640 00000 n 0000474696 00000 n 0000474753 00000 n 0000474810 00000 n 0000474867 00000 n 0000474924 00000 n 0000474980 00000 n 0000475038 00000 n 0000475095 00000 n 0000475152 00000 n 0000475209 00000 n 0000475266 00000 n 0000475323 00000 n 0000475380 00000 n 0000475437 00000 n 0000475494 00000 n 0000475551 00000 n 0000475609 00000 n 0000475664 00000 n 0000475721 00000 n 0000475778 00000 n 0000475833 00000 n 0000475890 00000 n 0000475947 00000 n 0000476004 00000 n 0000476061 00000 n 0000476118 00000 n 0000476173 00000 n 0000476229 00000 n 0000476286 00000 n 0000476343 00000 n 0000476400 00000 n 0000476457 00000 n 0000476514 00000 n 0000476571 00000 n 0000476628 00000 n 0000476685 00000 n 0000476742 00000 n 0000476799 00000 n 0000476856 00000 n 0000476913 00000 n 0000476970 00000 n 0000477027 00000 n 0000477084 00000 n 0000477139 00000 n 0000477196 00000 n 0000477253 00000 n 0000477310 00000 n 0000477364 00000 n 0000477420 00000 n 0000477476 00000 n 0000477533 00000 n 0000477590 00000 n 0000477647 00000 n 0000477704 00000 n 0000477761 00000 н 0000477818 00000 n 0000477875 00000 н 0000477930 00000 n 0000477987 00000 n 0000478044 00000 n 0000478101 00000 n 0000478158 00000 n 0000478215 00000 n 0000478272 00000 n 0000478329 00000 n 0000478386 00000 n 0000478443 00000 n 0000478500 00000 n 0000478557 00000 n 0000478614 00000 n 0000478672 00000 n 0000478729 00000 n 0000478786 00000 n 0000478843 00000 n 0000478900 00000 n 0000478957 00000 n 0000479014 00000 n 0000479071 00000 n 0000479128 00000 n 0000479184 00000 n 0000479241 00000 n 0000479298 00000 n 0000479353 00000 n 0000479409 00000 n 0000479466 00000 n 0000479521 00000 n 0000479578 00000 n 0000479635 00000 n 0000479692 00000 n 0000479749 00000 n 0000479806 00000 n 0000479863 00000 n 0000479921 00000 n 0000479978 00000 n 0000480033 00000 n 0000480087 00000 n 0000480143 00000 n 0000480200 00000 n 0000480257 00000 n 0000480314 00000 n 0000480371 00000 n 0000480426 00000 n 0000480481 00000 n 0000480536 00000 n 0000480593 00000 n 0000480648 00000 n 0000480705 00000 n 0000480762 00000 n 0000480819 00000 n 0000480874 00000 n 0000480931 00000 n 0000480988 00000 n 0000481045 00000 n 0000481102 00000 n 0000481159 00000 n 0000481216 00000 n 0000481273 00000 n 0000481330 00000 n 0000481384 00000 n 0000481441 00000 n 0000481495 00000 n 0000481553 00000 n 0000481610 00000 n 0000481667 00000 n 0000481724 00000 n 0000481781 00000 n 0000481835 00000 n 0000481892 00000 n 0000481948 00000 n 0000482004 00000 n 0000482060 00000 n 0000482117 00000 n 0000482174 00000 n 0000482231 00000 n 0000482288 00000 n 0000482345 00000 n 0000482402 00000 n 0000482457 00000 n 0000482514 00000 n 0000482571 00000 n 0000482628 00000 n 0000482685 00000 n 0000482741 00000 n 0000482798 00000 n 0000482855 00000 n 0000482909 00000 n 0000482964 00000 n 0000483021 00000 n 0000483076 00000 n 0000483133 00000 n 0000483188 00000 n 0000483245 00000 n 0000483302 00000 n 0000483360 00000 n 0000483417 00000 n 0000483474 00000 n 0000483531 00000 n 0000483588 00000 n 0000483644 00000 n 0000483701 00000 n 0000483756 00000 n 0000483813 00000 n 0000483870 00000 n 0000483927 00000 n 0000483984 00000 n 0000484041 00000 n 0000484098 00000 n 0000484155 00000 n 0000484212 00000 n 0000484269 00000 n 0000484326 00000 n 0000484383 00000 n 0000484440 00000 n 0000484497 00000 n 0000484554 00000 n 0000484610 00000 n 0000484667 00000 n 0000484722 00000 n 0000484779 00000 n 0000484836 00000 n 0000484893 00000 n 0000484950 00000 n 0000485007 00000 n 0000485064 00000 n 0000485121 00000 n 0000485178 00000 n 0000485234 00000 n 0000485291 00000 n 0000485348 00000 n 0000485405 00000 n 0000485462 00000 n 0000485517 00000 n 0000485574 00000 n 0000485631 00000 n 0000485688 00000 n 0000485745 00000 n 0000485802 00000 n 0000485859 00000 n 0000485916 00000 n 0000485973 00000 n 0000486029 00000 n 0000486086 00000 n 0000486143 00000 n 0000486200 00000 n 0000486257 00000 n 0000486312 00000 n 0000486369 00000 n 0000486426 00000 n 0000486481 00000 n 0000486538 00000 n 0000486595 00000 н 0000486652 00000 n 0000486709 00000 н 0000486766 00000 n 0000486823 00000 n 0000486880 00000 n 0000486937 00000 n 0000486994 00000 n 0000487051 00000 n 0000487108 00000 n 0000487165 00000 n 0000487222 00000 n 0000487279 00000 n 0000487333 00000 n 0000487390 00000 n 0000487445 00000 n 0000487502 00000 n 0000487559 00000 n 0000487616 00000 n 0000487673 00000 n 0000487730 00000 n 0000487787 00000 n 0000487843 00000 n 0000487900 00000 n 0000487955 00000 n 0000488012 00000 n 0000488067 00000 n 0000488123 00000 n 0000488180 00000 n 0000488237 00000 n 0000488294 00000 n 0000488351 00000 n 0000488408 00000 n 0000488465 00000 n 0000488522 00000 n 0000488577 00000 n 0000488634 00000 n 0000488691 00000 n 0000488748 00000 n 0000488805 00000 n 0000488862 00000 n 0000488919 00000 n 0000488976 00000 n 0000489034 00000 n 0000489088 00000 n 0000489144 00000 n 0000489201 00000 n 0000489258 00000 n 0000489315 00000 n 0000489370 00000 n 0000489427 00000 n 0000489484 00000 n 0000489539 00000 n 0000489596 00000 n 0000489653 00000 n 0000489710 00000 n 0000489766 00000 n 0000489823 00000 n 0000489879 00000 n 0000489936 00000 n 0000489993 00000 n 00004
- 00000 n
00004
- 00000 n
00004 00000 n
00004
00000 n 00004 00000 n 00004
00000 n 0000400000 n 00004
00000 n 00004 00000 n 0000400000 n 00004
00000 n 00004
00000 n 00004 00000 n 00004- 00000 n 00004
- 00000 n
00004 00000 n
00004 00000 n
00004
- 00000 n 00004
- 00000 n 00004
00000 n 00004- 00000 n 00004 00000 n 00004 00000 n 00004
00000 n 00004 00000 n 0000400000 n 00004
00000 n 00004- 00000 n
00004
00000 n 00004
00000 n 0000491983 00000 n 0000492040 00000 n 0000492097 00000 n 0000492152 00000 n 0000492209 00000 n 0000492266 00000 n 0000492323 00000 n 0000492380 00000 n 0000492437 00000 n 0000492494 00000 n 0000492551 00000 n 0000492608 00000 n 0000492665 00000 n 0000492722 00000 n 0000492779 00000 n 0000492836 00000 n 0000492893 00000 n 0000492950 00000 n 0000493007 00000 n 0000493064 00000 n 0000493121 00000 n 0000493178 00000 n 0000493233 00000 n 0000493290 00000 n 0000493347 00000 n 0000493404 00000 n 0000493461 00000 n 0000493518 00000 n 0000493575 00000 n 0000493632 00000 n 0000493689 00000 n 0000493746 00000 n 0000493803 00000 n 0000493860 00000 n 0000493917 00000 n 0000493974 00000 n 0000494031 00000 n 0000494088 00000 n 0000494145 00000 n 0000494202 00000 n 0000494259 00000 n 0000494315 00000 n 0000494372 00000 n 0000494429 00000 n 0000494486 00000 n 0000494543 00000 n 0000494600 00000 n 0000494657 00000 n 0000494715 00000 n 0000494772 00000 n 0000494829 00000 n 0000494886 00000 n 0000494943 00000 n 0000495000 00000 n 0000495057 00000 n 0000495114 00000 n 0000495171 00000 n 0000495226 00000 n 0000495283 00000 n 0000495340 00000 n 0000495397 00000 n 0000495454 00000 n 0000495511 00000 n 0000495568 00000 n 0000495625 00000 n 0000495682 00000 n 0000495740 00000 н 0000495797 00000 n 0000495854 00000 n 0000495911 00000 n 0000495968 00000 n 0000496025 00000 n 0000496083 00000 n 0000496140 00000 n 0000496197 00000 n 0000496254 00000 n 0000496312 00000 n 0000496369 00000 n 0000496426 00000 n 0000496483 00000 n 0000496540 00000 n 0000496597 00000 n 0000496654 00000 n 0000496712 00000 n 0000496768 00000 n 0000496826 00000 n 0000496883 00000 n 0000496940 00000 n 0000496997 00000 n 0000497051 00000 n 0000497108 00000 n 0000497163 00000 n 0000497218 00000 n 0000497275 00000 n 0000497332 00000 n 0000497389 00000 n 0000497446 00000 n 0000497503 00000 n 0000497560 00000 n 0000497617 00000 n 0000497674 00000 n 0000497730 00000 n 0000497785 00000 n 0000497842 00000 n 0000497898 00000 n 0000497955 00000 n 0000498011 00000 n 0000498068 00000 n 0000498125 00000 n 0000498182 00000 n 0000498239 00000 n 0000498296 00000 n 0000498353 00000 n 0000498410 00000 n 0000498466 00000 n 0000498523 00000 n 0000498580 00000 n 0000498637 00000 n 0000498693 00000 n 0000498748 00000 n 0000498805 00000 n 0000498862 00000 n 0000498919 00000 n 0000498976 00000 n 0000499033 00000 n 0000499090 00000 n 0000499147 00000 n 0000499204 00000 n 0000499261 00000 n 0000499318 00000 n 0000499375 00000 n 0000499432 00000 n 0000499489 00000 n 0000499546 00000 n 0000499603 00000 n 0000499660 00000 n 0000499717 00000 n 0000499774 00000 n 0000499830 00000 n 0000499887 00000 n 0000499944 00000 n 0000500001 00000 n 0000500058 00000 n 0000500115 00000 n 0000500172 00000 n 0000500229 00000 n 0000500286 00000 n 0000500344 00000 n 0000500401 00000 n 0000500458 00000 n 0000500515 00000 n 0000500572 00000 n 0000500629 00000 n 0000500686 00000 n 0000500743 00000 n 0000500800 00000 n 0000500856 00000 n 0000500912 00000 n 0000500969 00000 n 0000501026 00000 n 0000501083 00000 n 0000501140 00000 n 0000501197 00000 n 0000501254 00000 n 0000501310 00000 n 0000501367 00000 n 0000501422 00000 n 0000501479 00000 n 0000501536 00000 n 0000501592 00000 n 0000501648 00000 n 0000501705 00000 n 0000501762 00000 n 0000501819 00000 n 0000501876 00000 n 0000501933 00000 n 0000501990 00000 n 0000502047 00000 n 0000502104 00000 n 0000502161 00000 n 0000502218 00000 n 0000502275 00000 n 0000502332 00000 n 0000502389 00000 n 0000502446 00000 n 0000502501 00000 n 0000502558 00000 n 0000502615 00000 n 0000502672 00000 n 0000502729 00000 n 0000502786 00000 n 0000502843 00000 n 0000502900 00000 n 0000502957 00000 n 0000503014 00000 n 0000503068 00000 n 0000503125 00000 n 0000503181 00000 n 0000503238 00000 n 0000503295 00000 n 0000503352 00000 n 0000503409 00000 n 0000503466 00000 n 0000503523 00000 n 0000503580 00000 n 0000503637 00000 n 0000503694 00000 n 0000503751 00000 n 0000503806 00000 n 0000503863 00000 n 0000503920 00000 n 0000503977 00000 n 0000504034 00000 n 0000504091 00000 n 0000504148 00000 n 0000504205 00000 n 0000504262 00000 n 0000504319 00000 n 0000504376 00000 n 0000504433 00000 n 0000504490 00000 n 0000504545 00000 n 0000504602 00000 n 0000504659 00000 n 0000504717 00000 n 0000504774 00000 n 0000504831 00000 n 0000504888 00000 n 0000504945 00000 n 0000505002 00000 n 0000505059 00000 n 0000505114 00000 n 0000505171 00000 n 0000505226 00000 n 0000505283 00000 n 0000505339 00000 n 0000505396 00000 n 0000505453 00000 n 0000505510 00000 n 0000505567 00000 n 0000505623 00000 n 0000505679 00000 n 0000505736 00000 n 0000505793 00000 n 0000505850 00000 n 0000505907 00000 n 0000505964 00000 n 0000506021 00000 n 0000506078 00000 n 0000506135 00000 n 0000506192 00000 n 0000506249 00000 n 0000506306 00000 n 0000506363 00000 n 0000506419 00000 n 0000506476 00000 n 0000506534 00000 n 0000506591 00000 n 0000506648 00000 n 0000506705 00000 n 0000506760 00000 n 0000506818 00000 n 0000506873 00000 n 0000506930 00000 n 0000506987 00000 n 0000507044 00000 n 0000507101 00000 n 0000507158 00000 n 0000507215 00000 n 0000507272 00000 n 0000507329 00000 n 0000507386 00000 n 0000507443 00000 n 0000507500 00000 n 0000507557 00000 n 0000507614 00000 n 0000507671 00000 n 0000507728 00000 n 0000507784 00000 n 0000507840 00000 n 0000507897 00000 n 0000507952 00000 n 0000508009 00000 n 0000508064 00000 n 0000508121 00000 n 0000508178 00000 n 0000508235 00000 n 0000508292 00000 n 0000508349 00000 n 0000508405 00000 n 0000508462 00000 n 0000508519 00000 n 0000508575 00000 n 0000508631 00000 n 0000508688 00000 n 0000508745 00000 n 0000508802 00000 n 0000508859 00000 n 0000508916 00000 n 0000508973 00000 n 0000509030 00000 n 0000509087 00000 n 0000509144 00000 n 0000509201 00000 n 0000509258 00000 n 0000509313 00000 n 0000509371 00000 n 0000509427 00000 n 0000509484 00000 n 0000509541 00000 n 0000509598 00000 n 0000509655 00000 n 0000509712 00000 n 0000509767 00000 n 0000509824 00000 n 0000509881 00000 n 0000509938 00000 n 0000509995 00000 n 0000510052 00000 n 0000510109 00000 n 0000510166 00000 n 0000510223 00000 n 0000510280 00000 n 0000510337 00000 n 0000510394 00000 n 0000510450 00000 n 0000510507 00000 n 0000510564 00000 n 0000510621 00000 n 0000510678 00000 n 0000510735 00000 n 0000510792 00000 n 0000510849 00000 n 0000510905 00000 n 0000510962 00000 n 0000511019 00000 n 0000511076 00000 n 0000511133 00000 n 0000511190 00000 n 0000511247 00000 n 0000511304 00000 n 0000511361 00000 n 0000511418 00000 n 0000511475 00000 n 0000511532 00000 n 0000511588 00000 n 0000511645 00000 n 0000511702 00000 n 0000511757 00000 n 0000511814 00000 n 0000511871 00000 n 0000511928 00000 n 0000511985 00000 n 0000512042 00000 n 0000512099 00000 n 0000512156 00000 n 0000512213 00000 n 0000512270 00000 n 0000512325 00000 n 0000512382 00000 n 0000512437 00000 n 0000512494 00000 n 0000512549 00000 n 0000512605 00000 n 0000512662 00000 n 0000512719 00000 n 0000512776 00000 n 0000512833 00000 n 0000512890 00000 n 0000512947 00000 n 0000513003 00000 n 0000513058 00000 n 0000513115 00000 n 0000513172 00000 n 0000513229 00000 n 0000513286 00000 n 0000513343 00000 n 0000513400 00000 n 0000513457 00000 n 0000513514 00000 n 0000513571 00000 n 0000513628 00000 n 0000513685 00000 n 0000513742 00000 n 0000513799 00000 n 0000513856 00000 n 0000513913 00000 n 0000513969 00000 n 0000514026 00000 n 0000514081 00000 n 0000514137 00000 n 0000514192 00000 n 0000514249 00000 n 0000514305 00000 n 0000514362 00000 n 0000514419 00000 n 0000514477 00000 n 0000514534 00000 n 0000514591 00000 n 0000514646 00000 n 0000514703 00000 n 0000514760 00000 n 0000514817 00000 n 0000514874 00000 n 0000514931 00000 n 0000514988 00000 n 0000515045 00000 n 0000515102 00000 n 0000515160 00000 n 0000515215 00000 n 0000515272 00000 n 0000515329 00000 n 0000515385 00000 n 0000515442 00000 n 0000515498 00000 n 0000515555 00000 n 0000515612 00000 н 0000515669 00000 n 0000515725 00000 n 0000515782 00000 n 0000515839 00000 n 0000515896 00000 n 0000515953 00000 n 0000516010 00000 n 0000516067 00000 n 0000516124 00000 n 0000516181 00000 n 0000516237 00000 n 0000516294 00000 n 0000516351 00000 n 0000516408 00000 n 0000516464 00000 n 0000516521 00000 n 0000516576 00000 n 0000516633 00000 n 0000516690 00000 n 0000516747 00000 n 0000516804 00000 n 0000516861 00000 n 0000516918 00000 n 0000516975 00000 n 0000517032 00000 n 0000517089 00000 н 0000517145 00000 n 0000517202 00000 n 0000517259 00000 n 0000517316 00000 n 0000517373 00000 n 0000517430 00000 n 0000517487 00000 n 0000517545 00000 n 0000517602 00000 n 0000517659 00000 n 0000517716 00000 n 0000517773 00000 n 0000517830 00000 n 0000517887 00000 n 0000517944 00000 n 0000518001 00000 n 0000518058 00000 n 0000518115 00000 n 0000518172 00000 n 0000518227 00000 n 0000518284 00000 n 0000518341 00000 n 0000518399 00000 n 0000518456 00000 н 0000518513 00000 n 0000518570 00000 n 0000518627 00000 n 0000518684 00000 n 0000518739 00000 n 0000518796 00000 n 0000518853 00000 n 0000518910 00000 n 0000518967 00000 n 0000519024 00000 n 0000519081 00000 n 0000519138 00000 n 0000519195 00000 n 0000519252 00000 n 0000519309 00000 n 0000519366 00000 n 0000519421 00000 n 0000519478 00000 n 0000519535 00000 n 0000519592 00000 n 0000519649 00000 n 0000519706 00000 n 0000519763 00000 n 0000519819 00000 n 0000519876 00000 n 0000519933 00000 n 0000519990 00000 n 0000520047 00000 n 0000520104 00000 n 0000520161 00000 n 0000520217 00000 n 0000520274 00000 n 0000520331 00000 n 0000520388 00000 n 0000520443 00000 n 0000520500 00000 n 0000520556 00000 n 0000520613 00000 n 0000520670 00000 n 0000520727 00000 n 0000520784 00000 n 0000520841 00000 n 0000520899 00000 n 0000520956 00000 n 0000521011 00000 n 0000521068 00000 n 0000521125 00000 n 0000521182 00000 n 0000521239 00000 n 0000521296 00000 n 0000521353 00000 n 0000521409 00000 n 0000521466 00000 n 0000521523 00000 n 0000521581 00000 n 0000521638 00000 n 0000521695 00000 n 0000521752 00000 n 0000521809 00000 n 0000521865 00000 n 0000521922 00000 n 0000521979 00000 n 0000522036 00000 н 0000522093 00000 n 0000522150 00000 n 0000522206 00000 n 0000522263 00000 n 0000522320 00000 n 0000522377 00000 n 0000522434 00000 n 0000522491 00000 n 0000522547 00000 n 0000522604 00000 n 0000522661 00000 n 0000522718 00000 n 0000522775 00000 n 0000522832 00000 n 0000522887 00000 n 0000522943 00000 n 0000523000 00000 n 0000523057 00000 n 0000523111 00000 n 0000523168 00000 n 0000523224 00000 n 0000523281 00000 n 0000523338 00000 n 0000523394 00000 n 0000523451 00000 n 0000523506 00000 n 0000523563 00000 n 0000523620 00000 n 0000523677 00000 n 0000523734 00000 n 0000523791 00000 n 0000523848 00000 n 0000523905 00000 n 0000523962 00000 n 0000524019 00000 n 0000524076 00000 n 0000524133 00000 n 0000524190 00000 n 0000524244 00000 n 0000524301 00000 n 0000524358 00000 n 0000524415 00000 n 0000524472 00000 n 0000524529 00000 n 0000524584 00000 n 0000524641 00000 n 0000524696 00000 n 0000524753 00000 n 0000524809 00000 n 0000524866 00000 n 0000524923 00000 n 0000524980 00000 n 0000525036 00000 n 0000525091 00000 n 0000525148 00000 n 0000525205 00000 n 0000525262 00000 n 0000525319 00000 n 0000525376 00000 n 0000525432 00000 n 0000525489 00000 n 0000525546 00000 n 0000525603 00000 n 0000525660 00000 n 0000525717 00000 н 0000525774 00000 n 0000525831 00000 н 0000525888 00000 n 0000525945 00000 n 0000526002 00000 n 0000526056 00000 n 0000526113 00000 n 0000526170 00000 n 0000526227 00000 n 0000526284 00000 n 0000526341 00000 n 0000526396 00000 n 0000526453 00000 n 0000526510 00000 n 0000526567 00000 n 0000526624 00000 n 0000526681 00000 n 0000526737 00000 n 0000526794 00000 n 0000526851 00000 n 0000526908 00000 n 0000526965 00000 n 0000527020 00000 n 0000527077 00000 n 0000527134 00000 n 0000527191 00000 n 0000527248 00000 n 0000527305 00000 n 0000527362 00000 n 0000527419 00000 n 0000527477 00000 n 0000527534 00000 n 0000527591 00000 n 0000527648 00000 n 0000527705 00000 n 0000527762 00000 n 0000527818 00000 n 0000527875 00000 n 0000527932 00000 n 0000527990 00000 n 0000528047 00000 n 0000528104 00000 n 0000528161 00000 n 0000528217 00000 n 0000528274 00000 n 0000528331 00000 n 0000528387 00000 n 0000528444 00000 n 0000528501 00000 n 0000528558 00000 n 0000528615 00000 n 0000528672 00000 n 0000528727 00000 n 0000528785 00000 n 0000528842 00000 n 0000528899 00000 n 0000528956 00000 n 0000529011 00000 n 0000529068 00000 n 0000529125 00000 n 0000529182 00000 n 0000529239 00000 n 0000529296 00000 n 0000529353 00000 n 0000529410 00000 n 0000529467 00000 n 0000529524 00000 n 0000529581 00000 n 0000529637 00000 n 0000529694 00000 n 0000529751 00000 n 0000529808 00000 n 0000529865 00000 n 0000529922 00000 n 0000529979 00000 n 0000530036 00000 n 0000530092 00000 n 0000530150 00000 n 0000530207 00000 n 0000530264 00000 n 0000530321 00000 n 0000530376 00000 n 0000530433 00000 n 0000530490 00000 n 0000530547 00000 n 0000530604 00000 n 0000530661 00000 n 0000530717 00000 n 0000530773 00000 n 0000530830 00000 n 0000530887 00000 n 0000530944 00000 n 0000531001 00000 n 0000531058 00000 n 0000531115 00000 n 0000531172 00000 n 0000531229 00000 n 0000531286 00000 n 0000531343 00000 n 0000531400 00000 n 0000531457 00000 n 0000531512 00000 n 0000531569 00000 n 0000531626 00000 n 0000531683 00000 n 0000531740 00000 n 0000531797 00000 n 0000531854 00000 n 0000531911 00000 n 0000531968 00000 n 0000532025 00000 n 0000532082 00000 n 0000532137 00000 n 0000532192 00000 n 0000532249 00000 n 0000532306 00000 n 0000532363 00000 n 0000532421 00000 n 0000532479 00000 n 0000532537 00000 n 0000532593 00000 n 0000532650 00000 n 0000532704 00000 n 0000532761 00000 n 0000532818 00000 n 0000532875 00000 n 0000532932 00000 n 0000532989 00000 n 0000533046 00000 n 0000533103 00000 n 0000533160 00000 n 0000533217 00000 n 0000533274 00000 n 0000533331 00000 n 0000533386 00000 n 0000533443 00000 n 0000533500 00000 n 0000533557 00000 n 0000533614 00000 n 0000533672 00000 n 0000533729 00000 n 0000533786 00000 n 0000533843 00000 n 0000533900 00000 n 0000533957 00000 n 0000534014 00000 n 0000534071 00000 n 0000534128 00000 n 0000534185 00000 n 0000534242 00000 n 0000534297 00000 n 0000534354 00000 н 0000534411 00000 n 0000534468 00000 n 0000534525 00000 n 0000534583 00000 n 0000534638 00000 n 0000534695 00000 n 0000534752 00000 n 0000534809 00000 n 0000534866 00000 n 0000534922 00000 n 0000534979 00000 n 0000535034 00000 n 0000535091 00000 n 0000535148 00000 n 0000535205 00000 n 0000535262 00000 n 0000535319 00000 n 0000535376 00000 n 0000535433 00000 n 0000535490 00000 n 0000535547 00000 n 0000535603 00000 n 0000535658 00000 n 0000535715 00000 n 0000535770 00000 n 0000535827 00000 n 0000535884 00000 n 0000535942 00000 n 0000535999 00000 n 0000536056 00000 n 0000536114 00000 n 0000536171 00000 n 0000536228 00000 n 0000536285 00000 n 0000536342 00000 n 0000536399 00000 n 0000536456 00000 n 0000536513 00000 n 0000536570 00000 n 0000536627 00000 n 0000536684 00000 n 0000536741 00000 n 0000536798 00000 n 0000536855 00000 n 0000536911 00000 n 0000536967 00000 n 0000537022 00000 n 0000537080 00000 n 0000537137 00000 n 0000537194 00000 n 0000537251 00000 n 0000537308 00000 n 0000537365 00000 n 0000537422 00000 n 0000537479 00000 n 0000537535 00000 n 0000537592 00000 n 0000537649 00000 n 0000537706 00000 н 0000537762 00000 n 0000537819 00000 n 0000537876 00000 n 0000537933 00000 n 0000537989 00000 n 0000538046 00000 n 0000538103 00000 n 0000538159 00000 n 0000538216 00000 n 0000538273 00000 n 0000538330 00000 n 0000538386 00000 n 0000538443 00000 n 0000538500 00000 n 0000538558 00000 n 0000538615 00000 n 0000538672 00000 n 0000538729 00000 n 0000538784 00000 n 0000538841 00000 n 0000538896 00000 n 0000538951 00000 n 0000539008 00000 n 0000539065 00000 n 0000539122 00000 n 0000539179 00000 n 0000539234 00000 n 0000539290 00000 n 0000539347 00000 n 0000539404 00000 n 0000539461 00000 n 0000539518 00000 n 0000539575 00000 n 0000539632 00000 n 0000539689 00000 n 0000539746 00000 n 0000539802 00000 n 0000539857 00000 n 0000539914 00000 n 0000539972 00000 n 0000540029 00000 n 0000540086 00000 n 0000540143 00000 n 0000540200 00000 n 0000540256 00000 n 0000540313 00000 n 0000540368 00000 n 0000540425 00000 n 0000540482 00000 n 0000540539 00000 n 0000540596 00000 n 0000540653 00000 n 0000540710 00000 n 0000540766 00000 n 0000540821 00000 n 0000540878 00000 n 0000540935 00000 n 0000540990 00000 n 0000541047 00000 n 0000541104 00000 n 0000541161 00000 n 0000541216 00000 n 0000541273 00000 n 0000541329 00000 n 0000541386 00000 n 0000541443 00000 n 0000541500 00000 n 0000541557 00000 n 0000541614 00000 n 0000541671 00000 n 0000541726 00000 n 0000541784 00000 n 0000541841 00000 n 0000541898 00000 n 0000541955 00000 n 0000542012 00000 n 0000542069 00000 n 0000542126 00000 n 0000542183 00000 n 0000542239 00000 n 0000542296 00000 n 0000542353 00000 n 0000542410 00000 n 0000542467 00000 n 0000542523 00000 n 0000542580 00000 n 0000542636 00000 n 0000542693 00000 n 0000542750 00000 n 0000542805 00000 n 0000542862 00000 n 0000542919 00000 n 0000542974 00000 n 0000543031 00000 n 0000543086 00000 n 0000543142 00000 n 0000543199 00000 n 0000543254 00000 n 0000543311 00000 n 0000543367 00000 n 0000543424 00000 n 0000543481 00000 n 0000543536 00000 n 0000543593 00000 n 0000543650 00000 n 0000543707 00000 n 0000543764 00000 n 0000543821 00000 n 0000543878 00000 n 0000543935 00000 n 0000543992 00000 n 0000544049 00000 n 0000544106 00000 n 0000544163 00000 n 0000544220 00000 n 0000544277 00000 n 0000544334 00000 n 0000544391 00000 n 0000544448 00000 n 0000544505 00000 n 0000544562 00000 n 0000544619 00000 н 0000544676 00000 n 0000544733 00000 n 0000544788 00000 n 0000544845 00000 n 0000544902 00000 n 0000544959 00000 n 0000545016 00000 n 0000545073 00000 n 0000545129 00000 n 0000545186 00000 n 0000545243 00000 n 0000545300 00000 n 0000545357 00000 n 0000545414 00000 n 0000545471 00000 n 0000545528 00000 n 0000545585 00000 n 0000545642 00000 n 0000545699 00000 n 0000545756 00000 n 0000545813 00000 n 0000545870 00000 n 0000545927 00000 n 0000545984 00000 n 0000546041 00000 n 0000546098 00000 n 0000546155 00000 n 0000546212 00000 n 0000546269 00000 n 0000546326 00000 n 0000546383 00000 n 0000546440 00000 n 0000546497 00000 n 0000546555 00000 n 0000546612 00000 n 0000546669 00000 n 0000546724 00000 n 0000546781 00000 n 0000546839 00000 n 0000546895 00000 n 0000546952 00000 n 0000547009 00000 n 0000547066 00000 n 0000547123 00000 n 0000547180 00000 n 0000547237 00000 n 0000547294 00000 n 0000547351 00000 n 0000547408 00000 n 0000547463 00000 n 0000547518 00000 n 0000547575 00000 n 0000547632 00000 n 0000547689 00000 n 0000547746 00000 n 0000547803 00000 n 0000547860 00000 n 0000547917 00000 n 0000547973 00000 n 0000548030 00000 n 0000548087 00000 n 0000548144 00000 n 0000548201 00000 n 0000548258 00000 н 0000548313 00000 n 0000548370 00000 n 0000548425 00000 n 0000548482 00000 n 0000548539 00000 n 0000548596 00000 n 0000548653 00000 n 0000548710 00000 n 0000548766 00000 n 0000548822 00000 n 0000548879 00000 n 0000548937 00000 n 0000548994 00000 n 0000549051 00000 n 0000549107 00000 n 0000549164 00000 n 0000549221 00000 n 0000549278 00000 n 0000549335 00000 n 0000549392 00000 n 0000549449 00000 n 0000549506 00000 n 0000549564 00000 n 0000549621 00000 n 0000549678 00000 n 0000549735 00000 n 0000549792 00000 n 0000549848 00000 n 0000549905 00000 n 0000549962 00000 n 0000550019 00000 n 0000550077 00000 n 0000550134 00000 n 0000550191 00000 n 0000550246 00000 n 0000550303 00000 n 0000550360 00000 n 0000550416 00000 n 0000550474 00000 n 0000550532 00000 n 0000550590 00000 n 0000550646 00000 n 0000550704 00000 n 0000550762 00000 n 0000550820 00000 n 0000550878 00000 n 0000550936 00000 n 0000550994 00000 n 0000551052 00000 n 0000551108 00000 n 0000551166 00000 n 0000551224 00000 n 0000551282 00000 n 0000551340 00000 n 0000551398 00000 n 0000551456 00000 n 0000551514 00000 n 0000551572 00000 n 0000551629 00000 n 0000551686 00000 n 0000551744 00000 n 0000551802 00000 n 0000551860 00000 n 0000551918 00000 n 0000551976 00000 n 0000552034 00000 n 0000552089 00000 n 0000552147 00000 n 0000552205 00000 n 0000552263 00000 n 0000552321 00000 n 0000552379 00000 n 0000552437 00000 n 0000552494 00000 n 0000552552 00000 n 0000552610 00000 n 0000552668 00000 n 0000552726 00000 n 0000552783 00000 n 0000552841 00000 n 0000552897 00000 n 0000552955 00000 n 0000553013 00000 n 0000553071 00000 n 0000553127 00000 n 0000553185 00000 n 0000553243 00000 n 0000553301 00000 n 0000553359 00000 n 0000553416 00000 n 0000553474 00000 n 0000553532 00000 n 0000553590 00000 n 0000553648 00000 n 0000553705 00000 n 0000553763 00000 n 0000553821 00000 n 0000553879 00000 n 0000553937 00000 n 0000553995 00000 n 0000554051 00000 n 0000554107 00000 n 0000554165 00000 n 0000554223 00000 n 0000554281 00000 n 0000554339 00000 n 0000554395 00000 n 0000554453 00000 n 0000554511 00000 n 0000554569 00000 n 0000554625 00000 n 0000554683 00000 n 0000554741 00000 n 0000554799 00000 n 0000554857 00000 н 0000554915 00000 n 0000554973 00000 n 0000555031 00000 n 0000555089 00000 n 0000555147 00000 n 0000555204 00000 n 0000555262 00000 n 0000555318 00000 n 0000555376 00000 n 0000555434 00000 n 0000555489 00000 n 0000555547 00000 n 0000555605 00000 n 0000555663 00000 n 0000555720 00000 n 0000555778 00000 n 0000555836 00000 n 0000555893 00000 n 0000555951 00000 n 0000556009 00000 n 0000556067 00000 n 0000556125 00000 n 0000556183 00000 n 0000556240 00000 n 0000556298 00000 n 0000556354 00000 n 0000556412 00000 n 0000556468 00000 n 0000556526 00000 n 0000556583 00000 n 0000556641 00000 n 0000556699 00000 n 0000556757 00000 n 0000556815 00000 n 0000556873 00000 n 0000556931 00000 n 0000556989 00000 n 0000557047 00000 n 0000557105 00000 n 0000557163 00000 n 0000557221 00000 n 0000557280 00000 n 0000557336 00000 n 0000557393 00000 n 0000557451 00000 n 0000557508 00000 n 0000557566 00000 n 0000557624 00000 n 0000557683 00000 n 0000557741 00000 n 0000557799 00000 n 0000557855 00000 n 0000557913 00000 n 0000557971 00000 n 0000558029 00000 н 0000558087 00000 n 0000558145 00000 n 0000558202 00000 n 0000558260 00000 n 0000558318 00000 n 0000558376 00000 n 0000558434 00000 n 0000558491 00000 n 0000558549 00000 n 0000558607 00000 n 0000558663 00000 n 0000558721 00000 n 0000558780 00000 n 0000558836 00000 n 0000558894 00000 n 0000558952 00000 n 0000559010 00000 n 0000559068 00000 n 0000559126 00000 n 0000559184 00000 n 0000559242 00000 n 0000559300 00000 n 0000559358 00000 n 0000559416 00000 n 0000559473 00000 n 0000559531 00000 n 0000559590 00000 n 0000559646 00000 n 0000559705 00000 n 0000559763 00000 n 0000559821 00000 n 0000559880 00000 n 0000559938 00000 n 0000559996 00000 n 0000560053 00000 н 0000560110 00000 n 0000560168 00000 n 0000560227 00000 n 0000560285 00000 n 0000560343 00000 n 0000560401 00000 n 0000560459 00000 n 0000560517 00000 n 0000560573 00000 n 0000560631 00000 n 0000560689 00000 n 0000560747 00000 n 0000560805 00000 n 0000560861 00000 n 0000560919 00000 n 0000560977 00000 n 0000561035 00000 n 0000561092 00000 n 0000561150 00000 n 0000561208 00000 n 0000561265 00000 n 0000561323 00000 n 0000561381 00000 n 0000561439 00000 n 0000561497 00000 n 0000561555 00000 n 0000561613 00000 n 0000561669 00000 n 0000561727 00000 n 0000561785 00000 n 0000561841 00000 n 0000561899 00000 n 0000561957 00000 n 0000562015 00000 n 0000562073 00000 n 0000562131 00000 n 0000562188 00000 n 0000562246 00000 n 0000562304 00000 n 0000562362 00000 n 0000562418 00000 n 0000562476 00000 n 0000562534 00000 n 0000562592 00000 n 0000562650 00000 n 0000562709 00000 n 0000562767 00000 n 0000562825 00000 n 0000562883 00000 n 0000562941 00000 n 0000562999 00000 n 0000563057 00000 n 0000563115 00000 n 0000563173 00000 n 0000563231 00000 n 0000563289 00000 n 0000563347 00000 n 0000563405 00000 n 0000563463 00000 n 0000563521 00000 n 0000563579 00000 n 0000563637 00000 n 0000563695 00000 n 0000563753 00000 n 0000563809 00000 n 0000563867 00000 n 0000563925 00000 n 0000563982 00000 n 0000564040 00000 n 0000564098 00000 n 0000564156 00000 n 0000564214 00000 n 0000564272 00000 n 0000564330 00000 n 0000564388 00000 n 0000564446 00000 n 0000564503 00000 n 0000564561 00000 n 0000564617 00000 n 0000564675 00000 n 0000564733 00000 n 0000564789 00000 n 0000564846 00000 n 0000564904 00000 n 0000564962 00000 n 0000565020 00000 n 0000565078 00000 n 0000565137 00000 n 0000565195 00000 n 0000565253 00000 n 0000565311 00000 n 0000565369 00000 n 0000565427 00000 n 0000565485 00000 n 0000565542 00000 n 0000565600 00000 n 0000565658 00000 n 0000565716 00000 n 0000565774 00000 n 0000565832 00000 n 0000565890 00000 n 0000565948 00000 n 0000566006 00000 n 0000566064 00000 n 0000566122 00000 n 0000566180 00000 n 0000566238 00000 n 0000566295 00000 n 0000566353 00000 n 0000566411 00000 n 0000566469 00000 n 0000566528 00000 n 0000566586 00000 n 0000566644 00000 n 0000566702 00000 n 0000566760 00000 n 0000566816 00000 n 0000566874 00000 n 0000566932 00000 n 0000566990 00000 н 0000567046 00000 n 0000567105 00000 n 0000567161 00000 n 0000567219 00000 n 0000567277 00000 n 0000567335 00000 n 0000567393 00000 n 0000567451 00000 n 0000567509 00000 n 0000567567 00000 n 0000567624 00000 n 0000567682 00000 n 0000567740 00000 n 0000567798 00000 n 0000567854 00000 n 0000567912 00000 n 0000567968 00000 n 0000568025 00000 n 0000568081 00000 n 0000568137 00000 n 0000568193 00000 n 0000568251 00000 n 0000568309 00000 n 0000568367 00000 n 0000568425 00000 n 0000568483 00000 n 0000568541 00000 n 0000568599 00000 n 0000568657 00000 n 0000568713 00000 n 0000568769 00000 n 0000568828 00000 n 0000568884 00000 n 0000568940 00000 n 0000568996 00000 n 0000569054 00000 n 0000569110 00000 n 0000569168 00000 n 0000569226 00000 n 0000569283 00000 n 0000569340 00000 n 0000569398 00000 n 0000569456 00000 n 0000569514 00000 n 0000569570 00000 n 0000569628 00000 n 0000569686 00000 n 0000569744 00000 n 0000569802 00000 n 0000569860 00000 n 0000569917 00000 n 0000569975 00000 n 0000570033 00000 n 0000570091 00000 n 0000570149 00000 n 0000570207 00000 n 0000570265 00000 n 0000570323 00000 n 0000570381 00000 n 0000570439 00000 n 0000570497 00000 n 0000570680 00000 n 0000570722 00000 n 0000570780 00000 n 0000570837 00000 n 0000570895 00000 n 0000570953 00000 n 0000571011 00000 n 0000571069 00000 n 0000571125 00000 n 0000571183 00000 n 0000571241 00000 n 0000571299 00000 n 0000571357 00000 n 0000571415 00000 n 0000571471 00000 n 0000571528 00000 n 0000571586 00000 n 0000571644 00000 n 0000571700 00000 n 0000571758 00000 n 0000571816 00000 n 0000571874 00000 n 0000571932 00000 n 0000571990 00000 n 0000572047 00000 n 0000572105 00000 n 0000572163 00000 n 0000572221 00000 n 0000572278 00000 n 0000572335 00000 n 0000572393 00000 n 0000572451 00000 n 0000572509 00000 n 0000572567 00000 n 0000572625 00000 n 0000572683 00000 n 0000572741 00000 n 0000572799 00000 n 0000572857 00000 n 0000572915 00000 n 0000572973 00000 n 0000573031 00000 n 0000573089 00000 n 0000573147 00000 n 0000573205 00000 n 0000573264 00000 n 0000573322 00000 n 0000573380 00000 n 0000573438 00000 n 0000573496 00000 n 0000573553 00000 n 0000573611 00000 n 0000573669 00000 n 0000573727 00000 n 0000573785 00000 n 0000573843 00000 n 0000573901 00000 n 0000573959 00000 n 0000574015 00000 n 0000574073 00000 n 0000574131 00000 n 0000574189 00000 n 0000574247 00000 n 0000574305 00000 n 0000574363 00000 n 0000574421 00000 n 0000574480 00000 n 0000574536 00000 n 0000574594 00000 n 0000574650 00000 n 0000574708 00000 n 0000574766 00000 n 0000574824 00000 n 0000574882 00000 n 0000574940 00000 n 0000574998 00000 n 0000575056 00000 n 0000575113 00000 н 0000575171 00000 n 0000575229 00000 n 0000575286 00000 n 0000575342 00000 n 0000575400 00000 n 0000575457 00000 n 0000575515 00000 n 0000575573 00000 n 0000575631 00000 n 0000575689 00000 n 0000575746 00000 n 0000575803 00000 n 0000575861 00000 n 0000575919 00000 n 0000575977 00000 n 0000576035 00000 n 0000576093 00000 n 0000576151 00000 n 0000576210 00000 n 0000576269 00000 n 0000576327 00000 n 0000576386 00000 n 0000576444 00000 n 0000576502 00000 н 0000576560 00000 n 0000576618 00000 n 0000576676 00000 n 0000576734 00000 n 0000576792 00000 n 0000576850 00000 n 0000576906 00000 n 0000576964 00000 n 0000577022 00000 n 0000577080 00000 n 0000577138 00000 n 0000577196 00000 n 0000577252 00000 n 0000577310 00000 n 0000577368 00000 n 0000577427 00000 n 0000577485 00000 n 0000577543 00000 n 0000577599 00000 n 0000577657 00000 n 0000577714 00000 n 0000577772 00000 n 0000577830 00000 n 0000577888 00000 n 0000577946 00000 n 0000578001 00000 n 0000578058 00000 n 0000578115 00000 n 0000578173 00000 n 0000578231 00000 n 0000578289 00000 n 0000578346 00000 n 0000578404 00000 n 0000578460 00000 n 0000578518 00000 n 0000578576 00000 n 0000578632 00000 n 0000578690 00000 n 0000578748 00000 n 0000578806 00000 n 0000578864 00000 n 0000578922 00000 n 0000578980 00000 n 0000579037 00000 n 0000579095 00000 n 0000579153 00000 n 0000579211 00000 n 0000579269 00000 n 0000579327 00000 n 0000579385 00000 n 0000579443 00000 n 0000579501 00000 n 0000579559 00000 n 0000579617 00000 n 0000579675 00000 n 0000579733 00000 n 0000579790 00000 n 0000579848 00000 n 0000579906 00000 n 0000579963 00000 n 0000580021 00000 n 0000580079 00000 n 0000580137 00000 n 0000580192 00000 n 0000580248 00000 n 0000580306 00000 n 0000580364 00000 n 0000580422 00000 n 0000580480 00000 n 0000580538 00000 n 0000580596 00000 n 0000580654 00000 n 0000580710 00000 n 0000580768 00000 n 0000580826 00000 n 0000580884 00000 n 0000580942 00000 n 0000580998 00000 n 0000581057 00000 n 0000581114 00000 n 0000581172 00000 n 0000581230 00000 n 0000581288 00000 n 0000581346 00000 n 0000581404 00000 n 0000581462 00000 n 0000581520 00000 n 0000581578 00000 n 0000581636 00000 n 0000581694 00000 n 0000581750 00000 n 0000581809 00000 n 0000581866 00000 n 0000581921 00000 н 0000581979 00000 n 0000582037 00000 n 0000582095 00000 n 0000582153 00000 n 0000582211 00000 n 0000582269 00000 n 0000582327 00000 n 0000582385 00000 n 0000582443 00000 n 0000582500 00000 n 0000582558 00000 н 0000582616 00000 n 0000582672 00000 n 0000582730 00000 n 0000582788 00000 n 0000582846 00000 n 0000582904 00000 n 0000582962 00000 n 0000583020 00000 n 0000583079 00000 n 0000583137 00000 n 0000583195 00000 н 0000583253 00000 n 0000583309 00000 n 0000583367 00000 n 0000583425 00000 n 0000583480 00000 n 0000583538 00000 n 0000583596 00000 n 0000583654 00000 n 0000583712 00000 n 0000583770 00000 n 0000583828 00000 n 0000583886 00000 n 0000583944 00000 n 0000584002 00000 n 0000584060 00000 n 0000584118 00000 n 0000584176 00000 n 0000584235 00000 н 0000584293 00000 n 0000584351 00000 n 0000584406 00000 n 0000584464 00000 n 0000584522 00000 n 0000584581 00000 n 0000584639 00000 n 0000584697 00000 n 0000584754 00000 n 0000584811 00000 n 0000584869 00000 n 0000584927 00000 n 0000584985 00000 n 0000585043 00000 n 0000585102 00000 n 0000585160 00000 n 0000585217 00000 n 0000585274 00000 n 0000585332 00000 n 0000585390 00000 n 0000585447 00000 n 0000585505 00000 n 0000585562 00000 n 0000585620 00000 n 0000585678 00000 n 0000585736 00000 n 0000585794 00000 n 0000585852 00000 n 0000585910 00000 n 0000585967 00000 n 0000586025 00000 n 0000586081 00000 n 0000586139 00000 n 0000586197 00000 n 0000586255 00000 n 0000586313 00000 n 0000586371 00000 n 0000586429 00000 n 0000586487 00000 n 0000586542 00000 n 0000586600 00000 n 0000586658 00000 n 0000586714 00000 n 0000586772 00000 n 0000586830 00000 n 0000586888 00000 n 0000586946 00000 n 0000587002 00000 n 0000587060 00000 n 0000587118 00000 n 0000587176 00000 n 0000587234 00000 n 0000587292 00000 n 0000587350 00000 n 0000587408 00000 n 0000587466 00000 n 0000587524 00000 n 0000587582 00000 n 0000587640 00000 n 0000587698 00000 n 0000587756 00000 n 0000587814 00000 н 0000587872 00000 n 0000587928 00000 n 0000587986 00000 n 0000588044 00000 n 0000588102 00000 n 0000588160 00000 n 0000588218 00000 n 0000588276 00000 n 0000588334 00000 n 0000588392 00000 n 0000588450 00000 n 0000588508 00000 n 0000588566 00000 n 0000588624 00000 n 0000588682 00000 n 0000588740 00000 n 0000588797 00000 n 0000588855 00000 n 0000588913 00000 n 0000588971 00000 n 0000589029 00000 n 0000589087 00000 n 0000589145 00000 n 0000589203 00000 n 0000589261 00000 n 0000589319 00000 n 0000589377 00000 n 0000589433 00000 n 0000589490 00000 n 0000589548 00000 n 0000589606 00000 н 0000589664 00000 n 0000589721 00000 n 0000589779 00000 n 0000589837 00000 n 0000589895 00000 n 0000589953 00000 n 00005 00000 n 00005 00000 n 00005- 00000 n 00004
00000 n 00005 00000 n 00005
00000 n 00005
00000 n 00005 00000 n 00005 00000 n 00005 00000 n 00005
00000 n 0000500000 n 00005
00000 n 00005
00000 n 00005
00000 n 00005 00000 n 00005 00000 n 00005
00000 n 00005
00000 n 00005
- 00000 n 00005
- 00000 n 00005 00000 n 00005
- 00000 n 00005
- 00000 n 00005 00000 n 00005 00000 n 00005 00000 n 00005 00000 n 00005 00000 n 00005 00000 n 00005
- 00000 n
00005
- 00000 n
00005
00000 n 0000591979 00000 n 0000592037 00000 n 0000592095 00000 n 0000592153 00000 n 0000592210 00000 n 0000592268 00000 n 0000592327 00000 n 0000592385 00000 n 0000592443 00000 n 0000592501 00000 n 0000592559 00000 n 0000592617 00000 n 0000592675 00000 n 0000592733 00000 n 0000592791 00000 n 0000592849 00000 n 0000592907 00000 n 0000592964 00000 n 0000593022 00000 n 0000593080 00000 n 0000593138 00000 n 0000593196 00000 n 0000593254 00000 n 0000593312 00000 n 0000593370 00000 n 0000593428 00000 n 0000593486 00000 n 0000593544 00000 n 0000593602 00000 n 0000593660 00000 n 0000593718 00000 n 0000593775 00000 n 0000593833 00000 n 0000593891 00000 n 0000593949 00000 n 0000594007 00000 n 0000594065 00000 n 0000594123 00000 n 0000594181 00000 n 0000594239 00000 n 0000594297 00000 n 0000594355 00000 n 0000594413 00000 n 0000594471 00000 n 0000594528 00000 n 0000594586 00000 n 0000594642 00000 n 0000594700 00000 n 0000594756 00000 n 0000594814 00000 n 0000594871 00000 n 0000594928 00000 n 0000594986 00000 n 0000595044 00000 n 0000595102 00000 n 0000595160 00000 n 0000595218 00000 n 0000595276 00000 n 0000595334 00000 n 0000595392 00000 n 0000595450 00000 n 0000595508 00000 n 0000595566 00000 n 0000595623 00000 n 0000595681 00000 n 0000595739 00000 n 0000595797 00000 n 0000595853 00000 n 0000595911 00000 n 0000595969 00000 n 0000596027 00000 n 0000596085 00000 n 0000596143 00000 n 0000596199 00000 n 0000596257 00000 n 0000596315 00000 n 0000596373 00000 n 0000596431 00000 n 0000596488 00000 n 0000596546 00000 n 0000596602 00000 n 0000596661 00000 n 0000596719 00000 n 0000596777 00000 n 0000596834 00000 n 0000596890 00000 n 0000596948 00000 n 0000597006 00000 n 0000597062 00000 n 0000597120 00000 n 0000597178 00000 n 0000597236 00000 n 0000597294 00000 n 0000597352 00000 n 0000597410 00000 n 0000597468 00000 n 0000597526 00000 n 0000597585 00000 n 0000597642 00000 n 0000597700 00000 n 0000597758 00000 n 0000597816 00000 n 0000597874 00000 n 0000597932 00000 n 0000597990 00000 n 0000598048 00000 n 0000598106 00000 n 0000598162 00000 n 0000598220 00000 n 0000598278 00000 n 0000598334 00000 n 0000598392 00000 n 0000598449 00000 n 0000598506 00000 n 0000598564 00000 n 0000598622 00000 n 0000598680 00000 n 0000598737 00000 n 0000598795 00000 n 0000598853 00000 n 0000598911 00000 n 0000598969 00000 n 0000599027 00000 n 0000599084 00000 n 0000599142 00000 n 0000599200 00000 n 0000599258 00000 n 0000599316 00000 n 0000599374 00000 n 0000599432 00000 n 0000599490 00000 n 0000599548 00000 n 0000599606 00000 n 0000599664 00000 n 0000599722 00000 n 0000599780 00000 n 0000599838 00000 n 0000599896 00000 n 0000599954 00000 n 0000600012 00000 n 0000600068 00000 n 0000600126 00000 n 0000600184 00000 n 0000600242 00000 n 0000600300 00000 n 0000600358 00000 n 0000600416 00000 n 0000600474 00000 n 0000600532 00000 n 0000600589 00000 n 0000600646 00000 n 0000600704 00000 n 0000600762 00000 n 0000600820 00000 n 0000600878 00000 n 0000600934 00000 n 0000600992 00000 n 0000601049 00000 n 0000601107 00000 n 0000601165 00000 n 0000601223 00000 n 0000601281 00000 n 0000601339 00000 n 0000601397 00000 n 0000601455 00000 n 0000601513 00000 n 0000601571 00000 n 0000601629 00000 n 0000601687 00000 n 0000601745 00000 n 0000601803 00000 n 0000601861 00000 n 0000601919 00000 n 0000601977 00000 n 0000602035 00000 n 0000602094 00000 n 0000602153 00000 n 0000602211 00000 n 0000602269 00000 n 0000602327 00000 n 0000602385 00000 n 0000602443 00000 n 0000602501 00000 n 0000602559 00000 n 0000602617 00000 n 0000602675 00000 n 0000602733 00000 n 0000602791 00000 n 0000602849 00000 n 0000602907 00000 n 0000602965 00000 n 0000603023 00000 n 0000603081 00000 n 0000603139 00000 n 0000603197 00000 n 0000603255 00000 n 0000603312 00000 n 0000603370 00000 n 0000603428 00000 n 0000603486 00000 n 0000603544 00000 n 0000603602 00000 n 0000603658 00000 n 0000603716 00000 n 0000603774 00000 n 0000604353 00000 n 0000604589 00000 n 0000604918 00000 n 0000604941 00000 n 0000604965 00000 n 0000613768 00000 n 0000614099 00000 n 0000614336 00000 n 0000614443 00000 n 0000614466 00000 n 0000614490 00000 n 0000623293 00000 n 0000623921 00000 n 0000624158 00000 n 0000624561 00000 n 0000624584 00000 n 0000624608 00000 n 0000624633 00000 n 0000645172 00000 n 0000645197 00000 n 0000645219 00000 n 0000645336 00000 n 0000645360 00000 n 0000648784 00000 n 0000648809 00000 н 0000648949 00000 n 0000650413 00000 n 0000726211 00000 n 0000726424 00000 n 0000726953 00000 n 0000727453 00000 n 0000738780 00000 n 0000738950 00000 n 0000738973 00000 n 0000739505 00000 n 0000739528 00000 n 0000740450 00000 n 0000740474 00000 n 00000 00000 n трейлер ] /Prev 6847058 >> startxref 0 %%EOF 6482 0 obj > 2 > 3 > 4 > 5 > 6 > 7 > 8 > 9 > 10 > ] >> /Names 10349 0 R /ViewerPreferences > /Pages 6409 0 R /OpenAction [6483 0 R /Fit ] /Тип /Каталог /PageMode /UseOutlines /Outlines 7029 0 R >> эндообъект 10961 0 obj > ручей xڭZl}v.Р6 ]i:Jl 3P٬ J+,cn[!4hF~P64ECؾ;~Ho
CodeMirror 6 Справочное руководство
Представление редактора представляет пользовательский интерфейс редактора. Он держит редактируемая поверхность DOM и, возможно, другие элементы, такие как желоб номера строки. Он обрабатывает события и отправляет состояние транзакции для редактирования действий.
новый EditorView (config?: Object = {})
Построить новый вид. Обычно вы хотите поместить
view.dom
в ваш документ после создания представления, чтобы пользователь мог видеть Это.-
конфигурация
Параметры инициализации.
-
состояние ?: EditorState
Исходное состояние представления. По умолчанию состояние без расширения с пустым документом.
-
корень ?: документ | ShadowRoot
Если представление будет монтироваться в теневой корень или документ кроме той, которая содержится в глобальной переменной
документа
( по умолчанию), вы должны передать его здесь.Если вы предоставитеродительский
, но не этот вариант, редактор автоматически ищет корень от родителя.-
отправка ?: fn(tr: транзакция)
Переопределить отправку транзакции функция для этого вида редактора, которая это способ, которым обновления направляются в представление. Ваша реализация, если предоставлено, вероятно, следует вызвать обновление
представления
метод.-
родитель ?: Элемент | Фрагмент документа
При задании редактор немедленно присоединяется к заданному элемент при создании.(В противном случае вам придется поместить представление
dom
элемент в документе самостоятельно.)
-
состояние : EditorState
Текущее состояние редактора.
окно просмотра : {от: число, до: число}
Чтобы иметь возможность отображать большие документы, не потребляя слишком много память или перегружая браузер, CodeMirror рисует только код, который виден (плюс поля вокруг него) в DOM.Этот Свойство сообщает вам экстент текущего нарисованного видового экрана, в положения документа.
visibleRanges : только для чтения {от: номера до: номера}[]
При наличии, например, больших свернутых диапазонов в окно просмотра, его размер может быть намного больше, чем фактический видимый содержание. Таким образом, если вы делаете что-то вроде стилизации содержимое в окне просмотра, желательно делать это только для эти диапазоны, которые являются подмножеством области просмотра, которая на самом деле нарисовано.
inView : логическое значение
Возвращает false, когда редактор полностью прокручивается вне поля зрения или иным образом скрыты.
составление : логическое значение
Указывает, набирает ли пользователь в данный момент текст через ИМЭ.
корень : DocumentOrShadowRoot
Документ или теневой корень, в котором находится представление.
дом : HTMLElement
Элемент DOM, охватывающий весь вид редактора.
прокруткаDOM : HTMLElement
Элемент DOM, который можно настроить для прокрутки. (Обратите внимание, что это может не было, поэтому вы не можете предположить, что это можно прокручивать.)
contentDOM : HTMLElement
Редактируемый элемент DOM, содержащий содержимое редактора. Вам следует обычно не взаимодействуют с этим контентом напрямую, хотя DOM, так как редактор немедленно отменит большинство изменений. ты делаешь.Вместо этого отправляйте транзакции для изменения контента и украшения для стиля.
отправка (tr: Транзакция)
Все регулярные обновления состояния редактора должны проходить через это. Это принимает транзакцию или спецификацию транзакции и обновляет представление до показать новое состояние, созданное этой транзакцией. Его реализация может быть переопределена с помощью вариант. Этот функция привязана к экземпляру представления, поэтому ей не нужно называть методом.
обновление (транзакции: транзакция только для чтения [])
Обновить представление для данного массива транзакций.Это будет обновить видимый документ и выделение в соответствии с состоянием произведенных транзакциями, и уведомить плагины просмотра о изменять. Обычно следует звонить
отправить вместо этого
, который использует это как примитив.setState (newState: EditorState)
Сбросить представление в заданное состояние. (Это приведет к тому, что весь документ должен быть перерисован и все плагины просмотра должны быть повторно инициализированы, поэтому вы, вероятно, должны использовать его только тогда, когда новое состояние не производные от старого состояния.В противном случае используйте
отправить вместо
.)тема Классы : строка
Получить классы CSS для активных в данный момент тем редактора.
requestMeasure
(запрос?: Объект) Запланируйте измерение макета, опционально предоставив обратные вызовы выполнить пользовательское измерение DOM с последующей фазой записи DOM. С использованием это предпочтительнее читать макет DOM непосредственно из, для например, обработчик событий, потому что он обязательно измеряет и рисунок, выполненный другими компонентами, синхронизируется, избегая ненужные вычисления макета DOM.
-
запрос
-
прочитать (просмотр: EditorView) → T
Вызывается на этапе чтения DOM для сбора информации, которая требует Макет ДОМ. Должен ли , а не изменять документ.
-
запись ?: fn(мера: T, вид: EditorView)
Вызывается на этапе записи DOM для обновления документа. Должен ли не делать все, что запускает макет DOM.
-
ключ ?: любой
Если запланировано несколько запросов с одним и тем же ключом, только последний будет фактически запущен.
-
pluginField
(поле: PluginField ) → только для чтения T[] Собрать все значения, предоставленные активными плагинами для данного поле.
плагин
(плагин: ViewPlugin ) → T | ноль Получить значение определенного плагина, если он есть.Обратите внимание, что подключаемые модули, которые аварийно завершают работу, могут быть удалены из представления, поэтому даже если вы знаете, что вы зарегистрировали данный плагин, рекомендуется проверить возвращаемое значение этого метода.
документ Верх : номер
Верхняя позиция документа в экранных координатах. Этот может быть отрицательным, когда редактор прокручивается вниз. Точки непосредственно в начало первой строки, а не над отступом.
documentPadding : {вверху: число, внизу: число}
Сообщает заполнение над и под документом.
blockAtHeight (высота: число, docTop?: число) → BlockInfo
Найти виджет линии или блока в заданной вертикальной позиции.
По умолчанию это положение интерпретируется как положение экрана, это означает, что
docTop
устанавливается в верхнюю позицию DOM редактора содержание (форсирование макета). Вы можете передать другойdocTop
значение — например, 0 для интерпретациивысоты
как относительно документа позиция или предварительно вычисленная вершина документа (просмотров.contentDOM.getBoundingClientRect().top
) для ограничения макета запросы.Устарело: вместо этого используйте
elementAtHeight
.elementAtHeight (высота: число) → BlockInfo
Найти текстовую строку или виджет блока по заданной вертикали положение (которое интерпретируется как относительно верхней части документ
visualLineAtHeight (высота: число, docTop?: число) → BlockInfo
Найдите информацию для визуальной линии (см.
visualLineAt
) при заданном Вертикальная позиция.Результирующая информация о блоке может содержать другой массив информационных структур блока в полетипа
, если эта строка состоит из более чем одного блока.По умолчанию
высота
рассматривается как положение экрана. ВидетьblockAtHeight
для интерпретация параметраdocTop
.Устарело: вместо этого используйте
lineBlockAtHeight
.lineBlockAtHeight (высота: число) → BlockInfo
Найти линейный блок (см.
lineBlockAt
в данный момент высота.viewportLines (f: fn(строка: BlockInfo), docTop?: number)
Повторить информацию о высоте визуальных линий в окно просмотра. Высоту линий сообщают относительно данной верхней части документа, которая по умолчанию соответствует положению экрана документ (форсирование макета).
Устарело: вместо этого используйте
viewportLineBlocks
.viewportLineBlocks : BlockInfo[]
Получить протяженность и вертикальное положение всей линии блоки в окне просмотра.Позиции относятся к вершине документ;
visualLineAt (pos: номер, docTop?: number = 0) → BlockInfo
Найдите протяженность и высоту визуальной линии (диапазон, ограниченный с обеих сторон либо нескрытыми разрывы строк или начало/конец документа) в заданной позиции.
Вертикальные позиции вычисляются относительно
docTop
аргумент, который по умолчанию равен 0 для этого метода. Вы можете пройтивид.contentDOM.getBoundingClientRect().top
здесь, чтобы получить экран координаты.Устарело: вместо этого используйте
lineBlockAt
.lineBlockAt (pos: номер) → BlockInfo
Найти блок строк вокруг данной позиции документа. Линия блок представляет собой диапазон, ограниченный с обеих сторон либо нескрытые разрывы строк или начало/конец документа. Обычно он просто содержит строку текст, но может быть разбит на несколько текстовых блоков блоком виджеты.
contentHeight : номер
Общая высота содержимого редактора.
moveByChar () → SelectionRange
Переместить позицию курсора по графеме кластер.
вперед
определяет, движение направлено от начала линии или к ней. Движение в двунаправленный текст в визуальном порядке, в тексте редактора направление. Когда начало позиция была последней в строке, возвращаемая позиция будет через разрыв строки.Если следующей строки нет, исходное положение возвращается.По умолчанию этот метод перемещается по одному кластеру. То необязательный аргумент
на
может использоваться для перемещения по большему количеству. Так и будет вызываться с первым кластером в качестве аргумента и должен возвращать предикат, определяющий для каждого последующего кластера следует ли его также переместить.moveByGroup (начало: SelectionRange, вперед: логическое значение) → SelectionRange
Переместить позицию курсора через следующую группу либо буквы или не буквы символы без пробелов.
moveToLineBoundary () → SelectionRange
Перейти к границе следующей линии в заданном направлении. Если
includeWrap
верно, перенос строк включен, и есть дальнейшая точка переноса на текущей строке, точка переноса будет вернулся. В противном случае эта функция вернет начало или конец линии.moveVertically () → SelectionRange
Перемещение курсора по вертикали.Когда
расстояние
не указано, по умолчанию он переходит на следующую строку (включая обернутые линии). В противном случае расстояниеКогда
start
имеетголКолонка
, вертикальная движение будет использовать это как целевое горизонтальное положение. Иначе, используется собственное горизонтальное положение курсора. Возвращенный столбец цели курсора будет установлен на тот столбец, который был использовал.scrollPosIntoView (поз. номер)
domAtPos (позиция: номер) → {узел: узел, смещение: номер}
Найти родительский узел DOM и смещение (дочернее смещение, если
узел
элемент, смещение символа, когда это текстовый узел) в указанная позиция документа.Обратите внимание, что для позиций, которые в данный момент не
visibleRanges
, результирующая позиция DOM не обязательно значимый (он может просто указывать до или после заполнителя элемент).posAtDOM (узел: узел, смещение?: число = 0) → число
Найти позицию документа в заданном узле DOM. Может быть полезно для связывания позиций с событиями DOM. Будет вызывать ошибку когда
узел
не является частью содержимого редактора.posAtCoords () → номер
Получить позицию документа по заданным координатам экрана. Для позиции, не покрытые структурой DOM видимого окна просмотра, это вернет ноль, если
false
не будет передано как второе аргумент, и в этом случае он вернет предполагаемую позицию, которая был бы рядом с координатами, если бы он был визуализирован.coordsAtPos (pos: число, сторона?: -1 | 1 = 1) → Rect | ноль
Получить координаты экрана в заданной позиции документа.
сторона
определяет, основаны ли координаты на элемент до (-1) или после (1) позиции (если ни один элемент не доступны на данной стороне, метод будет прозрачно использовать другая стратегия, чтобы получить разумные координаты).defaultCharacterWidth : число
Ширина символа по умолчанию в редакторе. Может нет точно отражать ширину всех символов (учитывая переменную ширина шрифта или стиль отдельных диапазонов).
defaultLineHeight : номер
Высота строки по умолчанию в редакторе. Может быть неточным для всех линий.
textНаправление : Направление
Направление текста (
направление
свойство CSS) редактора.lineWrapping : логическое значение
Переносит ли этот редактор строки (как определено
пробел
свойство CSS его элемента содержимого).bidiSpans (строка: Line) → только для чтения BidiSpan[]
Возвращает структуру двунаправленного текста заданной строки (который должен быть в текущем документе) в виде массива span объекты. Порядок этих интервалов соответствует тексту направление — если это слева направо сначала идут самые левые интервалы, в противном случае самые правые интервалы идут первыми.
hasFocus : логическое значение
Проверить, есть ли фокус у редактора.
фокус ()
Установить фокус на редактор.
уничтожить ()
Очистите этот вид редактора, удалив его элемент из документ, отмена регистрации обработчиков событий и уведомление плагины. Экземпляр вида больше нельзя использовать после вызывая это.
статический scrollTo : StateEffectType
Эффект, который можно добавить к транзакция, чтобы она прокручивала заданный диапазон в поле зрения.
Устарело . Вместо этого используйте
scrollIntoView
.статический centerOn : StateEffectType
Эффект, заставляющий редактор прокручивать заданный диапазон до центр видимого вида.
Устарело . Вместо этого используйте
scrollIntoView
.статический scrollIntoView () → StateEffect<неизвестно>
Возвращает эффект, который можно добавлено в транзакцию для заставить его прокручивать заданную позицию или диапазон в поле зрения.
-
опции
-
г ?: "ближайший" | "старт" | "конец" | "центр"
По умолчанию (
"ближайший"
) позиция будет вертикальной прокручивается только минимальное количество, необходимое для перемещения данного положение в поле зрения. Вы можете установить это на«начало»
, чтобы переместить его. в верхнюю часть представления,"конец"
, чтобы переместить его вниз, или"центр"
, чтобы переместить его в центр.-
x ?: "ближайший" | "старт" | "конец" | "центр"
Эффект аналогичен
и
, но для горизонтальное положение прокрутки.-
yПоля ?: номер
Дополнительное расстояние по вертикали для добавления при перемещении чего-либо в Посмотреть. Не используется со стратегией
"центр"
. По умолчанию 5.-
xMargin ?: номер
Дополнительное расстояние по горизонтали для добавления.Не используется с
"центр"
стратегия. По умолчанию 5.
-
статический styleModule : Facet
00000 n 00005 00000 n 00005
- 00000 n 00004
00000 n
00004 00000 n
00004