Отображаемая подпись PDF-документов
СЭП КриптоПро DSS позволяет добавлять в PDF-документы видимую (отображаемую) подпись. Видимая подпись может служить подтверждением факта подписания электронного документа при его печати.
Шаблоны подписи
Для того чтобы поставить видимую подпись в электронный PDF-документ, необходимо передать описание представления подписи в запрос на формирование подписи. Представление подписи (в терминологии PDF «signature appearance») можно описать шаблоном подписи, содержащим параметры данного представления.
СЭП КриптоПро DSS позволяет добавлять три вида вида шаблонов видимой подписи:
Общие параметры шаблонов
Размеры всех элементов в представлении подписи и в шаблоне указываются в единицах измерения – типографских пунктах Adobe (points). 1 пункт = 1/72 дюйма = 0,3528 мм.
Цвет элементов указывается в системе RGB (red, green, blue; красный, зелёный, синий).
Положение представления подписи на странице задается в системе координат PDF документа. Точка с координатами (0, 0) соответствует левому нижнему углу страницы.
ColorDescription
Описание цвета элемента. Описание полей приведено в таблице ниже.
Поле | Тип | Описание |
---|---|---|
Red | int | Значение красной компоненты цвета |
Green | int | Значение зелёной компоненты цвета |
Blue | int | Значение синей компоненты цвета |
SignatureRect
Описание прямоугольника подписи. Описание полей приведено в таблице ниже.
Поле | Тип | Описание |
---|---|---|
LowerLeftX | int | X координата левого нижнего угла прямоугольника |
LowerLeftY | int | Y координата левого нижнего угла прямоугольника |
UpperRightX | int | X координата правого верхнего угла прямоугольника |
UpperRightY | int | Y координата правого верхнего угла прямоугольника |
BorderRadius | int | Радиус скругления углов прямоугольника |
BorderWeight | int | Толщина линии границы прямоугольника. 0 – отсутствие границы (значение по умолчанию) |
BorderColor | ColorDescription | Цвет границы прямоугольника. По умолчанию (0, 0, 0) |
BackgroundColor | ColorDescription | Цвет фона прямоугольника. По умолчанию (255, 255, 255) |
ContentMargin | int | Отступ от границы прямоугольника до содержимого представления подписи |
FontDescription
Описание шрифта. Описание полей класса приведено ниже.
Поле | Тип | Описание |
---|---|---|
FontSize | int | Размер шрифта |
FontFamily | int | Название шрифта. Допустимые значения: times, arial. По умолчанию - times |
FontColor | ColorDescription | Цвет шрифта |
Textblock
Описание блока текста. Блок текста – это набор символов, заканчивающийся переводом строки (абзац). Описание полей класса приведено ниже.
Поле | Тип | Описание |
---|---|---|
Text | string | Содержимое блока |
Font | FontDescription | Описание шрифта |
Margin | int | Отступ от границы прямоугольника до текста |
ImageBlock
Описание изображения – логотипа или фона прямоугольника подписи. Для задания изображения в качестве фона необходимо указать только поле Image.
Поле | Тип | Описание |
---|---|---|
Image | string | Байты изображения, закодированное в Base64. Поддерживаемые форматы изображений: JPEG, JPEG2000, GIF, PNG, BMP, WMF, TIFF, CCITT, JBIG2 |
LowerLeftX | int | X координата левого нижнего угла прямоугольника. Только для описания логотипа |
LowerLeftY | int | Y координата левого нижнего угла прямоугольника. Только для описания логотипа |
Scale | Int | Масштаб изображения. Только для описания логотипа. |
Подстановочные параметры шаблона
Текстовые поля шаблона могут содержать подстановочные параметры. Подстановочные параметры могут быть заполнены данными из сертификата подписи. Поддерживаются следующие подстановочные параметры.
Поле | Тип |
---|---|
SnCN | Общее имя субъекта сертификата |
SnG | Имя и отчество субъекта сертификата |
SnO | Наименование организации |
SnSurname | Фамилия субъекта сертификата |
SnINN | ИНН субъекта сертификата |
SnINNLE | ИНН ЮЛ субъекта сертификата |
SnOGRN | ОГРН субъекта сертификата |
SnOGRNIP | ОГРНИП субъекта сертификата |
SnEmail | Адрес электронной почты субъекта сертификата |
IssuerCN | Общее имя издателя сертификата (CN) |
IssuerINN | ИНН издателя сертификата |
IssuerO | Наименование организации издателя |
Serial | Серийный номер сертификата |
Thumbprint | Отпечаток сертификата (HEX-строка) |
NotBefore | Время начала срока действия сертификата |
NotAfter | Время окончания срока действия сертификата |
Подстановочные параметры задаются в шаблоне в формате: {0:param_name}
. Например, {0:SnCN}
.
По умолчанию дата начала и окончания срока действия сертификата имеет формат dd.MM.yyyy HH:mm.
Если необходимо изменить формат вывода даты, то формат должен быть указан в подстановочном параметре: {0:ParamName(m):ParamType(o):Base64(InFormat)(o):Base64(OutFormat)(o)}
В данном случае InFormat не используется, поэтому он должен быть пропущен: {0:ParamName(m):ParamType(o)::Base64(OutFormat)(o)}
.
Если дату начала и окончания срока действия сертификата необходимо вывести в формате dd.MM.yyyy, то подстановочный параметр будет иметь вид: {0:NotBefore::ZGQuTU0ueXl5eQ==}
Для того чтобы уменьшить размер запроса к API DSS, можно задать шаблон подписи в настройках DSS. В настройках сервера можно задать несколько шаблонов подписи. В этом случае в запросе подписи необходимо будет указать только ID шаблона:
POST /SignServer/rest/api/v2/signature HTTP/1.1
Host: hostname
Content-Type: application/json
Authorization: Bearer eyJ0eXAiOiJKV1 ... j1eqfIosyhlZw7A
{
"BinaryData": [
{
"RefId": "7507a987-3571-404b-a624-4e8e45aa0219"
}
],
"Signature": {
"CertificateId": "73113",
"ProcessingTemplateId": 5
},
"ForceConfirmation":false
}
Пример настройки шаблона отображаемой подписи PDF-документа:
$appearance = "ewogICAiQ29udGVudCI6WwogICAgICB7CiAgICAgICAgICJUZXh0Ijoi0J/QvtC00LvQuNC90L3QuNC6INGN0LvQtdC60YLRgNC+0L3QvdC+0LPQviDQtNC+0LrRg9C80LXQvdGC0LAsINC/0L7QtNC/0LjRgdCw0L3QvdC+0LPQviDQrdCfLCDRhdGA0LDQvdC40YLRgdGPINCyINGB0LjRgdGC0LXQvNC1INGN0LvQtdC60YLRgNC+0L3QvdC+0LPQviDQtNC+0LrRg9C80LXQvdGC0L7QvtCx0L7RgNC+0YLQsCDQnNC40L3QutC+0LzRgdCy0LfRj9C4INCg0L7RgdGB0LjQuC4iLAogICAgICAgICAiTWFyZ2luIjo1MCwKICAgICAgICAgIkZvbnQiOnsKICAgICAgICAgICAgIkZvbnRTaXplIjo0LAogICAgICAgICAgICAiRm9udEZhbWlseSI6ImFyaWFsIiwKICAgICAgICAgICAgIkZvbnRTdHlsZSI6MCwKICAgICAgICAgICAgIkZvbnRDb2xvciI6ewogICAgICAgICAgICAgICAiUmVkIjowLAogICAgICAgICAgICAgICAiR3JlZW4iOjAsCiAgICAgICAgICAgICAgICJCbHVlIjowCiAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgICJUZXh0Ijoi0KHQktCV0JTQldCd0JjQryDQniDQodCV0KDQotCY0KTQmNCa0JDQotCVINCt0J8iLAogICAgICAgICAiTWFyZ2luIjo1MCwKICAgICAgICAgIkZvbnQiOnsKICAgICAgICAgICAgIkZvbnRTaXplIjo4LAogICAgICAgICAgICAiRm9udEZhbWlseSI6InRpbWVzIiwKICAgICAgICAgICAgIkZvbnRTdHlsZSI6MCwKICAgICAgICAgICAgIkZvbnRDb2xvciI6ewogICAgICAgICAgICAgICAiUmVkIjowLAogICAgICAgICAgICAgICAiR3JlZW4iOjAsCiAgICAgICAgICAgICAgICJCbHVlIjowCiAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgICJUZXh0Ijoi0JrQvtC80YMg0LLRi9C00LDQvTogezA6U25DTn0iLAogICAgICAgICAiRm9udCI6ewogICAgICAgICAgICAiRm9udFNpemUiOjgsCiAgICAgICAgICAgICJGb250RmFtaWx5IjoidGltZXMiLAogICAgICAgICAgICAiRm9udFN0eWxlIjowLAogICAgICAgICAgICAiRm9udENvbG9yIjp7CiAgICAgICAgICAgICAgICJSZWQiOjAsCiAgICAgICAgICAgICAgICJHcmVlbiI6MCwKICAgICAgICAgICAgICAgIkJsdWUiOjAKICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAgIlRleHQiOiLQmtC10Lwg0LLRi9C00LDQvTogezA6SXNzdWVyT30iLAogICAgICAgICAiRm9udCI6ewogICAgICAgICAgICAiRm9udFNpemUiOjgsCiAgICAgICAgICAgICJGb250RmFtaWx5IjoidGltZXMiLAogICAgICAgICAgICAiRm9udFN0eWxlIjowLAogICAgICAgICAgICAiRm9udENvbG9yIjp7CiAgICAgICAgICAgICAgICJSZWQiOjAsCiAgICAgICAgICAgICAgICJHcmVlbiI6MCwKICAgICAgICAgICAgICAgIkJsdWUiOjAKICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICAgIlRleHQiOiLQlNC10LnRgdGC0LLQuNGC0LXQu9C10L06INGBIHswOk5vdEJlZm9yZX0g0L/QviB7MDpOb3RBZnRlcn0iLAogICAgICAgICAiRm9udCI6ewogICAgICAgICAgICAiRm9udFNpemUiOjgsCiAgICAgICAgICAgICJGb250RmFtaWx5IjoidGltZXMiLAogICAgICAgICAgICAiRm9udFN0eWxlIjowLAogICAgICAgICAgICAiRm9udENvbG9yIjp7CiAgICAgICAgICAgICAgICJSZWQiOjAsCiAgICAgICAgICAgICAgICJHcmVlbiI6MCwKICAgICAgICAgICAgICAgIkJsdWUiOjAKICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgIH0KICAgXSwKICAgIlRlbXBsYXRlSWQiOjIsCiAgICJJY29uIjp7CiAgICAgICJJbWFnZSI6ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFJSUFBQUE2Q0FZQUFBQjhtb0hsQUFBQUJHZEJUVUVBQVlhZ01laVdYd0FBQUFsd1NGbHpBQUFPeEFBQURzUUJsU3NPR3dBQUFBSmlTMGRFQVArSGo4eS9BQUFBSlhSRldIUmtZWFJsT21OeVpXRjBaUUF5TURFMkxURXhMVEkxVkRBNU9qSXlPakEwS3pBeE9qQXdnNWZUNGdBQUFDVjBSVmgwWkdGMFpUcHRiMlJwWm5rQU1qQXhOaTB4TVMweU5WUXdPVG95TWpvd05Dc3dNVG93TVBMS2ExNEFBQXJzU1VSQlZIaGU3WndIckJSVkY4Y3ZuWUQwSmkzMEpnRkNid1pDUnpxQ1lPZ1FrQ0lCcWNGQ1ZYb25Ba292UVpTSEQwSkpDQ0dRRUdvSU5TQWRwU3E5RjBXWWIzN24zZUZiOXUzczI5MDNiMEc5djJUejN0eVpuYjB6ODcvbm5Idk8zVTFtMlNqRGY1N2srcS9oUDQ0UmdrRXdRakFJUmdnR3dRakJJQmdoR0lTb0M0SFo2c3VYTC9XVzRXMGh5ZklJUE96bno1K3JBd2NPcVAzNzk2dFRwMDZwVzdkdTZiMXhwRXlaVWhVdVhGaVZLMWRPdmYvKyt5cHYzcndxZWZMa0tsbXlaUG9JUTdUd1hBaTNiOTlXTzNmdVZIdjI3RkhuenAxVHFWS2xVc1dMRjFmNTh1VlQyYkpsVStuU3BaTUhqVWdlUEhpZ3JsKy9ybjc3N1RkMTllcFYyVmUxYWxWVnMyWk5WYkZpUlgxR1F6VHdWQWlyVnExUzY5YXRVeTlldkZCVnFsUlI3ZHUzVjRVS0ZaSjlicVBjK2ZnLy8veFQ3ZGl4US8zMDAwL3EvdjM3S2xldVhHclVxRkVxVDU0OHN0K1F0SGdpQk16L3ZIbnpaSVEzYTlaTXRXalJRa1ovcE96YnQwOXQzTGhSL2ZMTEw2cEJnd2FxYTlldUtuMzY5SHF2SVNsSXRCRG16SmtqSTdsOCtmSnErUERoS20zYXRIcFA0cUJiQnc4ZVZPUEhqNWR6VHAwNlZkeUxJV21JV0FoLy8vMjNtalZybHRxOWU3ZnEzTG16K3ZEREQvVWViN2w3OTY2YU5HbVNPblBtakxnS0JHZElBaEJDdU5nekFtdnc0TUZXbXpadHJMTm56K3JXcE1NV25XVmJIcXRWcTFhV0xUemRhdkNTaVBJSWMrZk9sVWgveElnUnFtalJvcm8xNlVpUklvWHEzNysvcWxTcGtyaUlYMy85VmU4eGVJWVdSTWpFeHNiS3lEeDI3Smh1aVM2MitLeE9uVHJwTFlOWGhHVVJzQUlyVnF5UW1VR1pNbVYwYS9Tdys2dSsrT0lMK1R0dTNEamRhdkNDc0lTd2N1VktsVEZqUnRXalJ3L2RFbDNJUldUSWtFRjE3OTVkSFQ1OFdGNEdiM0NkTlR4Ky9QaFZGaEN3Qm9NR0RWTFRwMCtYdFBDYjV1Yk5tekt0UkJpR3hPTnFFWll1WFNweitJY1BIOG8yQVZ2YnRtM2ZDaEZBamh3NWpBZzh4RlVJMUFMSUViUnIxMDV0MmJKRlVyNGRPM2JVZXczL05seGR3OHlaTTlYV3JWdjFsaEpMUU8yZ1ZxMWF1aVV5bmoxN3BwNCtmYXF5Wk1taVcxN245OTkvVisrKys2NGNSN1VTUVZLUnpKa3pwN2dxWDloMzc5NDlzUTZCSU9sRjNjSkpkMU1ENFp6Qnl1QlltWGZlZVVjU1dmVEJEYzVCSGNTM2hrTGg3TktsUytLeVNwUW9FYSsvZ011bHo4RmcwRkdaQlZ6Z2t5ZFA1RnBwSzFDZ2dHdmRCcmptRXlkT2lDV25mNkZhOEpDRjRGQ3FWQ25KOEdYT25GbTNoTWV1WGJ2a3ZJR2kvcUZEaDZvYU5XcElsbkxUcGsxU2dNcVVLWlBzUXlCbHk1WlZ3NFlOZTNXRHlUYVNkVnl5Wklscys3Tm8wU0oxNk5BaHFZTUFENHJQU0owNnRjdzgvT0ZtdDJ6WlVnU1BXK1Q4d0xGT3pJUW9BWkZNbmp4WmltbzhxREZqeGtnbDliMzMzcE1Ielh2dGFhNXEzYnExSE85QXdQM2pqeitLMkFKQnZZWThqZk1BTzNUb0lIKzUzd3lnUC83NFF6VnAwa1QxN3QxYnJzTVg3dXUzMzM2cmloUXBJdUkvZnZ5NENKdCtaczJhVlIvbEFrSUl4SXdaTTZ6R2pSc0hmRFZ2M3R4YXNHQ0JaWTgyZlhUb2tCbTBiNXJlaXN0U2doMkVXakV4TWZJL3JGdTN6anA2OUtqZWltUDc5dTJXUFdPdzdORXEyNmRQbjdaNjl1d3AvL3RqUHdpclY2OWUxb0FCQTNTTFpWMitmTmthT0hDZzNvclB4WXNYTGZ0QjZhM1grZnJycnkxN2xPbXQvM1B0MmpXclc3ZHUxcDQ5ZTNSTEhJOGVQYkltVEpnZ0x6S2pEcHlmNjNERG5wcGI1OCtmMTF1V1pidm0xN1p0TVZqTGx5KzNQdi84YzkwU2R3L0p2STRlUFRyZU02RmZ0aGd0V3hTNkpUQmhUUjhkR0RteHNiR3FTNWN1TXNJVEEyYnV1KysrRTNQYXBrMGIzUm9IcFdsZjZ0U3BvMXExYWlYVnlXRFF2NisrK2txQ1czOHphbCt6L2k4Ky9wL253SHR3SzR4SWY3QTY1RGFxVjYrdVcrS2dXbW8vTEhGTlI0NGMwYTF4L1BYWFgvcS8wUEIxVWR3bmFqdFluV1BIamtrYjFwSlpIVmFKNmIwdjlHdmF0R2xxOXV6WjRqYmNpRWdJRHR3NFRPaVFJVVBpWFd5b3JGbXpSdnhadjM3OWd2bytCNHBPWEhRd3Z2LytleEZWeVpJbGd6NzR4SUs3SU9ZSTVvZjc5T2tqSlhVdjRUN2hvaW5UQSs3R2Z4RDVRdjl3RGJndU54SWxCQWM2OU9XWFg4b0lDRWZ0TEdIRGx5S2tVTGx6NTA0ODFmdGltMzhSeWtjZmZlUTZ3cjJDVlZqRUNFeXQzY2llUGJ1NmN1V0szdklPZ2tnblNNWkNKaFFVc3ZLTC9ycmhpUkNBS0JxcmdETFhybDNyS2dqVVROQ0dTU1dJUXp4T0FPYVBmenNta2hSM3RXclZkTXZyOE9BeDAzYmNFSkoxU1N4MmZDQ3ptV0FRME5HWFlHWTVJZnlGWnNjeUluaGNKUllQVjVoUVRnV0xRSC9kOEV3SURsd3dVMFAvaU5hQmpoUFJzaTdSRHFqVWhRc1g5SjdYUVFSVUdkbFA5TXN5T0Rzb1U0MGFOUXFvZnM2TFMvamdndy9FSlVRRCtoanFBM1lUZTBJZ2dyTm56OHA5WUNVWWEwQUdEeDc4YWdBNWdnODJKUWJ1VDdBK2VDWUVIandLWGI5K3ZhcFhyNTV1RFF3QkR6Nk9kRFV2Z2gxL3VBRjc5KzZWcVNFV2hndmxRVGRzMkZBZjhUcU1FbDdPZENzYU1LY1AxSGRmSE1zWXFSQjQzN1p0MjhSNk1xVm1wZmZxMWF0bFFiQUQ5NU84UnpCd3FjSFdmM29paE5LbFMwdEhXYXFXSmswYTNab3dCUXNXVlBiMFRuMzIyV2ZpTG56QjNQRlF2L25tRzRtR2laU2RuRUlnUm80Y3FUNzU1Qk85RlIySXlPMnBuZlRWRFFMaC9Qbno2NjN3NGR4OSsvYVZ5SC9zMkxFUysvaGJXM0l2VHM3RERRcDBmR1hBalVRSkFmOUlnb2RPb3RSSUlBR0RYN2ZuNmFKYVh4SXlkNEJweEdyVXJsMWJzbm5SaEtYNnVDbUNYamVXTFZ1bUdqZHVyTGNpZzZsck1FajlNL3R5YzFQRUU4eHVnaTBvamxnSXJCakNDdFN0VzFlM1JBNWZjTUgvVTkzMC94Sk1RcERWdzVvUUlMNEpldlhxcGViUG55L0wrUDJaT0hHaUJMQ1ZLMWZXTFVrREtXa0NhS2FxL2k3aTZOR2o4cXl3dWs3YU9oQmhDWUVUa2VZbDlkdTBhZE9JbHBoemprQTVlQzZFaHpsbHloUlJOaTRtV01mQjJlOFdGeEJuK0taeThiZUJQdHVCNC9HM2dmQk5ML3ZDS0Z1OGVMRk16VDc5OUZNSjVsaE8xNzE3ZDVrNjR0WjhaekJjbDFzZ0RVeU5mVCtIN1lUdUE3QkdoSFEyN2hFM1NlekZ3Sm94WTRZTTJJU3NaY2kxQms3RWgyREtFd1BCRTlOQXQxd0FGb0ZaQjhkeEF6Qy9iaUFZMzZLU1AreG5adUxVUlRDeCtHeTNPZ25IODdtQnhFSU5nQ2xhc0drcGRRQ080MEV5eHc4VTA1Q2RaTDliTE1VM3hYaWY4L0NkdkVrb1lnRE9Ud0NMSldJUThCV0FZSDEyU0ZBSWpIclVqUVhnMEZCT2F2am5FZFExa0J4YXNHQ0JpQUJmUTFYTThPL0UxU0w0UTBCRzBJRVBMMWFzbUc1OU05QmxUSit4VHFIRFBjTzl1TG1Za0lVQTFQNnBLeXhjdURDc2ZJSFhiTjY4V1ZMVUJIZUJBamhEZkloLytCNHBPWWxBaENVRTVxTk1RK3JYcnk5VGxUY3hJZ21tU0VLUnhDTC9ZUENHc0lZVEdUSUVRQkRKYnlCRUc2TCtDUk1tU0JSTnJ0M2dIV0hiVmN3TFgzQmh2cHpRQWhFdlFRUXNrYU9DeHFJVEV4OTRTMFFPbGl3Z1A0VEJXcmhvaUlHOEF3bVNreWRQeXByRFNOUFpCbmZDaWhGODRXMWtyS2lNc2RpVW9sQlN3Sklzdm14TFlvVmdOYUVGR0liSWlGZ0lEbndSWnNPR0RhcENoUXFTZVBMcXh5eW91ckVla2gvaW9IeEtjWXRxcFNGcFNMUVFnRVVUNU5SWncwZEpsS1hXYnN1MVE0RzgvZkxseTlXTkd6ZGtlZm5ISDMvc1dnTXdlSU1uUW5ENDRZY2Z4RlZRQWFOV1QvazFkKzdja2pzUFZtZ2gvNDhMSUh2NTg4OC95LytzTW1LR3d1SVBROUxqcVJDQW9ndUxKR0ppWXVRdkFtQzlISVVlMWkvd2wwS1Nzd0tZRncrZUY4a2hMQUFyblp6ZlhEUkVCOCtGNEF0K25ud0RpMXBaUmtiMFR4c2ZTVllRUVZCcHBLS0pCWW5HcjY4WUFwT2tRdkRIS2ZNNlFpQk5iZklCYndkUkZZTGg3Y1U0WVlOZ2hHQVFqQkFNZ2hHQ1FUQkNNQWhHQ0FZYnBmNEg2TWllSzNGaEUrQUFBQUFBU1VWT1JLNUNZSUk9IiwKICAgICAgIkxvd2VyTGVmdFgiOm51bGwsCiAgICAgICJMb3dlckxlZnRZIjo1MCwKICAgICAgIlNjYWxlIjo0MAogICB9LAogICAiUmVjdCI6ewogICAgICAiTG93ZXJMZWZ0WCI6MjE1LAogICAgICAiTG93ZXJMZWZ0WSI6MTAsCiAgICAgICJVcHBlclJpZ2h0WCI6NDA1LAogICAgICAiVXBwZXJSaWdodFkiOjg1LAogICAgICAiQm9yZGVyUmFkaXVzIjowLAogICAgICAiQm9yZGVyV2VpZ2h0IjoxLAogICAgICAiQm9yZGVyQ29sb3IiOnsKICAgICAgICAgIlJlZCI6NzUsCiAgICAgICAgICJHcmVlbiI6MTMsCiAgICAgICAgICJCbHVlIjoxMDAKICAgICAgfSwKICAgICAgIkJhY2tncm91bmRDb2xvciI6bnVsbCwKICAgICAgIkNvbnRlbnRNYXJnaW4iOjUKICAgfSwKICAgIlBhZ2UiOjEKfQ=="
Add-DssProcessingRule -Format PDF -DocumentsFormats pdf -Parameters @{ "PdfSignatureAppearance"=$appearance ; "PdfSignatureTemplateId"="2"; "PDFReason"="Цифровая подпись"; "PDFLocation"="DSS"; "PDFFormat"="CMS" }
# Вывести список правил для получения ID
# Add-DssProcessingRule
New-DssProcessingTemplate -ProcessingRulesIds X -Description "Видимая PDF-подпись"
Пример настройки шаблона отображаемой подписи PDF-документа с подстановочными параметрами:
{
"Content":[
{
"Text":"Подлинник электронного документа, подписанного ЭП, хранится в системе электронного документооборота Минкомсвзяи России.",
"Margin":50,
"Font":{
"FontSize":4,
"FontFamily":"arial",
"FontStyle":0,
"FontColor":{
"Red":0,
"Green":0,
"Blue":0
}
}
},
{
"Text":"СВЕДЕНИЯ О СЕРТИФИКАТЕ ЭП",
"Margin":50,
"Font":{
"FontSize":8,
"FontFamily":"times",
"FontStyle":0,
"FontColor":{
"Red":0,
"Green":0,
"Blue":0
}
}
},
{
"Text":"Кому выдан: {0:SnCN}",
"Font":{
"FontSize":8,
"FontFamily":"times",
"FontStyle":0,
"FontColor":{
"Red":0,
"Green":0,
"Blue":0
}
}
},
{
"Text":"Кем выдан: {0:IssuerO}",
"Font":{
"FontSize":8,
"FontFamily":"times",
"FontStyle":0,
"FontColor":{
"Red":0,
"Green":0,
"Blue":0
}
}
},
{
"Text":"Действителен: с {0:NotBefore} по {0:NotAfter}",
"Font":{
"FontSize":8,
"FontFamily":"times",
"FontStyle":0,
"FontColor":{
"Red":0,
"Green":0,
"Blue":0
}
}
}
],
"TemplateId":2,
"Icon":{
"Image":"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",
"LowerLeftX":null,
"LowerLeftY":50,
"Scale":40
},
"Rect":{
"LowerLeftX":215,
"LowerLeftY":10,
"UpperRightX":405,
"UpperRightY":85,
"BorderRadius":0,
"BorderWeight":1,
"BorderColor":{
"Red":75,
"Green":13,
"Blue":100
},
"BackgroundColor":null,
"ContentMargin":5
},
"Page":1
}
Простой текстовый шаблон
Данный шаблон является наиболее простым в конфигурации и используется в случае, когда отображаемая подпись включает в себя только текстовые данные.
Конфигурация шаблона включает в себя следующие поля.
Поле | Тип | Описание |
---|---|---|
Content | TextBlock[] | Содержимое представления в виде массива текстовых блоков |
Page | int | Номер страницы (первая страница имеет номер 1), на которой следует расположить представление. Отрицательные значения соответствуют отсчету от последней страницы. Значение -1 указывает на последнюю страницу |
Rect | SignatureRect | Описание прямоугольника подписи |
TemplateId | int | Идентификатор шаблона. Должен иметь значение 1 |
Шаблон с логотипом и текстом
Данный шаблон может включать в себя графическое изображение (например, логотип компании) в добавление к текстовой информации, описывающей подписываемые данные.
Шаблон включает в себя следующие поля.
Поле | Тип | Описание |
---|---|---|
Content | TextBlock[] | Содержимое представления в виде массива текстовых блоков |
Page | int | Номер страницы (первая страница имеет номер 1), на которой следует расположить представление. Отрицательные значения соответствуют отсчету от последней страницы. Значение -1 указывает на последнюю страницу |
Icon | ImageBlock | Описание параметров логотипа |
Rect | SignatureRect | Описание прямоугольника подписи |
TemplateId | int | Идентификатор шаблона. Должен иметь значение 2 |
Шаблон в виде изображения
Данный шаблон позволяет использовать цельное изображение в качестве отображаемой подписи.
Поле | Тип | Описание |
---|---|---|
Content | TextBlock[] | Содержимое представления в виде массива текстовых блоков |
Page | int | Номер страницы (первая страница имеет номер 1), на которой следует расположить представление. Отрицательные значения соответствуют отсчету от последней страницы. Значение -1 указывает на последнюю страницу |
Background | ImageBlock | Описание параметров изображения |
Rect | SignatureRect | Описание прямоугольника подписи |
TemplateId | int | Идентификатор шаблона. Должен иметь значение 3 |
Передача параметров шаблона в метод подписи документов
Если в документ необходимо поставить видимую подпись, то в дополнительные параметры следует поместить два значения:
- идентификатор шаблона в качестве значения параметра
PdfSignatureTemplateId
, - параметры шаблона в качестве значения параметра
PdfSignatureAppearance
.
Примечание
Возможные значения параметра PdfSignatureTemplateId
зависят от вида шаблона отображаемой
подписи. Поле TemplateId
при использовании каждого из шаблонов должно иметь
значение 1, 2 или 3 соответственно.
Содержимое шаблона должно быть представлено как json-объект, сериализованный в UTF-8 строку и закодированный в Base64.
Пример запроса на подпись PDF-документа, включающий в себя отображаемую подпись в виде набора текстовых данных:
POST http://<hostname>/SignServer/rest/api/documents HTTP/1.1
Content-Type: application/json
Authorization: Bearer
Host: hostname
Accept-Encoding: gzip, deflate
Content-Length: 74210
Connection: keep-alive
{
"Content": "JVBERi0xL...",
"Signature": {
"Type": "PDF",
"Parameters": {
"PDFFormat": "CMS",
"PdfSignatureAppearance":"eyJDb2...",
"PdfSignatureTemplateId": "1"
},
"CertificateId": 1006,
"PinCode": ""
}
}
Передача индивидуальных для каждого документа параметров шаблона в метод подписи пакета документов
Если при пакетной подписи PDF-документов необходимо поставить видимую подпись с индивидуальным
шаблонам для каждого из переданных PDF-документов, то в дополнительные параметры следует
положить параметр PdfSignatureAppearancesData
. Значение этого параметра должно быть представлено
как массив json-объектов, сериализованный в UTF-8 строку и закодированный в Base64.
Размер этого массива должен быть равен количеству переданных на подпись PDF документов,
порядок элементов массива должен соответствовать порядку переданных на подпись PDF-документов.
Структура массива объектов с информацией о формате отображаемой подписи:
Примечание
В данном примере для первого подписываемого PDF-документа будет использован формат отображаемой подписи с идентификатором шаблона = 1, а для второго документа будет использован формат отображаемой подписи с идентификатором шаблона = 3.
[
{
"TemplateId": "1",
"Appearance": "ewoJIkNv..."
},
{
"TemplateId": "3",
"Appearance": "ewogICAiQ..."
}
]
Для того чтобы закодировать этот json-массив для передачи внутри параметра подписи, необходимо сначала из json-строки, в которую сериализуется массив, извлечь байты в кодировке UTF-8:
// Encoding.UTF8.GetBytes()
91,123,34,84,101,109,112,108,97,116,101,73,100,34,58,34,49,34,44,34,...
А затем закодировать получившийся массив байтов в Base64:
// Convert.ToBase64String()
W3siVGVtcGxhdGVJZCI6IjEiLCJBcHBlYXJhbmNlI...
Получившееся значение необходимо добавть в словарь параметров подписи
с ключом PdfSignatureAppearancesData
:
POST http://<hostname>/SignServer/rest/api/documents/packagesignature HTTP/1.1
Content-Type: application/json
Authorization: Bearer
Host: hostname
Accept-Encoding: gzip, deflate
Content-Length: 74210
Connection: keep-alive
{
"Documents": [
{ Content: "JVBERi0xL..." },
{ Content: "Vfasdhgaj..." },
],
"Signature": {
"Type": "PDF",
"Parameters": {
"PDFFormat": "CMS",
"PdfSignatureAppearancesData": "W3siVGVtcGxhdGVJZCI6IjEiLCJBcHBlYXJhbmNlI..."
},
"CertificateId": 1006,
"PinCode": ""
}
}
Примечание
Параметры PdfSignatureAppearancesData
и PdfSignatureAppearance
являются
взаимоисключающими. При попытке их одновременного использования Сервис Подписи
вернет ошибку invalid_signature_params
.
Пример закодированного списка шаблонов:
W3siVGVtcGxhdGVJZCI6IjEiLCJBcHBlYXJhbmNlIjoiZXdvSklrTnZiblJsYm5RaU9pQmJld29KQ1NKVVpYaDBJam9nSXRDZjBMN1F0TkM3MExqUXZkQzkwTGpRdWlEUmpkQzcwTFhRdXRHQzBZRFF2dEM5MEwzUXZ0Q3owTDRnMExUUXZ0QzYwWVBRdk5DMTBMM1JndEN3TENEUXY5QyswTFRRdjlDNDBZSFFzTkM5MEwzUXZ0Q3owTDRnMEszUW55d2cwWVhSZ05DdzBMM1F1TkdDMFlIUmp5RFFzaURSZ2RDNDBZSFJndEMxMEx6UXRTRFJqZEM3MExYUmd0QzYwWURRdnRDOTBMM1F2dEN6MEw0ZzBMVFF2dEM2MFlQUXZOQzEwTDNSZ3RDKzBMN1FzZEMrMFlEUXZ0R0MwTEFnMEp6UXVOQzkwTHJRdnRDODBZSFFzdEMzMFkvUXVDRFFvTkMrMFlIUmdkQzQwTGd1SWl3S0NRa2lSbTl1ZENJNklIc0tDUWtKSWtadmJuUlRhWHBsSWpvZ05Dd0tDUWtKSWtadmJuUkdZVzFwYkhraU9pQWlZWEpwWVd3aUxBb0pDUWtpUm05dWRGTjBlV3hsSWpvZ01Dd0tDUWtKSWtadmJuUkRiMnh2Y2lJNklIc0tDUWtKQ1NKU1pXUWlPaUF3TEFvSkNRa0pJa2R5WldWdUlqb2dNQ3dLQ1FrSkNTSkNiSFZsSWpvZ01Bb0pDUWw5Q2drSmZRb0pmU3dLQ1hzS0NRa2lWR1Y0ZENJNklDTFFvZENTMEpYUWxOQ1YwSjNRbU5DdklOQ2VJTkNoMEpYUW9OQ2kwSmpRcE5DWTBKclFrTkNpMEpVZzBLM1Fuem9pTEFvSkNTSkdiMjUwSWpvZ2V3b0pDUWtpUm05dWRGTnBlbVVpT2lBNExBb0pDUWtpUm05dWRFWmhiV2xzZVNJNklDSjBhVzFsY3lJc0Nna0pDU0pHYjI1MFUzUjViR1VpT2lBd0xBb0pDUWtpUm05dWRFTnZiRzl5SWpvZ2V3b0pDUWtKSWxKbFpDSTZJREFzQ2drSkNRa2lSM0psWlc0aU9pQXdMQW9KQ1FrSklrSnNkV1VpT2lBd0Nna0pDWDBLQ1FsOUNnbDlMQW9KZXdvSkNTSlVaWGgwSWpvZ0l0Q2EwTDdRdk5HRElOQ3kwWXZRdE5DdzBMMDZJTkNZMExMUXNOQzkwTDdRc2lEUW1OQ3kwTERRdlNEUW1OQ3kwTERRdmRDKzBMTFF1TkdISWl3S0NRa2lSbTl1ZENJNklIc0tDUWtKSWtadmJuUlRhWHBsSWpvZ09Dd0tDUWtKSWtadmJuUkdZVzFwYkhraU9pQWlkR2x0WlhNaUxBb0pDUWtpUm05dWRGTjBlV3hsSWpvZ01Dd0tDUWtKSWtadmJuUkRiMnh2Y2lJNklIc0tDUWtKQ1NKU1pXUWlPaUF3TEFvSkNRa0pJa2R5WldWdUlqb2dNQ3dLQ1FrSkNTSkNiSFZsSWpvZ01Bb0pDUWw5Q2drSmZRb0pmU3dLQ1hzS0NRa2lWR1Y0ZENJNklDTFFtdEMxMEx3ZzBMTFJpOUMwMExEUXZUb2cwS1BRcGlEUW5OQzQwTDNRdXRDKzBMelJnZEN5MFkvUXQ5QzRJaXdLQ1FraVJtOXVkQ0k2SUhzS0NRa0pJa1p2Ym5SVGFYcGxJam9nT0N3S0NRa0pJa1p2Ym5SR1lXMXBiSGtpT2lBaWRHbHRaWE1pTEFvSkNRa2lSbTl1ZEZOMGVXeGxJam9nTUN3S0NRa0pJa1p2Ym5SRGIyeHZjaUk2SUhzS0NRa0pDU0pTWldRaU9pQXdMQW9KQ1FrSklrZHlaV1Z1SWpvZ01Dd0tDUWtKQ1NKQ2JIVmxJam9nTUFvSkNRbDlDZ2tKZlFvSmZTd0tDWHNLQ1FraVZHVjRkQ0k2SUNMUWxOQzEwTG5SZ2RHQzBMTFF1TkdDMExYUXU5QzEwTDA2SU5HQklERXlMakV5TGpJd01UVWcwTC9RdmlBeE1pNHhNaTR5TURFMklpd0tDUWtpUm05dWRDSTZJSHNLQ1FrSklrWnZiblJUYVhwbElqb2dPQ3dLQ1FrSklrWnZiblJHWVcxcGJIa2lPaUFpZEdsdFpYTWlMQW9KQ1FraVJtOXVkRk4wZVd4bElqb2dNQ3dLQ1FrSklrWnZiblJEYjJ4dmNpSTZJSHNLQ1FrSkNTSlNaV1FpT2lBd0xBb0pDUWtKSWtkeVpXVnVJam9nTUN3S0NRa0pDU0pDYkhWbElqb2dNQW9KQ1FsOUNna0pmUW9KZlYwc0Nna2lWR1Z0Y0d4aGRHVkpaQ0k2SURFc0Nna2lVbVZqZENJNklIc0tDUWtpVEc5M1pYSk1aV1owV0NJNklESXhOU3dLQ1FraVRHOTNaWEpNWldaMFdTSTZJREV3TEFvSkNTSlZjSEJsY2xKcFoyaDBXQ0k2SURRd05Td0tDUWtpVlhCd1pYSlNhV2RvZEZraU9pQTROU3dLQ1FraVFtOXlaR1Z5VW1Ga2FYVnpJam9nTUN3S0NRa2lRbTl5WkdWeVYyVnBaMmgwSWpvZ01Td0tDUWtpUW05eVpHVnlRMjlzYjNJaU9pQjdDZ2tKQ1NKU1pXUWlPaUEzTlN3S0NRa0pJa2R5WldWdUlqb2dNVE1zQ2drSkNTSkNiSFZsSWpvZ01UQXdDZ2tKZlN3S0NRa2lRbUZqYTJkeWIzVnVaRU52Ykc5eUlqb2diblZzYkN3S0NRa2lRMjl1ZEdWdWRFMWhjbWRwYmlJNklEVUtDWDBzQ2draVVHRm5aU0k2SURFS2ZRbz0ifSx7IlRlbXBsYXRlSWQiOiIyIiwiQXBwZWFyYW5jZSI6ImV3b2dJQ0FpUTI5dWRHVnVkQ0k2V3dvZ0lDQWdJQ0I3Q2lBZ0lDQWdJQ0FnSUNKVVpYaDBJam9pMEovUXZ0QzAwTHZRdU5DOTBMM1F1TkM2SU5HTjBMdlF0ZEM2MFlMUmdOQyswTDNRdmRDKzBMUFF2aURRdE5DKzBMclJnOUM4MExYUXZkR0MwTEFzSU5DLzBMN1F0TkMvMExqUmdkQ3cwTDNRdmRDKzBMUFF2aURRcmRDZkxDRFJoZEdBMExEUXZkQzQwWUxSZ2RHUElOQ3lJTkdCMExqUmdkR0MwTFhRdk5DMUlOR04wTHZRdGRHQzBMclJnTkMrMEwzUXZkQyswTFBRdmlEUXROQyswTHJSZzlDODBMWFF2ZEdDMEw3UXZ0Q3gwTDdSZ05DKzBZTFFzQ0RRbk5DNDBMM1F1dEMrMEx6UmdkQ3kwTGZSajlDNElOQ2cwTDdSZ2RHQjBMalF1QzRpTEFvZ0lDQWdJQ0FnSUNBaVRXRnlaMmx1SWpvMU1Dd0tJQ0FnSUNBZ0lDQWdJa1p2Ym5RaU9uc0tJQ0FnSUNBZ0lDQWdJQ0FnSWtadmJuUlRhWHBsSWpvMExBb2dJQ0FnSUNBZ0lDQWdJQ0FpUm05dWRFWmhiV2xzZVNJNkltRnlhV0ZzSWl3S0lDQWdJQ0FnSUNBZ0lDQWdJa1p2Ym5SVGRIbHNaU0k2TUN3S0lDQWdJQ0FnSUNBZ0lDQWdJa1p2Ym5SRGIyeHZjaUk2ZXdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FpVW1Wa0lqb3dMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWlSM0psWlc0aU9qQXNDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDSkNiSFZsSWpvd0NpQWdJQ0FnSUNBZ0lDQWdJSDBLSUNBZ0lDQWdJQ0FnZlFvZ0lDQWdJQ0I5TEFvZ0lDQWdJQ0I3Q2lBZ0lDQWdJQ0FnSUNKVVpYaDBJam9pMEtIUWt0Q1YwSlRRbGRDZDBKalFyeURRbmlEUW9kQ1YwS0RRb3RDWTBLVFFtTkNhMEpEUW90Q1ZJTkN0MEo4aUxBb2dJQ0FnSUNBZ0lDQWlUV0Z5WjJsdUlqbzFNQ3dLSUNBZ0lDQWdJQ0FnSWtadmJuUWlPbnNLSUNBZ0lDQWdJQ0FnSUNBZ0lrWnZiblJUYVhwbElqbzRMQW9nSUNBZ0lDQWdJQ0FnSUNBaVJtOXVkRVpoYldsc2VTSTZJblJwYldWeklpd0tJQ0FnSUNBZ0lDQWdJQ0FnSWtadmJuUlRkSGxzWlNJNk1Dd0tJQ0FnSUNBZ0lDQWdJQ0FnSWtadmJuUkRiMnh2Y2lJNmV3b2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBaVVtVmtJam93TEFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FpUjNKbFpXNGlPakFzQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0pDYkhWbElqb3dDaUFnSUNBZ0lDQWdJQ0FnSUgwS0lDQWdJQ0FnSUNBZ2ZRb2dJQ0FnSUNCOUxBb2dJQ0FnSUNCN0NpQWdJQ0FnSUNBZ0lDSlVaWGgwSWpvaTBKclF2dEM4MFlNZzBMTFJpOUMwMExEUXZUb2cwSmpRc3RDdzBMM1F2dEN5SU5DWTBMTFFzTkM5SU5DWTBMTFFzTkM5MEw3UXN0QzQwWWNpTEFvZ0lDQWdJQ0FnSUNBaVJtOXVkQ0k2ZXdvZ0lDQWdJQ0FnSUNBZ0lDQWlSbTl1ZEZOcGVtVWlPamdzQ2lBZ0lDQWdJQ0FnSUNBZ0lDSkdiMjUwUm1GdGFXeDVJam9pZEdsdFpYTWlMQW9nSUNBZ0lDQWdJQ0FnSUNBaVJtOXVkRk4wZVd4bElqb3dMQW9nSUNBZ0lDQWdJQ0FnSUNBaVJtOXVkRU52Ykc5eUlqcDdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDSlNaV1FpT2pBc0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNKSGNtVmxiaUk2TUN3S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSWtKc2RXVWlPakFLSUNBZ0lDQWdJQ0FnSUNBZ2ZRb2dJQ0FnSUNBZ0lDQjlDaUFnSUNBZ0lIMHNDaUFnSUNBZ0lIc0tJQ0FnSUNBZ0lDQWdJbFJsZUhRaU9pTFFtdEMxMEx3ZzBMTFJpOUMwMExEUXZUb2cwS1BRcGlEUW5OQzQwTDNRdXRDKzBMelJnZEN5MFkvUXQ5QzRJaXdLSUNBZ0lDQWdJQ0FnSWtadmJuUWlPbnNLSUNBZ0lDQWdJQ0FnSUNBZ0lrWnZiblJUYVhwbElqbzRMQW9nSUNBZ0lDQWdJQ0FnSUNBaVJtOXVkRVpoYldsc2VTSTZJblJwYldWeklpd0tJQ0FnSUNBZ0lDQWdJQ0FnSWtadmJuUlRkSGxzWlNJNk1Dd0tJQ0FnSUNBZ0lDQWdJQ0FnSWtadmJuUkRiMnh2Y2lJNmV3b2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBaVVtVmtJam93TEFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FpUjNKbFpXNGlPakFzQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0pDYkhWbElqb3dDaUFnSUNBZ0lDQWdJQ0FnSUgwS0lDQWdJQ0FnSUNBZ2ZRb2dJQ0FnSUNCOUxBb2dJQ0FnSUNCN0NpQWdJQ0FnSUNBZ0lDSlVaWGgwSWpvaTBKVFF0ZEM1MFlIUmd0Q3kwTGpSZ3RDMTBMdlF0ZEM5T2lEUmdTQXhNaTR4TWk0eU1ERTFJTkMvMEw0Z01USXVNVEl1TWpBeE5pSXNDaUFnSUNBZ0lDQWdJQ0pHYjI1MElqcDdDaUFnSUNBZ0lDQWdJQ0FnSUNKR2IyNTBVMmw2WlNJNk9Dd0tJQ0FnSUNBZ0lDQWdJQ0FnSWtadmJuUkdZVzFwYkhraU9pSjBhVzFsY3lJc0NpQWdJQ0FnSUNBZ0lDQWdJQ0pHYjI1MFUzUjViR1VpT2pBc0NpQWdJQ0FnSUNBZ0lDQWdJQ0pHYjI1MFEyOXNiM0lpT25zS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSWxKbFpDSTZNQ3dLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJa2R5WldWdUlqb3dMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWlRbXgxWlNJNk1Bb2dJQ0FnSUNBZ0lDQWdJQ0I5Q2lBZ0lDQWdJQ0FnSUgwS0lDQWdJQ0FnZlFvZ0lDQmRMQW9nSUNBaVZHVnRjR3hoZEdWSlpDSTZNaXdLSUNBZ0lrbGpiMjRpT25zS0lDQWdJQ0FnSWtsdFlXZGxJam9pYVZaQ1QxSjNNRXRIWjI5QlFVRkJUbE5WYUVWVlowRkJRVWxKUVVGQlFUWkRRVmxCUVVGQ09HMXZTR3hCUVVGQlFrZGtRbFJWUlVGQldXRm5UV1ZwVjFoM1FVRkJRV3gzVTBac2VrRkJRVTk0UVVGQlJITlJRbXhUYzA5SGQwRkJRVUZLYVZNd1pFVkJVQ3RJYWpoNUwwRkJRVUZLV0ZKR1YwaFNhMWxZVW14UGJVNTVXbGRHTUZwUlFYbE5SRVV5VEZSRmVFeFVTVEZXUkVFMVQycEplVTlxUVRCTGVrRjRUMnBCZDJjMVpsUTBaMEZCUVVOV01GSldhREJhUjBZd1dsUndkR0l5VW5CYWJtdEJUV3BCZUU1cE1IaE5VekI1VGxaUmQwOVViM2xOYW05M1RrTnpkMDFVYjNkTlVFeExZVEUwUVVGQmNuTlRWVkpDVmtob1pUZGFkMGh5UWxKV1JqaGpkbTVaUkRCS2FUTXdTbWRHUTJKM1drTlNlbkZEV1U5blVXdERTVUp4WTBaRFZsaHZia0ZyYjNaUldsTklSREJLU2tORFIxRkZSMjlKVGxOQlpIQlRjVGxHTUZkWllqTTNiak5sUm1JNWRUTnpNamt3TTJJd1J6bDJNbFI2TTNSNVdtNWlNSG80Tnk5dWJraDJUek5WTVcweVUycEVaalUzYXl0eEwyaFFORFJTWjJ0RmQxRnFRVWxTWjJkSGQxRnFRa2xDWjJoSFNWTnZRelJJV2paemRWaE1MMWRYTkZjd2FIbG1TVWxRVDNwdWVqVXJja0YzWTA5eFVETTNPVFowVkhBd05uQlhOMlIxTm1JeGVIQkZlVnBWYUZWMVdFWnBWa3N4WkU5MlppOHJLM2x3ZGpOeWQzRmxaa3hyUzJ4dGVWcFFiMGxSTjFSM1dFRnBNMkk1T1ZkUE0yWjFWa2gyTWpkR1NHNTZjREZVY1ZaTGJGVnpWMHhHTVdZMU9IVldWREppU214VksyNVRjRnBOU0dwVloyVlFTR2xuY213ckwzSnVOemMzVkdReE9XVndWakpXWlRGaGJGWldjekphVGxaaVJtbFNXREZIVVhwVWQxWkJhWEpXY1RGVE5qbGhkRlY1T1dWMlJrSldjV3hTVWpka2RUTldORlZMUmxwS09XSnhVR01yWm1jdkx5OTRWRGRrYVhoUkx6TXdNREF2Y1M5Mk16ZExiR1YxV0VkeVZYRkdSWEZVTlRRNGMzUXJVWFJJWjJsQ1RYb3Zka2h1ZWxwSlVUTmhPVnBOZEZkcVVsRnJXaTl3VDNwaWREQTVkRE5NYUZJdlpreE1URFp3UW1kM1lYRmhPV1YxUzI0ek5qbEljWFpKVTJ4SmRFSkViWHBLYTJwSk4ydzRLMlpLY1N0UVJHaExiVE5oZEVod1VEUnhRbUpDZHpobFZrOVFTR28xWkhwVWNEQTJWbVI1VEVsWGJVbFhRV2d2THk4eU0yMXFWbkpzZEhFNVpUZG1jVE5NYlhvcmRrUkVSQzlWWldJM2JEYzVOalpoVGtkdFUwOXVVRzFxVEdkTFFrZGtTVUZvUWtOMVRtZDZRVzEyZHpSTlJsZHRlbHAwY2t4T2Jub3JjbGR3VFUxWGJsZFdZa2h4ZEZaeE1XRlhURlI2WkdGMlExTnBVRWxKWXl0bVQyeFZhQzk0U1dkU2NXMXFVbTl5YnpFMlZXbFNTVzlZY1RNM0t5OXhiRk53YTNKcFNWZ3pMemxXWlRoNFpVbFpWMUpOYWtWNGMySkxlVVI0TWpkS2FIVnBVell5SzB0NFQyNVVjbkJNV1U1WWFFZFZVbk5CU1hKV2NYbFJiVlZIV2sxdFZqQmhMMU4zS3paMUt5dFBTVXdyVkhSMU0wUnFaR0YyUTBOelNWTjNZM1ZXUzJ4VVJtcFNkRmRxVW5jdlpFVnNNMGxTVjFSSmEwVkdNVGM1TldSSVZEVTRWMFkwUjJJelEyUk9WSGdyTDFCb1ZrWm9RM2RDYjAxSFJGWk1WSEF3SzFoMFVFTmlOWFZpVG0xNlMzUlNRbWxIZUU5T2NVVmFXWFZZVTNCNkswbGpVRWc0YnpKQlZuWmlkRzB6WmtOb1JrRnFhSGMxYWtGbk9IaEdWVWt4UVV4SlJXSlNjakV3TlhReVlrcEdWWEkwWkU4ellsVmxkek12VG14NFpIYzRlVnBOT1ZoWGNsWjJNV3hvU2t4UlR6Sm5WbkV4WVhWcFZYbHVhakUzY0hBMEsyWmhjWGxhVFcxcFZ6RTNiams1T1M5V0t5c3JLelkwWTFJM1ZWTlJWa3RTZWtwcmVuQTNaM0ZZT1dnek56azBPWE5STmtKSlQyeEdNMk5LU21ReFRVUTBXbnBDZVhWQ1dXMVlabVZsVldOVFYyWlVRa1JqTlVKSVkxTXphR3RNYURkT1MyeFRLMHQ1VTNCUmIwVmhLeTluVFhWc2VqaEdaekJHUjFwQ1ZucG5hM2xrVURWR2NIQkxNVU5uWjBkMlpFSnlhbTFGZVdSUGFVTlhibVkyUm1FNFNrTkdORVpEY1ZaRGJrbzRSMWhQYmtadE0yaE5aWFZZWW5acmRrbEhhUzl4UmtSb05tOWhUbGR3U1d4dVRGUndhekZUWjAxeFZVdGFVSE5SZVVKc2VUVmFWbmMwV1U1bE0xZEVlVlJoVTJSV2VYbGFTV3h6S3pkT2J6QlRTakUyVGtGb2NWbE5RVVEwY2xCVFNqQTJkR04zT0M5UFJtMTBNbnBhVldkVFVGY3JWRGgzVEVaUGVrbFJiMEZhUmsxdWFuaGFhVzF2T0hGRVJtcDRhMmRzT1dJek16TndUVWg2V0haMFlXRTFjVE5pY1RGSVR6bEJkMUF6YW1wNkswc3lRVXBDZGxsWk9HcG1UVUZQTTFSdlNVZ3JOVE4zZVdkUUx6YzBVWHBXY0RCclZERTNkREZpY25OTldEZDFkVE16TXpaeWFXaFJjRWwxU1M5bWRuazBRMHAwSzFwek1tRldVaTlzUVd0SlNYaEpkMXBOTm5wSGFsSnpTR1pFVm5ZemRIaGhjMGREUWxwWk9ESm1XRlJ2YTBKdE1HSTFjbVZwYzNSVFoyZ3lSVmRxUlhoTlpra3Zja1oxTTNwcWNEWTVTMnBsYVcxUU56bDFNbGRRVjA5M04wNUZjVEkyWkZCdU4xbzJPWFYzY0M4dmRHcFFkMmx5VmpZNVpURnZRVUpCTTFOTVdsWXlLMlpPYTJGUFNFTm5NMjl5VUhoWmMxaE1ablJDTm1FeldDdG1jbkp5ZVRFM2JFOXRkQzh6VUhReWFsZHlWemRrZFRGd05EbGxNMUpNU0VrNFpWQmlTVzFVU21kblRIcExha1J3ZVdZMk0wUkVibkJ3WWpVNEsyWXhNWFZYV21KMmJURTNXblJOVm1wTWJIa3JNMUIyTHpoak9UQlRaSGN2U25aSk5HVlFWSEpsVFRaR1puUm9aM1JYZUZNMlNsUkNhRlJTT0dSSFJHMTRjMkpIY1ZNMVkzVk5jMGxVUVRKaWRYVXJLeXRGTTFCaGNHc3dZak5TYjBod1YyeG1OblJUY0c4eGNURmhhVmhXZVZkRVVYWTJLeXNyYTNGRFZ6TTRlbUZzSzNvdmFUZ3JMM0F2Ym5kSWRIZExOSGhKWmpkQk5qVkVZWEZXTml0MVZ5dExaMWR0Ynk5TVNFWk9ValEwWXpCaE1YZ3ZVRmhZV0M5eEx6QlFRakZWWkhkdVlXcDBXVzVYVUVocWEydGlNWEJLV2toV1lVbzJZakIyT1VkMllYUkhiSEU1ZFhwYU5HcGlZMmxGWjBsRWRIYzBWRTlwVVVsVlVHbFlWM2x2Y2tadGVsSjJlRnAyTXpjNVozWnZLMEkwY0U5WVNGRjNkbll2SzJWNFJsWjVXa2xzWjNvM05IaEpTemRKVDFsSk5XOW1OemxQYTJwS1dGVjJORlEzYUc5cGJsUkJLemRIWm5oRU5WRjJPWGRFWW1kMVRuaEpiRUpCWXpZNVQxZFlXRGh2U1VORlpuUk1SMGhFYkhsTGExVk1iSG8xTURRNE1XWjBhVzB6T0ZKNWEyTm1abVZSTm5keU1rTldWbXBGUTBWNWRETmphV1ZRWW5VMlkzVlhTek4yU1U5bmEyZHVVMDFhUTBwb1VWVnpka3RNTDNKeWFHbFNRMEZMUW5GeVowUk1XSEpzTTNKTFoycFZWRTVEUjFOVFYwbFJlbmhQUVU5aFVHWjZjMjFyYUZJemRGZHlWbVJOZG5JNFQwRjRNRE5pWTBWS1NqRlRVM2d5WmtORGVtMVhRVkV3VGtkWVdVZFpOVWxtZVVaYWMyTjVTVzVvWTBwU1dWQldOV2hSVkdkWFRGRklMMlE0UlhkSlJHeDNkMVV3VUM5cFRtRkNhbWhRVW5OcE4xSkVjV3BWYUZGeldEbEtOMWhSVVZKVlIyUnNVRGxOYzNsUFJITnZWVFF3WVU1UmNXOW1jelpNVXk5cVoyZDNMMFZLVlZGRUsyaHFjVUV6V1ZSbE1FbG5aM0pPYm5vNGNEbFpRMVZaWVRCQlIwUjROemhoWjBFMVoyYzRNa3BSWW5WVU4wRXJaVU5aUlVocWQwdFlZamtyZG1Gd1dISTFOWFZFVVhkQ1JIbzJUMlJFVlhabmFERXZkVUZHTnprck5sWnhVMFZYYUdkMmJGRlVaSE15UmtGbU9GUnhUVVZzTjA5a1EzTmhUVXRqVURGSVpHWklUWE5aY1ZKQ05ETTNXblF5T0ZJMlRYRldiWEJtWm5FeFlYUnNVV0pCUkRrMVR6aFNla0ozY1dOSVYyWXpiMmxvVGt0c1V6QjBTRmRoY1ZkS2F6QmhNMXB2ZDBKUmMxZFdVR0l3Vkc0ek1qSlhabWxNYm5wQ00xQkdVWFl2Ym0xSE5HMUhhVnBUWkc1RlNXZFNielJqY1ZRM05UVkNUemxHVWpKSmVVOHljRzVtVkZaRVVVeG9MMUJ1ZWpZMk0zYzBaSGc1S3k5aFZubElMM015VEVWVEt5OW9ZbGN6U1haVWN6ZEVSRkZ3TUdaSFdFRnFWVkZLUVdZNVNXZHZaRTl2ZEZKSlNVRkhSRmczWm00MllVcGhXSGhKZVdRMFFuQjRSM0pWY213eFluTnVibEpvUzFnMmRVTnRRMWhxWlZkTVZuVnRSMnBrZFhKTVkybG5ObXh5VFVWcU9VMHZkSGxqTVZCRlJUaDRkV2RwTUc5cWJHZEpja0pxUTBOMFUzUlhNV1V6VWtFMVptTk5TQzlWT1RNd0wzaEtUVkZ3UkZaM05XOVJTVXcwU21WMldIRndaV0pRYm5rdlRDdFFNbHBQU0VkcFFreERWa3N4WmxkTVZXdEVTMWRyUTJGTFlYRXZhVGRwTms1SGFqaHhlWGQxYXpkaFQyaENhRU5aUlZSclpWbHNPV1IxTUdGa1QwbHNjR2g2YW10Qk5XVkROa1ZvZW14c2VXaFNVazVwTkcxWFRXWkNNbVU0VjBaNFFtNHJTMXA1T0dKbFFsQjBkVUkwTDBjeloyWkNUa3d2ZGtOTFJuVTRaVXhHVFhwVU56azVSazFLTld4b1R6RTNNVGRrTldzMk5IUmFPRnA2UW1Oc01YTm5SRlY1VG1aVUswZzNXVlIxUVRkQ1IyaElVVEkzYUVVelUyVjZSbmRLYjNoWk5GbE5Na2xUYzFwamFURkNhemRGYURKRVMwVjNVRUpGT1U1QmRERjNRVVp2UmxwQ09HUjRRWHBETDJKcFFWa3pOa3RUVUN0NGJscDFURlZTVkVONEswZDVNMDluYmtnNE4yMUNlRVZKVG1kRGJHRnpSMnR3WkZGRFR6UXdSWGw0ZHpoVk1EVkRaRnBNT1dKTVRWVXplRmhwWmpndlEyUjJSV3R2V1dkRVQxUjNRMHhLVjBsUk9FSlhRVmxJTVRKVFJrRkpha2h5VldwUldHY3dSa0pQWVhacWJrVmtVVEZyUW5oaGMwZERRbWxCUW1aUk1WaE5PRTh2UlRGVFREUlJNRUpITUVsRlVFd3hZWE50UnpVNVRUbENiRlJLSzNoVWNVaEVVR05QT1hWTWJWbHJTVlZCTVZBMmNFdDVlR04xUkVOelprbElXR0pPTmpoWFZreFZRa2hsUWtGcWFFUm1TV2d2SzBJMGNFOVpiRUZvUTFWRk5YRk9UVkVyY2xoeWVUbFViRlJqZUVsbmJXMVRSVXRTZUVOTUwxbFFRMGR6U1ZsVVIxUkpSVkZDUkVwaWVVSkZSelpNSzBOU1RXMVRRbEpPY25RelowaFhTR0pXWTNkTVdETkNhSFp3ZWxGQmFFVjJVVkZSYzJ0aFQwTjRjVWxVUlhnNU5GTXdVVTlzYVhkblVEUlVRbGR5YUc5cFNVYzRRWGR0VTJ0NVpGQjVjSEpFVTA1UVdrSnVaa05wYUVZNE5GY3hhM0pMYVUxelpHbFZiMnhDVTNkS1NYTjJiWGhNV1c5V1owNWhSVVpIU1dKSmFVWm5TVVJ1ZDFKYWMwOUhSR0Z3UTJoUmNWTmxVRXh4ZUhsNWIzVnlSV1ZyYUM5cGIwaDRTMk5aZEhGd1UwWndVMHhSVVdkRlZWUTFUbEphZHpCa1NteExXRmRpYzNVeFVUUkhPQzltVEd4NU9WZE9SM3BrYTJWbWJraElNeTl6VjJkTmQyVkpUVzVSYmtRME5GbGpabmhHVmxGQllVNVhWQzlyTVdRck4yTnJhbk5RVm0xbmFDODBPRXhKU0hZMU9EZzRMM2t2SzNOTmJVdEhkM1ZKVUZFNVRHcHhVa05CYjJkMVRFcEhTbWxaZFZGMlFXMURPVWhKVldVeGFTOTNiREJMVTNOM1MxbEdkeXRsUmpocmFFeEJRWEp1V25wbVdFUlNSVUk0SzBZMFFYUXJibTUzUkdreGNGcFNhMkl3VkhoelpsTldXVkZSVmtKd2NFdExTa0paYmtkeU5qaFpRWEJQYTFGMlJFaExaazAyVVdsQ1RtSm1TVUppZDJSU1JsbE1hRGRqVlRSWldVNW5hRWRCVVdwQ1FVMW5hRWREVVZSQ1EwMUJhRWREUVZsaWNHWTBTRFpOYVdWTE0wWm9SU3RCUVVGQlFVRlRWVlpQVWtzMVExbEpTVDBpTEFvZ0lDQWdJQ0FpVEc5M1pYSk1aV1owV0NJNmJuVnNiQ3dLSUNBZ0lDQWdJa3h2ZDJWeVRHVm1kRmtpT2pVd0xBb2dJQ0FnSUNBaVUyTmhiR1VpT2pRd0NpQWdJSDBzQ2lBZ0lDSlNaV04wSWpwN0NpQWdJQ0FnSUNKTWIzZGxja3hsWm5SWUlqb3lNVFVzQ2lBZ0lDQWdJQ0pNYjNkbGNreGxablJaSWpveE1Dd0tJQ0FnSUNBZ0lsVndjR1Z5VW1sbmFIUllJam8wTURVc0NpQWdJQ0FnSUNKVmNIQmxjbEpwWjJoMFdTSTZPRFVzQ2lBZ0lDQWdJQ0pDYjNKa1pYSlNZV1JwZFhNaU9qQXNDaUFnSUNBZ0lDSkNiM0prWlhKWFpXbG5hSFFpT2pFc0NpQWdJQ0FnSUNKQ2IzSmtaWEpEYjJ4dmNpSTZld29nSUNBZ0lDQWdJQ0FpVW1Wa0lqbzNOU3dLSUNBZ0lDQWdJQ0FnSWtkeVpXVnVJam94TXl3S0lDQWdJQ0FnSUNBZ0lrSnNkV1VpT2pFd01Bb2dJQ0FnSUNCOUxBb2dJQ0FnSUNBaVFtRmphMmR5YjNWdVpFTnZiRzl5SWpwdWRXeHNMQW9nSUNBZ0lDQWlRMjl1ZEdWdWRFMWhjbWRwYmlJNk5Rb2dJQ0I5TEFvZ0lDQWlVR0ZuWlNJNk1RcDkifSx7IlRlbXBsYXRlSWQiOiIzIiwiQXBwZWFyYW5jZSI6ImV3b2dJQ0FpUW1GamEyZHliM1Z1WkNJNmV3b2dJQ0FnSUNBaVNXMWhaMlVpT2lKcFZrSlBVbmN3UzBkbmIwRkJRVUZPVTFWb1JWVm5RVUZCVEdkQlFVRkNUVU5CV1VGQlFVUmxUVWd6U1VGQlFVRkNSMlJDVkZWRlFVRk1SMUJETDNob1FsRkJRVUZCUm5wVmEyUkRRVXMzVDBoUGEwRkJRVUZuV1RCb1UxUlJRVUZsYVZsQlFVbERSVUZCUkRaQlFVRkJaMDluUVVGSVZYZEJRVVJ4V1VGQlFVOXdaMEZCUW1SM2JreHdVbEJCUVVGQlFWcHBVekJrUlVGUU9FRXZkMFF2YjB3eWJtdDNRVUZCUVd4M1UwWnNla0ZCUVhWSmQwRkJUR2xOUW1WTFZTOWtaMEZCUkRJeFNsSkZSbFZsVG5KMGJsaHNNRlpPVldSNGVqaDZRVmRTU2tGb1IxRk1VbWxLVXpaWGNGSlZWMkZuY1V4cFpuUjRkMDlaV1V0eVZWaHhVV1ZYYjNSaE1qRk1WbGhDZVhGc1lrdGhNMkZwYkhWdlYza3hiMmsyUmt0eE4yaFRSbkpIUzBoS1YzRkRSMHhaZDNoWmExRkNZVk50WmpkNGRtTTVZMmhwVkhwS2NHdDBlV1l5WlUxNVpWUnRWR1l6TTJaMlpUa3ZOM1ZpTnpCUVNFSjNZMGhDZDJOSVFuZGpTRUozWTBoQ2QyTklRbmRqU0VKM1kwaE9iM1ZCY1c1MVFVVkNLMVZVUmtGQ05rRklNRUV2YjBRdlVVWmpiMEpOTURnNFVWVkJTSE5CVEZsQlJ6UkZlVFJEYzJjNVRWZGpRMkZyWldoclRXRkphVlZGVGpSUlJ6WkJXVTFDYTFsQmR6UkZRMWxCUTFGcVVXcG1SMUJaUkRWalFqWTBSVTVuVFdKQlZWZEJUbFZCZW1wRFR6QkRVME5YTmtsSVVVUjVaMEYxUVRCalFYZEtUR3hFZDBVMlp6Rk1kekpCZEhWU01VRTBSRWRaYWpSMldVWmpORUZvWjBsT1JHUk9SamhIVEVGSUswRmllRzB2Ym1SRllpdGtTVU56UlhSWmFEaEdXRUZYVFUxbE9YSm5WbGhCTWpoQ1F6UkhUbWRGZVVveFRGSjRTVlZGZG5sa01GUkZTR2RuWTBRMWQwOXVTVXBKU0RCYVV5OVhibWRpT0VSdGVVaFpZekpuT0ZOVGJrTk1hMHd3VVhOaE9VaDRUalJHVEVGQ2JVa3ZWbWxMT0ROUmJ6WXpNazAxUWxWUWQxQTBTR3BCVXpaQmQzTkNMelpKY0ZCd1pXTkZVblppTUdkWmQxTXljR1pSYjNkR1ZHZE9Na0ZtVFVGNE5FWnNhRVpJWm1ScmFXVjVXWGREY21kUFQwRjBTamxNYmtGT1IwSnNkazAzYmpCRWNWRkZTVWxpYzI1VlJtWm5VazFDZG05blUxZ3dVREJ2SzNKRk1HdDVZeTgwY3pSSVRHZEdiVk00Wm1kaVkyaHphR1UxTUdwbFVHaENXR2RzZEZOMFEyTjNRbHBwU1hCUVZFUjNRWGxUWVZCb1dtWlVhMkZVWWt0NFlVRlhOVWN6WjFGeFNGRnJZaTkxU1VjNFJYUlJkbFZFWm1ka1kybGlkMmhyTkVWWVoxQXljRWxLVkhCV2VtWm5WM1ZFV0RWMk1HWm5USFZCZGxrM2EySlNka0pQVEdRelIxQkJRV3R3V1hKblVqaERlalZGYVdOelVGaHhPRlpsVWs5eWNtdGxkbmhhTW1sR05sZGFUbFJKWXpKcFNYZzBUa2RLU1d0dk1HczVlbXByY0hKelJ5dGhWbFJpZEZOV2NubDNhSEF5UWpCSFJUSTJNV05xWjFCU2MwWnFTbUpyUmtsM1QyeGhPSE5UVjJ0bVNGSkxSRVpyZEhkTE9IZ3JRelZNV1c1NVJqRTBSakZKVUdKck9WZFFNbGxDT1hsRlNYRkhNMjluYlVwcksxSjBSWGt6VTNkVE1WTnFRVVZsUVhseFFuRTBTRFZyUkRkclluRkVVRUZVVVVwbU5EbFZiR3BGYnpGS0sxZG1XRnB2VUhWTGFHY3pPRVIxUVZCdlFYWjNWeXRDWld0TU1VWk5kamhNUVV4UFUxQklkMnBqYVZsS1VrUnRNRTE2VTJFMGExbFRTRWxPV0d0dE9FUjZkMEpPUVU5R00wbzNZMGd3Y25oeE5FUXhhVVU1VUVaeWNraEZOWFJDUlRCcEswRlhRMk0xUlc5bVJYWlZVa0p1VkRadlNFWkRUVEpKWWk4MFJuRlRURWcxVUhGRWFtNUZSakF5YkhCR1MyRlhkMnA1ZEVoVVFXaE9XSHBPYVhwNmRuTTBSMkpyVTJnNFYyNUpZelZMTW5GcmEydDJjR2Q2ZDFwMWIwTTBSSHBWVDFJeFVqWnlOelZTUW1aT1IyeHJSMjlNTTFGUlIxTnNORUV6WjJZeWFsSnNkMHd3Y2pOdVFXeFlRVkpqUkVjeGEwcDFhQzlaUkZCNWNFdENjRXAzZWpaTloxUnpTSEV4S3poT1lrODNVMWw0VmxOVU16WkxZM0pqWkVoT1NVOW1hVkkwWm5sVE5WQm1NVEJNWmtrckwwRlljSEp5WW1FMGRVTlJWbTFuVDNkUlNIRm5VR1JTSzBoelpVcDBZelpzVlZKMmQzWjBhR3A2UlUxeVkyUlBZVTlHTVVORFNYWkdPR2dyUTJsV05qZEpXWFl3VFVFeE9UaHpUakF3V1VGR1lsWXdRa2R3VVhoTWJGb3ZSMjkxZDFReFZVRjJPVWRCV2s0elowNXdOR3QwZW1OeVFrNVNXSFpsWm1kVU1sSk9PR2xMY0VrMVFqbGFkM3BuWkROSk9WaGplRTFvTkhwNlNWaGxRbGg1UTB0dlp5dDRlWEY1YzAwMU1YQnRiV3B2YVVWNVYwRlJjVUZJTmtGeGIxcFhWMFZhY2xCemNFWTNLMHA2YlVSMFVXUjFUVTh3T1RsNlRWZFRNRlZIWm5Wc1lURlRRblJFVG00MGJYRnZhbnByYjI1TVFWVXhTR2xYZDBKc1kxTTBSeTl2YXpoWVoyTlJNMlI2YmtGalFXczFSSHAzWjNkd2VqZHVWalZITlZvMVlsbDNkemsyUldJNVVUWk5RM1JQTDJoVGFGWnZhMGRQYlU0NU0xRm1WVVJHZVVGaWNubHpVMjVvSzJKMmFUaEVZVzFNYUZkRmMwUlFWakpCVXpGSVJucFFNMEV3WVZjMWFGRkdja3B6WTBSQ1lXZGhOa05FUTFkR1NFbzNObEJ6ZDBSS2VsRlJSazlTZG01blRsTm9ZWFZTTW13NFZqVnlUSFJoZG1kUGQwbDVWRGhaY0ZKMGExSjFiRlJHWjI5UEwxRkpORTUxU3pkQlUyZFFabkZDY0VvMmRWSldObGsxTTNkU1ZXczBjbkJZTTJKRlkxUnJiMlZsTXpCcFVGbDVWV1J0WlRFNVpXZEhaVGc0VWs1U2VXOUJValJGWkZjMldHOWpZMEpXWTBOSVVuQlpPR1p4YURsUFdtcG1VRlEzVTBoT2N5ODBaekpVYWt3elMyOUJiV0pLYXpWbWFIaDVVMDUzUkRsRE4wNU1abmhoTW14MmRtb3dWRkk0UldWQmR6UklMMEZJVDBFdmVVeENPSGgzVTNCUU0zTXpNR1JFUWpFNVNGSlZaSFkwVFdaQksxVnFVMUJzZFdGWE4yZGtSWEZsTWxkRVptOUZhRkpLYmxrM2NVMU5VRzA0ZVVOVFIwUmthbGhLZW0xM2RtTkRhV3hCWVdKNFduZFhNelZTWTJFek5WQm9lbmgwTjBaNmFtZGtUMUZOV2pFMVEyOVpVVU4yU1ZwUFFpOVZXVnA0Y25Kc1pVaHRZVnBzTkRGMWNVVm9hMmRTYkc1Wk4yZFRLMlpTYmtrNVdGSk9kbmRFWVUxTVpGbHlOMHhCYURkTVRIbHhUMFJOY0ZadGVtSmxhWFJNZGtWamFuQXdUa1JaTVRaUFNuWTVNelp5UkhacGVHd3lTVXMxVFhkaGNUTkNTVVJRZFVSMVltRk1jMWR2U21SWk1YVk5hamhRYUdST2NuRXpORkZNZDBrM1p6TnJSMHBTVW1WQ2EzRmpTR2xzVGt4bGQwMTBOR3QwTkdneVFuQkpTMVI1UkVST01sTndRMmRtUVVNNVNHNUdlRloyUVM4MlJXSjFXbFZLVDFkWGVHNUVOa1UwUldKclNrWTVUVlpHVjNkaldqQXphV0kyTmxCeldUWXZjMmhhYVhoUVNXaE1WVkpNVVZaNmFUaHhXRzlsVTNrMmNVRXlORWRRWjB0WU5WSmpWM2MxU2tkRWVuUlFXVkJaZEd4a1ZGcDBhRVYwZWtNelkwSm1NRmRDZDBWbFFXTTBRelZ3Y1RGRVZVdFdWa1kzVWxObVVqVTFMM1JNWTNkeU0xVkdOVUV2YWxSNE0yc3dkSHBETUZCU2RVSllkbVpJUkZGd1JHNVdaRTlTZUZsR2FIQmliVVYzV0cxeFRHUldUMGhKVjJ4VlozRlRNM0kxZUhvMk5XazFVMEZ4VFdsMVJ6aFhXV2RqY1RsQlJqazJkRzVLZUVwQ2NFZzJWVzlSVEhKdGIyRjFaeTl0YzBObmJXYzVWMmxUWkd0NFIwSjVNRk5NYTBGQ2QxaFBjM0l3T1VkTE9Xc3dSMmxDTTNoUU9YWkpNM1JzVEVoRFl6TTBkVlJMUjFOaGFuQlRXWHBvT0ZKcEt6UlZRbGxRVGxGQ1kwUjJkMGR4YlhWRlpDdEJjbVEyVERkU1JHOTRVVlJaV1dkTFZteFBaWFYzVFdScVozbHFTaXRzV0dreGIwTnNkVUp3T1VSUFFUQmpiSFZoSzFaTFFpc3ZTQzlYTVVOS1kyZFpjamhDYW1FNFl6RjFaWHBVVkhOWVVYWlJWa3BhUlVVNU9VRlFLME5WZVRkRFdVTlFWbkJKT1VSNFJUZDBWa2w2T1ROVVZFNWtXRUkyVkdKV1ZGWXhhMFZZZFdzMVFTc3ZlV3BMWkZVdlIzUm1UMFEwT1VGWFIxbDFaMkZVWldjNVpETmlOWFU0U2xObE5YSkJTekpES3pWQ2JrdENkalJxZFd3M2FHTTRNazVwUW5aNVoybG5WVGRUUkdzelYxUkJjME16UlVSSWJtOU5hRzl3ZUdoSk4zWnNNR00xUm1GVmIwaExlbk53WWpST1l6bERjbTR3Vm5abk5IUnFkRk5VWkZsblUzb3ZiSE5EWW1WSlRGRmhZbGx1YURVMWRVSmlZMmg2TUdKQ1JtNVNhakJTZVhablFpdGlMMGhIVWpCbVozSlNTRkpNYlN0NFFubEhLMWxUTTJSelZsWjVVRlJFZW05b0x5OVNNMnRTVml0YU1teDFOR0p2YjJkM2MyaEVPRU42ZVVGT1UycFplbGx6YUZwelJrNVJURFZrWkhOU1FqWkxZVTFrVUZGRWRHOXFVMWc1UlhKS05rbFBUM1JOYjJKbVZrTkpWall4UTBGVlEwSkJVbXBuZUU1TVpVVlhRbUozWTNsVGMxaHFVMlphVTBrM1dVZGxUWHBsTlVWQmNUbDZkRUZPVkhSamVGZHZZVUpNY2xrNWFrRXdhR2xNTUVOeFVWY3JNRkJCVmpnMVJ6VXpVbXBQT1dRek5WSTRVVU13YmtrNVNGWm1Oa1JyVkhOeWJYSjJjRXBLVVRGUFVrNVVXVFZ3YlVORFJqbE9kRm8zUjFWQ2NWRnlkMDVwVlRSdlJuUkROMDVNWlhkUU5tOVdTMFZLS3pkUVQxSlpVRzVqTm1wMlJWaG9kbk5rVkc1eGNrVjVNa0pPSzBoNWRHeHRTVVF5Y1hwdlkweE5XVUp0TjBWM2EzRmxOVUZSWVZVMldVaGFLMVZZUm1wbGJXTmtUVUpVY0M5dVYwbEJRakZPU0RrM1FXbG5RVEkxYkhGcldHcFdXbWhrZUdJMFUyRlBWRkpXTWxWQ0wzY3laVE42VGpFeVVqVk9PRXBGU1dsbU9VRTBhR3hYYXpJNGJVMUlSV05tTWtreFpuTTNaRk55U25sRVFsWlpNM04wUm1wUlJUWXhRMVprUlU5VVFtSkNOakZDUldGblluZE5jek5NV0ZGdFdVRlZNVVI1T1ZBNVMwVnZOWFI0UjFOQ05VWjFUbmhXU21sUU0wbDVMMEZzTDNaa1EzWkNjRW92WWtoRmRtOTNiVVpPV2tWWE5FOU5kRlZIYjJkTlRWQXJhVUV4WWxreE0xbGxUMFZ2VDI1RVJrOXllbGd6WVdsaE56UkdTekI0ZGxaS1pIazRMMnRSTnpkUGJVOUhTR3h4VVhoSFNISkRiMEpVWWtwSlVHZFlVMFp2SzJoa2JscHhiMWRDYmpNeVNYUkNNbEYzVm10T2VrY3JRVFZHTmpRclFsWnBNM2x2ZFdoRWQwMU9Oa0prZFdRMlFuUkZNMU5YYjIxTmVreFBRbmhWTW5OaFVHSkxUVGw1VFdOVlZVTXJiRTFDZGtFMWN6a3pSMlk1ZVVzeE4zcDNNRFpqY0RoMFRqaFFjbU42VUdOSFF6QnpNRVZyVldkbVptbGpURkZHTmt4blVXeHVaV2h0VlhSRWRESmliVEZsUW14eWRGaG5TV1JSYjBOQ1pYRnJUVmxUWTFSS1lVRjFUWGcyTTNwd2FVMHliMVpZVWpJMVNUWkhibkZuTTBwRVJsTlFhV3RDUWxsUVUzQkNaR1JVYXpBM2RHVXlVSEk0U1hGWFVIcEpPWEJ3UlVscloyVkVWa3MyY210REsxa3dMM2xrZFhkTVFucFFZMHd3YURJeU5GVmxialJVYUdRMVVHaDRZVlF6VFhaUlMzZExLMnBXWVVzNFoxSmpiek5vWldoNlFubFlVV0ZSWVhSQmFuWTJhalJ2VDNSbldsWXhUMUZwYTFaRUswNUVRV2xaUWpkM1NpOVNNMnQ1Y0RoRVFrcE1aaXRJTkdKRE9VaFBVWEY2UVhFMGEyNTNSVVJKWjBwcFMyUTVVVEZuWmpaTFUzSmplazR6V1ZaSmRtZDVjRkZUVUdwTlFWbDJjVEkwYlhOb2RsTlhXSEEzSzBKUlJqQXdZV2hHWldRMFZFMWhaMlZSVjFKeE0xVmhPR2RxWkZONGNuTlBiV0UwVlZselUzWkdZV2t2U2pWNFVVeFpXRVJFVkd0NmExSmFjVGRRVVhGcWIyUnBTbkZJUVhaSVZIZGtaV0pETDNORlNtOXpkR2xqVlZCUE9VSkxPRkpCYVRWUlVrVXJUMWxuYWtWTU0weDNURVpyVURkcmRHOTZUa1Z4VkZSVWFrZzVXRFEyYVhaaVdFbFdWSEpWZGt3NFZqVmtSMnN3TDFsbGJURkJZVGd5VVRBclUxbG9LekpCV0Rod09GQlJWUzkyWlVKc1RsVnFLelpQZEVKNVozVTVSM2s0YzBSTFNXNUhNVFo1UzBWbE9HaElaalJuYVRsdE5uVmtjMUY1WVRsQk1GUkhVV1oyTkZJdmJucDBTR3hoWjBOUGJEaGFUR2N4YUZReWJWZzRjMnAxTkZVeVVWQktla1Y2TlVReVdrSk9RbGtyY1RCbVZYUmlaWGRCWTNnelEwdEdZWGRJVDFkdGJrbHhNbXBuTkdsVU9GWXdPQzh4TmpkNlkxSlhTV1o1Wld4aU56WlFaR0ZqSzNsWVJWbzRkbEpEY1dRM0t6RkVURXN2UzBweFVpdFFTVTlUYzFrMVJtRlNiV1V3Wm5GeFIxWjBUVUpSTDA1eVpXcGFhaTlKV2xwd2FWUldOM1UyZWxCVFFsWlJaMU53UkRabmF6QTBVM1V4UmxrcmJtSlJka1ZNYld4YVUxTjBWRUpMTkc0NFVXMUdUVmhEU2xRemNtUTFSREUyTWlzNVNEQklhRFpVUkhJMGIxTlJUVWRTV1hWRVVuZHdSVE55ZFRCWmNYTjJiMGRMTkdKQlpsUk5iRGxsYTFaVlowbG9MMWxHVUhkVGRsSlpiRkpNZVVkWVZHd3pXSFZvY1ZGbWRtTlZWV3hqSzFKdWNWcG5NRTVoZDFrclN6UjFiRU5ZTkdSYWNsbGtUVkJaTUhrckt6VkZVSFZQTURsNmNsbHpSRmxSVUdOSFRYZzJTREZaUWpsNVUzcGpXbkJYTlZkSGEwcEZWR1ZSVEV0UVNHeFZkRXB6TUROMVpsazNaMVYxVkdvNVluQm1aMnRJY0RSbFZWcHVRVnAxWWpSc2RYb3pTVk5YWlRJMGFHdDFTVE5KVWk5dFpVOVROMkpETTBsTkx6TlBVbWRYTjNFd2FXWlRhREpJZUhWSWJFZFZWM1JCYjNKSVJYZzBSMGxXTHpSRlNsRm1ZMms1Y0M5b2VFc3dLemgxUzBac2NrbG5jVTFxUVdVclUzVmtLMDg0VTA5bFJXbHlkRk5vU0dWNFpYRXlUR2ROTUc1amFtVmtUM1pKU0hKcE1uUldTV0ZyT0d4bGJVUkliMUpYYVZKVk9WcE5NRGgyUVRCWEwzZHBhblJqVkdsTFlYRTNUa3RTYUU1UGFqSTVla0Z4UVdwRlRWSjRRbkpuU2pocVVETjVjSE5DTkdaWk1FOU1TRU5HY1ZBMlVITkJjRmRLTms1YVkyWkJjVmh3VVc1TFRETkZWVzlCZEhOT2NsUjRVRFJ1ZWpSaVVscDRaVlUyYlVsbWJDdFdRbXBSUXpWR09FcExiMWxYV2pGeGEyaDBlV1F3VWpZNWJsSlZORzVWTXpCelJsUTVjRUpoYURoUmFreG5VVWhRUmxkc1EzVXhlR3RaVFZObWN6VkRiSFUzUzI1SlRGSjBZMnR0WlZnMVVuTmtaWFkzY1dwQlpVTnZjV2x3TWtkRmNWWnBjbVpTZUdGSFYwa3JPRFZOTVdoYWJuUjVURGxPYjJwVlowaHpkMGRZU0VwSlNsZHNhMmg1U0ZWcmFFaEpPV1pUU0ZOcGRuVk5ZVkoxS3pCcVNWWjFVRWRZU2pGUmFuVmxWR3RIZFhoQ1ZrbGhjRnBuTUdsclZGRlVSRXhsT1UxVVIxcE5NMjB2VHk5cU0zcGxjaXRIZGpST2FXaEVVMEpvWlN0MFdsSkVjMUkzVWpVMlFXWkxNSFpKYjB0RmVGbFRValpLWWpWNmMxVmxXRTkxVW5nMlpGTm9VMDExYnpoSFRtNDVNMkZPZEVrclQyRlNiSE53ZVVKVGNWaEhiMHBKZEhkcVZqRnlNa3ByZFRGeVNWUmllVmRoVVN0Q1J6RkVaSEEwTlhveFJIb3JVMHhyVFZoclZuQXlLek5UZVZKc1pERlRUR2xCVFZGQllUbERkVzVGVVZaYVozTlJVa281UWxOS04wOVNTRkJzWWtoaGVVVkJOMVpvTWtzNWFGbGpRM0IzUjBaTFMzUkNObkJSZVdSdmN6bE1VMFJqY1RoT2FDOWhTSEJITnk5aE5VY3dSQzlMZVZoSlNYRnhabk5uYzNVNVJqbFlibko2WkRoa1Uwa3ljRkp4U0RGTVQxTkhTRWxEUzJGUWMybHpkR05vUVM5WmREbEVhVlpTV21wSmNFTk9NaXN3WWtzNWNtVXlSRTVHUW1GQmRtUTBWV2x4TlhsRlJITlVUVTV3ZUV4VlNWSldia2MyY0M4dlFVSjBReTlaWlV0dWFFODJlbmRaYUN0UmFVaFVXbmQwTVRFMk0yUkJiVTFJTWtGM01VSnJUa0pPVG1oRGIydDZZM1JTVVZjNFdqSnZjWFJGY0hsclpHNUNkMk5JUW5kalNFSjNZMGhDZDJOSVFuZGpTRUozWTBoQ2QyTklRbTltTDJjdmIwSlZSMHhuZFZwWVFtdEJRVUZCYkdSRlZsbGtSMUpvWkVkVk5sa3pTbXhaV0ZKc1FVUkpkMDFVV1hSTlZFRjBUVlJTVlUxRWF6Wk9SRUUyVFhwUmNrMUVTVFpOUkVSYUwxTjJZMEZCUVVGS1dGSkdWMGhTYTFsWVVteFBiVEYyV2tkc2JXVlJRWGxOUkVVeVRGUkZkMHhVUlRCV1JFRTFUMnBSZDA5cVRUQkxla0Y1VDJwQmQzRkxRMVJaUVVGQlFVSnNNRkpXYURCVk1qbHRaRWhrYUdOdFZVRlJWMUoyV1cxVloxTlhNV2hhTWxaVFdsZEdhMlZZU0VwYVZIZEJRVUZCUVZOVlZrOVNTelZEV1VsSlBTSUtJQ0FnZlN3S0lDQWdJbFJsYlhCc1lYUmxTV1FpT2pNc0NpQWdJQ0pTWldOMElqcDdDaUFnSUNBZ0lDSk1iM2RsY2t4bFpuUllJam94TUN3S0lDQWdJQ0FnSWt4dmQyVnlUR1ZtZEZraU9qRXdMQW9nSUNBZ0lDQWlWWEJ3WlhKU2FXZG9kRmdpT2pFNU5Dd0tJQ0FnSUNBZ0lsVndjR1Z5VW1sbmFIUlpJam80TmdvZ0lDQjlMQW9nSUNBaVVHRm5aU0k2TVFwOSJ9XQ==