From 31caa0e6de715c5e05be12c5beca6a4842fe1efa Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Wed, 5 Mar 2025 12:33:59 +0300 Subject: [PATCH] update func --- docs/javascript/01-base/02-variables.md | 46 +++++++ .../javascript/02-objects/08-getter-setter.md | 77 ++++++++++++ docs/javascript/03-data-types/11-json.md | 62 ++++++++++ docs/javascript/04-functions/04-arrow-func.md | 2 +- docs/javascript/04-functions/05-args.md | 62 ++++++++++ docs/javascript/04-functions/06-closure.md | 113 ++++++++++++++++++ .../04-functions/07-global-object.md | 20 ++++ .../04-functions/08-setTimeout-setInterval.md | 69 +++++++++++ .../04-functions/09-decorators-call-apply.md | 25 ++++ .../04-functions/10-apply-context.md | 64 ++++++++++ .../04-functions/images/06-closure-1.png | Bin 0 -> 14503 bytes .../04-functions/images/06-closure-2.png | Bin 0 -> 16306 bytes .../04-functions/images/06-closure-3.png | Bin 0 -> 14941 bytes .../04-functions/images/06-closure-4.png | Bin 0 -> 17453 bytes .../04-functions/images/06-closure-5.png | Bin 0 -> 18417 bytes 15 files changed, 539 insertions(+), 1 deletion(-) create mode 100644 docs/javascript/02-objects/08-getter-setter.md create mode 100644 docs/javascript/03-data-types/11-json.md create mode 100644 docs/javascript/04-functions/05-args.md create mode 100644 docs/javascript/04-functions/06-closure.md create mode 100644 docs/javascript/04-functions/07-global-object.md create mode 100644 docs/javascript/04-functions/08-setTimeout-setInterval.md create mode 100644 docs/javascript/04-functions/09-decorators-call-apply.md create mode 100644 docs/javascript/04-functions/10-apply-context.md create mode 100644 docs/javascript/04-functions/images/06-closure-1.png create mode 100644 docs/javascript/04-functions/images/06-closure-2.png create mode 100644 docs/javascript/04-functions/images/06-closure-3.png create mode 100644 docs/javascript/04-functions/images/06-closure-4.png create mode 100644 docs/javascript/04-functions/images/06-closure-5.png diff --git a/docs/javascript/01-base/02-variables.md b/docs/javascript/01-base/02-variables.md index 20a5d5e..ad9ec2b 100644 --- a/docs/javascript/01-base/02-variables.md +++ b/docs/javascript/01-base/02-variables.md @@ -46,4 +46,50 @@ message = 'Hello'; ```js typeof null == "object" // ошибка в языке typeof function(){} == "function" // именно для функций +``` + +## Устаревшее ключевое слово "var" +Обычно var не используется в современных скриптах, но всё ещё может скрываться в старых.\ + +Существует 2 основных отличия var от let/const: +- Переменные var не имеют блочной области видимости, они ограничены, как минимум, телом функции. +- Объявления (инициализация) переменных var производится в начале исполнения функции (или скрипта для глобальных переменных). + +### Для «var» не существует блочной области видимости +Область видимости переменных `var` ограничивается либо функцией, либо, если переменная глобальная, то скриптом. Такие переменные доступны за пределами блока. + +`var` выходит за пределы блоков `if`, `for` и подобных. Это происходит потому, что на заре развития JavaScript блоки кода не имели лексического окружения. + +### «var» допускает повторное объявление +Используя var, можно переобъявлять переменную сколько угодно раз. Повторные var игнорируются. + +### «var» обрабатываются в начале запуска функции +Это поведение называется «hoisting» (всплытие, поднятие), потому что все объявления переменных var «всплывают» в самый верх функции. +Объявления переменных var обрабатываются в начале выполнения функции (или запуска скрипта, если переменная является глобальной). + +Другими словами, переменные var считаются объявленными с самого начала исполнения функции вне зависимости от того, в каком месте функции реально находятся их объявления (при условии, что они не находятся во вложенной функции). + +***Объявления переменных «всплывают», но присваивания значений – нет.*** + +### IIFE +В прошлом, поскольку существовал только `var`, а он не имел блочной области видимости, программисты придумали способ её эмулировать. Этот способ получил название «Immediately-invoked function expressions» (сокращенно IIFE). +Здесь создаётся и немедленно вызывается Function Expression. Так что код выполняется сразу же и у него есть свои локальные переменные. +```js +// Способы создания IIFE +(function() { + var message = "Привет"; + alert(message); // Привет +})(); // Круглые скобки вокруг функции + +(function() { + alert("Круглые скобки вокруг всего выражения"); +}()); + +!function() { + alert("Выражение начинается с логического оператора НЕ"); +}(); + ++function() { + alert("Выражение начинается с унарного плюса"); +}(); ``` \ No newline at end of file diff --git a/docs/javascript/02-objects/08-getter-setter.md b/docs/javascript/02-objects/08-getter-setter.md new file mode 100644 index 0000000..45ec397 --- /dev/null +++ b/docs/javascript/02-objects/08-getter-setter.md @@ -0,0 +1,77 @@ +--- +sidebar_position: 8 +--- + +# Свойства - геттеры и сеттеры + +## Геттеры и сеттеры +Свойства-аксессоры представлены методами: «геттер» – для чтения и «сеттер» – для записи. При литеральном объявлении объекта они обозначаются get и set +```js +let obj = { + get propName() { + // геттер, срабатывает при чтении obj.propName + }, + + set propName(value) { + // сеттер, срабатывает при записи obj.propName = value + } +}; +``` + +## Дескрипторы свойств доступа +Дескрипторы свойств-аксессоров отличаются от «обычных» свойств-данных. + +Свойства-аксессоры не имеют `value` и `writable`, но взамен предлагают функции `get` и `set`. + +То есть, дескриптор аксессора может иметь: +- **get** – функция без аргументов, которая сработает при чтении свойства, +- **set** – функция, принимающая один аргумент, вызываемая при присвоении свойства, +- **enumerable** – то же самое, что и для свойств-данных, +- **configurable** – то же самое, что и для свойств-данных. + +Например, для создания аксессора `fullName` при помощи `defineProperty` мы можем передать дескриптор с использованием `get` и `set` +```js +let user = { + name: "John", + surname: "Smith" +}; + +Object.defineProperty(user, 'fullName', { + get() { + return `${this.name} ${this.surname}`; + }, + set(value) { + [this.name, this.surname] = value.split(" "); + } +}); +alert(user.fullName); // John Smith +for(let key in user) alert(key); // name, surname +``` + +## Умные геттеры/сеттеры +Геттеры/сеттеры можно использовать как обёртки над «реальными» значениями свойств, чтобы получить больше контроля над операциями с ними. + +Например, если мы хотим запретить устанавливать короткое имя для `user`, мы можем использовать сеттер `name` для проверки, а само значение хранить в отдельном свойстве `_name`: +```js +let user = { + get name() { + return this._name; + }, + + set name(value) { + if (value.length < 4) { + alert("Имя слишком короткое, должно быть более 4 символов"); + return; + } + this._name = value; + } +}; + +user.name = "Pete"; +alert(user.name); // Pete + +user.name = ""; // Имя слишком короткое... +``` + +## Использование для совместимости +У аксессоров есть интересная область применения – они позволяют в любой момент взять «обычное» свойство и изменить его поведение, поменяв на геттер и сеттер. diff --git a/docs/javascript/03-data-types/11-json.md b/docs/javascript/03-data-types/11-json.md new file mode 100644 index 0000000..1ebb3b6 --- /dev/null +++ b/docs/javascript/03-data-types/11-json.md @@ -0,0 +1,62 @@ +--- +sidebar_position: 11 +--- + +# Формат JSON + +- JSON – это формат данных, который имеет собственный независимый стандарт и библиотеки для большинства языков программирования. +- JSON поддерживает простые объекты, массивы, строки, числа, логические значения и null. +- JavaScript предоставляет методы JSON.stringify для сериализации в JSON и JSON.parse для чтения из JSON. +- Оба метода поддерживают функции преобразования для интеллектуального чтения/записи. +- Если объект имеет метод toJSON, то он вызывается через JSON.stringify. + +JavaScript предоставляет методы: + +- JSON.stringify для преобразования объектов в JSON. +- JSON.parse для преобразования JSON обратно в объект. + +JSON поддерживает следующие типы данных: + +- Объекты \{ ... } +- Массивы [ ... ] +- Примитивы: + - строки, + - числа, + - логические значения true/false, + - null. + +## JSON.stringify +JSON.stringify пропускает некоторые специфические свойства объектов JavaScript +- Свойства-функции (методы). +- Символьные ключи и значения. +- Свойства, содержащие undefined. + +💥 ***Важное ограничение: не должно быть циклических ссылок.*** + +## Исключаем и преобразуем: replacer +- **value** Значение для кодирования. +- **replacer** Массив свойств для кодирования или функция соответствия function(key, value). +- **space** Дополнительное пространство (отступы), используемое для форматирования. + +В большинстве случаев JSON.stringify используется только с первым аргументом. Но если нам нужно настроить процесс замены, например, отфильтровать циклические ссылки, то можно использовать второй аргумент JSON.stringify. + +```js +let json = JSON.stringify(value[, replacer, space]) +``` + +## Форматирование: space +Третий аргумент в JSON.stringify(value, replacer, space) – это количество пробелов, используемых для удобного форматирования. + +## Пользовательский «toJSON» +Как и toString для преобразования строк, объект может предоставлять метод toJSON для преобразования в JSON. JSON.stringify автоматически вызывает его, если он есть. + +## JSON.parse +Чтобы декодировать JSON-строку, нам нужен другой метод с именем JSON.parse. +```js +let value = JSON.parse(str[, reviver]); +``` +- **str** JSON для преобразования в объект. +- **reviver** Необязательная функция, которая будет вызываться для каждой пары (ключ, значение) и может преобразовывать значение. + +Кроме того, JSON не поддерживает комментарии. + diff --git a/docs/javascript/04-functions/04-arrow-func.md b/docs/javascript/04-functions/04-arrow-func.md index cd1280a..b7a89e7 100644 --- a/docs/javascript/04-functions/04-arrow-func.md +++ b/docs/javascript/04-functions/04-arrow-func.md @@ -53,7 +53,7 @@ function defer(f, ms) { } ``` -#### Стрелочные функции: +## Особенности стрелочных функций: - Не имеют this. - Не имеют arguments. - Не могут быть вызваны с new. diff --git a/docs/javascript/04-functions/05-args.md b/docs/javascript/04-functions/05-args.md new file mode 100644 index 0000000..6c67b8b --- /dev/null +++ b/docs/javascript/04-functions/05-args.md @@ -0,0 +1,62 @@ +--- +sidebar_position: 5 +--- + +# Остаточные параметры и оператор расширения + +Когда мы видим "..." в коде, это могут быть как остаточные параметры, так и оператор расширения. + +Как отличить их друг от друга: + +- Если ... располагается в конце списка параметров функции, то это «остаточные параметры». Он собирает остальные неуказанные аргументы и делает из них массив. +- Если ... встретился в вызове функции или где-либо ещё, то это «оператор расширения». Он извлекает элементы из массива. + +Полезно запомнить: +- Остаточные параметры используются, чтобы создавать новые функции с неопределённым числом аргументов. +- С помощью оператора расширения можно вставить массив в функцию, которая по умолчанию работает с обычным списком аргументов. +- +Вместе эти конструкции помогают легко преобразовывать наборы значений в массивы и обратно. + +К аргументам функции можно обращаться и по-старому — через псевдомассив arguments. + +## Остаточные параметры (...) +Остаточные параметры могут быть обозначены через три точки `....` +```js +function sumAll(...args) { // args — имя массива + let sum = 0; + for (let arg of args) sum += arg; + return sum; +} +alert( sumAll(1) ); // 1 +alert( sumAll(1, 2) ); // 3 +alert( sumAll(1, 2, 3) ); // 6 +``` +💥 ***Остаточные параметры должны располагаться в конце*** +```js +function f(arg1, ...rest, arg2) { // arg2 после ...rest ?! + // Ошибка +} +``` +## Переменная "arguments" +Все аргументы функции находятся в псевдомассиве `arguments` под своими порядковыми номерами. +Хотя arguments похож на массив, и его тоже можно перебирать, это всё же не массив. Методы массивов не поддерживаются. +```js +function showName() { + alert( arguments.length ); + alert( arguments[0] ); + alert( arguments[1] ); + // for (let arg of arguments) alert(arg); // Объект arguments можно перебирать +} +showName("Юлий", "Цезарь"); // Вывод: 2, Юлий, Цезарь +showName("Илья");// Вывод: 1, Илья, undefined (второго аргумента нет) +``` +💥 ***Стрелочные функции не имеют "arguments"*** +Если мы обратимся к arguments из стрелочной функции, то получим аргументы внешней «нормальной» функции. + +## Оператор расширения +Когда `...arr` используется при вызове функции, он «расширяет» перебираемый объект `arr` в список аргументов. +```js +let arr = [3, 5, 1]; +alert( Math.max(...arr) ); // 5 (оператор "раскрывает" массив в список аргументов) +``` + diff --git a/docs/javascript/04-functions/06-closure.md b/docs/javascript/04-functions/06-closure.md new file mode 100644 index 0000000..6fef236 --- /dev/null +++ b/docs/javascript/04-functions/06-closure.md @@ -0,0 +1,113 @@ +--- +sidebar_position: 6 +--- + +# Область видимости переменных, замыкание +Источник: [https://learn.javascript.ru/closure](https://learn.javascript.ru/closure) + +## Блоки кода +Если переменная объявлена внутри блока кода `{...}`, то она видна только внутри этого блока. +С помощью блоков `{...}` мы можем изолировать часть кода, выполняющую свою собственную задачу, с переменными, принадлежащими только ей +Для `if`, `for`, `while` и т.д. переменные, объявленные в блоке кода `{...}`, также видны только внутри + +## Вложенные функции +Функция называется «вложенной», когда она создаётся внутри другой функции. +Она может получить доступ к внешним переменным. +Вложенная функция может быть возвращена: либо в качестве свойства нового объекта (если внешняя функция создаёт объект с методами), либо сама по себе. И затем может быть использована в любом месте. Не важно где, она всё так же будет иметь доступ к тем же внешним переменным. + +## Лексическое окружение + +#### Переменные +В JavaScript у каждой выполняемой функции, блока кода `{...}` и скрипта есть связанный с ними внутренний (скрытый) объект, называемый ***лексическим окружением** `LexicalEnvironment`. + +Объект лексического окружения состоит из двух частей: +1. **Environment Record** – объект, в котором как свойства хранятся все локальные переменные (а также некоторая другая информация, такая как значение this). +2. Ссылка на **внешнее лексическое окружение** – то есть то, которое соответствует коду снаружи (снаружи от текущих фигурных скобок). + +**«Переменная» – это просто свойство специального внутреннего объекта: `Environment Record`.** \ +**«Получить или изменить переменную», означает, «получить или изменить свойство этого объекта».** + +- Переменная – это свойство специального внутреннего объекта, связанного с текущим выполняющимся блоком/функцией/скриптом. +- Работа с переменными – это на самом деле работа со свойствами этого объекта. + +#### Function Declaration +**Разница заключается в том, что Function Declaration мгновенно инициализируется полностью.** + +Когда создается лексическое окружение, Function Declaration сразу же становится функцией, готовой к использованию (в отличие от `let`, который до момента объявления не может быть использован). + +Поэтому мы можем вызвать функцию, объявленную как Function Declaration, до самого её объявления. + +Такое поведение касается только Function Declaration, а не Function Expression, в которых мы присваиваем функцию переменной. + +#### Внутреннее и внешнее лексическое окружение +Когда запускается функция, в начале ее вызова автоматически создается новое лексическое окружение для хранения локальных переменных и параметров вызова. + +![](images/06-closure-1.png) + +В процессе вызова функции у нас есть два лексических окружения: внутреннее (для вызываемой функции) и внешнее (глобальное): + +- Внутреннее лексическое окружение соответствует текущему выполнению say.\ + В нём находится одна переменная name, параметр функции. Мы вызываем say("John"), так что значение переменной name равно "John". +- Внешнее лексическое окружение – это глобальное лексическое окружение.\ + В нём находятся переменная phrase и сама функция. + +У внутреннего лексического окружения есть ссылка на внешнее `outer`. + +**Когда код хочет получить доступ к переменной – сначала происходит поиск во внутреннем лексическом окружении, затем во внешнем, затем в следующем и так далее, до глобального.** + +Если переменная не была найдена, это будет ошибкой в строгом режиме (`use strict`). Без строгого режима, для обратной совместимости, присваивание несуществующей переменной создаёт новую глобальную переменную с таким же именем. + +#### Возврат функции +```js +function makeCounter() { + let count = 0; + + return function() { + return count++; + }; +} + +let counter = makeCounter(); +``` +В начале каждого вызова makeCounter() создается новый объект лексического окружения, в котором хранятся переменные для конкретного запуска makeCounter. + +Таким образом, мы имеем два вложенных лексических окружения, как в примере выше: +![](images/06-closure-2.png) +Отличие заключается в том, что во время выполнения makeCounter() создается крошечная вложенная функция, состоящая всего из одной строки: return count++. Мы ее еще не запускаем, а только создаем. + +Все функции помнят лексическое окружение, в котором они были созданы. Технически здесь нет никакой магии: все функции имеют скрытое свойство [[Environment]], которое хранит ссылку на лексическое окружение, в котором была создана функция: +![](images/06-closure-3.png) + +Таким образом, counter.[[Environment]] имеет ссылку на \{count: 0} лексического окружения. Так функция запоминает, где она была создана, независимо от того, где она вызывается. Ссылка на [[Environment]] устанавливается один раз и навсегда при создании функции. + +Впоследствии, при вызове counter(), для этого вызова создается новое лексическое окружение, а его внешняя ссылка на лексическое окружение берется из counter.[[Environment]]: +![](images/06-closure-4.png) +Теперь, когда код внутри counter() ищет переменную count, он сначала ищет ее в собственном лексическом окружении (пустом, так как там нет локальных переменных), а затем в лексическом окружении внешнего вызова makeCounter(), где находит count и изменяет ее. + +***Переменная обновляется в том лексическом окружении, в котором она существует.*** +![](images/06-closure-5.png) +Если мы вызовем counter() несколько раз, то в одном и том же месте переменная count будет увеличена до 2, 3 и т.д. + +💥 **Замыкания** + +**Замыкание** – это функция, которая запоминает свои внешние переменные и может получить к ним доступ. В некоторых языках это невозможно, или функция должна быть написана специальным образом, чтобы получилось замыкание. Но, как было описано выше, в JavaScript, все функции изначально являются замыканиями. + +То есть они автоматически запоминают, где были созданы, с помощью скрытого свойства `[[Environment]]`, и все они могут получить доступ к внешним переменным. + +Когда на собеседовании фронтенд-разработчику задают вопрос: «что такое замыкание?», – правильным ответом будет определение замыкания и объяснения того факта, что все функции в JavaScript являются замыканиями, и, может быть, несколько слов о технических деталях: свойстве `[[Environment]]` и о том, как работает лексическое окружение. + +Есть только одно исключение, когда функция создаётся с использованием `new Function`, в её `[[Environment]]` записывается ссылка не на внешнее лексическое окружение, в котором она была создана, а на глобальное. Поэтому такая функция имеет доступ только к глобальным переменным. + +## Сборка мусора +Обычно лексическое окружение удаляется из памяти вместе со всеми переменными после завершения вызова функции. Это связано с тем, что на него нет ссылок. Как и любой объект JavaScript, оно хранится в памяти только до тех пор, пока к нему можно обратиться. + +Однако если существует вложенная функция, которая все еще доступна после завершения функции, то она имеет свойство `[[Environment]]`, ссылающееся на лексическое окружение. + +В этом случае лексическое окружение остается доступным даже после завершения работы функции. + +Объект лексического окружения исчезает, когда становится недоступным (как и любой другой объект). Другими словами, он существует только до тех пор, пока на него ссылается хотя бы одна вложенная функция. + +#### Оптимизация на практике +Но на практике движки JavaScript пытаются это оптимизировать. Они анализируют использование переменных и, если легко по коду понять, что внешняя переменная не используется – она удаляется. + +***Одним из важных побочных эффектов в V8 (Chrome, Edge, Opera) является то, что такая переменная становится недоступной при отладке.*** \ No newline at end of file diff --git a/docs/javascript/04-functions/07-global-object.md b/docs/javascript/04-functions/07-global-object.md new file mode 100644 index 0000000..c0597dc --- /dev/null +++ b/docs/javascript/04-functions/07-global-object.md @@ -0,0 +1,20 @@ +--- +sidebar_position: 7 +--- + +# Глобальный объект +Глобальный объект предоставляет переменные и функции, доступные в любом месте программы. По умолчанию это те, что встроены в язык или среду исполнения. + +В браузере он называется `window`, в Node.js — `global`, в другой среде исполнения может называться иначе. + +Недавно `globalThis` был добавлен в язык как стандартизированное имя для глобального объекта, которое должно поддерживаться в любом окружении. + +В браузере глобальные функции и переменные, объявленные с помощью `var` (не `let/const`!), становятся свойствами глобального объекта: + +- Глобальный объект хранит переменные, которые должны быть доступны в любом месте программы. +- Это включает в себя как встроенные объекты, например, Array, так и характерные для окружения свойства, например, window.innerHeight – высота окна браузера. +- Глобальный объект имеет универсальное имя – globalThis. +- …Но чаще на него ссылаются по-старому, используя имя, характерное для данного окружения, такое как window (браузер) и global (Node.js). +- Следует хранить значения в глобальном объекте, только если они действительно глобальны для нашего проекта. И стараться свести их количество к минимуму. +- В браузерах, если только мы не используем модули, глобальные функции и переменные, объявленные с помощью var, становятся свойствами глобального объекта. +- Для того, чтобы код был проще и в будущем его легче было поддерживать, следует обращаться к свойствам глобального объекта напрямую, как window.x. \ No newline at end of file diff --git a/docs/javascript/04-functions/08-setTimeout-setInterval.md b/docs/javascript/04-functions/08-setTimeout-setInterval.md new file mode 100644 index 0000000..d113c56 --- /dev/null +++ b/docs/javascript/04-functions/08-setTimeout-setInterval.md @@ -0,0 +1,69 @@ +--- +sidebar_position: 8 +--- + +# Планирование: setTimeout и setInterval +- Методы `setInterval(func, delay, ...args)` и `setTimeout(func, delay, ...args)` позволяют выполнять func регулярно или только один раз после задержки `delay`, заданной в мс. +- Для отмены выполнения необходимо вызвать `clearInterval/clearTimeout` со значением, которое возвращают методы `setInterval/setTimeout`. +- Вложенный вызов `setTimeout` является более гибкой альтернативой `setInterval`. Также он позволяет более точно задать интервал между выполнениями. +- Планирование с нулевой задержкой `setTimeout(func,0)` или, что то же самое, `setTimeout(func)` используется для вызовов, которые должны быть исполнены как можно скорее, после завершения исполнения текущего кода. +- Браузер ограничивает 4-мя мс минимальную задержку между пятью и более вложенными вызовами `setTimeout`, а также для `setInterval`, начиная с 5-го вызова. + +Методы планирования не гарантируют точную задержку. Например, таймер в браузере может замедляться по многим причинам: +- Перегружен процессор. +- Вкладка браузера в фоновом режиме. +- Работа ноутбука от аккумулятора. + +Всё это может увеличивать минимальный интервал срабатывания таймера (и минимальную задержку) до 300 или даже 1000 мс в зависимости от браузера и настроек производительности ОС. + +## setTimeout +setTimeout позволяет вызвать функцию один раз через определённый интервал времени. + +```js +let timerId = setTimeout(func|code, [delay], [arg1], [arg2], ...); +``` +💥 Передавайте функцию, но не запускайте её +Разработчики иногда ошибаются, добавляя скобки () после функции. Это не работает, потому что `setTimeout` ожидает ссылку на функцию. + +Вызов `setTimeout` возвращает «идентификатор таймера» `timerId`, который можно использовать для отмены дальнейшего выполнения. +```js +let timerId = setTimeout(...); +clearTimeout(timerId); +``` +## setInterval +`setInterval` позволяет вызывать функцию регулярно, повторяя вызов через определённый интервал времени. +Метод `setInterval` имеет такой же синтаксис как `setTimeout` + +```js +let timerId = setInterval(func|code, [delay], [arg1], [arg2], ...); +``` +Чтобы остановить дальнейшее выполнение функции, необходимо вызвать clearInterval(timerId). + +## Вложенный setTimeout +Есть два способа запускать что-то регулярно. Один из них `setInterval`. Другим является вложенный `setTimeout`. + +Вложенный `setTimeout` – более гибкий метод, чем `setInterval`. С его помощью последующий вызов может быть задан по-разному в зависимости от результатов предыдущего. + +Например, необходимо написать сервис, который отправляет запрос для получения данных на сервер каждые 5 секунд, но если сервер перегружен, то необходимо увеличить интервал запросов до 10, 20, 40 секунд… Вот псевдокод: +```js +let delay = 5000; + +let timerId = setTimeout(function request() { + ...отправить запрос... + + if (ошибка запроса из-за перегрузки сервера) { + // увеличить интервал для следующего запроса + delay *= 2; + } + + timerId = setTimeout(request, delay); + +}, delay); +``` +***Вложенный `setTimeout` позволяет задать задержку между выполнениями более точно, чем `setInterval`.*** + +## setTimeout с нулевой задержкой +Особый вариант использования: `setTimeout(func, 0)` или просто `setTimeout(func)`. +Это планирует вызов `func` настолько быстро, насколько это возможно. Но планировщик будет вызывать функцию только после завершения выполнения текущего кода. + +Так вызов функции будет запланирован сразу после выполнения текущего кода. \ No newline at end of file diff --git a/docs/javascript/04-functions/09-decorators-call-apply.md b/docs/javascript/04-functions/09-decorators-call-apply.md new file mode 100644 index 0000000..0ea37fa --- /dev/null +++ b/docs/javascript/04-functions/09-decorators-call-apply.md @@ -0,0 +1,25 @@ +--- +sidebar_position: 9 +--- + +# Декораторы и переадресация вызова, call/apply +Источник [https://learn.javascript.ru/call-apply-decorators](https://learn.javascript.ru/call-apply-decorators) + +Декоратор – это обёртка вокруг функции, которая изменяет поведение последней. Основная работа по-прежнему выполняется функцией. + +Обычно безопасно заменить функцию или метод декорированным, за исключением одной мелочи. Если исходная функция предоставляет свойства, такие как `func.calledCount` или типа того, то декорированная функция их не предоставит. Потому что это обёртка. Так что нужно быть осторожным в их использовании. Некоторые декораторы предоставляют свои собственные свойства. + +Декораторы можно рассматривать как «дополнительные возможности» или «аспекты», которые можно добавить в функцию. Мы можем добавить один или несколько декораторов. И всё это без изменения кода оригинальной функции! + +Для реализации `cachingDecorator` мы используем методы: +- `func.call(context, arg1, arg2…)` – вызывает `func` с данным контекстом и аргументами. +- `func.apply(context, args)` – вызывает `func`, передавая `context` как `this` и псевдомассив `args` как список аргументов. + +В основном переадресация вызова выполняется с помощью apply: +```js +let wrapper = function(original, arguments) { + return original.apply(this, arguments); +}; +``` +Весьма распространено заимствовать методы массива и применять их к arguments. В качестве альтернативы можно использовать объект с остаточными параметрами ...args, который является реальным массивом. + diff --git a/docs/javascript/04-functions/10-apply-context.md b/docs/javascript/04-functions/10-apply-context.md new file mode 100644 index 0000000..f26238f --- /dev/null +++ b/docs/javascript/04-functions/10-apply-context.md @@ -0,0 +1,64 @@ +--- +sidebar_position: 10 +--- + +# Привязка контекста к функции +Источник: [https://learn.javascript.ru/bind](https://learn.javascript.ru/bind) + +При передаче методов объекта в качестве колбэков, например для setTimeout, возникает известная проблема – потеря this. + +Метод `bind` возвращает «привязанный вариант» функции `func`, фиксируя контекст `this` и первые аргументы `arg1`, `arg2…`, если они заданы. + +Обычно `bind` применяется для фиксации `this` в методе объекта, чтобы передать его в качестве колбэка. Например, для `setTimeout`. + +Когда мы привязываем аргументы, такая функция называется «частично применённой» или «частичной». + +Частичное применение удобно, когда мы не хотим повторять один и тот же аргумент много раз. Например, если у нас есть функция send(from, to) и from всё время будет одинаков для нашей задачи, то мы можем создать частично применённую функцию и дальше работать с ней. + +## Потеря «this» +Мы уже видели примеры потери `this`. Как только метод передаётся отдельно от объекта – `this` теряется. + +```js +let user = { + firstName: "Вася", + sayHi() { + alert(`Привет, ${this.firstName}!`); + } +}; + +setTimeout(user.sayHi, 1000); // Привет, undefined! +``` +Это произошло потому, что setTimeout получил функцию sayHi отдельно от объекта user (именно здесь функция и потеряла контекст). + +> Метод setTimeout в браузере имеет особенность: он устанавливает this=window для вызова функции (в Node.js this становится объектом таймера, но здесь это не имеет значения). Таким образом, для this.firstName он пытается получить window.firstName, которого не существует. В других подобных случаях this обычно просто становится undefined. + +## Решение 1: сделать функцию-обёртку +Самый простой вариант решения – это обернуть вызов в анонимную функцию, создав замыкание: +```js +let user = { + firstName: "Вася", + sayHi() { + alert(`Привет, ${this.firstName}!`); + } +}; + +setTimeout(function() { + user.sayHi(); // Привет, Вася! +}, 1000); +``` + +## Решение 2: привязать контекст с помощью bind +Результатом вызова `func.bind(context)` является особый «экзотический объект» (термин взят из спецификации), который вызывается как функция и прозрачно передаёт вызов в `func`, при этом устанавливая `this=context`. + +Другими словами, вызов boundFunc подобен вызову `func` с фиксированным `this`. +```js +let user = { + firstName: "Вася", + sayHi() { + alert(`Привет, ${this.firstName}!`); + } +}; +let sayHi = user.sayHi.bind(user); // (*) +sayHi(); // Привет, Вася! +setTimeout(sayHi, 1000); // Привет, Вася! +``` diff --git a/docs/javascript/04-functions/images/06-closure-1.png b/docs/javascript/04-functions/images/06-closure-1.png new file mode 100644 index 0000000000000000000000000000000000000000..8193d78180bd20777dd7edc5fbb5f66337b129e9 GIT binary patch literal 14503 zcmd6Oby$?$`zK0B2n;Pa2uMjc%+L(oAe~B&lys*IAR^uE5RwiJBBdZHF-Uid#E{ap zgYWnE?(VhMUc39>{=+cOb=`OVC%*Mx`Gz2bH+0y+`SrReH z+V?h&0@A@70|Obg&A-nFeRBnFpTYnTTm~2*(ekE?oBp3K@v#uN%-ux@t}>XM2L1U~ zlkFV(jvs=H_w+yC;YfNI7BxO0y7Tv9Ehqr;=3zJvy32~rGeKMinFvT2y7vJax^+Cg z?BBbck)vBH#ou)VKmzd5t(ki7I^r@&hND}PT0iF&WI>5B<~^=6zwz%NYVM~R8z1kp zlRBcdSzllG^6dWUJ|sPz+-~A@8wBA2`<$ffOa`xG8GZK7sU>FLwqLW8y?M$df@toy z8u4f~s*hYxC7&99N35@@eT*rUX>Gtf7{O?CcsM6x?{9uWGwzKZ4*TC9nB)e(=k}wr zcb*nNvwl2ySj_wYwUT@oJ{+72>BNA@Mib!1)aq^Ie9^@v99*<*q0)hd#JM$k8bYD2 z_uza%Kkk=fGr+JO{2kyXKYYYvH5JI-&grk}P`Lh!RRbKG<6ffMCShA%HtO}|SDCAa zBMl9W^>D7lb5qlb6L)v__1_}}`Wy*7LCXZswY3>GhVu+ir>NPDvL3!?!#{rLT-w;! z*wgi-1Ho=`DH}l061&KBdvLqG`>z4&=6(h#sTcL7rKQ#7qSyoXlXb(xsbC6$?gcuh zH)T;ZK8t>KbWphK^)Et$^P&ryJ|3}6Qg#-efgM)gqHwS3&aHUlqdLDDvz?XafuFu8 zcy`(}s|Y_COvE#xEJI=YPbeIlxC{R=0uJ<5N8>SkH~72UYBR8IVwT;iXo?svk#(LQ z?&~H6jr~istZUU^|8Xz*YazWwE4^HCP+((#Z?D4naZ6w<0}}_eMy@#9>4JOQ)gM+V z?OVxGPGWP_*oLXY94ewr#_c8!M@JMbepXnbpu1jMGdSC@9+s>5tLNv;nQvbmF4CF?%f`nv&D^bpO-0B z&>_S6H)KAJhIg0DcO6c~BhSX3ZMPR`MG>jDtR~&71@wM1Z1JhqX|OzZTmREoS633~ zc)GW^SlaHg{6_TG&mvU~>a$dacl@Aiz6%y*S_(=jkxOnpoLH(}VLH+Q1dK&YkH9|*!){s>w#$Zes;WRXmo}8Mj zvx`6re=;0H;sj1B{o z4AUW)4O>1;rwj`ReHa!PBQL|S_N~s(?H@xhYag*J-Y%T3#UCfnQqr)r2Olaot!6DI z6XOsj8ocn84>xj}sp}iZ>98H^O*phJ;W~s2>{m>h2kHgg{4U^z-^&6qoTns~#X6@R z&J*NUTo_v078Nkz=ZLy4R}>>dQYQ7k#5zD}-VT%tRlOR#b zccN|MtVYIPWjb*&7tKJa;C{Ubx#M&HiO>DG428|o=uD5t|B8fWV>@#_I!r{xW>pC6 z2G^(=(iigtFqC8^=sfkDbbe-{<0JD)u;|-6-Ni@MM(gflf@W!DG#bj?N2a~()f*+R?Y=Aa~jtvImwzr<2{I$pBo#q+YRUH)dJG1r>Z0q zWkY~5o1?|5R#qTQ3=UP9Y9wDz=r(=CSxqjIF zqHzlTSKCjUey$Nw$<}}lIpY;W=kWa_EWJy1hDZI%k5){>DT;Hxl+LD=jaPF|=&4$% zCRK=kmJgE5k4%2ywK2|wnfR?ImYORsD08Rr9RMOq_s_PEMq&g?N^*P0%(J|py{Z1Q zxJ8tbk>{;(<1i5|yu zO~VD1FKKTiugtTgoPlf0xF;&o7_D2$uS!H@B(aBrPlIn8)pA7jm}3fZa;v{K<(`dK z>OQXUJKko^eQT^h)p5Ux_Ja9M`&k#y+WvAULfC9@Zob^c|67p3^m@4`JDVwH&uyoW zPEOh(gR=kpa*pPCD21?jH-} zIEYIXyw)XBs!_|~H~J*1XOiVZ8G+u6{|5bU6?}aBnPe?>e&UKhLKat`Cf}ovX7acU zZJ~cp`)7hm3jF@R)WDwXSI-sEwF1ZAZ9K{quArxvqLv97;buV>3iq-9778A!e`^Sj z2mi0t#r+>6=dI(HTBgEo(Yn)w%89@P-wB`CnSqfVm4EL=YWPg>xpH0ahpFFw|NWv? znf11kj$xf>KRFF5-~PyjSR3Be0|eVACk}=EXAHOu_lm~xa)ZCOzQ&I!aG%rMKsETa zyG6fu1CM=r+70r0!fre(pMB8FDgBxA3-L^-L61ofY|vu`^<}xH{&^l_3*jHN*xkss z2;tY&OP;N`%kBz@W$wxAI4S4lAXvkotAW$856#A;)2}_RZqWcjRcVDl;p)AfC#->l zry%)B|Fn$jxNdjhK^m&c40`u$)bQXAN7Z&~oA*cXBA?wroqR9?2KY(+_sov+`sjG@ zQmo|5!n#K$k$WA;C0l81ReS^SjZb(WSQE}kYdTQ{s;W7A-DlE$2*9!> zj&S?&&2vCPjC65Cq-WgWeSuv>Mh!WERn&cyNCQp1!0erwLKkbSn9 zQ$hITJNZv=9mHPbHTWy(`=lN_4P1uJySkNBDL;3o2SAhHM|O?n6Wx;(z{C2Pf=kf2 zD|~Z6Y^a37Pr$x#Bo1Wx)I4XE{`JJNLV_?Kt$_~ICwo*OE^W570j4wOdi3bXFg9pA z(8t_i4VV$>9@!o2(BgkYpP+@DB#w@Dky1Y(8NUVj3`6Tq#xFF|ExERi_<6SzNoh{r zN3gBz3=eEys^K!c`umG`2Ur(fZJ%ZrfBB_j+3F-}-(Y1c{>jUhW{#+Ed!_+d`7e-btuRl~Icw85g&3JI^*pi!Q(!=to@ohm|P4D>*>$Sy!O^}zZ zQZluuO{7X!JDq#BN6z#Fvz&2`$0VO?yMXf?q!VAFwvDVBhJ!%OMFu(<{2ue!cCUv; zNKVK?L8ofyfZV))7cKWXy*>&((R8NWP|r$3@}A_l&sc~zFm5f2`-|?8DDwO?xSV?u z+hR2W=@c(^uRP&=SI%>QuuCd&x^k_xdzc?5B4;`V{&SrHVbo|KKo1`O-}}AQ{NLjn zQoIhVFj{bBfA~*`vczx<8=}BtKIM)uEgqQ8UdQ%L=#tS4MId>;Mh14js2j-Sll?WE zRemxnYatUF0D^w_V)ru;w12W%bJWx2OrhF^q%h!=J+4v zhkNn$xuB0F037+De)5^%TRNpCyQ(u=0=kvq(n8WS(0^;o>*D1cPoo~dfyYWxT z53^6KYBl>N6&+K@u_@e+FSyRnDT;H zdjXfThewKZDd+|QhhfcoUiFvD#6k3Nl80}%9?Y~JbU)TGYY)0!(;OCOZ1p=%tPDmu z9Iiz3^hZnh^)|L2b5VmWVfL5|Vg9ZEsezwQe)E!-4|jh;R!4Uh6wItPgAeOIEK)^T zCN671LSi;k*$+o_LE$BdG@le zCO^M@Bz-9&0(3w5w(5RTwr%f{vmu+$N|K(kPf7#eJvksA9!O;n(=0<-Uu3-f^~-jB z%s^iO3yH=MX0>?7o}LK6Q_z`J_j}h9gGzHQ@4yW)gs{t*`a!kVp#5}%XL;@G(baIO zNqW(i80QL(@EbgrObV=#v!_~s~Y z{N(L&XO0sgj6zP4({?DG8+&3$nZLrMR$)CKV2K{=8{BZ5Ppt}YnX8aJ7)}W0i&=7_ zqWiefkPM^Ok^Bq+rPa)&USrySkw?v@wH!tWMNfaq6q0Gn?kV7@$8F$gpMa(mmuf1f z_OgO`a%!q5gL<(4jW6~7&85bC%wv(Ufe<$Q-G@;TNvxf3a0haQbPnCD;<_9v+sd%s z^zG#ZJpVP6vC96Vug~@3pok|(J6!D^ZVa*1m6nrcHm{6%FiNPtHDH?me3kCzLqqU+ z^ox?q?*lOn?c%4|;>SHwWqv&R2t)4X+M1n}&*Q@o-_R@yI00JIScEPIWl%)OY0KenaKCzr@ zpKCQr-0<_G4Gz28-R3=g3$@-XYJK+SUllgO^&l;mz+rGV^Q!#_Sb}1WXheAq*{Xhy zk6qj4__c14AF?Cq<_#+NvFQU`h(G70X65zHbP%w=3N#y$-vCBkWZJo z)6@GYz{FoS8nivZb$*!ER+!kV-H4_%&WFWzgA z^=uQBpi5tFkLUNwvJ=sGdrK5e(XB5ZXevP0*4Imo;$Mw^R5mlq;a^LW{{G$aPj3Qy zLhC19#V{Y4|8@NeO`$Kx+1!g*-N)Go^#eNIX&ZjRyN?;+Wtf8hayFn6JKHxo(OCPZD2ZNj%l#4vmrtcZTl9}5@ zT&`yzj9G(L>0{o(*M61soUe{pw%mYB7&YF2HI$Ou^x5s{i(9?6gX79_B->k}imN)G z1Itx4+{dC!r;EYu0mmFKwC{JV1sG-cRl5gS}g*<8})4I1MrC@ z&OSKK)F}_Pe4sNV_4ZQYzWBh7TiXlw@&7w5jn<%Q^M-MO` zeBW^w|GY(h@H7{R432;Gtz8+chZWXmXMT(S5%~PhC6$vs{}YxFdS~M{1cVVdbgSS&V8*3cq9T%f26~*;cFA z3sfDaP{3pSm|cgy55RQwK%1D=?=-O^E5+kCnQRVbmt_m03R$DV*3BR1UXMv|nbdcV z`90D5I*Dl02U~o*^5wUj(wfexS6vS~BjiLizgoqi7F@a(Ubmehr=ToLDSks= zrnHgp9$9s(HG1Xb+yFK_6h}zOF2&se^PO1eY4fba~5Hs#tm0EtrZ48_p!7GgFcd3i^(;t zTJJSyGhIgQiUr!Fjdx258;NoY9x@l_H3w^JE}Jc@?D`$AEp(pqWc!#T%P!m$UyTIn zeyk+8XSv&Hd#2R6A>W1bVl*knZcy{^$P5cQv%U|FL~2b6R*uZ@Y-B6{5s**C zYbRa_zJmwU_x>|lWmp6#R^MT+31uh`tVULUn%x2&;W@oW#-E5jXCtAh&i2*}V+5k! zH)p>lE|y}Ruz*`c)75hBEU{)gZGJ%RXKuO@M9E#N<=AxWg`Lsi$AoAFv%El%H!Vs* zeyUD?^z|aaFN`swV@L>vnrqWl_O7co; z)y@I|x3chMOoV=RLc~u<^HkR+b3q}r+u!Y4CB;nsr?iz(we@L>CXEXIU74Rk7P;nU z=JRTE_aS;3YP`VDC2OpeqmV8c6eoopQ7f?L^~T>rHR5zCICGKvB@Sq|l=(iVYAEup zs3bsuW@K>$QD1^H@9f%2J1QAwcsS|p67Q2@hu`yvO{P^Y_ z>|nqwZ#Avl7qt0Alf<>Q)ZESQ*7&65f^7QoVt7pAg=kfuGfSRnJ4^WJ1!(on4O3@m zBf3f~Kk}N=YhygUF3!H>m<9D9G^m-&SyU$oydz=Vtu?3hdHo3%JX7lAdf+U*$A9cj zqi?MYyx9nu!-ouMeKrhKKwbBro}9tVyFW4_4@`F0U&z4WPEC#h8^T77 z7-(8@{)b=l_(UtJ)pWgZ{mI6=hQYAe3CV`8z2ZFD(&MB^m5E=3+UpItUbuv(mI&V?q_+ye>K)&9V$OQ#gyW8w|I@X$co_i1){ zE#VQn25U6S8Og%O|Lnxe&j^0f$C~g^sa|kkPyx_SD#;n{%HWWa{My8lsu|i8pnP(B zwDDa0b(LVQn1unWy5}xY>0IMC?o@#v-AdmI8^@B46UTKR`5%q&9%t2Zu=c})G#h?Q zi}C+Cm&PSjcOUod+d7bKGIjZi*y0^b>mO@kxHwci(Y4`9E5Kf=-y+z$H1OshMjXxAr5Uv;)jXW~5Pi+-`>iCVN`M(fjLQq6N`hGly)QAx4qd*+_(mI(g_$asFzLDFwK z{JXq%;)>#DwH_GIcFiKYu~|=pGFC^i3D)J9h>Rk3$@k?bA;r66Bxu=*8a`rZTsY)j zuw0{qqeyGRi;JxlEV@XdFH$*Cj=CDD?Ck?%<}_59OwMTp?S>Q=1#DXy7_oyT+tS>~ z`JMo1s=qpRHxbtESdMQ*)GmwEzL0oPu{%o1ZVY|NnREFNk4D{n9b63jeekLbv|U#{ z8|c>Qub>u;I5V{z@u-%oZ_?LuHUI-@54@Yw*MqWr*-IoE3hnp`tR$u}F#NOO05JH0Ugf5lbofBc8FISPGTOM`lM(}FmQDG3d(7q3t0`cm?N zdXdEwTXTWItUcW=?BLcstxFf)AC274W1AKhZ-4QOH8gyTE*cWDkF_o}f_dEEc-V9w zK;jzSJtpZEPYgeR`li!CNh@Z!Ru_77Uw;))TR~ZFFytNPSzl_A(dM>W8EH* zm)Rs!GO+wDSZ`ybqulcH`MOVm*}?}qn-`Ul1-AG1b!jKR1(vWb1qLxrZad^$5H#zT z0jl#i17(k|$2O=`zths4#%W#ZdAUZ)c(m5Ql7Fsy-UVI!^ zcF=Ra)8KQFclxc?z6H6vHbomwK=ZyW!D%zWq$KeWJ zlvJQ!m#jOCem@+Teh@NsHM8n(W`l8kNJ=B5=*`hH6u=(*>Q(_PddOTrF=JEu=rUEG zB%E~(mto}PtV61_j(D(=>4p>q{ptN$_Ro{D*SGWr!+AAX&z9z1%ruU0>n}~|5JZSx zrbkIr+k!B%=LpAA(EHjrkp@X(`_!yPGdI8`P@aj@kLgG&q5})dcMm~l zMiN0w0hAb;2d6D=?X|D(!`*DpLCqj$`u9%5SF2Fk{q)>U`lchL!};oYLf4ME%hrV9)`5?qNLeVc~BVeV!LY zI-Brwf-T!$7F4$VwC(0YIW4SvnK;k= zgu!KL&K|8Bi60>5YA3ig2wXV%MnjlvXz`0eG2cz!e@n{4t05|<7IrYwK>{h*LJAuM z`gFf6Dt`#+9AFI9;_IP-DejxS zlYeSANZVa7SU$iDT8tHNmQ3)bd+x|G_e}BQT&7Llme<^u0 z9w6S-{Z36N(tCPP_XS#i1WLdXr!>m1&9O|NQ)p2Sbn-Ja4z*GjQuS<&7}jZ>>)F5j z*$SA+@#Fo3vsTA+~R)EBLPx?2d+Wqd)$slHD|$z(%}y; z4^32b=>vY-x)+p{PgSdhn@{IaKeT|Dzr?{mr7YK^y;q9?FzFThCgdUc&U~u-kPlBz7^+v$Hg4dmj;L3TlRh05OTTput zmK88sZYZ;n%rV9H)5I7heA%-lNOTebDAmnKL%z-RODTZels(DXn5Aw}`@=xKRkIsFT z!MI&DdC!XpxCHHwPCx4dIq6C$$=pqvn#?9#zN~p-yNRA)qrH=W%|MXPnnhB=xo;n86xZet{Wmg`8YC)M^ z;|6x!Co?b9fr2=mbs5T+iDjOrx?ko{ZRkwydL;aNbp6fsR;jz^u2(T|NF=dcljq4Y z?Dtpgv4d^Dake!8J%edvjJK`Zz6a&wX8HsZZj&lIXX0a=#xZhVWsA zro<0?w@}Xq66WB>9W4WU{YUQPV<9%v)t!F4A)kz$paaD%U~jXQg;u3h306GLq=*!8 zKm#ED*M?uo;$8~lCj$!zbfj+@Gsll?z@y8pE}`d*zXGYhNhod@hCGx~pSDwt;Lv9$ zqt*vZ69vQRe$aP<>)DyudnV2x=n*cnsthkV8cuflHD=nI}3|Y+zn%|t!%ChE7xGIaas8? zM25Fv;=@#t)x`7!OcO*(lk={pOtkvp?J3KJI(iMBsa{}v&UX%+zMJakSTLASfG-1A zm(LVAv42d{?;@q)0YOl1r?q{3Th2BqzPwZ|MHPbs7y zZc>d~P_Xc@5`8!J#4o81xOBDS1e95^%*pajYZAnh<;#aW37#EbHsRSd|1=b%SKuP~ zmZ&b&5c81;tZq}1{(Z6Ap5KN~h>cT1GGg{6Hlqo~tCdfp*a;!4R;^H;Cx9SO2#K@r2;4EH4zj4lORd_#Z{VvCbC>Rbu zowv}jvMF8<@OB(8#cEhWA?a*tiBAF}2j?}t(cA{KxUbF{_>3?-!Uo}O=QGC2YXVJI zJ;pJD${jZ|2n5l&943*{*bYT#0KB7ca0!pn>$xrR2ZRJj%S7bxqSPVq5xu<;Tzo@6 z^4QYr?_%T9a`ZS-lrH>M>q$%Qb?$<1h&n=6S`{%hZy9`M2q4Arj!y_$Fgv#;Xo3m_ z779YEc-|_Cxh`M{7*|8~M8kZn;(Lv1b4-mVO#rl|4Ir(|69U3(QgKk-a$~4i2a=rf z6On_p4O^g^L+imI7_?rk|DooEHPtbKu##%sDA4Ql+bZyv?+jZkQZsPj1V09Ltrm)` z>Jcb=0e3~(%*#XTHcm;H*^LLeJ0C^}S>e4>nx*7im4qygKx2Y1jRGqQC*1atjMSj2!5KIp7Ng z0c_gBv^96(l5n7(*-yYn@hiTG(r)DMSZv7PJKI0C(P9*6LdizPt#D>l`qd1NUXAOsjY+n=$NFvDFCFlKIAJ`LM~WV z%GIC zUz8Z#yF9Cs2hY8#gFzUl|K639fbdcvI#Woc1I_zbh+Uc4FbUrYq3=T=1(z8-w58-p zL~uAT$X%h65?~%%W6-Q0ZEP-tS3E_VyDp)FoK8h2`&rG(19u}!ILUb2E`NaxKhd4P zML`-qa?MEwEKMdLq_}+zYBImy@k9H>-p;hMf`FBO7OvyGY!OX%30&qUwrla!XXq!< z3}vRIQ9cs`C1Ca(4E#QbB{49lPSO5`+NesS%}j8EEiCiCie9lh(0&q)o3 z&oXZn`;R}1o2GRzMH#VfNai@ysayX;eQEZGD=bR3rV!q|jL&|?UQ>?8P^fyxgr(xe z>axQWlF3wm;Qm84vQg1wt|YM*y;$^K-x@FXqF{h|h?3LH5A%OZ$iGtv|8i-XGiZ^@ z1u5O+!*J3}hxS0#Dk(sbZ(hx#y|KprT>o&VdeA#so?BOUstdiIn_5th7u!P~x=3lr8D>x557;M4=mW z!{U3Nfr94HuA6v`NJtnK+5z_;;kOQ-5Fsj$dw@2YF}?j)3@Oxu?n|J>_ja`D>wkC@ z+7^nIZ}dogbaayL>^@GvzRt#RR3k|knV?J@g3vlc1to(-w9@AaciM9;{@q#Dt~}zYqUU2H`t4@&8_@|JTU#|LQ~j|KKqz%I-%(&Anaq4qRR& z46u0eJLdu(e<&3iMAoipwJ(+jt8-g_N^FrCE<^pSA6-LJZ-|RdI!RWsyyhP^zF{|O z_GHmNupj7NN>tvAA?yXBF7Sw2j?5rwL{PDJW)Xe4p6nK(-bu`b=pJ|1g11~5py`VL^+$qzr8jSd)A*HU0 zGneKZT!i?BV1Zdb`fIWvgTl4ZJQ^@yPq|dGMMtv9bzbkm19LHy%aSG+@K;%5Q+g}Q zEBL)k?$kmxC|cB%RSwNgmyo_=DxC$*tIKsXG<+`SIDMLW9FFfE=5)~xf~?69Gm~ypov@9i^Ii>@oP>8 zBwGAqS2l)qe@bO(a$AY7+4dCjsxQAW)@v#!A`&0?SX}|~K-k;eb|CZ;#g5(1w~z4TBF~(`q_u6W40$>_cqnw zgI@%FL*V1ZB-ksg9;Wz>57#o=XwYKe_HR9=kKiqX`G< zAVs3!xh{t=<3uye!{#U@fh1glv9i!dlQY5lZ~xGV zYf$pMU{y6hq_trxDxb9d_D8)%e&y`{U_oZR{8OmL;z)xU*lbyS*0>$tt8U2n zlT~aB2=1ojzf(C<=RKa}Nd`i(q%$K0lPM!$UBfZPcu{c=3Qr7~Zrb66ylWLwD?3&= z7JJ)L?kBBZldiW7%EnIWGYQ-Zs)y{CyD4b^ifD{E3T3dz!M=|#4gFeO*+0E9HVN!Y zydwmrd9r_+oE-ZZBJ?8j3>kOuI?9BlW?zj?1m&9Z8{^SsnM`IDdK{0HR6BDB{Nhdu z^F8;fmX#S{qn5Hkm}LWSV-i;F`q$!hDhQv-5)i^Hrk5dUW%h-Okybf@>i*$4khY7+ zA@4)oC>^i1t9;QHo`dU3o#a*oF>{PPHfK|tWm1_G4w9*x?x~+u-a zV_^WX1N1Gv#kKpm`fD(YKWM8(czqB6`A1diMeBsRJBE~Q2)ab~ZCgJ{-v{Xw(zK8$ zZq)3v<`);$XE%-#vg2{gkKMPQD-~Aa5L%*pxI)tpuon+O;MLYG#Znr+S%vrKJZ@h|_$!RWH!!_5F6GbO+otLO2u zEX|s6Nqj+qM5j~4@mrNL=h9EQJ@uw-g(vP0BpD6fxn=vosFpwLK5z3(0Mb4Iv)Zya z!gbw!(#S5Xe?g%D%3q{3wGWig;*|nH!kfO=s^<;8N!tx?cm>|3cwn%4{)m-8FYI}^ z3PsK66Vh-Elvq5Ky#N?ZG9rw8$x#$E;j9{c$PpcsWrk32cqW4q6?4(XdMj}^=(3io zBECXmcUwknx$O_<0~n4ipV~mY5N-^%s($m9w+)@vsm8zC+87pr2Ps$z*q*}yE!r8# zL4pyvQblf$9IHsl4rzH+Tz^9I^1?!(Qnceq7QS89JZ8uviY(dEg`ZCK9mZc5FnV)+HL4VS)Mp}n zmH@U2or^?k3?-;9NxoZ~;%@wo+*H3xV6WfCph;*mPf@83^KYeGx{fc(QC%gHR@3IN=vQc1tyeCSL9e~AZQSRARt~+|&!p@(O|$wX9Q34yIiq2} z>#)~s={4yo4dJimKcdi5-&ZznF*=QRlk|nS<*Ki$D!5=6z<@_UhqokItqiP>f2`ya z0v-Il3O=6H7)Rk97qAX_agF<*tK|48zHP%v{8@cfF$nMM(Y?Ni^PbYflWDt4_2UQW zT+<2li_ZCO&vD|iD`up1U#50q1-AIr_vuAYGruJdDGEjLir`XJ#`8gxT>d&WGtlNl z-8U2&ONRcfg}W*vGAVLI7D;$7AG$pd=ju9oFsnzD&IRf4GwJIajJtdz*|K-9T*zjI zU~R&2>ZAVKr?7a$KVHxPwmV`hDN!$JObj#-K=ha?+^T!^`@jvtC}|f*AJOq%Ww}n$ zD+P1GF;+b3L`zGz!u*1gpaqx60-S-BdS>&8l%cTvANS}Bd_wV*o-*Cu0wpZ{6482> z&w{D)JzL&XRcg*C*EYIP0E8cHuSCBTcTn`V>_r>H7?`H+R{Yc4y1 qT^Cp(5Pi45FYf&xFJ|8o|Ef;-InvVxLcf5Bp)9WyIgBfnwB-#Ldt_W++I>gA0e&C%WcV?npp#zd=wpmhK|BPshZ zjBzBvXVXGw+5&YLmiq%o!n8|5CmCug*_TF^1bu@dpMAh$tG)bU@yzeBwumi;g7W5r zzGP8|$zHnHmUz}srI>f%$sM^b_oF~^-3!I*;d@#V~9*uw@z!#`_|k~*$>~7CBB)-jb)7}oIbZ(KbD>B(YVucwJ{iJ%R~g3ofXmpV$4(&MG2W}PusFEY5$1eOc%%&8s${@FQa`mECD?*h%zop?vdx~8&D z#4pp1!Dw417Wxw*hHnwR)J~3X35tq48f@JV(;Qusj^duQBtwP&UD>PENASd?jA{;o!wcanGP`q_4R(#sIYJ5@9Y7v>@mwkU;k<#MU+GpsMk**1>Dble>61Pf z0Tu>Cb2am7R5LabhB$kKDfuwR?5XRA{B$4jA-7CcUFpf)ViOUgy7kb=^u-2TCHk=; zdd(@x;ZI2u!t4xQN#s9KJ{(Wc8qwH z1gjh~r89T^4-u=ZD!3h4fu*UQaL`KNRQ70t*?t|#(H`xngfo@Ji9W8~d0h(%Z$s8; zx1hH2dW+?b%#Rx*4(q(G%Qy2*{LT%Y-p)IZB>+v*POw+)Z`eK&5BGK=S*Y-${rvcz zqqy9c^b%5Vbv|F@ZcByU#rXP3M=eEaWQGy_l){(S8eL+Y3voQ8=d(kz1_oN5p4C1` zqlLr?vzeKhj-kL~p}j(_z$X{2tru#0eDvpOX<(~x6Yet6!0oiD@<4>B``Vj?z^WQu z$N4H9kE&Xljpo&}qbo;X3om?%Yo64|ZacAuVXbXqEC z?5l0|zop~yUM$>g;Qmhj!3@k>gAip7n;H(~=zGL#T*vU(X@*5XC8&Ov%Z%iD5A6~i z9)7o8GT_W(@ApcaQQqB@zEnP*2*E~g8EFEiD7kaif<{~45uEJfZg6eoA zvm@h+Aaj|BBlkm6cT_(`OypyymyYUlWpiXB&f7tQ4c#i2`^DEupGPA0>@<^BS$yk2 z_YEd4Q0ZQf{Ap4>@Fu$^nSrpI$uDs~Pa1(SHb9fI#%+>Lgj zF_S)mXl{ah&BpgFC5M6sTc%Bqz2SQF#;x*5ADywfp~?Uv&{3jOrcVY|oP~4<-El=y z=se$ol$%2Ar8@3`_(W-rJQ9E6KwX)whdRN1XOn;vBq(d(u9v0UFy^lItjaSwfcBC|u^|T85WZ-n*va1|D8s-y2fY zQh9sC7DaUyebG=>ac_7}5}RUF?AjWe0Q7fx=r3^#+fK`k#Ln!Zq7ltOtVF^nNn<87 z3o9*sfSnq`19B0oF%qnDNtT-Vd1YqsZAwH>HR65F&bXEQm-K6imu3SM<+1kZLf;JH z*N;xhOU=gBYT~$t=FG$xy-Z}31HLI}7L|BuHlqEVY(%BjF6ZBIYl!@W>bIdaeo<^dh>4XP)gQ>6|c^NFBR*>sG@~!1ya^y{`u&8@#fJ zAQD4^yZ0J3`VU~Q6?V&BG7@x29?=SI!)kVe<&g!KXnMB8UCPD)V<*ZomphZ}s>r%C zzkPAt-)GU+eh$AfY~=)1bm8er6san~IkT-Av%Cikx65M$qbkH>d#dbhRFw8J*&GvR zSz~NFDPN$8PX>4rX8VZV$8PfJ>h>J+4RMmtYi=KG6wXR8T4tI(7|ipr@k1n_EITF) z-<>SJezMoYY1AqI-Y&{$h`;4xl`nd!JtCSfU@v+(>H4h9vNxG?nak`n>UU%7rIFV9 zGhN-NA%DOZicc2!b}q*9JEZ5`B1Fd%u5?@MBGcVbgONi&JyU(o(Y4LOa1IcC*YAs; z-qAr<>q?!CG>?5w;frtR9`(+8RX9!y?$rhzh%C?Z`OD6|6}@7Yx^i>d9OHZ!v5vP{ z?tcm`yO0j}-7ZLQWYp;O`QjpouZe-6tIcy!bkmT|cb(DTd(Cdp_4&NOt-&z&;(aZt z)7(@M&&_8pt$AuGaBO-X8UKT&h)&w;UqtiqRYX$1W!}JSJRFz4;tSss%F<}n}{n|czsfBzc{@p1#`{U8Y^ZI6wpy=Q0 z9RsFUp@^=$ayyCCSP6+5uU36;7Rd%M_l4G`n)bfa>mmx z;qSMd!1-^L6>T+58hE7_#QpN8v>m=LE=c;Sjv-WriZ{x-VU7cV0-m*}4$`4Rwq{z2 zc{0x=b6$1pw0E_fBX;55^Dw1A#VX6Ii&I~nxUhS-4nCM&&&*CJ4A#=aAcJ|sVE^Cc zzt3CG#VhgIC>Xj?ArtGLz1@1@-q%eY_M4c1%>(ewt(l)mt*qOnwmrz_Cp$u z!q-CiJJK^9CQGLcLgO)R&|+v^H%)>&YRoCz{1#Q>#2DgDn!nEl8%hF%xQa@TphQz} zIcQSbcMTdp?o}KY!iA^rkIj+8(+LV0tsA<(&b@7vJ^_Poqp!|)l9*&N)5{=(A}v>* z;M@2Ih8_&OS8HY0Ge%(=wN_n;?I--Xc*~49@NmlOU)bUX87J$*Is5L(-P295N|5EJ z$`=FFRyK7U2?u*Yru67)zHP{8?Pv(xwYPj-O z$V+=-=#qP1Bt4<{J7@Oh0|ih*h@kH?>;!5_=tm`}Vho5ghZQxHe`hfm3mci9%+IEg z&arcL5+pK0T==z#f}fG`Rp8Y@CJk`X7n?SX^#gr-mJjFdzoln`@`q|rg40CEfR-62 z_i`={8Tjqn`;oq%B6d104!cR34K=AP(E}nWQJ%Xc)s;AmjM_+IIUKhHGA0yc^8Tsm z`y|SwcAuJwObYsUb<@P;I?EQO3Q51mlAZQVByhQ3W~G$eB|w#Si-9(q*7MLWH}|Eu zUT;Rh$<`)8V8q<@^3jL=0BJraO+r6RoufBQvE5&bY+nWv>ON_|c$Z(*bA0>_Ye?d< z3N+z)^s<4_tm(wmWhYL~3`{_R&F%H8Pl^6$M4Jy1D`RDq(?3bc_4{Y#P*gWG}@d=qTBGV}CJZGUy|LbXF`Ex|X) zU?ka5b4Jp^2)$XdJKPs*?U#AlY!4Mz8;M-v-)G4$@)O*TX?a-mDq9RpZ z;aBxwpJ{eoJ(|akX%$2%)>lKjfqGFKV|eGS7yEstQsK?ARWb$U`k>A1Xaa7{UuE}X z!w>woGp`MJ12HPXRv3!N^pJ}ZJ|vv6aUbpV7iB0NrO%d#Rt28Z>Y&2MzTuy3zHBID z^j!QNLj&b7m;*mPKYkuLUHM|Br$WEVTy~ibRGy?Vn3LjCof^Ay=a}@{_rw9P@}}?h z3FA>s%-?4eH-Rj*Si~i|2JiAia?IsPRXQ1}>}OS_MEOHQ1qbiUp*vq+b0kEqvz5#A6SW-_Dk5j`6LVY7Gind}LK!pVcJlxKN|f z|6V{6s`E^V8f8 zb@R)deT~28$C)7Ct-XhmzBb@CJ5EUxws zJFa@_oZ;Vo0+m>m5l7fx=6N6EVOq7|j1E?2)4wn^-b*OxgWHm&%xN`4#%31+E3%df zJ}`A%?spxwSny?6xzz+0MHhwaz3v;U|0O4bZYgj-o6&fGO|akMzPS;3@To7fscuB& z$$F?shV2-+V~qR_%2o6(2FZ_r-^7i(_@by zTEqI}PIIX19L5GMDF_P$agvuv7cEl#-` zV}g9i(7)f4Wq6&9Hzii(b-qfm72oxup*j!07Xp6_CkOj}(C@+}2VXfHnk5BnlLvQs z5La^FT>Zq9K!NPLQZWu^a@6(mN;F&-*jsXDix znrxx*`cv)#5?w#pp^GvfVjHxGb3rFRJ{o?bz-}PhrIde13SRrgm)iZ+7Su&y{wZD{ zykQ!TD9gWSVB6uCKu>5!w^h>!A_|H18XP1T^34oD+bl3IR6IRYM0RkiCCKA2b|^R| zRIUt*E1c5Pk)R0Q-rQx}Ic`T)fwL8zImiWd3qrlobZdtK-4O##@gBszuU3R{f(TnH z<@c-PAKJ(J*CS2ot6#m^C}_l?1ZTu6kLNwfFdLs_W%@SrQPd4x_@#}`G(Ymq;^Q9? zDXfDgd1m=MkP98gm5dnWrre0n#YY$rPNOEv(nF$G{*0bm>ldC;alkws6uB8wf$>k?27H&(w1NXiT z(0J9{#@zG&DdpCPdXKpO!AOsnEmmh$LUH<9f`PY|t}+RmplUS(MaMs)>1@K=8+h`Z znLy^Y$;;B}q#j~DU<#sN6sm&djRrS&+Jy29hir_&z$a| zt9HNUKwM*$Nxd&Qxkzo6IDen~sPtWelng$9#I1Am>7__6`fS&)W20HYR4SBc^A$%| zOM)~BYurzsPC~n%b845cVGmzV!(82u zytm{~Dw+|J80Kj#gi<12c_!)2#Z8icB`$nq&_ppm@1%W?49v63M~?mdN_DO!@VWCs zgRcsR>OgJS;5b8%&GA|^U9wz$+xLP_s|o`rmCQveC6i=4xD8y7cH(Pw8XXDMhIP+| z7mO$n7Em8!aY8Y|$7HE!LDxoZTQfHA?k2dpURa&+3Pz1gDr>Sq2sb?}Pgzb+)yH)! z&flGPc81G;**WI#5_&${@sV?g+TMEo^DW^(u`5V@bgx zyycmRC$u4vq(Glds48;0*u8@$EPcE1L`0nyDVTeAUUmkI=_dffM!TCZ}LS zq(@K9H{<41Z{I0K5mN=zT!7aR;V~#pIM(WywW|W+S!p02U#j!*Kyxv zMem2@vuUs4{T=_)(-4|Tve#={+4g8|zH8)!&5gtL-k)yU*w@Hj?%eg6{j3nZDnWt6 zLac{mP#rI40#o7`+ZR)c@F7N3@wxT)2o78|-!`q}SWK=2y7xUBG06hjW@AflX)N#e*Q zHi=KP^SEB#rb2;mt$9(bBKtvj_gCY-7ep+?(fYSaFTz}Ua0Vl5%_^gn`TL0`L*Js5 zk7ZB^NX+g0P+~db4hpc7QOdN60p8Vy3EHkIiB(VQk&>pr68Rl>t@2)dvo`1qoax9T zv!;>-4mH2?7!vq;J|`sAc3D#Na#eNKt)Bm@_Um)EM)vw5M0CcE(37dc&U?yU|2sq| zK6#A8r|74R6VpA`@c%j-H^Eo)-{rbN3~(|aI#ZfUvjXYG4USk29c1pg^H=D)NjgOT zzrSugHgFn01r!npX@OP1=bb*Ll~E=J?rCCn54wZ2SXlOYAyH&C=K(0C$ad9hIQ+4d z(VEdY$3ZXK`rNPbl#`Nzrw7l2JndKjn!$1gB(3=46v*6ueICX z5`PuX@Ml%B)4SBouiZZ#Eiip8D@a-SD9&D!V<|3tT$AB^{jJffLt@zets8olKKrcj zri(uT2BYi^ zlt_nwr^clVxMI^9-b2FJKf;Y zxl9gtqsyUNuy8B%HUPzN+(=g?USNu4y{j|@i^3rP=lPXr)20^$_DU&ok#mjhV#vMz z;}4NgI-y&%+7WN1obflNbT&Cw%D+Ngd27caXD7>MdgK-V?NElhX$f{_%tGc;KpQc< zO7LgPZwz*)V~vsd)zRB@b;3;6|p!Q`K3kckeiXMPAa6RA$CCuvE*OYgG{N)LjkaA@j_;s^CD1m8l^>Z~Jn{2?^r{5{>3wdlfx9C3}6b2LaubzLf)uZRj3B+vA=R9SY@zo$V_ z=^-NF$+<)+RIz#Bcr+(diew69XRH0}(et718f~=Q{H{lf7w@@Y^%+~xE7!C@Nm-}Q zM&_;S3X+e2DPv5kL1KiXK+CU~*dsU>8uip+PKi{K(9o&pUq%N9sZ*MdKBYZ!4@acC z5rU@pbUzz2I?p%R=kD_I+!y!WCPoc;1BI2mt!;z7?<1^#3M(_SvuGxmLh?b{z1JY^ zpG*;XznOSdM#D6m;pwlybXep)U^6{d#M}9quWqf!U}4#stw=uj+L61^+Ik&)Gha4< zdxM+(Tw~vTbDkPafIUh<{=!V?EWyL@bIZDs1QRT?{dS#`)JGTk(P5?j0`+v|yyiHY zSa?yHsUdh*RCnx=5XC;XVoew+=h;>1`L+*X%od!!ry|Vt40ILvF_ZaAM#}1eH--Y? z1|B(>`p6`;vv_uE8(ETD@lp0B?=!B4Dma@pc=S9J`1MTp8T@Re3vEsB(o*rPKT~{C zbC60>Qqpqm(B85aIceQEmE|;1YQST9wi2D)BGu3$%bhN5R$|g@DE#QLYNHqWy$MSh z9Ebw4@mNJhxn%3^6p1h3%$XsU;&itu9(a)bKB$(H%#nBcPI_`e@r8XC%-fbluVWa)r zfHTLGlGnJr(o*1tQczNwsL^mHl9o(VODdw>U?FYo{0{gc)##`1)*^mySzX)$^ZSWG(%RBH(zBPWMVWVxD(aZn zPaPVZW2F*$5038eh@mRSz_~s+WVd4B(M7F#DCMsCg;W#!8mb=y3xvHT4FvFlih;kD zjfdPZfozP>eyg>6FSFf$KIFJ^G#PLf8SaFfp<$h95~|m%^>A6=%*XQNDsSN0Os%e0 zt0-0&BUF`oD5{nEGNZ~(JT}to^9(y(n%P4sF}KPBI}IWoU+B+Udxe~{9n8^v*3-5V z^oRRnS2ZyjAT4w>`u_Na*&V6J_R;E%K9Zc4fz7^|wF~E-`5gi7Y8{i5$x(a*Duk@( z`S(6p(`}xI8Hig;)uhso1=-`EJZ$sdC{NV@)c%@P9YxK_?g9!ewDxvb5Dk<%vp;ue+l#{RCC0_6|5m^zvecx#iPXPX}nNY<)(qo{K63N zy=GoaG~kYAEV_G2_pGD&i*XR`2T{n;XqFU(8ggoRicw55e{@~zMa#mw@%{&e!)F;n z3u2}6`qqX>QD!i&`xxuNT3MrQ?7{5hDk-k7VUq(I*f@k$JTo}JhNA_GNg-BQ(Ya|? z6X$L64}om(yqav%3wkmizB|vmD)8dd839rg6BC*Av?gjfTnOst=!T$b72h z9+Cpqgx^?syW(iK4lWp~EWEw1*N%{+H*f(5Dr4VV>*(q#h@R?T{Bt5inYt)#Dwso4 zx${R^J^bZ3-@Oq3c?A<+<2(C!R2~+8rqkx0ZIa!V@M7|Q*YIp7g^_Pd1_dkh$q^pu zv*ERZM#096mKs;QJIn(H(n7u^fxq~7a~d^E4+`CLN1sY(9e&D4`3tfk5#6Vqy;a=O zQ*K|$B;W<=++f}aIH#Z6ipAc=c|_CxJ96-56NcQ{+&EJEA-ueqM}^%q*eYH1UUuD~ z5^{`I@}X&_;B@ywqj%gKQB{?2UqK{6c=rbIEQ_~bbi8=Yx`Q>ElC{?*H8W@P-s2K8 z_NZEyQPt283l~ur7tYycqyC*7(cb5O`{anPi~PnSex4P8CqmBjK?y5ya~c{>A22)k zUaH%U#}3Mtj~SB4a26a2ruZo1GTH>%&P>rCiGVy)Ib8Fmk9>?LM%}mHn!B!jD1OE1 zj{885rc>BVTt%pixrqmK(*Jg?aRNJF*y{X!v@Y`(nyOaa%q(}&9hkM`qrXsKw?je> zmfPMqtg*v8Wk&#?gsu~)RUyRloeu`?pZyBe$S!R3=86OC0~Hr1wYPh`EGq8IzJrHE z$w$0I{wn753w-Dg{UzpXlfWDg+(6qSXk;;bK{r1|Frfa zbcqy9j9-vsNUIs#kh-ltXn|Xl&kN{;@x0Ziit z5Ujs?F?e_MYY$r&+yB6ITty^zfg`E61|LNXYDDv>^b@bndwvCZCZgx^ zXUT_@k1!@(eo|Snt6!+}Nlm?w{*C$6KMR+5k+O?y?KB1aLNxodNOx zaD3dOG9u;D0~V&<_0snDc}Q(RQ>0%PFP@!}WfO6~>=6hSQ0eGBx4Jaji89 z{+9c?71n0a>02RIj72$RrJp`%1}SKcZN9`9j=HzguJ@0u8jJ-9+E?Nu zD7_!P-Ykp;ac{h7=%fw&r0cMSCpxq-8eoQ!p1i>(w`hO#Pn&~9r~fM*0rD?oSoa12 zdqXLlIe#>Pni4)@zF|Mv=z(!tW#}^z0GL+h>Px2vgNQ$W=6UifG?*1Z61K5bZ)jwA zb_CVvCorsEb`qb)rVwmOXNRX|e@D4Zl#xsB18c4ri6at*d|60U5>`>*a;Ce-& zPtCkJQUnAWVJzf6r>HfJ57r&`1LcMLb1=+ zx_190(IRrnq<=q4h<9Wt%A6r&h)LO1#8LStK_g8h_=`l8O-QoX+=`2iih_#2yIpQ` zz&1R7zj^b)d>+~N(}SNQ%4=Ew@^~CjIlGrH)kOzUXlu8P5!TavwaHCG;Nl_MEj4pt zKY7q(N5%!KZ#zw}<$DK8{UG8JmE`14BP6B&Z{CAlp=S`WPs>r>+lwn;JE1NRv}3&2Tad84zuNbuf4o@F zMr=Mw&|wW9P_OXcsEPW;{np;pwmK;h(x=#z)7NNud-XcuP&sO42Wk_~xR&-^tG2zIW=5Do)0|`Nx|t%usLa%hVFEmM6&g zcJZT-!0qR^n+x+iVxN$Cx+$!|Y5sd-x-etUW0x&m zXkKH;*Ie&P74=GiHdz1VKkq2ShVekjd+jqtykk+yT=Jo^0@_SUw@`F2v9!843r{y$NRB@s zeVVqqZV9lQPX~K_0R?&il9W@hDzf9VZCdy6#;)t55x@VT-l7>2uokPVsC22sqiUo7 zWFeAlvGnXfw%P1d@_oWAAq31{tUG?LTcxCk=RB-5Z5#wPA^G+s@**8gHdgF)?wN zjRDV2-kxKWHoM6V8*g{YM1e~1BdiMQ6*1iP$Kpjx8tw|zIBn_j1!)<)lfd4W(a@+i zCI+;T4>=RuT^ZtK=6sn*YwWF{yu@vD52~UEzSPcpl)lIZ>aLkp4E+6sPPA;v@O%GO z5r6<7XJ(=y5@7cryu_kfC|3(e%`X~XuHw2_He-?yA_p=aJyo=4z#)gv$>1|=-f|nA z`oYlm@MDgy-lzt>7=@k$q{3;7Vg)p6mibW6{i(UY9f(%>7wX$Yx@J!g+%P%@wjp%K z3ZbZG0vcpC{#2=SpoEvC7D9~m6YC5)9^Rsu1y+S9Mkx8_(;B~8gaYRO1e~+Bo+S3w zUQ>&1?{?uwcNOV19k{*_+~2%>q~AMpCtJJj?jJT5Yl+e$rukO1xOw1+Oz<6Ie)Y05 zbKiH4q=Yw?0$Bg7+RCo#wcww?_=H$yZoPe3Sy*R~nQ>a?nRGR+3^mU}3~^%U4cW@l z3u9rS0Vsmry++T%XvIDUpw8CuzmLelRdNDAh*kfa^-+@h5?m0dnjp_b{{Q;NEPN2c z`KKYNs^5NnQ{whh$JwC&XJUEXAMZ!$Ac-v#DVeYr1Nh1j;!&MxdWy5tq4A~wWe9|E zAm&Gb3_nrt*{Gap7-OVUwRd(AUY|LKzp3TQpe+0`EQ_Ssx5$wzE+ z%fS_s50sT31FV6&95PvIUP(!ss3dOERJ@(l(c>wTU3n<>pol&SO7o`!PN?aFM^Dl> z*UOVw5eNiyeh^6O(f{2GC)9(cV_ngBYqWYrjE?;Nk=L2_&EV6DrcvofyG_hMq_$xv zlk=7RXWSeJArt1y?x!Q%s0W&L8M|O4=U4M&Ed`<{OmYNWavfhqX~U9Rvz*MT_bU+FH^0B67S{7Wcn9zka$@uPo9H(j2p*DoT?LMf zPNsNCS~NRO;{Rg=KuB?>@EUMOfyE=&OZUs+sE)+WwyC$_)Bg zWA(g4zR96-E5C&ADET~e90>n%Ut*ic!R(r2(SS}fiaCO47AQBT0Yr7EHI~k$ur~5G z&Yhp?UAhZe;7S37*Z_R-f%(V%Zn0`T4fWZQ0F{@zQQ1ijK0ZAZw)NYbbgud=n40C5 zcREm-`K7?O*Dk?C>#{{GjPjp_p3K+0M=lEFdP(lkKgvTn$ui2+Mfdo=U`Ow2lWo5s3v^qIW-=qnx4vIurww3zzk@t~g~sIY0EeSTYX1q+ zJk9XOH_Q)@DS9rx{A~Q6t;bS`Rm;*}dm}-$+`Z&zYl!S9$QMjK$PlP3+e$Qp)D7;E z5gmIfDngCd?7SnUkDgLI*Ro|%5>W)YzPGQ71Y{<|nkk2ehwyPOy{OF)?EmRKL?QO9 zbKXOJY0;Ok+{HOul9IU|;gvgX?SW3?y=9eu8a~JhdZD3R*CC6>Z%x{T&TFWR4^f7} zExc%-hpH5(Ze1w8C&%_}MxRZg3r8IHfUhCCygxr2Xq-T1-#M#D!efF=+B3ueVI!%D z3>*_f02sS>i;`FbzD6wf?Y~?k_%xi26*PV9J0MUK5k397vpXWm0lZU_bx&_ z4oPE%Lb1+}b%tN3fDu*OSd?XHlbz6D$d;N(BlMWLGb8|i+O$y2Ku)POh1M?mheP%4 zY(DywmKTkhgTm)6R@c7h4Em((8D+m z)L)2DF%m@0WA^6H#EHRKg%vu6?oX2t3OE~B|M%b{0{kq|;2&T3e-Pz*|2k<$1SJSf=B^qeq?-*Y<8)mhly40o3tEd1U+G@iwP9oqIi`=nDX$X}qfx$mp?4O%k9#Af~^my2u#= zZ@m+@tq}#(*9dhS#?aq?D+;$DgWKF9qGm^k_=HC>`eT=#;e=;?aMb z_2&_=tbM6{7BAaP&ysusdad2gkDVHUE{T`_nF2A`>GS7oV56xQ;s7lR3-8}^2)nUB z?(F6ZkH3^Uz=uc_!0G~Z`y>iK zgExr=W5=DFPUF+V{;a}HWfO-HjQ9V~fx2-M+*_P8MMZZemluC`ZF4`#GJaXAaU2+^Tbim8Bb7^#K{fLtYX3 zMY4nge??q=6XM63?qmk*kR$VXMcC_CijJ4+)e04mYrydq- zaU9276q5g#6f;`&au`mO-Q^0ImUgghP3NUt->D? zhH_kJd9o&3Zceii_5G2MwPD{m-m2FI*-0-N5as~dhHGL#j3MKkIa95<=Dh=3@FwVW zb?$su_Zz0oJt zv;z_ukjtvfLk8nRFr%xgo2g_gvevtY1GCK^+XVS4=O6;cgx%H?u~G&Kz}E%@4JJrY8`5U0WW*BM^kNX2FqJ*-ZIPGGadI;9pyxO3t->3B!j z&BFL6BZwgX2?auchLc%er0QBwHs#BfJ6F0k##L8%b`7BqwrdWMeBk!2g6Pd@-a5D6 z5C=A6m{;A1E?;diyCh=+VM_N993sp8eRVC*J=pUl%sY6`pCs|~ziaY)M9=0KX13gP z&*#3p%6yzzX+k)33Xi^RT5pgiymaZe2%i~$?^x4uuH8JpUSKRU6wseNa$8CRr{C)u zXQr}XLOtsd7i7w=1tP`I7Key#*<_{Q6=q8T{k9G5_O2p!3AVv!j(`~JvnU|NYA(Re zwp4m?nOXZe8U)$lPgTTjKO%;W&SHjl$3{8I-bT!maYGHGDWcm)gIscDyIFUSVD+@D zPzFI_g^{n1Hsv^rf-L8WA-RFH#KK(^agTc$Kf~H3T+X+HY3Ji*4rAn>CRz&e!Y|rX zSXlJ_3fX{yoiH22Rd@WQQSYz5Rwh6!wy5WQ>GSya>YV4rnMhaUS?%|}AwY8-8X=i) zH%VqjJgLdf-WkH5FxnJY3QDx84Qs}I#{=~Zq4q@yO1>t)n@;##H!8j8^L{13*7Dt! zNAury0>0MlUfD`Ic-#H;2REeA*;sUI^%guju}cc&fIT&Sj4ZM|H#-d@Cz6#BE;!E* zIVd_O=Y$ri`JY^RoGPwlK#sKFX83!RW%9e?Z4_WJrw{Y|5K9p8X{4Xly&lECgDt=- zGg`8zXjLT<@bfX+U5mEKc1VOWJi8n#JICeLC;{m}o*k|y_Ge}cV)G`1EZK&4!!Et& zjp=FdT`D6!)vw2O_uK|d?OoTQg}glM4x{U_*FS1_lQP!;9q#L5BDZVg*KCqBNWNYo zVJ1kRegsrjeu7|e9%D^xp1gBbRgHYo&ybFS3Yw5>hzIXqLi{>52!$Wk?Z>G}Z1wnm zML7dzsPl<&l4h1~8TRcE%wmltN2{z&=A zc;sqQ6M8f98a=>si^_{FXitlP^4kSz|FF)1Zg~{tX0CW1FmaH(Xt5pHE1d8dY{JLk zb{p1MUy-urX-$}r(Qj7&ZDBv^Z%9EYphfjuGlWoK$-7_7zz^8%dQOK4VKned9 zOsBpKPZxS?l-nj_w3JbJQp@qtDjM{v0C$AHhc3(H2VtFyembW7DFdk|Lt-(z6t4pL zX4s`x)8+frOwh4cE%`$#iin1FORQ)zb5F7K{O#%UytdG(Z*D*4-4ryRU6;JOsFL_p z#JpLO;x?fNup_%_`sugO54-`*pBZY{ z+%I9^eMFa%G;)rq`&}-StzRc}^i2V2HWBY)-KLt<$^EK3o3F*D+deAL8pG;um*$k6 zsA9jy<$Ftj6|Iytuw5^Sq4NN_VL5VFPM8c$J0VR%fZrR9wMH)s-)cWIHXkH~82wPQ z9UqwswHE&m2)#)R+J&z46r+hbD}#T?j}h&*4M)6~S)?jWeNUR`B!etix{=Dk0Wn&< z#O>m*OP3Hh^@hx%xgDbU4fqB>DofpHP;Oc{JzRf|BG6)l{Q-bCEtaxBkP&EwBJckh n7-+>e{ZYx^yq2hU5mfL~mj3Pd>ulg#d<+%f{FKU>zy7}fCR6IXTBL#3R#Q2(gf+w-#Hvc*QM}(JhrhvHY=Ix#e`^W6fAg&Dek)mnJ9G;;pUy z4XUc*%stcMM#s8>y860$t;XiY!h#!lTnHQl#f2~!T=y%`{<(yQBR)a@xdKJ<->3Wg z&-SmNe{O{{5c>c7lpPc7?`2R_1Zdj6QhYZ}gXw12rtH#uMos7%r!m`pXk}zV6Nnlj$D^pS-WO z^~=Sa`W#FLV`F1U)fYlhv&KgSZju8*)tKTA2km$<$Ae`0(bqPO#xXlu1%-v;xgWW)vtfFWo5LCwbMWE&0m4i?M2n432vnx6Ux( zcnB%~)Mj8|#r&+>tv>lckz=ZOgmkAwO$qPv`gr43LVb;vHD!fb)5U_|S?kiOvTasd z0<1PbbS|ss`t2O{*>F4bZ1-XtIhAlYGBmO_-Td6Kt^5QZpICm7bt?0KCSH|EpQ0S< zCE}S>saHo;pQP;Aqk87BI4v1yg`Y}xaqThaS~q;}=QVpNI8S+D)tD=i&1-8xn4 zZ_B{)MBYsLS3T;{nbyvaTPZJ+tQ&?k5qWv9S0@p=+gVmqrQ%J$e{l3%iJeDm+4~>Z z4n13JI5SBQejiz})A?(;?M+;9z4FI9t?RL>DPc5Xh=bkc8?Tt$8oV<2>bBU4K$Y;j zcHAmqvmx3ui7nT?hC_w3zFaZ3llc!N$wDp)G2$t&JF1(7Z#?R5F@uy&e++sf1~4Zi zuPsU%*N`_?d)_V+NkT4&8KTg$ZT*Wx73`l_5uxAa5u|--jA^VIZy7t^wf{1BN(?yZ z^a}{^$>onb<<_7iu<1psY;YI+t2eBg333bc#wY5geNI#KBjAJvO*&2Ia2;l@hekIi4@KMKATDwyoZzpHDGWTRBO3KW~wMfWUrdipw-b|7dHKm>>t#l5}C?d6)#m8E!_Jfs1uSy@Fb? z)@oM&^{L@w2434aa1h?D;ef%Lb#K|1FN2~!S?e?dTTNNroAaudn~Tn+vSow$kkTKn z532Wqv_O(1PhQ#f(9+#fy5IhVqhX1H$gc|=N_NC^)?eaXd>cPQ2BWji`^M{tQYmzQ zr6ci&gzprEplfLg)fY^gBZqbh2;7nME*OgYQYH|C|Fknnu&!S<*;?s6MX=bk?mR^B zd$33+66Vn9b7<+0n?W1s9RF(CN!3d*yUif1!1TWDSXGx#MT3KBT@%suX=nMnA9pMA zBo-(2)phfEwF1AFN%P)`z#xIC(pu6Izw%?sD^UzvZrLl2<*~ViIaKdrqpqc-6yb5M zl4c*92{=Y4hxeJBDS1PxU@V#P>;w!ig2QVWpZon!*rXk82HY$J502X&i|x02wZSVc~9@iL@a5N-E@U%%{>}HRfJCMJ5w-JM(TAS;DN1Bq|U6dsiri| z_i6mNvAsOZU(J%^lER*U8&QjyD6rN@EOqa|3_TAzZdu+)tuh^abVSKx@E%g` z*i9T0!27UH_h@f%aT*(r3%}jr`oi|@Qf+s8^vZSGr2bx!O(H4XhPgi%MEr8Mra9)M zBiJt6VD8RwVSSJ!9vEhKeR{ew!2R%hzw|U>b`1I1CTAOxG$jdMfG;GMt zJ4vMTq_DTO^W9tFF8Ye<+3rUl;kb1M2Cu&0ZCzL7Q%Cp#u@EdBsBfBQNo$AUco8xAhjnikgoOk^$#S?6dA_J8onh2bWqZvW z+Y_Wyns87g7djV4(nHF>X6Q*$CUWQ~_l`QNcdskAzEiX71h{~hsRw`n%v$K4eU5P|rWd@H;wlzP_qa_ZC&Hk4iH-OPtV%7B>Nud38Vz)zvL z-S^S{6~qi{HR&Juoml-Q+uK6bm%=qvd_iLZ4D6kTZf#wq=G(Ea6;w6;x31HR)p38B4)l_IQCu|7`!qe^imv$eidwwihO!q4B{ zYH!>%84&i*Bd88T7*2Kml>8En(dzty3UX^m^4|LD@vL=}cJq~$DTdg0{&<=>hp?F^ zTOXUlgbxDgQ~NY4UXAiNV7|J-_kHW#&KdZuP(6Ro*YVS`M1YLs9n*d~xDgJz;Ay{4 zXV+q>>a@;HiD9Xt=B*$p@QUlLAJ^m4o)2U3k(|Hm+7CVvnpO*a?80r5AU;wO38oak z4O67C^xN8p} zZb##h-jM}FiRb88f$NXkP0v}po6`y<=Qc|>rRwZ?&Nov%4q8x<8oSrsa8F<}k6gu4D8FV#qmW{*@F*Q0y zxpXflRIDoZy1f@vhB!32gi)nF>tvV3?dEcX;>}_};5vTLETE7&5^obs3w!YHs&oBY zGkk%Za}+F!sIl5s6Y9mJnVKy({*samJ~dld>rX-%-Dx6x^xLeoZ}M{Gu`lT1t?>5DFFyL3lQDmrGFPt$BkIbsMQ*)`p$`!y%yzpo8Qp1 z<9mRJF{=JZSp-m&gAr!FZez9 z=O3d^nlDnG8qUtU%&%JVe8x95&t6`_)~~l8W?8zNI&c?brZ{S<@UT6Q=H8Co>+Vak zAuAKb=6~OMd-KqIud5`M1o~6_@2;LP!1T1L6(!}^bzcg#RGD&g6=&kBI>Mr?U`9Jr zWd~K1*5Oz0KcT3!@ahw^YhK&g>bzyOvt)M??4odk2NDD&+z(aLI7N z=|8%BFtL&^^%~uoF^xWQ%clefBB6ozg^!A&J$NO8LaA+tBF;{(H55=YnH^trDw{%- zwA?i&irH+l!B9b>l-I4#U*JL}!$D_Tr7=(I%JRz>xB^4L{>BOkmi}FekKDV!)QN!0 z_9ApQ1?AI3btPX~(o#6W=w$=bdneVKE{)Z%fs%H$>BF8=wlO`7U7w$EeLM7grkP#8 z{L4l8TDNI5i22ggM)UkjKz3D=9ywe_dvu(#9x9{gqrhZ9Ned4zgupyH0(BZZB%Lat zajbns#xs2xh6=TS0R4-npIEi4`xKlX3Y&!s?{|vLbU*#9tf7(TC5;zBE#%zAXVWwt z6UKyBXPaO|57RR5T|NC2=7F-`7O4Nmk)-D?Z{m4DsChM&hWuIkTQDTsn0tk?#;wi- z47JDqyL&wRh;E^$t6`YXpS=?5UDXAn&gJ;9SC0~^<`qKwv516eB?9i1MNvOdNY3k- zdcjM@EGKPpeLmUT^UI)3_$&oXr|y8^y4mTl8inJ{uFmcRdmYMp+U`;+2w|uh!h39q z1-N!8NYmq2)|{wGaiwk(ov9W_Pv{DDYvx`7mi;0;#J<3@x@bjy-B@jyYg&608Lg?W z$H;e2pZQG)n>l&JeTRE5?>m?b#%`B1>jmBEZ}rDFp8ICE@{=tUn+#{kuqnSie5iiPj=_EMK2NtWq>kKE0hIxeUX!d^g9v4{$eU5p`P>hd?C!H zUd6m7*ME6+LQV5{TRO{r`fg!XS3wMmkAd3`RS2{u)7wC|@egRVnw}NB$l2MNE7F|Vy=oyc z+RuoVkdP1rx2}ADHFf#Y0*-O_pcmWWZj(OYtIHwwjEB#S zO3@Wx&}3M+hyPz&gZtz9#4`zuv&La{Kxl6%tI>!KEbsWsm9Lulk%)9hM=>hoanT$d z9XZEJ7#kaJxJVTg6d-jjraoKxbOBXkSV}Tg{`Qb-o+_g9j$;2siE4t&C!(l{2{oZF zpb@+cIB_*56u0&+6z(XtHkiZ`K;#4~0a}Z{Apl4l=+ORGrGHWn|KE`MC)EG^Yc5c9 z4hWL?CvN;ddFb~{7SeCqXr550%Hl00EpjUy>8X%`1|`DbUrA>ClOHn5rPV5|RVA(1 z?zrl)aaNJlT3!<`0&X=fErIoi58QwT5m^BRlFCRGUgaqdv}M(VkwD#!^uMI4CUuEGrQ zY~a;u(pqy&yGVxpDQ)pcknkBIGp*9Ik9;w)D{lqKsxu9Q7>>&mteYiMCS8)pG>k7N z2w@1L*R~=0UpJk7NNyD|AU8y-c87{IWs+;7GBY?KO;%BWV}{wz zWmcy6Lx#xU!*5&hs|}~%F>GE-{7R3St`7pi*7j*pW@z|_!Qf-^Yr(YP*qB3mg8zPt zM{V3o=RYRXdRySDqi80ZesWy;^K=94^ws*+-o{tue&})ot#`Btx|vfC!{#s!H;%+1lwtK84A0>oKc7dKjU+y97eVyaElabVhFDsQ;se zx)Ha0jbBZc9_JsnY}iX`X#U;zb`Kyi!`|VX-*n?g|G-vLwK5CxFp%cOhI~0HChesm zUhbW)*w1c;Mu&^LQLXE{ktEw|)6`wI!W2qmq9bq3)a8DHdu#~Xf2J^xi4K67Q4)U-Z(DqUzIRCZW=wpam~BtplS#BHZw29JZ%{(2A8Nf$yr22B|?DgEC zK_cBR(0bJ!B^4aln+b8&TT>HR7d;VKcW5-rVT-QnIMWi$oyzU2dW$-uY8+zZaG8iX zv48k-VZAmt02gc}O(tJjQSwyYSW>y_w}jAHA`Q>|n*a&WwFPtw=w-U;2ev9oO6|n3;$kGfhx;A7-_$k)>0Sb@R}4Lo16^;d}XtzI=l+BU&~&WGDoHT4w^MDuy@%+ zTZD3mt<+7ixNr2=Kdd7|cW}IKU?P)6>#C2$GJ>-xOSk>bt$u-?*nX;PVJcK`5UFG zqWWmv+NoH?MOt$b0`?hzGu7Vv4=ylQX~*>*t9wIc^)Iq_JlAWZm(0}MwDmn+oAYtR z6my6$%<5g!RC%>6$PYZvc%fMzTAJ7|r|P9D62_j87i*WfLvsa{eRV1OT-Yf|ka1%n zE1zQ~ePa4o?yT{Nk651B_vL(>!iFBj4!7eHc|WU!&8akk^B;!wN!JHh>xs!aV*0B; zicJl>2gc4%vf3B!FtPMl*bDj1#4ifGlR22BQ=YRB9AwGD1(Cyqg zG$gk3j0Dlm2p%rowTJp84^}$ZB(4s2`Ae(J?&`+%9KsA;xC}P&S3*0=wUyv*S#g6ICBt z;)Cb0btZXA<*VYtJhZKyDtKn$i+vTXWv0>Sh`7nI}^~U-2!5#Cp z_p|37?Vy!vx4P1VqhMjOHIWCyRlTBWnN15fkX?`FBa!v*c}Xr;_qL}04X4&WPq<*} z6#g<47w_WL1g%PSh3Regm*@DXrwe0=LQ%zaoW5-;I9=B#dX7ESDfv;wHy$#Q(!5Gw z@TCf0XY~tYJQP;3c~&1YO6cowb}8Uwi7`xcxgfSC$=Lc@^h4IxyBKDi&J(49IvS;; zF@+{l@4U%avfa3?XB8v8>xo8JQH!w!kE4>EK;&gK=63XS4{MegVWlEGjbB|e3)Hn& zn5(GXD83do&5G`SxWy{%YsX+P$&VY1Gd#(axMO3azdp^nN22T$MD|#4ZlGb?qLjTg z^Uh}7hR5O5$j8ni39Wk%XYUr9YPH8Vj~>a{sNWo_Ueq*8Sv0KOuk`lVAzpAT)B|9~G(#f+!G7ybN zu{zmqv(eT>=8Isfmihhx(QR?}j&|)RNG()_Qz{(o>iYwPG<7kKK(Z^OI40Ob9 z?3LlA`b<-k)6%c%Lg~F=?WBd&7r(0U9cUtscv%M;sia)K4azgYF1uv{zYq1VDfhVT z-7~|;9u;cu+r*kp-WB#A^wJmjTIVfxk1$`r84?G*9a`VvxM3H(Mr&$`^*+I#6CYyl zF@BHv(RpRXz0f`i_JG_ho2eN#xi<`*x3L-vCp~s#d!+)Cg`71cwJkwqdDE2|SD%(} z3mIQjGDqR!&@pN2p9iH-y_^n)utO*nj`{30V6f$yCYF9uJnQuZ`EOCyHx3T5FF`|CImTFB&o-J<>Exh`v0S#wG84cn zL&5I@0!Jhe)Y+r;g(>|k5T02L0wpE5xZr+~Jxy5uzUk<G!4lKo*@}7Ue5T8&Bm;TPO7oG_DN{1j6?1S?QWbA}bNq zQIukKJ&rLTE^(2*T@gXqNM@W0FkSx2+|7bmim{LQ`IO1|2{PL6rh#QK%n~l+IqW_z z(r>cZ)%=P<8&RpULw41z6UacvpH`>)bghvwZXm77h2{&8X!a}p*G{1fS86l7 zC7@w9J)GfPWn+yC(Mq#>j$>Fe#c~f}f{R|E^?d!#Q}TzYI98&D5v`$&jBCa9h7s$n ziwQOUGDB_~r91wCE;PG09RGvz_CKh7fXl#aZVmRflXMCX3Y=7k#n7y6>tMAL(@lqh zhtn}{)>VHj#~ z;=j57uturbv@vC;MKLh_g39^@WpG9QeBG<7;|Fw7BI3hCV!c6C4#C9BypQG(9oa_E zt6ir8O8t4nEg=>k3s_*Ki%Y9m^e>dZ(5BbT-2JIE(?%mYI`&JL@Bc=Xf@z|3t>qgv z(V~RmDA%)~dqVws165~Dk|%-+(}ElZOIov&qt7o(q-smIDFe_7t@a13gk<$sHKdcv zlFYk0YGcoqV(mk5u=84yjn$;JUw`!>YSh|u#4=!>cQG(9?QHDv30j?^7d2tMg9&`2 zKdB2(yzZ8#U%4IIJ)oycdE9+5*S@D|m0R1P{F8iwT}tQL_vqHp!jtdLy0c~YIufwE z5jq2j{$D5kOqZAGEowElMb>@uyR1zP>N8NpdI=s@g zLD;Wnb*v!702&MVc)l$Bwm?f>&Z+jZMgotIf!JdbK^P_-NAZzf*sx+CMsSG0?`7=) z?sldD|J2X?p&$X_?B=cK56B!j+G<{K- zS$fTdRc_ooVQQ7UScE~YTXJu-%F0T^**G5}-zmiETtFRY9^ks`uMjp=K$p}}!qyI^ zOEvQ+ro@D{ch^u!hQ+_koenK?p$fX_cQq5)IUZXGokvYL&v}mQ)V&j0b1SW=x4#e_# zpziUS$7mRtr=IaE{{4cBEJcFT8(g=;g5XlYqQS5eAB1DsSD(8o0u2O z)=C8tM&q~x$T+85EZ#^tm`9j^oDaWv_91%BLq29}H^+3M zb-yN=N!{%jz$yA<(TielAK+nmA{)adN8oOb^>~CN<(+!_plXI$~A%y|2?` zyD)G7;e)nQ?($V{)->rS+H5=v`4F2=I66@0-NdFb^F!u!lYR>KeLDAP-Oi7pwxwxI zzvL{!Kxfu%9VH7-nr8QeYrW9ryVpRjS9m?bVXH-7*PNef#*XVich+{bZQsm=wy$R6 zSWx`^n)7o~?SUjxf$IVJ%FUzM{!RgOfxjo{vUc8q?&>aQpj42b0s)!Qu85#cuCdAS zh6RL0N)stg-}6a5ntI*Dvt8$HD-y(!l6M>rYW*7!t&dz~$4B4u9XBrbNW;JP$t9Ic z{SuPq>UT(ut_`EV)H&7RY33a)JD<?5n$v|zYU zW8THeApTjzvuHg$deU*h7}*Gds3+uYNBMxd*UWV4r2H;ehDT8LcWb2RrZTQdZIihyb|6n?J_RviaDeWeHj(?l@-nb75 z|BPZ7{=yyyKiu%lu_&tVXf|Fj;Yq z{8Fcqi`<#sF{Pwqpux3=9{DAZTFs{bVh?w|7qS769F0GV)K!7THLLR?*R{_xURHt0# zYGFjGd<~cmpR7-PfW7Ejo{Ur&1+$@;tNy2Z6dTd+&CJ5lSl%%GVvG{=_TrxWbS=-7 z|LI6uK+2I-p{SQm%y6&m=a%6f*(za!Iet@`x;|tOiLq4+1^NDfEja);7U@;VhDOKa zH)!&hq9Ih|yz0X2)uOVKu+vs_MF@Xil903&{_I0B=b{;@vj}>HYu~Gj)ndNIaB%(# zwZKnm@?UCV(xt4L4Kl^`c5T>y#uHz^imHj^dh(7tq`ut?d9-RddfUx_2~y6Y5m=T~ZfEHLv_1pTJfrtw3cyy0FNg~Y7(PkK`KJ8tXNkh1CIAuu6l z3ehC82Q+99bu$NQG?+R+aF9A*|3;mazuNXwZ;z}l;eMBkw2bEad==3+C=Basg;Ou- z5v6WEHsQt|(zo%)j|1`g*FkOY{S~U=ui~)v)3V=j&BH(Nl!z(EUP|+3z-8v#vGKr; zAKKh}LumNaVn%z z>`Qp+?Z1Gp8v_jVpiB}@gTK}v1x!_@y9uYHpC>$szu;VbK*O@xn~Yht~3q%tQU_}bAp;@(SDv=Z}F8< ztC{b-2bfW(T(0)U7VL9VP@S~zucWMI%aQgbdFrdL1LwFt)Z%BXV(_(sidTZH0|oaz z4Ba&rf04B`bKdVLCDZg5<(A+Bq}}OP=1_&ndq3CKSDF-k;YZi;!&?tI zR~~e{jsJL8DHs?XKNa^AhDqmm@M~HXR_8o%7U}H`>k1e58*`JSrX~IPYCVaW$MluD z6Hi#gf53lh1{gP{Arw@Fi^Ze3tW7VjTkD8iGXH4!J)UUn8Lmes!;TPr;MQ$w!zVA0 z8}CEwKW~nT-W4H*9^4W93b*nBK@U^|!*_A8C&;WFi4cqo`d|OC6ZjvjHQ=8a1LzOf zO!fDPKM=0n20SwF`D;NNjF1WX;NO=2;JO*fuOn|@RhYAynE+BPGx!%N@4zwC@9C9WAv3qOik0<+_Pyd^E~Ilx@%b;$%lXu%Ns z+A2v3IcFx8E3@>SjnQ6qV3Hv6iHR{9DW+uQ1BJ)#NkO15=%DRcRS2yKkz)d(>E#1| z()UkU$^p2S!6wii`tq7&9GeLSAjJ3SZZojMW(LN3XQXY)qo_msywq3usF|xP0O#QN z-`vWcCYB5D$c{A;k{h-!hY~7M)2g#qPow!AWH5oR3^zgMSoi5FJ^1c|ZxNHxrMqs7 zDs$Ncr@R7${P;f!`TY%;E>0^k%k`8;`E=(5#R||QKK!e+yAc+n1?zK+hpE6&B1CVa z`%ATdIq7!w?1;b*H7@|{jq2Ivffk5tuT9BHcPYOK%SHO6#Dyybf^6TwW#pIXrjHL4 zvkms10COAYLF(V1UP>gRqfFb%;z`As=r$DNoKf_M&+(U4{)urRXRfb@*03GqpoAsP zcqOfwrT+oW4(pHZkhHD^m((a0E3zH5i1`0qM6eZ}6y8s*+)(OHyEIFds?m}hrNHn) z#h=iu;(YOm>*eOJGQa}YTpR^0J5ECQ|HI?HoRE)v+jSolXIOE_Ldz5O`1?@`jfEZ; z+NaLa`Ys}^NgpP?s31$bdPXxdAcinn_#MxVB!sg^xE;vpq$`SgVZm9 z>;UHWq)i73vyn@>aCfA#c%4vsWvZk&SX;S`*ZZqsZ3r+)8J$2Ke%&Nuy2a8c-5ts! zJ^=^U8uZDyiKBxuU}hi&ShT~QJ!df=s)zhp%AE81s9o}MpH}Og?c0Jo)E70B?%fZaB z9jmGL$K|~q$HU2pB>k~==TsDT3L5rZNK07zAlh%}lA>+pmC?r0Z{d7ZDLJkpsk`Hz zI61CP_2(GqpjoR%**oN?-z>dRapk-FHnOPLY-fOnv&r?Zt+qfJ=InmM*rO9#ze_V9 zwF0Mf;m|sgGl40A3MxEs{Q$zyChXB!!iRcY7FhJ#gM2@FQICN;{9UPcZa(Y1M)!_ZrI5I25)zaxqn63~q zg0QKPz^Q3w+b9Tps4?+V2mYw=@lWBi(ona0+)2)GUnJb{Nlk~m9_(476+ZBx*kwGK>G zw>Qzzj}@YG|E}~J92qC4Dzt0B!{c8E4!PF>aV5MAL@w$GP|{)mDht363c~ZpEzYF` zgd)d}c*COJBdwC#6~m&A_HtlBU?2Z3hhww<0}X^ zQ1ZInG;+zpfvU3)P%iKs_TTT&+T7_&;Bh8JtC9OpI(&ytgMjxEqW}IwZYTbi0tKk; zAHMsadl>$qxuee&_a)W;kGC`AfCQ?n{L!I=>U8OW(3jt@DUPj`t=`>yxT&n*Ub7rG zKw}A(=e-TwOYyME;!SLHq`$qA!0moS?%JOA07b|F3#) zC5GPbogkyBj52ii`c+C+jKYl3MJ|**k+weuX9xMHbGkqRJxv5?_I5z_e|~c%%`ASH zp~LSfoBcHf7?@cBMEgkdG$0c*W7eGQiAA4h5I8%_#`DTf_Zi5Br_3~s00)Z1`^$y1 zKWlXZ>Veq9syEJRMMo{}r%w}XV4A*MLc0NEZ-fOEFjq~>Fo)^@@8*(VaK$RN;r0ZoXh?8#KO zJ#qzHUa{APs05(ih^X!L`VrMx*(%5wALY>VQtG5{sKb%kCjt)qPN|6$JFG-zV$QV^ zG)<3%7F_|R|2^2N2{F4b_G*{>`YJKRii{{Ds0^Pk+LG*W3GfWeex)gdg)Kj@wWfqSms@kFo=dW_xewDQ_-y#|iLMy|@P)?#;X^ znDk(!yuPG<(;1?;_?2pKLZ$P~qhyyxh0WhB_O>20)7M%Y%pS)V$~A@Gt5RqOsD)S` z;4hp!qmrhw^|+9_p?3-vlTRs>HX2N4R28vRs5&i}ZB%=HgVLKmnxM~ja1TRI6xsJp z@goj%L-P-EPi*W)D2S}lb9Gs(74J83EYSgeh?X-1dpwHu!WZ}cz+`Asv(j)>F~?QA zU8~E9x9aMq6_nM0d{Vx+-Y7$>qjp;C+&?<-GRD$%>-o4SyS@zmI6sP{wbHCBZA@Uu z3O@p$;PxlI66bC1DjF&tIvR>(bz~>X*~#o6DgVOUC#7iWw2xXAL;|g2{9{A(kXxoS zp>ex=gt=CGLWA994`>98TPMOKR5T;(fA;ONx;hX_>-l+a+44Ul_(3@?Xce-_F4n0& z_&fML6UAi~G2IKH&ljByd39Yr2h;R1e%8dKVBd#NJ&qOL=d-(v{F=D=e!)SW&EQ0} zZQPb-9aooPF~&VGzMOxpkSos)$E9-O-?W`mS{!-rrz%K=8ohX4xX6!Fe8iaS^f^Fm z1rzisQ!lrUr^ z2vaNgZ4t?Lr%y};dOW?%B;%rXR;Bs`bkh8KV}rL*k3QZ}V(>Biada!te#h&AtHPBj z@H#!!E1hk-S^{_T57AR56p(GKoLnNBC$HFJmuZ@>piT3hwiux?&nMaL_9oz!l2*ab z7^Xy_js2mM-fYj3NDCL0ptrvpJgaZ`o-djBG9J|O!Z4ZWP-pBuyRyxJJT2_kbA7)6 zWt~pqdCxvnl8H;&-CLn`q~x}-NufJ$nwOa}t-YwuPN^Rk{NdUMXh<-8zYTtXOIaVv zpGKCXSja6KNVR~{8oYfA!>af8io=AMTVVy&V;C*}=KxU@s~>&Er}_*6B@_vm1-96? z@&bl8OhJMRc1RbQNfjM5qYTJxLLnvXvQZxe#RTmoaJy-M3<_b8h8kU1G)G%Cdgs*9 zC44gb_{8#xpH|jDO2~3aII}*2U?EwZEh)pR^8sDXN^T~@69Z_LQR}v> zbO}BP#pC0u&HYD8-<6te>(s8KPFREMF{eI}(t+H%MrWmJSR6pLyC&FWxph`4V(Umu zM|3S;{!DSrIn!a1pNlM(XcB;Lqh|*0@ z!s~E$ByD&Qph9tbVZ+9?hZ5ZK!t5&Nx_w6Ak$Ct35eeO98U2%uPioDbV&>>+D;3r3 ztio}42&nrGz!j%^wf5b*pbCFv_v-6M08)g# zxwd-;6Y@e5)@Kn?Mo(}tvf}FKl?8ekq@ofCt5S3%!v8X7)(Xd+>G=B6W~SRW-GXvP zZ|u7>ROaLl2Z$R)x1o0{S0=266NjN~xbv+^-}P;fqz{R?^M37Avey@@P#n%0@Q+%< zY;(_h43kT2-^iWBPiXH^OuT*NGflAZ+t;dRy20_fNK3TLD|PFqiptc!nouaHC4D^- zk6M9s;rsS3Up)2Q)nT@mej9kO@Rv0pI%ZRS{mh9vlBabBQrSB#Tc@O53*bSa-VH5y z%U+Iaiw4cT^U1fb2nNXN<~PafX^DqWcuN$9wza8t_)t?IX4E&m_uKvouDhU1ON`6>)2w|B%-10dQ6gJ%6d~ z0!sA6m7Y-A`l7J;wfBDPtnihUO6%$;SL`fg0&a zq+9Q$gkB7X=Z@9I>*CWy`-QiZJ3m^%1;0x9Y%Li0koK-mo@{SWXv?O%EpOdi$3skuA z*~xJqW=idIW$-CK{Sb4%7T`+dJA_z$WqAnq!&aiSq|xmxB?_+c#Tc1n3k6{sph$kY z15B7VvoPIXWW&$c{;=zLW+O=t?dYk@b2tor8nCwwg&x)bElld4;^7nY_7X~L!STYE z+59MdopY>4%DiEbA_$90sNwO+g<24HsMeH=6bQmaJw5O-q3p6L1as`<3Dm@I>t%Xl z-Zpq&mrRFDN4wdk1_M`{4d8m3KJEQfdK@I!p5ir01oPrd@J*c&#I2-;NjOFiW3S)+ z7z7#-`EvvcxWJn=>%L5FE}Ee6_e|`S6>la>di)K?JMVGLYJmb})?{75(8zy_!rG@x z07Yc#>m!G3admM=j7G5pZuXi{ufF-nj48`NTPEMROaW4z_%Tez?QqwTLx-Q nfcN%iQS{~i#VeMFH<%F~KNwAZ-{S^e8^w4jsQ^Pj-+ugW({toG literal 0 HcmV?d00001 diff --git a/docs/javascript/04-functions/images/06-closure-4.png b/docs/javascript/04-functions/images/06-closure-4.png new file mode 100644 index 0000000000000000000000000000000000000000..64bb5d639db726777ee2ffc9c17fd401b9b4618c GIT binary patch literal 17453 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 literal 0 HcmV?d00001 diff --git a/docs/javascript/04-functions/images/06-closure-5.png b/docs/javascript/04-functions/images/06-closure-5.png new file mode 100644 index 0000000000000000000000000000000000000000..7a876b9b9f140e456743432efececf716ce3d258 GIT binary patch literal 18417 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