diff --git a/ansible/artifacts/sunbird/email/html/email-test.ftl b/ansible/artifacts/sunbird/email/html/email-test.ftl new file mode 100644 index 0000000000000000000000000000000000000000..604415d22afc96aa935158e6e4a42381cb7b07a3 --- /dev/null +++ b/ansible/artifacts/sunbird/email/html/email-test.ftl @@ -0,0 +1,5 @@ +<html> +<body> +${msg("emailTestBodyHtml",realmName)} +</body> +</html> diff --git a/ansible/artifacts/sunbird/email/html/email-verification.ftl b/ansible/artifacts/sunbird/email/html/email-verification.ftl new file mode 100644 index 0000000000000000000000000000000000000000..eb7682a27205a5fe5c2c7bf97f6aed8aa31d6bac --- /dev/null +++ b/ansible/artifacts/sunbird/email/html/email-verification.ftl @@ -0,0 +1,5 @@ +<html> +<body> +${msg("emailVerificationBodyHtml",link, linkExpiration, realmName)} +</body> +</html> diff --git a/ansible/artifacts/sunbird/email/html/event-login_error.ftl b/ansible/artifacts/sunbird/email/html/event-login_error.ftl new file mode 100644 index 0000000000000000000000000000000000000000..d31410307c0052113705ab3504f8d666aa591440 --- /dev/null +++ b/ansible/artifacts/sunbird/email/html/event-login_error.ftl @@ -0,0 +1,5 @@ +<html> +<body> +${msg("eventLoginErrorBodyHtml",event.date,event.ipAddress)} +</body> +</html> diff --git a/ansible/artifacts/sunbird/email/html/event-remove_totp.ftl b/ansible/artifacts/sunbird/email/html/event-remove_totp.ftl new file mode 100644 index 0000000000000000000000000000000000000000..91699ea3492dc0ebded38b6a544d00c09b575a4c --- /dev/null +++ b/ansible/artifacts/sunbird/email/html/event-remove_totp.ftl @@ -0,0 +1,5 @@ +<html> +<body> +${msg("eventRemoveTotpBodyHtml",event.date, event.ipAddress)} +</body> +</html> diff --git a/ansible/artifacts/sunbird/email/html/event-update_password.ftl b/ansible/artifacts/sunbird/email/html/event-update_password.ftl new file mode 100644 index 0000000000000000000000000000000000000000..8a6da60a5053652a941d7bfe8b60866fccffa7fe --- /dev/null +++ b/ansible/artifacts/sunbird/email/html/event-update_password.ftl @@ -0,0 +1,5 @@ +<html> +<body> +${msg("eventUpdatePasswordBodyHtml",event.date, event.ipAddress)} +</body> +</html> diff --git a/ansible/artifacts/sunbird/email/html/event-update_totp.ftl b/ansible/artifacts/sunbird/email/html/event-update_totp.ftl new file mode 100644 index 0000000000000000000000000000000000000000..c0190c7278b35da36675019458ddeefa8b6a82af --- /dev/null +++ b/ansible/artifacts/sunbird/email/html/event-update_totp.ftl @@ -0,0 +1,5 @@ +<html> +<body> +${msg("eventUpdateTotpBodyHtml",event.date, event.ipAddress)} +</body> +</html> diff --git a/ansible/artifacts/sunbird/email/html/executeActions.ftl b/ansible/artifacts/sunbird/email/html/executeActions.ftl new file mode 100644 index 0000000000000000000000000000000000000000..f75e10fa2e292990acc127cda02c2dfad59eafe0 --- /dev/null +++ b/ansible/artifacts/sunbird/email/html/executeActions.ftl @@ -0,0 +1,5 @@ +<html> +<body> +${msg("executeActionsBodyHtml",link, linkExpiration, realmName)} +</body> +</html> diff --git a/ansible/artifacts/sunbird/email/html/identity-provider-link.ftl b/ansible/artifacts/sunbird/email/html/identity-provider-link.ftl new file mode 100644 index 0000000000000000000000000000000000000000..9c2db808b20d025feff99fdccf3fd06788f00398 --- /dev/null +++ b/ansible/artifacts/sunbird/email/html/identity-provider-link.ftl @@ -0,0 +1,5 @@ +<html> +<body> +${msg("identityProviderLinkBodyHtml", identityProviderAlias, realmName, identityProviderContext.username, link, linkExpiration)} +</body> +</html> \ No newline at end of file diff --git a/ansible/artifacts/sunbird/email/html/password-reset.ftl b/ansible/artifacts/sunbird/email/html/password-reset.ftl new file mode 100644 index 0000000000000000000000000000000000000000..88088d3d1600f39c4e3c68b153bb579a1ec454e7 --- /dev/null +++ b/ansible/artifacts/sunbird/email/html/password-reset.ftl @@ -0,0 +1,5 @@ +<html> +<body> +${msg("passwordResetBodyHtml",link,(linkExpiration/60)?string["0"],realmName)} +</body> +</html> diff --git a/ansible/artifacts/sunbird/email/messages/messages_ca.properties b/ansible/artifacts/sunbird/email/messages/messages_ca.properties new file mode 100644 index 0000000000000000000000000000000000000000..7f8504ae08ef628b115e72d8380cad9a1c6b3384 --- /dev/null +++ b/ansible/artifacts/sunbird/email/messages/messages_ca.properties @@ -0,0 +1,21 @@ +emailVerificationSubject=Verificaci\u00F3 d''email +emailVerificationBody=Alg\u00FA ha creat un compte de {2} amb aquesta adre\u00E7a de correu electr\u00F2nic. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per verificar la teva adre\u00E7a de correu electr\u00F2nic.\n\n{0}\n\nAquest enlla\u00E7 expirar\u00E0 en {1} minuts.\n\nSi tu no has creat aquest compte, simplement ignora aquest missatge. +emailVerificationBodyHtml=<p>Alg\u00FA ha creat un compte de {2} amb aquesta adre\u00E7a de correu electr\u00F2nic. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per verificar la teva adre\u00E7a de correu electr\u00F2nic.</p><p><a href=\"{0}\">{0}</a></p><p> Aquest enlla\u00E7 expirar\u00E0 en {1} minuts.</p><p> Si tu no has creat aquest compte, simplement ignora aquest missatge.</p> +passwordResetSubject=Reinicia contrasenya +passwordResetBody=Alg\u00FA ha demanat de canviar les credencials del teu compte de {2}. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per a reiniciar-les.\n\n{0}\n\nAquest enlla\u00E7 expirar\u00E0 en {1} minuts.\n\nSi no vols reiniciar les teves credencials, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi. +passwordResetBodyHtml=<p>Alg\u00FA ha demanat de canviar les credencials del teu compte de {2}. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per a reiniciar-les.</p><p><a href=\"{0}\">{0}</a></p><p>Aquest enlla\u00E7 expirar\u00E0 en {1} minuts.</p><p>Si no vols reiniciar les teves credencials, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi.</p> +executeActionsSubject=Actualitza el teu compte +executeActionsBody=L''administrador ha sol\u00B7licitat que actualitzis el teu compte de {2}. Fes clic a l''enlla\u00E7 inferior per iniciar aquest proc\u00E9s.\n\n{0}\n\nAquest enlla\u00E7 expirar\u00E0 en {1} minutes.\n\nSi no est\u00E0s al tant que l''administrador hagi sol\u00B7licitat aix\u00F2, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi. +executeActionsBodyHtml=<p>L''administrador ha sol\u00B7licitat que actualitzis el teu compte de {2}. Fes clic a l''enlla\u00E7 inferior per iniciar aquest proc\u00E9s.</p><p><a href=\"{0}\">{0}</a></p><p>Aquest enlla\u00E7 expirar\u00E0 en {1} minutes.</p><p>Si no est\u00E0s al tant que l''administrador hagi sol\u00B7licitat aix\u00F2, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi.</p> +eventLoginErrorSubject=Fallada en l''inici de sessi\u00F3 +eventLoginErrorBody=S''ha detectat un intent d''acc\u00E9s fallit al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. +eventLoginErrorBodyHtml=<p>S''ha detectat un intent d''acc\u00E9s fallit al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador.</p> +eventRemoveTotpSubject=Esborrat TOTP +eventRemoveTotpBody=TOTP s''ha eliminat del teu compte el {0} des de {1}. Si no has estat tu, per favor contacta amb l''administrador. +eventRemoveTotpBodyHtml=<p>TOTP s''ha eliminat del teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. </ P> +eventUpdatePasswordSubject=Actualitzaci\u00F3 de contrasenya +eventUpdatePasswordBody=La teva contrasenya s''ha actualitzat el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. +eventUpdatePasswordBodyHtml=<p>La teva contrasenya s''ha actualitzat el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador.</p> +eventUpdateTotpSubject=Actualitzaci\u00F3 de TOTP +eventUpdateTotpBody=TOTP s''ha actualitzat al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. +eventUpdateTotpBodyHtml=<p>TOTP s''ha actualitzat al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador.</p> diff --git a/ansible/artifacts/sunbird/email/messages/messages_de.properties b/ansible/artifacts/sunbird/email/messages/messages_de.properties new file mode 100644 index 0000000000000000000000000000000000000000..9068321b7bd8411de939f202dd1da6977d16c0c2 --- /dev/null +++ b/ansible/artifacts/sunbird/email/messages/messages_de.properties @@ -0,0 +1,24 @@ +emailVerificationSubject=E-Mail verifizieren +emailVerificationBody=Jemand hat ein {2} Konto mit dieser E-Mail Adresse erstellt. Falls Sie das waren, dann klicken Sie auf den Link, um die E-Mail Adresse zu verifizieren.\n\n{0}\n\nDieser Link wird in {1} Minuten ablaufen.\n\nFalls Sie dieses Konto nicht erstellt haben, dann k\u00F6nnen sie diese Nachricht ignorieren. +emailVerificationBodyHtml=<p>Jemand hat ein {2} Konto mit dieser E-Mail Adresse erstellt. Falls das Sie waren, klicken Sie auf den Link, um die E-Mail Adresse zu verifizieren.</p><p><a href="{0}">{0}</a></p><p>Dieser Link wird in {1} Minuten ablaufen.</p><p>Falls Sie dieses Konto nicht erstellt haben, dann k\u00F6nnen sie diese Nachricht ignorieren.</p> +identityProviderLinkSubject=Link {0} +identityProviderLinkBody=Es wurde beantragt Ihren Account {1} mit dem Account {0} von Benutzer {2} zu verlinken. Sollten Sie dies beantragt haben, klicken Sie auf den unten stehenden Link.\n\n{3}\n\n Die G\u00FCltigkeit des Links wird in {4} Minuten verfallen.\n\nSollten Sie Ihren Account nicht verlinken wollen, ignorieren Sie diese Nachricht. Wenn Sie die Accounts verlinken wird ein Login auf {1} \u00FCber {0} erm\u00F6glicht. +identityProviderLinkBodyHtml=<p>Es wurde beantragt Ihren Account {1} mit dem Account {0} von Benutzer {2} zu verlinken. Sollten Sie dies beantragt haben, klicken Sie auf den unten stehenden Link.</p><p><a href="{3}">Link zur Best\u00E4tigung der Kontoverkn\u00FCpfung</a></p><p>Die G\u00FCltigkeit des Links wird in {4} Minuten verfallen.</p><p>Sollten Sie Ihren Account nicht verlinken wollen, ignorieren Sie diese Nachricht. Wenn Sie die Accounts verlinken wird ein Login auf {1} \u00FCber {0} erm\u00F6glicht.</p> +passwordResetSubject=Passwort zur\u00FCcksetzen +passwordResetBody=Es wurde eine \u00C4nderung der Anmeldeinformationen f\u00FCr Ihren Account {2} angefordert. Wenn Sie diese \u00C4nderung beantragt haben, klicken Sie auf den unten stehenden Link.\n\n{0}\n\nDie G\u00FCltigkeit des Links wird in {1} Minuten verfallen.\n\nSollten Sie keine \u00C4nderung vollziehen wollen k\u00F6nnen Sie diese Nachricht ignorieren und an Ihrem Account wird nichts ge\u00E4ndert. +passwordResetBodyHtml=<p>Es wurde eine \u00C4nderung der Anmeldeinformationen f\u00FCr Ihren Account {2} angefordert. Wenn Sie diese \u00C4nderung beantragt haben, klicken Sie auf den unten stehenden Link.</p><p><a href="{0}">Link zum Zur\u00FCcksetzen von Anmeldeinformationen</a></p><p>Die G\u00FCltigkeit des Links wird in {1} Minuten verfallen.</p><p>Sollten Sie keine \u00C4nderung vollziehen wollen k\u00F6nnen Sie diese Nachricht ignorieren und an Ihrem Account wird nichts ge\u00E4ndert.</p> +executeActionsSubject=Aktualisieren Sie Ihr Konto +executeActionsBody=Ihr Administrator hat Sie aufgefordert Ihren Account {2} zu aktualisieren. Klicken Sie auf den unten stehenden Link um den Prozess zu starten.\n\n{0}\n\nDie G\u00FCltigkeit des Links wird in {1} Minuten verfallen.\n\nSollten Sie sich dieser Aufforderung nicht bewusst sein, ignorieren Sie diese Nachricht und Ihr Account bleibt unver\u00E4ndert. +executeActionsBodyHtml=<p>Ihr Administrator hat Sie aufgefordert Ihren Account {2} zu aktualisieren. Klicken Sie auf den unten stehenden Link um den Prozess zu starten.</p><p><a href="{0}">Link zum Account-Update</a></p><p>Die G\u00FCltigkeit des Links wird in {1} Minuten verfallen.</p><p>Sollten Sie sich dieser Aufforderung nicht bewusst sein, ignorieren Sie diese Nachricht und Ihr Account bleibt unver\u00E4ndert.</p> +eventLoginErrorSubject=Fehlgeschlagene Anmeldung +eventLoginErrorBody=Jemand hat um {0} von {1} versucht, sich mit ihrem Konto anzumelden. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. +eventLoginErrorBodyHtml=<p>Jemand hat um {0} von {1} versucht, sich mit ihrem Konto anzumelden. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.</p> +eventRemoveTotpSubject=TOTP Entfernt +eventRemoveTotpBody=TOTP wurde von ihrem Konto am {0} von {1} entfernt. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. +eventRemoveTotpBodyHtml=<p>TOTP wurde von ihrem Konto am {0} von {1} entfernt. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.</p> +eventUpdatePasswordSubject=Passwort Aktualisiert +eventUpdatePasswordBody=Ihr Passwort wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. +eventUpdatePasswordBodyHtml=<p>Ihr Passwort wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.</p> +eventUpdateTotpSubject=TOTP Aktualisiert +eventUpdateTotpBody=TOTP wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. +eventUpdateTotpBodyHtml=<p>TOTP wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.</p> diff --git a/ansible/artifacts/sunbird/email/messages/messages_en.properties b/ansible/artifacts/sunbird/email/messages/messages_en.properties new file mode 100644 index 0000000000000000000000000000000000000000..c2085ec559c57a2567324c299d22b773475b0be9 --- /dev/null +++ b/ansible/artifacts/sunbird/email/messages/messages_en.properties @@ -0,0 +1,27 @@ +emailVerificationSubject=Verify email +emailVerificationBody=Someone has created a {2} account with this email address. If this was you, click the link below to verify your email address\n\n{0}\n\nThis link will expire within {1} minutes.\n\nIf you didn''t create this account, just ignore this message. +emailVerificationBodyHtml=<p>Someone has created a {2} account with this email address. If this was you, click the link below to verify your email address</p><p><a href="{0}">Link to e-mail address verification</a></p><p>This link will expire within {1} minutes.</p><p>If you didn''t create this account, just ignore this message.</p> +emailTestSubject=[KEYCLOAK] - SMTP test message +emailTestBody=This is a test message +emailTestBodyHtml=<p>This is a test message</p> +identityProviderLinkSubject=Link {0} +identityProviderLinkBody=Someone wants to link your "{1}" account with "{0}" account of user {2} . If this was you, click the link below to link accounts\n\n{3}\n\nThis link will expire within {4} minutes.\n\nIf you don''t want to link account, just ignore this message. If you link accounts, you will be able to login to {1} through {0}. +identityProviderLinkBodyHtml=<p>Someone wants to link your <b>{1}</b> account with <b>{0}</b> account of user {2} . If this was you, click the link below to link accounts</p><p><a href="{3}">Link to confirm account linking</a></p><p>This link will expire within {4} minutes.</p><p>If you don''t want to link account, just ignore this message. If you link accounts, you will be able to login to {1} through {0}.</p> +passwordResetSubject=Reset password +passwordResetBody=Someone just requested to change your {2} account''s credentials. If this was you, click on the link below to reset them.\n\n{0}\n\nThis link and code will expire within {1} minutes.\n\nIf you don''t want to reset your credentials, just ignore this message and nothing will be changed. +passwordResetBodyHtml=<p>Someone just requested to change your {2} account''s credentials. If this was you, click on the link below to reset them.</p><p><a href=''{0}''>Link to reset credentials</a></p><p>This link will expire within {1} Hours.</p><p>If you don''t want to reset your credentials, just ignore this message and nothing will be changed.</p> +executeActionsSubject=Update Your Account +executeActionsBody=Your administrator has just requested that you update your {2} account. Click on the link below to start this process.\n\n{0}\n\nThis link will expire within {1} minutes.\n\nIf you are unaware that your admin has requested this, just ignore this message and nothing will be changed. +executeActionsBodyHtml=<p>Your administrator has just requested that you update your {2} account. Click on the link below to start this process.</p><p><a href="{0}">Link to account update</a></p><p>This link will expire within {1} minutes.</p><p>If you are unaware that your admin has requested this, just ignore this message and nothing will be changed.</p> +eventLoginErrorSubject=Login error +eventLoginErrorBody=A failed login attempt was detected to your account on {0} from {1}. If this was not you, please contact an admin. +eventLoginErrorBodyHtml=<p>A failed login attempt was detected to your account on {0} from {1}. If this was not you, please contact an admin.</p> +eventRemoveTotpSubject=Remove TOTP +eventRemoveTotpBody=TOTP was removed from your account on {0} from {1}. If this was not you, please contact an admin. +eventRemoveTotpBodyHtml=<p>TOTP was removed from your account on {0} from {1}. If this was not you, please contact an admin.</p> +eventUpdatePasswordSubject=Update password +eventUpdatePasswordBody=Your password was changed on {0} from {1}. If this was not you, please contact an admin. +eventUpdatePasswordBodyHtml=<p>Your password was changed on {0} from {1}. If this was not you, please contact an admin.</p> +eventUpdateTotpSubject=Update TOTP +eventUpdateTotpBody=TOTP was updated for your account on {0} from {1}. If this was not you, please contact an admin. +eventUpdateTotpBodyHtml=<p>TOTP was updated for your account on {0} from {1}. If this was not you, please contact an admin.</p> diff --git a/ansible/artifacts/sunbird/email/messages/messages_es.properties b/ansible/artifacts/sunbird/email/messages/messages_es.properties new file mode 100644 index 0000000000000000000000000000000000000000..16160143c7a0526ce5febd64d916eefcaec8f51b --- /dev/null +++ b/ansible/artifacts/sunbird/email/messages/messages_es.properties @@ -0,0 +1,21 @@ +emailVerificationSubject=Verificaci\u00F3n de email +emailVerificationBody=Alguien ha creado una cuenta de {2} con esta direcci\u00F3n de email. Si has sido t\u00FA, haz click en el enlace siguiente para verificar tu direcci\u00F3n de email.\n\n{0}\n\nEste enlace expirar\u00E1 en {1} minutos.\n\nSi t\u00FA no has creado esta cuenta, simplemente ignora este mensaje. +emailVerificationBodyHtml=<p>Alguien ha creado una cuenta de {2} con esta direcci\u00F3n de email. Si has sido t\u00FA, haz click en el enlace siguiente para verificar tu direcci\u00F3n de email.</p><p><a href=\"{0}\">{0}</a></p><p>Este enlace expirar\u00E1 en {1} minutos.</p><p>Si t\u00FA no has creado esta cuenta, simplemente ignora este mensaje.</p> +passwordResetSubject=Reiniciar contrase\u00F1a +passwordResetBody=Alguien ha solicitado cambiar las credenciales de tu cuenta de {2}. Si has sido t\u00FA, haz clic en el enlace siguiente para reiniciarlas.\n\n{0}\n\nEste enlace expirar\u00E1 en {1} minutos.\n\nSi no quieres reiniciar tus credenciales, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio. +passwordResetBodyHtml=<p>Alguien ha solicitado cambiar las credenciales de tu cuenta de {2}. Si has sido t\u00FA, haz clic en el enlace siguiente para reiniciarlas.</p><p><a href=\"{0}\">{0}</a></p><p>Este enlace expirar\u00E1 en {1} minutos.</p><p>Si no quieres reiniciar tus credenciales, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio.</p> +executeActionsSubject=Actualiza tu cuenta +executeActionsBody=El administrador ha solicitado que actualices tu cuenta de {2}. Haz clic en el enlace inferior para iniciar este proceso.\n\n{0}\n\nEste enlace expirar\u00E1 en {1} minutes.\n\nSi no est\u00E1s al tanto de que el administrador haya solicitado esto, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio. +executeActionsBodyHtml=<p>El administrador ha solicitado que actualices tu cuenta de {2}. Haz clic en el enlace inferior para iniciar este proceso.</p><p><a href=\"{0}\">{0}</a></p><p>Este enlace expirar\u00E1 en {1} minutes.</p><p>Si no est\u00E1s al tanto de que el administrador haya solicitado esto, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio.</p> +eventLoginErrorSubject=Fallo en el inicio de sesi\u00F3n +eventLoginErrorBody=Se ha detectado un intento de acceso fallido a tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. +eventLoginErrorBodyHtml=<p>Se ha detectado un intento de acceso fallido a tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.</p> +eventRemoveTotpSubject=Borrado TOTP +eventRemoveTotpBody=TOTP fue eliminado de tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. +eventRemoveTotpBodyHtml=<p>TOTP fue eliminado de tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.</p> +eventUpdatePasswordSubject=Actualizaci\u00F3n de contrase\u00F1a +eventUpdatePasswordBody=Tu contrase\u00F1a se ha actualizado el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. +eventUpdatePasswordBodyHtml=<p>Tu contrase\u00F1a se ha actualizado el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.</p> +eventUpdateTotpSubject=Actualizaci\u00F3n de TOTP +eventUpdateTotpBody=TOTP se ha actualizado en tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. +eventUpdateTotpBodyHtml=<p>TOTP se ha actualizado en tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.</p> diff --git a/ansible/artifacts/sunbird/email/messages/messages_fr.properties b/ansible/artifacts/sunbird/email/messages/messages_fr.properties new file mode 100644 index 0000000000000000000000000000000000000000..3467dec80c3ee36d9c06503f0c52738eb5fc6051 --- /dev/null +++ b/ansible/artifacts/sunbird/email/messages/messages_fr.properties @@ -0,0 +1,21 @@ +emailVerificationSubject=V\u00e9rification du courriel +emailVerificationBody=Quelqu''un vient de cr\u00e9er un compte "{2}" avec votre courriel. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous afin de v\u00e9rifier votre adresse de courriel\n\n{0}\n\nCe lien expire dans {1} minute(s).\n\nSinon, veuillez ignorer ce message. +emailVerificationBodyHtml=<p>Quelqu''un vient de cr\u00e9er un compte "{2}" avec votre courriel. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous afin de v\u00e9rifier votre adresse de courriel</p><p><a href="{0}">{0}</a></p><p>Ce lien expire dans {1} minute(s).</p><p>Sinon, veuillez ignorer ce message.</p> +passwordResetSubject=R\u00e9initialiser le mot de passe +passwordResetBody=Quelqu''un vient de demander une r\u00e9initialisation de mot de passe pour votre compte {2}. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous pour le mettre \u00e0 jour.\n\n{0}\n\nCe lien expire dans {1} minute(s).\n\nSinon, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte. +passwordResetBodyHtml=<p>Quelqu''un vient de demander une r\u00e9initialisation de mot de passe pour votre compte {2}. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous pour le mettre \u00e0 jour.</p><p><a href="{0}">{0}</a></p><p>Ce lien expire dans {1} minute(s).</p><p>Sinon, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte.</p> +executeActionsSubject=Mettre \u00e0 jour votre compte +executeActionsBody=Votre administrateur vient de demander une mise \u00e0 jour de votre compte {2}. Veuillez cliquer sur le lien ci-dessous afin de commencer le processus.\n\n{0}\n\nCe lien expire dans {1} minute(s).\n\nSi vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte. +executeActionsBodyHtml=<p>Votre administrateur vient de demander une mise \u00e0 jour de votre compte {2}. Veuillez cliquer sur le lien ci-dessous afin de commencer le processus.</p><p><a href="{0}">{0}</a></p><p>Ce lien expire dans {1} minute(s).</p><p>Si vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte.</p> +eventLoginErrorSubject=Erreur de connexion +eventLoginErrorBody=Une tentative de connexion a \u00e9t\u00e9 d\u00e9tect\u00e9e sur votre compte {0} depuis {1}. Si vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. +eventLoginErrorBodyHtml=<p>Une tentative de connexion a \u00e9t\u00e9 d\u00e9tect\u00e9e sur votre compte {0} depuis {1}. Si vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.</p> +eventRemoveTotpSubject=Suppression du TOTP +eventRemoveTotpBody=Le TOTP a \u00e9t\u00e9 supprim\u00e9 de votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. +eventRemoveTotpBodyHtml=<p>Le TOTP a \u00e9t\u00e9 supprim\u00e9 de votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.</p> +eventUpdatePasswordSubject=Mise \u00e0 jour du mot de passe +eventUpdatePasswordBody=Votre mot de passe pour votre compte {0} a \u00e9t\u00e9 modifi\u00e9 depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. +eventUpdatePasswordBodyHtml=<p>Votre mot de passe pour votre compte {0} a \u00e9t\u00e9 modifi\u00e9 depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.</p> +eventUpdateTotpSubject=Mise \u00e0 jour du TOTP +eventUpdateTotpBody=Le TOTP a \u00e9t\u00e9 mis \u00e0 jour pour votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. +eventUpdateTotpBodyHtml=<p>Le TOTP a \u00e9t\u00e9 mis \u00e0 jour pour votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.</p> diff --git a/ansible/artifacts/sunbird/email/messages/messages_it.properties b/ansible/artifacts/sunbird/email/messages/messages_it.properties new file mode 100644 index 0000000000000000000000000000000000000000..b877b91ab5bc1634b91765f864304ee636e8bf1a --- /dev/null +++ b/ansible/artifacts/sunbird/email/messages/messages_it.properties @@ -0,0 +1,24 @@ +emailVerificationSubject=Verifica l''email +emailVerificationBody=Qualcuno ha creato un {2} account con questo indirizzo email. Se sei stato tu, fai clic sul pulsante seguente per verificare il tuo indirizzo email\n\n{0}\n\nQuesto link scadr\u00e0 in {1} minuti.\n\nSe non sei stato tu a creare questo account, ignora questo messaggio. +emailVerificationBodyHtml=<p> Qualcuno ha creato un {2} account con questo indirizzo email. Se sei stato tu, fai clic sul pulsante seguente per verificare il tuo indirizzo email</p><p><a href="{0}">{0}</a></p><p>Questo link scadr\u00e0 in {1} minuti.</p><p>Se non sei stato tu a creare questo account, ignora questo messaggio.</p> +identityProviderLinkSubject=Link {0} +identityProviderLinkBody=Qualcuno vuole associare il tuo "{1}" account con "{0}" l''account dell''utente {2} . Se sei stato tu, fai clic sul pulsante seguente per associare gli account\n\n{3}\n\nQuesto link scadr\u00e0 in {4} minuti.\n\nSe non vuoi associare l''account, ignora questo messaggio. Se associ gli account, potrai accedere a {1} attraverso {0}. +identityProviderLinkBodyHtml=<p>Qualcuno vuole associare il tuo <b>{1}</b> account con <b>{0}</b> l''account dell''utente {2} . Se sei stato tu, fai clic sul pulsante seguente per associare gli account</p><p><a href="{3}">{3}</a></p><p>Questo link scadr\u00e0 in {4} minuti.</p><p>Se non vuoi associare l''account, ignora questo messaggio. Se associ gli account, potrai accedere a {1} attraverso {0}.</p> +passwordResetSubject=Reimposta la password +passwordResetBody= Qualcuno ha appena richiesto di cambiare le {2} credenziali di accesso al tuo account. Se sei stato tu, fai clic sul pulsante seguente reimpostarle.\n\n{0}\n\nQuesto link e codice scadranno in {1} minuti.\n\nSe non vuoi reimpostare le tue credenziali di accesso, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio. +passwordResetBodyHtml=<p>Qualcuno ha appena richiesto di cambiare le {2} credenziali di accesso al tuo account. Se sei stato tu, fai clic sul pulsante seguente reimpostarle.</p><p><a href="{0}">{0}</a></p><p>Questo link scadr\u00e0 in {1} minuti.</p><p>Se non vuoi reimpostare le tue credenziali di accesso, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio.</p> +executeActionsSubject=Aggiorna il tuo account +executeActionsBody=Il tuo amministratore ha appena richiesto un aggiornamento del tuo {2} account. Fai clic sul pulsante seguente per iniziare questo processo.\n\n{0}\n\nQuesto link scadr\u00e0 in {1} minuti.\n\nSe non sei a conoscenza della richiesta del tuo amministratore, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio. +executeActionsBodyHtml=<p>Il tuo amministratore ha appena richiesto un aggiornamento del tuo {2} account. Fai clic sul pulsante seguente per iniziare questo processo.</p><p><a href="{0}">{0}</a></p><p>Questo link scadr\u00e0 in {1} minuti.</p><p>Se non sei a conoscenza della richiesta del tuo amministratore, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio.</p> +eventLoginErrorSubject=Errore di accesso +eventLoginErrorBody=\u00c8 stato rilevato un tentativo fallito di accesso al tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. +eventLoginErrorBodyHtml=<p>\u00c8 stato rilevato un tentativo fallito di accesso al tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.</p> +eventRemoveTotpSubject=Rimuovi TOTP (Password temporanea valida una volta sola) +eventRemoveTotpBody=TOTP (Password temporanea valida una volta sola) \u00e8 stata rimossa dal tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. +eventRemoveTotpBodyHtml=<p>TOTP (Password temporanea valida una volta sola) \u00e8 stata rimossa dal tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.</p> +eventUpdatePasswordSubject=Aggiornamento password +eventUpdatePasswordBody=La tua password \u00e8 stata cambiata il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. +eventUpdatePasswordBodyHtml=<p> La tua password \u00e8 stata cambiata il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.</p> +eventUpdateTotpSubject=Aggiornamento TOTP (Password temporanea valida una volta sola) +eventUpdateTotpBody=TOTP (Password temporanea valida una volta sola) \u00e8 stata aggiornata per il tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. +eventUpdateTotpBodyHtml=<p>TOTP (Password temporanea valida una volta sola) \u00e8 stata aggiornata per il tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.</p> diff --git a/ansible/artifacts/sunbird/email/messages/messages_ja.properties b/ansible/artifacts/sunbird/email/messages/messages_ja.properties new file mode 100644 index 0000000000000000000000000000000000000000..a60ffe3d2b000c999b0f38b0c087be79256accd1 --- /dev/null +++ b/ansible/artifacts/sunbird/email/messages/messages_ja.properties @@ -0,0 +1,25 @@ +# encoding: utf-8 +emailVerificationSubject=Eメールã®ç¢ºèª +emailVerificationBody=ã“ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ {2} アカウントãŒä½œæˆã•れãŸã¾ã—ãŸã€‚以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ç¢ºèªã‚’完了ã—ã¦ãã ã•ã„。\n\n{0}\n\nã“ã®ãƒªãƒ³ã‚¯ã¯ {1} 分間ã ã‘æœ‰åйã§ã™ã€‚\n\nã‚‚ã—ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ä½œæˆã«å¿ƒå½“ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒ¼ãƒ«ã‚’無視ã—ã¦ãã ã•ã„。 +emailVerificationBodyHtml=<p>ã“ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ {2} アカウントãŒä½œæˆã•れã¾ã—ãŸã€‚以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ç¢ºèªã‚’完了ã—ã¦ãã ã•ã„。</p><p><a href="{0}">メールアドレスã®ç¢ºèª</a></p><p>ã“ã®ãƒªãƒ³ã‚¯ã¯ {1} 分間ã ã‘æœ‰åйã§ã™ã€‚</p><p>ã‚‚ã—ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ä½œæˆã«å¿ƒå½“ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒ¼ãƒ«ã‚’無視ã—ã¦ãã ã•ã„。</p> +identityProviderLinkSubject=リンク {0} +identityProviderLinkBody=ã‚ãªãŸã® "{1}" アカウント㨠{2} ユーザー㮠"{0}" アカウントã®ãƒªãƒ³ã‚¯ãŒè¦æ±‚ã•れã¾ã—ãŸã€‚以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ãƒªãƒ³ã‚¯ã‚’行ã£ã¦ãã ã•ã„。\n\n{3}\n\nã“ã®ãƒªãƒ³ã‚¯ã¯ {4} 分間ã ã‘æœ‰åйã§ã™ã€‚\n\nã‚‚ã—アカウントã®ãƒªãƒ³ã‚¯ã‚’行ã‚ãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã—ã¦ãã ã•ã„。アカウントã®ãƒªãƒ³ã‚¯ã‚’行ã†ã“ã¨ã§ã€{0} 経由㧠{1} ã«ãƒã‚°ã‚¤ãƒ³ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ +identityProviderLinkBodyHtml=<p>ã‚ãªãŸã® <b>{1}</b> アカウント㨠{2} ユーザー㮠<b>{0}</b> アカウントã®ãƒªãƒ³ã‚¯ãŒè¦æ±‚ã•れã¾ã—ãŸã€‚以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ãƒªãƒ³ã‚¯ã‚’行ã£ã¦ãã ã•ã„。</p><p><a href="{3}">アカウントリンクã®ç¢ºèª</a></p><p>ã“ã®ãƒªãƒ³ã‚¯ã¯ {4} 分間ã ã‘æœ‰åйã§ã™ã€‚</p><p>ã‚‚ã—アカウントã®ãƒªãƒ³ã‚¯ã‚’行ã‚ãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã—ã¦ãã ã•ã„。アカウントã®ãƒªãƒ³ã‚¯ã‚’行ã†ã“ã¨ã§ã€{0} 経由㧠{1} ã«ãƒã‚°ã‚¤ãƒ³ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚</p> +passwordResetSubject=パスワードã®ãƒªã‚»ãƒƒãƒˆ +passwordResetBody=ã‚ãªãŸã® {2} アカウントã®ãƒ‘スワードã®å¤‰æ›´ãŒè¦æ±‚ã•れã¦ã„ã¾ã™ã€‚以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ãƒ‘スワードã®ãƒªã‚»ãƒƒãƒˆã‚’行ã£ã¦ãã ã•ã„。\n\n{0}\n\nã“ã®ãƒªãƒ³ã‚¯ã¯ {1} 分間ã ã‘æœ‰åйã§ã™ã€‚\n\nã‚‚ã—パスワードã®ãƒªã‚»ãƒƒãƒˆã‚’行ã‚ãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã—ã¦ãã ã•ã„。何も変更ã•れã¾ã›ã‚“。 +passwordResetBodyHtml=<p>ã‚ãªãŸã® {2} アカウントã®ãƒ‘スワードã®å¤‰æ›´ãŒè¦æ±‚ã•れã¦ã„ã¾ã™ã€‚以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ãƒ‘スワードã®ãƒªã‚»ãƒƒãƒˆã‚’行ã£ã¦ãã ã•ã„。</p><p><a href="{0}">パスワードã®ãƒªã‚»ãƒƒãƒˆ</a></p><p>ã“ã®ãƒªãƒ³ã‚¯ã¯ {1} 分間ã ã‘æœ‰åйã§ã™ã€‚</p><p>ã‚‚ã—パスワードã®ãƒªã‚»ãƒƒãƒˆã‚’行ã‚ãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã—ã¦ãã ã•ã„。何も変更ã•れã¾ã›ã‚“。</p> +executeActionsSubject=ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æ›´æ–° +executeActionsBody=管ç†è€…よりã‚ãªãŸã® {2} ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æ›´æ–°ãŒè¦æ±‚ã•れã¦ã„ã¾ã™ã€‚以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ã“ã®ãƒ—ãƒã‚»ã‚¹ã‚’é–‹å§‹ã—ã¦ãã ã•ã„。\n\n{0}\n\nã“ã®ãƒªãƒ³ã‚¯ã¯ {1} 分間ã ã‘æœ‰åйã§ã™ã€‚\n\n管ç†è€…ã‹ã‚‰ã®ã“ã®å¤‰æ›´è¦æ±‚ã«ã¤ã„ã¦ã”å˜çŸ¥ãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã—ã¦ãã ã•ã„。何も変更ã•れã¾ã›ã‚“。 +executeActionsBodyHtml=<p>管ç†è€…よりã‚ãªãŸã® {2} ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æ›´æ–°ãŒè¦æ±‚ã•れã¦ã„ã¾ã™ã€‚以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ã“ã®ãƒ—ãƒã‚»ã‚¹ã‚’é–‹å§‹ã—ã¦ãã ã•ã„。</p><p><a href="{0}">ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æ›´æ–°</a></p><p>ã“ã®ãƒªãƒ³ã‚¯ã¯ {1} 分間ã ã‘æœ‰åйã§ã™ã€‚</p><p>管ç†è€…ã‹ã‚‰ã®ã“ã®å¤‰æ›´è¦æ±‚ã«ã¤ã„ã¦ã”å˜çŸ¥ãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã—ã¦ãã ã•ã„。何も変更ã•れã¾ã›ã‚“。</p> +eventLoginErrorSubject=ãƒã‚°ã‚¤ãƒ³ã‚¨ãƒ©ãƒ¼ +eventLoginErrorBody={0} ã« {1} ã‹ã‚‰ã®ãƒã‚°ã‚¤ãƒ³å¤±æ•—ãŒã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§æ¤œå‡ºã•れã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。 +eventLoginErrorBodyHtml=<p>{0} ã« {1} ã‹ã‚‰ã®ãƒã‚°ã‚¤ãƒ³å¤±æ•—ãŒã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§æ¤œå‡ºã•れã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。</p> +eventRemoveTotpSubject=TOTPã®å‰Šé™¤ +eventRemoveTotpBody={0} ã« {1} ã‹ã‚‰ã®æ“作㧠TOTP ãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。 +eventRemoveTotpBodyHtml=<p>{0} ã« {1} ã‹ã‚‰ã®æ“作㧠TOTP ãŒå‰Šé™¤ã•れã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。</p> +eventUpdatePasswordSubject=ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã®æ›´æ–° +eventUpdatePasswordBody={0} ã« {1} ã‹ã‚‰ã®æ“作ã§ã‚ãªãŸã®ãƒ‘スワードãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。 +eventUpdatePasswordBodyHtml=<p>{0} ã« {1} ã‹ã‚‰ã®æ“作ã§ã‚ãªãŸã®ãƒ‘スワードãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。</p> +eventUpdateTotpSubject=TOTPã®æ›´æ–° +eventUpdateTotpBody={0} ã« {1} ã‹ã‚‰ã®æ“作㧠TOTP ãŒæ›´æ–°ã•れã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。 +eventUpdateTotpBodyHtml=<p>{0} ã« {1} ã‹ã‚‰ã®æ“作㧠TOTP ãŒæ›´æ–°ã•れã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。</p> diff --git a/ansible/artifacts/sunbird/email/messages/messages_lt.properties b/ansible/artifacts/sunbird/email/messages/messages_lt.properties new file mode 100644 index 0000000000000000000000000000000000000000..a1b59ade937495552e5c71fab9f79dd432230a4a --- /dev/null +++ b/ansible/artifacts/sunbird/email/messages/messages_lt.properties @@ -0,0 +1,24 @@ +emailVerificationSubject=El. pa\u0161to patvirtinimas +emailVerificationBody=Paskyra {2} sukurta naudojant \u0161\u012F el. pa\u0161to adres\u0105. Jei tai buvote J\u016Bs, tuomet paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105\n\n{0}\n\n\u0160i nuoroda galioja {1} min.\n\nJei paskyros nek\u016Br\u0117te, tuomet ignuoruokite \u0161\u012F lai\u0161k\u0105. +emailVerificationBodyHtml=<p>Paskyra {2} sukurta naudojant \u0161\u012F el. pa\u0161to adres\u0105. Jei tao buvote J\u016Bs, tuomet paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105</p><p><a href=LT"{0}">{0}</a></p><p>\u0160i nuoroda galioja {1} min.</p><p>nJei paskyros nek\u016Br\u0117te, tuomet ignuoruokite \u0161\u012F lai\u0161k\u0105.</p> +identityProviderLinkSubject=S\u0105saja {0} +identityProviderLinkBody=Ka\u017Eas pageidauja susieti J\u016Bs\u0173 "{1}" paskyr\u0105 su "{0}" {2} naudotojo paskyr\u0105. Jei tai buvote J\u016Bs, tuomet paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105 nor\u0117dami susieti paskyras\n\n{3}\n\n\u0160i nuoroda galioja {4} min.\n\nJei paskyr\u0173 susieti nenorite, tuomet ignoruokite \u0161\u012F lai\u0161k\u0105. Jei paskyras susiesite, tuomet prie {1} gal\u0117siste prisijungti per {0}. +identityProviderLinkBodyHtml=<p>\u017Eas pageidauja susieti J\u016Bs\u0173 <b>{1}</b> paskyr\u0105 su <b>{0}</b> {2} naudotojo paskyr\u0105. Jei tai buvote J\u016Bs, tuomet paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105 nor\u0117dami susieti paskyras</p><p><a href=LT"{3}">{3}</a></p><p>\u0160i nuoroda galioja {4} min.</p><p>Jei paskyr\u0173 susieti nenorite, tuomet ignoruokite \u0161\u012F lai\u0161k\u0105. Jei paskyras susiesite, tuomet prie {1} gal\u0117siste prisijungti per {0}.</p> +passwordResetSubject=Slapta\u017Eod\u017Eio atk\u016Brimas +passwordResetBody=Ka\u017Ekas pageidauja pakeisti J\u016Bs\u0173 paskyros {2} slapta\u017Eod\u012F. Jei tai buvote J\u016Bs, tuomet paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105 slapta\u017Eod\u017Eio pakeitimui.\n\n{0}\n\n\u0160i nuoroda ir kodas galioja {1} min.\n\nJei nepageidajate keisti slapta\u017Eod\u017Eio, tuomet ignoruokite \u0161\u012F lai\u0161k\u0105 ir niekas nebus pakeista. +passwordResetBodyHtml=<p>Ka\u017Ekas pageidauja pakeisti J\u016Bs\u0173 paskyros {2} slapta\u017Eod\u012F. Jei tai buvote J\u016Bs, tuomet paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105 slapta\u017Eod\u017Eio pakeitimui.</p><p><a href=LT"{0}">{0}</a></p><p>\u0160i nuoroda ir kodas galioja {1} min.</p><p>Jei nepageidajate keisti slapta\u017Eod\u017Eio, tuomet ignoruokite \u0161\u012F lai\u0161k\u0105 ir niekas nebus pakeista.</p> +executeActionsSubject=Atnaujinkite savo paskyr\u0105 +executeActionsBody=Sistemos administratorius pageidauja, kad J\u016Bs atnaujintum\u0117te savo {2} paskyr\u0105. Paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105 paskyros duomen\u0173 atnaujinimui.\n\n{0}\n\n\u0160i nuoroda galioja {1} min.\n\nJei J\u016Bs neasate tikri, kad tai administratoriaus pageidavimas, tuomet ignoruokite \u0161\u012F lai\u0161k\u0105 ir niekas nebus pakeista. +executeActionsBodyHtml=<p>Sistemos administratorius pageidauja, kad J\u016Bs atnaujintum\u0117te savo {2} paskyr\u0105. Paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105 paskyros duomen\u0173 atnaujinimui.</p><p><a href=LT"{0}">{0}</a></p><p>\u0160i nuoroda galioja {1} min.</p><p>Jei J\u016Bs neasate tikri, kad tai administratoriaus pageidavimas, tuomet ignoruokite \u0161\u012F lai\u0161k\u0105 ir niekas nebus pakeista.</p> +eventLoginErrorSubject=Nes\u0117kmingas bandymas prisijungti prie j\u016Bs\u0173 paskyros +eventLoginErrorBody=Bandymas prisijungti prie j\u016Bs\u0173 paskyros {0} i\u0161 {1} nes\u0117kmingas. Jei tai nebuvote j\u016Bs, tuomet susisiekite su administratoriumi +eventLoginErrorBodyHtml=<p>Bandymas prisijungti prie j\u016Bs\u0173 paskyros {0} i\u0161 {1} nes\u0117kmingas. Jei tai nebuvote j\u016Bs, tuomet susisiekite su administratoriumi</p> +eventRemoveTotpSubject=TOTP pa\u0161alinimas +eventRemoveTotpBody=Ka\u017Ekas pageidauja atsieti TOPT J\u016Bs\u0173 {1} paskyroje su {0}. Jei tai nebuvote J\u016Bs, tuomet susisiekite su administratoriumi +eventRemoveTotpBodyHtml=<p>Ka\u017Ekas pageidauja atsieti TOPT J\u016Bs\u0173 <b>{1}</b> paskyroje su <b>{0}</b>. Jei tai nebuvote J\u016Bs, tuomet susisiekite su administratoriumi</p> +eventUpdatePasswordSubject=Slapta\u017Eod\u017Eio atnaujinimas +eventUpdatePasswordBody={1} paskyroje {0} pakeisas j\u016Bs\u0173 slapta\u017Eodis. Jei J\u016Bs nekeit\u0117te, tuomet susisiekite su administratoriumi +eventUpdatePasswordBodyHtml=<p>{1} paskyroje {0} pakeisas j\u016Bs\u0173 slapta\u017Eodis. Jei J\u016Bs nekeit\u0117te, tuomet susisiekite su administratoriumi</p> +eventUpdateTotpSubject=TOTP atnaujinimas +eventUpdateTotpBody=TOTP J\u016Bs\u0173 {1} paskyroje su {0} buvo atnaujintas. Jei tai nebuvote J\u016Bs, tuomet susisiekite su administratoriumi +eventUpdateTotpBodyHtml=<p>TOTP J\u016Bs\u0173 {1} paskyroje su {0} buvo atnaujintas. Jei tai nebuvote J\u016Bs, tuomet susisiekite su administratoriumi</p> \ No newline at end of file diff --git a/ansible/artifacts/sunbird/email/messages/messages_no.properties b/ansible/artifacts/sunbird/email/messages/messages_no.properties new file mode 100644 index 0000000000000000000000000000000000000000..32334e9d8d09a30890786ccf16b18653f783c060 --- /dev/null +++ b/ansible/artifacts/sunbird/email/messages/messages_no.properties @@ -0,0 +1,24 @@ +emailVerificationSubject=Bekreft e-postadresse +emailVerificationBody=Noen har opprettet en {2} konto med denne e-postadressen. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 bekrefte e-postadressen din\n\n{0}\n\nDenne lenken vil utl\u00F8pe om {1} minutter.\n\nHvis du ikke opprettet denne kontoen, vennligst ignorer denne meldingen. +emailVerificationBodyHtml=<p>Noen har opprettet en {2} konto med denne e-postadressen. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 bekrefte e-postadressen din</p><p><a href="{0}">{0}</a></p><p>Denne lenken vil utl\u00F8pe om {1} minutter.</p><p>Hvis du ikke opprettet denne kontoen, vennligst ignorer denne meldingen.</p> +identityProviderLinkSubject=Lenke {0} +identityProviderLinkBody=Noen vil koble din <b>{1}</b> konto med <b>{0}</b> konto til bruker {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 koble kontoene\n\n{3}\n\nDenne lenken vil utl\u00F8pe om {4} minutter\n\nHvis du ikke vil koble kontoene, vennligst ignorer denne meldingen. Hvis du kobler kontoene sammen vil du kunne logge inn til {1} gjennom {0}. +identityProviderLinkBodyHtml=<p>Noen vil koble din <b>{1}</b> konto med <b>{0}</b> konto til bruker {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 koble kontoene.</p><p><a href="{3}">{3}</a></p><p>Denne lenken vil utl\u00F8pe om {4} minutter.</p><p>Hvis du ikke vil koble kontoene, vennligst ignorer denne meldingen. Hvis du kobler kontoene sammen vil du kunne logge inn til {1} gjennom {0}.</p> +passwordResetSubject=Tilbakestill passord +passwordResetBody=Noen har bedt om \u00E5 endre innloggingsdetaljene til din konto {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 tilbakestille dem.\n\n{0}\n\nDenne lenken vil utl\u00F8pe om {1} minutter.\n\nHvis du ikke vil tilbakestille din innloggingsdata, vennligst ignorer denne meldingen og ingenting vil bli endret. +passwordResetBodyHtml=<p>Noen har bedt om \u00E5 endre innloggingsdetaljene til din konto {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 tilbakestille dem.</p><p><a href="{0}">{0}</a></p><p>Denne lenken vil utl\u00F8pe om {1} minutter.</p><p>Hvis du ikke vil tilbakestille din innloggingsdata, vennligst ignorer denne meldingen og ingenting vil bli endret.</p> +executeActionsSubject=Oppdater kontoen din +executeActionsBody=Administrator har anmodet at du oppdaterer din {2} konto. Klikk p\u00E5 lenken nedenfor for \u00E5 starte denne prosessen\n\n{0}\n\nDenne lenken vil utl\u00F8pe om {1} minutter.\n\nHvis du ikke var klar over at administrator har bedt om dette, vennligst ignorer denne meldingen og ingenting vil bli endret. +executeActionsBodyHtml=<p>Administrator har anmodet at du oppdaterer din {2} konto. Klikk p\u00E5 linken nedenfor for \u00E5 starte denne prosessen.</p><p><a href="{0}">{0}</a></p><p>Denne lenken vil utl\u00F8pe om {1} minutter.</p><p>Hvis du ikke var klar over at administrator har bedt om dette, ignorer denne meldingen og ingenting vil bli endret. </p> +eventLoginErrorSubject=Innlogging feilet +eventLoginErrorBody=Et mislykket innloggingsfors\u00F8k ble oppdaget p\u00E5 din konto p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. +eventLoginErrorBodyHtml=<p>Et mislykket innloggingsfors\u00F8k ble oppdaget p\u00E5 din konto p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator.</p> +eventRemoveTotpSubject=Fjern engangskode +eventRemoveTotpBody=Engangskode ble fjernet fra kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. +eventRemoveTotpBodyHtml=<p>Engangskode ble fjernet fra kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator.</p> +eventUpdatePasswordSubject=Oppdater passord +eventUpdatePasswordBody=Ditt passord ble endret i {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. +eventUpdatePasswordBodyHtml=<p>Ditt passord ble endret i {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. </p> +eventUpdateTotpSubject=Oppdater engangskode +eventUpdateTotpBody=Engangskode ble oppdatert for kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. +eventUpdateTotpBodyHtml=<p>Engangskode ble oppdatert for kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. </p> diff --git a/ansible/artifacts/sunbird/email/messages/messages_pt_BR.properties b/ansible/artifacts/sunbird/email/messages/messages_pt_BR.properties new file mode 100644 index 0000000000000000000000000000000000000000..cfe973767d0110ff1def5512592f8384e2bd3c31 --- /dev/null +++ b/ansible/artifacts/sunbird/email/messages/messages_pt_BR.properties @@ -0,0 +1,19 @@ +emailVerificationSubject=Verifica\u00E7\u00E3o de e-mail +emailVerificationBody=Algu\u00E9m criou uma conta {2} com este endere\u00E7o de e-mail. Se foi voc\u00EA, clique no link abaixo para verificar o seu endere\u00E7o de email\n\n{0}\n\nEste link ir\u00E1 expirar dentro de {1} minutos.\n\nSe n\u00E3o foi voc\u00EA que criou esta conta, basta ignorar esta mensagem. +emailVerificationBodyHtml=<p>Algu\u00E9m criou uma conta {2} com este endere\u00E7o de e-mail. Se foi voc\u00EA, clique no link abaixo para verificar o seu endere\u00E7o de email</p><p><a href="{0}">{0}</a></p><p>Este link ir\u00E1 expirar dentro de {1} minutos.</p><p>Se n\u00E3o foi voc\u00EA que criou esta conta, basta ignorar esta mensagem.</p> +identityProviderLinkSubject=Vincular {0} +identityProviderLinkBody=Algu\u00E9m quer vincular sua conta "{1}" com a conta "{0}" do usu\u00E1rio {2} . Se foi voc\u00EA, clique no link abaixo para vincular as contas.\n\n{3}\n\nEste link ir\u00E1 expirar em {4} minutos.\n\nSe voc\u00EA n\u00E3o quer vincular a conta, apenas ignore esta mensagem. Se voc\u00EA vincular as contas, voc\u00EA ser\u00E1 capaz de logar em {1} atr\u00E1v\u00E9s de {0}. +identityProviderLinkBodyHtml=<p>Algu\u00E9m quer vincular sua conta <b>{1}</b> com a conta <b>{0}</b> do usu\u00E1rio {2} . Se foi voc\u00EA, clique no link abaixo para vincular as contas.</p><p><a href="{3}">{3}</a></p><p>Este link ir\u00E1 expirar em {4} minutos.</p><p>Se voc\u00EA n\u00E3o quer vincular a conta, apenas ignore esta mensagem. Se voc\u00EA vincular as contas, voc\u00EA ser\u00E1 capaz de logar em {1} atr\u00E1v\u00E9s de {0}.</p> +passwordResetSubject=Redefini\u00E7\u00E3o de senha +eventLoginErrorSubject=Erro de login +eventLoginErrorBody=Uma tentativa de login mal sucedida para a sua conta foi detectada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. +eventLoginErrorBodyHtml=<p>Uma tentativa de login mal sucedida para a sua conta foi detectada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.</p> +eventRemoveTotpSubject=Remover TOTP +eventRemoveTotpBody=TOTP foi removido da sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. +eventRemoveTotpBodyHtml=<p>TOTP foi removido da sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.</p> +eventUpdatePasswordSubject=Atualiza\u00E7\u00E3o de senha +eventUpdatePasswordBody=Sua senha foi alterada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. +eventUpdatePasswordBodyHtml=<p>Sua senha foi alterada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.</p> +eventUpdateTotpSubject=Atualiza\u00E7\u00E3o TOTP +eventUpdateTotpBody=TOTP foi atualizado para a sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. +eventUpdateTotpBodyHtml=<p>TOTP foi atualizado para a sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.</p> \ No newline at end of file diff --git a/ansible/artifacts/sunbird/email/messages/messages_ru.properties b/ansible/artifacts/sunbird/email/messages/messages_ru.properties new file mode 100644 index 0000000000000000000000000000000000000000..135578863bd3c70644659b0ddf8210f09ac60d1f --- /dev/null +++ b/ansible/artifacts/sunbird/email/messages/messages_ru.properties @@ -0,0 +1,25 @@ +# encoding: utf-8 +emailVerificationSubject=Подтверждение E-mail +emailVerificationBody=Кто-то Ñоздал учетную запиÑÑŒ {2} Ñ Ñтим E-mail. ЕÑли Ñто были Ð’Ñ‹, нажмите на Ñледующую ÑÑылку Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ email\n\n{0}\n\nÐта ÑÑылка уÑтареет через {1} минут.\n\nЕÑли Ð’Ñ‹ не Ñоздавали учетную запиÑÑŒ, проÑто проигнорируйте Ñто пиÑьмо. +emailVerificationBodyHtml=<p>Кто-то Ñоздал учетную запиÑÑŒ {2} Ñ Ñтим E-mail. ЕÑли Ñто были Ð’Ñ‹, нажмите по ÑÑылке Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ E-mail</p><p><a href="{0}">{0}</a></p><p>Ðта ÑÑылка уÑтареет через {1} минут.</p><p>ЕÑли Ð’Ñ‹ не Ñоздавали учетную запиÑÑŒ, проÑто проигнорируйте Ñто пиÑьмо.</p> +identityProviderLinkSubject=СÑылка {0} +identityProviderLinkBody=Кто-то хочет ÑвÑзать вашу учетную запиÑÑŒ "{1}" Ñ "{0}" учетной запиÑью Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ {2} . ЕÑли Ñто были Ð’Ñ‹, нажмите по Ñледующей ÑÑылке, чтобы ÑвÑзать учетные запиÑи\n\n{3}\n\nÐта ÑÑылка уÑтареет через {4} минут.\n\nЕÑли Ñто не хотите объединÑть учетные запиÑи, проÑто проигнориуйте Ñто пиÑьмо. ПоÑле Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑƒÑ‡ÐµÑ‚Ð½Ñ‹Ñ… запиÑей Ð’Ñ‹ можете войти в {1} через {0}. +identityProviderLinkBodyHtml=<p>Кто-то хочет ÑвÑзать вашу учетную запиÑÑŒ <b>{1}</b> Ñ <b>{0}</b> учетной запиÑью Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ {2} . ЕÑли Ñто были Ð’Ñ‹, нажмите по Ñледующей ÑÑылке, чтобы ÑвÑзать учетные запиÑи</p><p><a href="{3}">{3}</a></p><p>Ðта ÑÑылка уÑтареет через {4} минут.</p><p>ЕÑли Ñто не хотите объединÑть учетные запиÑи, проÑто проигнориуйте Ñто пиÑьмо. ПоÑле Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑƒÑ‡ÐµÑ‚Ð½Ñ‹Ñ… запиÑей Ð’Ñ‹ можете войти в {1} через {0}.</p> +passwordResetSubject=Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ +passwordResetBody=Кто-то только что запроÑил изменение Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¾Ñ‚ Вашей учетной запиÑи {2}. ЕÑли Ñто были Ð’Ñ‹, нажмите на Ñледующую ÑÑылку, чтобы ÑброÑить его.\n\n{0}\n\nÐта ÑÑылка уÑтареет через {1} минут.\n\nЕÑли Ð’Ñ‹ не хотите ÑбраÑывать пароль, проÑто проигнорируйте Ñто пиÑьмо. +passwordResetBodyHtml=<p>Кто-то только что запроÑил изменение Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¾Ñ‚ Вашей учетной запиÑи {2}. ЕÑли Ñто были Ð’Ñ‹, нажмите на Ñледующую ÑÑылку, чтобы ÑброÑить его.</p><p><a href="{0}">{0}</a></p><p>Ðта ÑÑылка уÑтареет через {1} минут.</p><p>ЕÑли Ð’Ñ‹ не хотите ÑбраÑывать пароль, проÑто проигнорируйте Ñто пиÑьмо и ничего не изменитÑÑ.</p> +executeActionsSubject=Обновление Вашей учетной запиÑи +executeActionsBody=ÐдминиÑтратор проÑит Ð’Ð°Ñ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ данные Вашей учетной запиÑи {2}. Ðажмите по Ñледующей ÑÑылке чтобы начать Ñтот процеÑÑ.\n\n{0}\n\nÐта ÑÑылка уÑтареет через {1} минут.\n\nЕÑли у Ð²Ð°Ñ ÐµÑть подозрениÑ, что админиÑтратор не мог Ñделать такой запроÑ, проÑто проигнорируйте Ñто пиÑьмо. +executeActionsBodyHtml=<p>ÐдминиÑтратор проÑит Ð’Ð°Ñ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ данные Вашей учетной запиÑи {2}. Ðажмите по Ñледующей ÑÑылке чтобы начать Ñтот процеÑÑ.</p><p><a href="{0}">{0}</a></p><p>Ðта ÑÑылка уÑтареет через {1} минут.</p><p>ЕÑли у Ð²Ð°Ñ ÐµÑть подозрениÑ, что админиÑтратор не мог Ñделать такой запроÑ, проÑто проигнорируйте Ñто пиÑьмо.</p> +eventLoginErrorSubject=Ошибка входа +eventLoginErrorBody=Была зафикÑирована Ð½ÐµÑƒÐ´Ð°Ñ‡Ð½Ð°Ñ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° входа в Вашу учетную запиÑÑŒ {0} Ñ {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором. +eventLoginErrorBodyHtml=<p>Была зафикÑирована Ð½ÐµÑƒÐ´Ð°Ñ‡Ð½Ð°Ñ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° входа в Вашу учетную запиÑÑŒ {0} Ñ {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором.</p> +eventRemoveTotpSubject=Удалить TOTP +eventRemoveTotpBody=TOTP был удален из вашей учетной запиÑи {0} c {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором. +eventRemoveTotpBodyHtml=<p>TOTP был удален из вашей учетной запиÑи {0} c {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором.</p> +eventUpdatePasswordSubject=Обновление Ð¿Ð°Ñ€Ð¾Ð»Ñ +eventUpdatePasswordBody=Ваш пароль был изменен в {0} Ñ {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором. +eventUpdatePasswordBodyHtml=<p>Ваш пароль был изменен в {0} Ñ {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором.</p> +eventUpdateTotpSubject=Обновление TOTP +eventUpdateTotpBody=TOTP был обновлен в вашей учетной запиÑи {0} Ñ {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором. +eventUpdateTotpBodyHtml=<p>TOTP был обновлен в вашей учетной запиÑи {0} Ñ {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором.</p> diff --git a/ansible/artifacts/sunbird/email/messages/messages_sv.properties b/ansible/artifacts/sunbird/email/messages/messages_sv.properties new file mode 100644 index 0000000000000000000000000000000000000000..5b5ac6d582c49628c639178d4255b593f2699fb8 --- /dev/null +++ b/ansible/artifacts/sunbird/email/messages/messages_sv.properties @@ -0,0 +1,25 @@ +# encoding: utf-8 +emailVerificationSubject=Verifiera e-post +emailVerificationBody=NÃ¥gon har skapat ett {2} konto med den här e-postadressen. Om det var du, klicka dÃ¥ pÃ¥ länken nedan för att verifiera din e-postadress\n\n{0}\n\nDen här länken kommer att upphöra inom {1} minuter.\n\nOm det inte var du som skapade det här kontot, ignorera i sÃ¥ fall det här meddelandet. +emailVerificationBodyHtml=<p>NÃ¥gon har skapat ett {2} konto med den här e-postadressen. Om det var du, klicka dÃ¥ pÃ¥ länken nedan för att verifiera din e-postadress</p><p><a href="{0}">{0}</a></p><p>Den här länken kommer att upphöra inom {1} minuter.</p><p>Om det inte var du som skapade det här kontot, ignorera i sÃ¥ fall det här meddelandet.</p> +identityProviderLinkSubject=Länk {0} +identityProviderLinkBody=NÃ¥gon vill länka ditt "{1}" konto med "{0}" kontot tillhörande användaren {2} . Om det var du, klicka dÃ¥ pÃ¥ länken nedan för att länka kontona\n\n{3}\n\nDen här länken kommer att upphöra inom {4} minuter.\n\nOm du inte vill länka kontot, ignorera i sÃ¥ fall det här meddelandet. Om du länkar kontona, sÃ¥ kan du logga in till {1} genom {0}. +identityProviderLinkBodyHtml=<p>NÃ¥gon vill länka ditt <b>{1}</b> konto med <b>{0}</b> kontot tillhörande användaren {2} . Om det var du, klicka dÃ¥ pÃ¥ länken nedan för att länka kontona</p><p><a href="{3}">{3}</a></p><p>Den här länken kommer att upphöra inom {4} minuter.</p><p>Om du inte vill länka kontot, ignorera i sÃ¥ fall det här meddelandet. Om du länkar kontona, sÃ¥ kan du logga in till {1} genom {0}.</p> +passwordResetSubject=Ã…terställ lösenord +passwordResetBody=NÃ¥gon har precis bett om att ändra ditt {2} kontos användaruppgifter. Om det var du, klicka dÃ¥ pÃ¥ länken nedan för att Ã¥terställa dem.\n\n{0}\n\nDen här länken och koden kommer att upphöra inom {1} minuter.\n\nOm du inte vill Ã¥terställa dina kontouppgifter, ignorera i sÃ¥ fall det här meddelandet sÃ¥ kommer inget att ändras. +passwordResetBodyHtml=<p>NÃ¥gon har precis bett om att ändra ditt {2} kontos användaruppgifter. Om det var du, klicka dÃ¥ pÃ¥ länken nedan för att Ã¥terställa dem.</p><p><a href="{0}">{0}</a></p><p>Den här länken och koden kommer att upphöra inom {1} minuter.</p><p>Om du inte vill Ã¥terställa dina kontouppgifter, ignorera i sÃ¥ fall det här meddelandet sÃ¥ kommer inget att ändras.</p> +executeActionsSubject=Uppdatera Ditt Konto +executeActionsBody=Din administratör har precis bett om att du skall uppdatera ditt {2} konto. Klicka pÃ¥ länken för att pÃ¥börja processen.\n\n{0}\n\nDen här länken kommer att upphöra inom {1} minuter.\n\nOm du är omedveten om att din administratör har bett om detta, ignorera i sÃ¥ fall det här meddelandet sÃ¥ kommer inget att ändras. +executeActionsBodyHtml=<p>Din administratör har precis bett om att du skall uppdatera ditt {2} konto. Klicka pÃ¥ länken för att pÃ¥börja processen.</p><p><a href="{0}">{0}</a></p><p>Den här länken kommer att upphöra inom {1} minuter.</p><p>Om du är omedveten om att din administratör har bett om detta, ignorera i sÃ¥ fall det här meddelandet sÃ¥ kommer inget att ändras.</p> +eventLoginErrorSubject=Inloggningsfel +eventLoginErrorBody=Ett misslyckat inloggningsförsök har upptäckts pÃ¥ ditt konto pÃ¥ {0} frÃ¥n {1}. Om det inte var du, vänligen kontakta i sÃ¥ fall en administratör. +eventLoginErrorBodyHtml=<p>Ett misslyckat inloggningsförsök har upptäckts pÃ¥ ditt konto den {0} frÃ¥n {1}. Om det inte var du, vänligen kontakta i sÃ¥ fall en administratör.</p> +eventRemoveTotpSubject=Ta bort TOTP +eventRemoveTotpBody=TOTP togs bort frÃ¥n ditt konto den {0} frÃ¥n {1}. Om det inte var du, vänligen kontakta i sÃ¥ fall en administratör. +eventRemoveTotpBodyHtml=<p>TOTP togs bort frÃ¥n ditt konto den {0} frÃ¥n {1}. Om det inte var du, vänligen kontakta i sÃ¥ fall en administratör.</p> +eventUpdatePasswordSubject=Uppdatera lösenord +eventUpdatePasswordBody=Ditt lösenord ändrades den {0} frÃ¥n {1}. Om det inte var du, vänligen kontakta i sÃ¥ fall en administratör. +eventUpdatePasswordBodyHtml=<p>Ditt lösenord ändrades den {0} frÃ¥n {1}. Om det inte var du, vänligen kontakta i sÃ¥ fall en administratör.</p> +eventUpdateTotpSubject=Uppdatera TOTP +eventUpdateTotpBody=TOTP uppdaterades för ditt konto den {0} frÃ¥n {1}. Om det inte var du, vänligen kontakta i sÃ¥ fall en administratör. +eventUpdateTotpBodyHtml=<p>TOTP uppdaterades för ditt konto den {0} frÃ¥n {1}. Om det inte var du, vänligen kontakta i sÃ¥ fall en administratör.</p> \ No newline at end of file diff --git a/ansible/artifacts/sunbird/email/text/email-test.ftl b/ansible/artifacts/sunbird/email/text/email-test.ftl new file mode 100644 index 0000000000000000000000000000000000000000..19942c791f337babae6cc59520ae4a8be37d8be6 --- /dev/null +++ b/ansible/artifacts/sunbird/email/text/email-test.ftl @@ -0,0 +1 @@ +${msg("emailTestBody", realmName)} \ No newline at end of file diff --git a/ansible/artifacts/sunbird/email/text/email-verification.ftl b/ansible/artifacts/sunbird/email/text/email-verification.ftl new file mode 100644 index 0000000000000000000000000000000000000000..0ae601f723dc9ba135957d705d5ead48afc3b04f --- /dev/null +++ b/ansible/artifacts/sunbird/email/text/email-verification.ftl @@ -0,0 +1 @@ +${msg("emailVerificationBody",link, linkExpiration, realmName)} \ No newline at end of file diff --git a/ansible/artifacts/sunbird/email/text/event-login_error.ftl b/ansible/artifacts/sunbird/email/text/event-login_error.ftl new file mode 100644 index 0000000000000000000000000000000000000000..7835c914646e277079d57dd88859df0173916adb --- /dev/null +++ b/ansible/artifacts/sunbird/email/text/event-login_error.ftl @@ -0,0 +1 @@ +${msg("eventLoginErrorBody",event.date,event.ipAddress)} \ No newline at end of file diff --git a/ansible/artifacts/sunbird/email/text/event-remove_totp.ftl b/ansible/artifacts/sunbird/email/text/event-remove_totp.ftl new file mode 100644 index 0000000000000000000000000000000000000000..8930b64d5723a8d5d2b3c36ecb9be24f9755bc49 --- /dev/null +++ b/ansible/artifacts/sunbird/email/text/event-remove_totp.ftl @@ -0,0 +1 @@ +${msg("eventRemoveTotpBody",event.date, event.ipAddress)} \ No newline at end of file diff --git a/ansible/artifacts/sunbird/email/text/event-update_password.ftl b/ansible/artifacts/sunbird/email/text/event-update_password.ftl new file mode 100644 index 0000000000000000000000000000000000000000..754daac5c33a64e40ae2e87ad5eaaca3d2fd4660 --- /dev/null +++ b/ansible/artifacts/sunbird/email/text/event-update_password.ftl @@ -0,0 +1 @@ +${msg("eventUpdatePasswordBody",event.date, event.ipAddress)} \ No newline at end of file diff --git a/ansible/artifacts/sunbird/email/text/event-update_totp.ftl b/ansible/artifacts/sunbird/email/text/event-update_totp.ftl new file mode 100644 index 0000000000000000000000000000000000000000..3a7b0f71237415a432788ab6d2c670ce4d740728 --- /dev/null +++ b/ansible/artifacts/sunbird/email/text/event-update_totp.ftl @@ -0,0 +1 @@ +${msg("eventUpdateTotpBody",event.date, event.ipAddress)} \ No newline at end of file diff --git a/ansible/artifacts/sunbird/email/text/executeActions.ftl b/ansible/artifacts/sunbird/email/text/executeActions.ftl new file mode 100644 index 0000000000000000000000000000000000000000..a33758f1526012fbd6b795bd559d761091d20262 --- /dev/null +++ b/ansible/artifacts/sunbird/email/text/executeActions.ftl @@ -0,0 +1 @@ +${msg("executeActionsBody",link, linkExpiration, realmName)} \ No newline at end of file diff --git a/ansible/artifacts/sunbird/email/text/identity-provider-link.ftl b/ansible/artifacts/sunbird/email/text/identity-provider-link.ftl new file mode 100644 index 0000000000000000000000000000000000000000..a8c0d54e92b99be6453dcd865139f764775f43cc --- /dev/null +++ b/ansible/artifacts/sunbird/email/text/identity-provider-link.ftl @@ -0,0 +1 @@ +${msg("identityProviderLinkBody", identityProviderAlias, realmName, identityProviderContext.username, link, linkExpiration)} \ No newline at end of file diff --git a/ansible/artifacts/sunbird/email/text/password-reset.ftl b/ansible/artifacts/sunbird/email/text/password-reset.ftl new file mode 100644 index 0000000000000000000000000000000000000000..3520c418e3b399c983c86c58a4ffbac86cd04dd6 --- /dev/null +++ b/ansible/artifacts/sunbird/email/text/password-reset.ftl @@ -0,0 +1 @@ +${msg("passwordResetBodyHtml",link,(linkExpiration/60)?string["0"],realmName)} diff --git a/ansible/artifacts/sunbird/email/theme.properties b/ansible/artifacts/sunbird/email/theme.properties new file mode 100644 index 0000000000000000000000000000000000000000..6b2b6e8fac09da2e0ca67439e7628502d1b8344c --- /dev/null +++ b/ansible/artifacts/sunbird/email/theme.properties @@ -0,0 +1 @@ +locales=ca,de,en,es,fr,it,ja,lt,no,pt-BR,ru,sv \ No newline at end of file diff --git a/ansible/artifacts/sunbird/login/login-page-expired.ftl b/ansible/artifacts/sunbird/login/login-page-expired.ftl new file mode 100644 index 0000000000000000000000000000000000000000..b2666144205b7f9640ee8c03e6c6ebb29085a27d --- /dev/null +++ b/ansible/artifacts/sunbird/login/login-page-expired.ftl @@ -0,0 +1,18 @@ +<#import "template.ftl" as layout> +<@layout.registrationLayout; section> + <#if section = "title"> + ${msg("pageExpiredTitle")} + <#elseif section = "form"> + <div class="ui raised shadow container segment fullpage-background-image"> + <div class="ui three column grid stackable"> + <div class="ui column tablet only computer only"></div> + <div class="ui column mt-127 height-fix"> + <p id="instruction1" class="instruction"> + ${msg("pageExpiredMsg1")} <a id="loginRestartLink" href="${url.loginRestartFlowUrl}">${msg("doClickHere")}</a>. + ${msg("pageExpiredMsg2")} <a id="loginContinueLink" href="${url.loginAction}">${msg("doClickHere")}</a>. + </p> + </div> + <div class="ui column tablet only computer only"></div> + </div> + </#if> +</@layout.registrationLayout> diff --git a/ansible/artifacts/sunbird/login/login-reset-password.ftl b/ansible/artifacts/sunbird/login/login-reset-password.ftl new file mode 100644 index 0000000000000000000000000000000000000000..5d81b0c7ad21d96d60b09067d506b2f2250e7f28 --- /dev/null +++ b/ansible/artifacts/sunbird/login/login-reset-password.ftl @@ -0,0 +1,58 @@ +<#import "template.ftl" as layout> +<@layout.registrationLayout displayInfo=true; section> + <#if section = "title"> + ${msg("emailForgotTitle")} + <#elseif section = "form"> + <meta content="width=device-width, initial-scale=1" name="viewport" /> + <div class="ui raised shadow container segment fullpage-background-image"> + <div class="ui three column grid stackable"> + <div class="ui column tablet only computer only"></div> + <div class="ui column height-fix"> + <div class="ui header centered"> + <img onerror="" alt=""> + <div class="signInHead mt-27">${msg("emailForgotTitle")}</div> + </div> + <div class="ui content center justfy textCenter"> + ${msg("enterEmailPhonenumberToGetCode")} + </div> + <div class="ui content center justfy textCenter mt-8 mb-28"> + <#if message?has_content> + <div class="ui text ${message.type}"> + ${message.summary} + </div> + </#if> + </div> + <form id="kc-reset-password-form" class="ui form" method="POST" action="${url.loginAction}"> + <div class="field mb-36"> + <label id="usernameLabel" for="username" class=""> + <#if !realm.loginWithEmailAllowed> + ${msg("username")} + <#elseif !realm.registrationEmailAsUsername> + ${msg("emailOrPhone")} + <#else>${msg("email")} + </#if> + </label> + <label id="usernameLabelPlaceholder" for="username" class="activeLabelColor hide"> + <#if !realm.loginWithEmailAllowed>${msg("username")} + <#elseif !realm.registrationEmailAsUsername>${msg("placeholderForEmailOrPhone")} + <#else>${msg("email")} + </#if> + </label> + <input type="text" id="username" class="mt-8" name="username" onfocusin="inputBoxFocusIn(this)" onfocusout="inputBoxFocusOut(this)" autofocus/> + </div> + <div class="field"> + <button id="login" class="ui fluid submit button"> + ${msg("doReset")} + </button> + </div> + </form> + <div class="${properties.kcFormOptionsWrapperClass!} signUpMsg mb-56 mt-45 textCenter"> + <span><a id="versionLink" class="backToLogin" onclick="javascript:makeDivUnclickable()" href="${url.loginUrl}"><span class="fs-14"><< </span> ${msg("backToLogin")}</a></span> + </div> + </div> + <div class="ui column tablet only computer only"></div> + </div> + </div> + <#elseif section = "info" > + </#if> +</@layout.registrationLayout> diff --git a/ansible/artifacts/sunbird/login/login-update-password.ftl b/ansible/artifacts/sunbird/login/login-update-password.ftl new file mode 100644 index 0000000000000000000000000000000000000000..434a2698588baf9234bba3d0ebb0b657cce9e877 --- /dev/null +++ b/ansible/artifacts/sunbird/login/login-update-password.ftl @@ -0,0 +1,64 @@ +<#import "template.ftl" as layout> +<@layout.registrationLayout displayInfo=true; section> + <#if section = "title"> + ${msg("updatePasswordTitle")} + <#elseif section = "form"> + <div class="ui raised shadow container segment fullpage-background-image"> + <div class="ui three column grid stackable"> + <div class="ui column tablet only computer only"></div> + <div class="ui column height-fix"> + <div class="ui header centered mb-18"> + <img onerror="" alt=""> + <div class="signInHead mt-27">${msg("newPasswordTitle")}</div> + </div> + <div class="ui content center justfy textCenter mb-36 loginupdate"> + <#if message?has_content> + <div class="ui text ${message.type}"> + ${message.summary} + </div> + </#if> + </div> + <form id="kc-passwd-update-form" class="ui form" action="${url.loginAction}" method="post"> + <div class="field"> + <label id="password-newLabel" for="password-new" class=""> + ${msg("passwordNew")} + </label> + <label id="password-newLabelPlaceholder" for="password-new" class="activeLabelColor hide"> + ${msg("passwordNew")} + </label> + <div class="ui search"> + <div class="ui mt-8 icon input"> + <input class="" type="password" id="password-new" onfocusin="inputBoxFocusIn(this)" onfocusout="inputBoxFocusOut(this)" name="password-new" autocomplete="off" /> + <i class="eye icon link" onclick="viewPassword(this)"></i> + <!--i id="preview-hide" class="eye slash icon hide link"></i--> + </div> + </div> + </div> + <div class="field"> + <label id="password-confirmLabel" class="" for="password-confirm"> + ${msg("passwordConfirm")} + </label> + <label id="password-confirmLabelPlaceholder" class="activeLabelColor hide" for="password-confirm"> + ${msg("passwordConfirm")} + </label> + <input type="password" class="mt-8" onfocusin="inputBoxFocusIn(this)" onfocusout="inputBoxFocusOut(this)" id="password-confirm" name="password-confirm" autocomplete="off" /> + </div> + <div class="field"> + <button id="login" class="ui fluid button submit mt-36" onclick="javascript:makeDivUnclickable()"> + ${msg("doReset")} + </button> + </div> + </form> + <!--div class="${properties.kcFormOptionsWrapperClass!} signUpMsg mb-56 mt-45 textCenter"> + <span> + <a class="backToLogin" onclick="javascript:makeDivUnclickable()" href="${url.loginUrl}"> + <span class="fs-14"><< </span> ${msg("backToLogin")} + </a> + </span> + </div--> + </div> + <div class="ui column tablet only computer only"></div> + </div> + </div> + </#if> +</@layout.registrationLayout> diff --git a/ansible/artifacts/sunbird/login/login.ftl b/ansible/artifacts/sunbird/login/login.ftl new file mode 100644 index 0000000000000000000000000000000000000000..1cc22c9e37919a592c07b7e121a957e8bcc04ed9 --- /dev/null +++ b/ansible/artifacts/sunbird/login/login.ftl @@ -0,0 +1,97 @@ +<#import "template.ftl" as layout> +<@layout.registrationLayout displayInfo=social.displayInfo; section> +<#if section = "title"> + ${msg("loginTitle",(realm.displayName!''))} + <#elseif section = "header"> + <#elseif section = "form"> + <#if realm.password> + <div class="ui raised shadow container segment fullpage-background-image"> + <div class="ui three column grid stackable"> + <div class="ui column tablet only computer only"></div> + <div class="ui column height-fix"> + <div class="ui header centered"> + <img onerror="" alt=""> + <div class="signInHead mt-27">${msg("doSignIn")}</div> + </div> + <div class="formMsg mb-28 textCenter"> + <#if message?has_content> + <div class="ui text ${message.type}"> + ${message.summary} + </div> + </#if> + <div id="success-msg" class="ui text success hide">suceess</div> + <div id="error-msg" class="ui text error hide">error</div> + </div> + <form id="kc-form-login" class="ui form" method="POST" action="${url.loginAction}"> + <div class="field"> + <label id="usernameLabel" for="username" class=""> + <#if !realm.loginWithEmailAllowed>${msg("username")} + <#elseif !realm.registrationEmailAsUsername>${msg("emailOrPhone")} + <#else>${msg("email")} + </#if> + </label> + <label id="usernameLabelPlaceholder" for="username" class="activeLabelColor hide"> + <#if !realm.loginWithEmailAllowed>${msg("username")} + <#elseif !realm.registrationEmailAsUsername>${msg("placeholderForEmailOrPhone")} + <#else>${msg("email")} + </#if> + </label> + <#if usernameEditDisabled??> + <input class="mt-8" id="username" name="username" value="${(login.username!'')?html}" type="text" disabled /> + <#else> + <input class="mt-8" id="username" name="username" onfocusin="inputBoxFocusIn(this)" onfocusout="inputBoxFocusOut(this)" value="${(login.username!'')?html}" type="text" autofocus autocomplete="off" /> + </#if> + </div> + <div class="field"> + <div> + <label id="passwordLabel" for="password" class=""> + ${msg("password")} + </label> + <label id="passwordLabelPlaceholder" for="password" class="activeLabelColor hide"> + ${msg("placeholderForPassword")} + </label> + </div> + <input class=" mt-8" id="password" onfocusin="inputBoxFocusIn(this)" onfocusout="inputBoxFocusOut(this)" name="password" type="password" autocomplete="off" /> + </div> + <div class="field"> + <button id="login" class="mt-36 ui fluid button">${msg("doSignIn")}</button> + </div> + <#if realm.resetPasswordAllowed> + <a id="versionLink" class="ui right floated forgetPasswordLink" onclick="javascript:storeLocation(); javascript:makeDivUnclickable()" href="${url.loginResetCredentialsUrl}">${msg("doForgotPassword")}</a> + </#if> + <div id="selfSingUp" class="hide"> + <p class="or mb-30 mt-30 textCenter">OR</p> + <div class="field"> + <#if realm.password && social.providers??> + <!--div id="kc-social-providers"> + <#list social.providers as p> + <a href="${p.loginUrl}" id="zocial-${p.alias}" class="zocial ${p.providerId} ui fluid blue basic button textCenter"> + <i class="icon signInWithGoogle"></i>${msg("doSignIn")} ${msg("doSignWithGoogle")} + </a> + </#list> + </div--> + </#if> + <button type="button" class="ui fluid blue basic button googleButton" onclick="redirect('/google/auth')"> + <img class="signInWithGoogle" src="${url.resourcesPath}/img/google.png"> + ${msg("doSignIn")} ${msg("doSignWithGoogle")} + </button> + <button type="button" id="stateButton" class="ui fluid blue basic button googleButton stateButton hide" onclick="handleSsoEvent()"> + ${msg("doSignWithState")} + </button> + </div> + <#if realm.password && realm.registrationAllowed && !usernameEditDisabled??> + <div id="kc-registration" class="field"> + <div class="ui content signUpMsg"> + ${msg("noAccount")} <span id="signup" tabindex="0" class="registerLink" onclick="redirect('/signup')">${msg("doRegister")}</span> to access relevant learning material and enroll for courses. + </div> + </div> + </#if> + </div> + </form> + </div> + <div class="ui column tablet only computer only"></div> + </div> + </div> + </#if> +</#if> +</@layout.registrationLayout> diff --git a/ansible/artifacts/sunbird/login/resources/messages/messages_en.properties b/ansible/artifacts/sunbird/login/messages/messages_en.properties similarity index 87% rename from ansible/artifacts/sunbird/login/resources/messages/messages_en.properties rename to ansible/artifacts/sunbird/login/messages/messages_en.properties index ccca8b5a67998b3cfdd6b061bd777dd040e1c0e3..ff12e1996699406fac6fd0e974bf6dffabb05965 100644 --- a/ansible/artifacts/sunbird/login/resources/messages/messages_en.properties +++ b/ansible/artifacts/sunbird/login/messages/messages_en.properties @@ -1,13 +1,17 @@ -doLogIn=Log in -doRegister=Register +doLogIn=Log In +doRegister=Sign Up +doSignIn=Sign In +doSignWithGoogle=with Google +doSignWithState=Sign In with State System doCancel=Cancel doSubmit=Submit +doReset=Reset doYes=Yes doNo=No doContinue=Continue doAccept=Accept doDecline=Decline -doForgotPassword=Forgot Password? +doForgotPassword=Forgot? doClickHere=Click here doImpersonate=Impersonate kerberosNotConfigured=Kerberos Not Configured @@ -24,14 +28,17 @@ realmChoice=Realm unknownUser=Unknown user loginTotpTitle=Mobile Authenticator Setup loginProfileTitle=Update Account Information -loginTimeout=You took too long to login. Login process starting from beginning. +enterCode=Enter the code we sent to you +loginTimeout=You took too long to sign in. Sign in process starting from beginning. oauthGrantTitle=Grant Access oauthGrantTitleHtml={0} errorTitle=We''re sorry... errorTitleHtml=We''re <strong>sorry</strong> ... emailVerifyTitle=Email verification emailForgotTitle=Forgot Your Password? -updatePasswordTitle=Update password +updatePasswordTitle=Update Password +newPasswordTitle=Create New Password +enterEmailPhonenumberToGetCode=Enter your Email ID/ Mobile number and we will send you instructions on how to reset your password codeSuccessTitle=Success code codeErrorTitle=Error code\: {0} @@ -43,9 +50,10 @@ recaptchaFailed=Invalid Recaptcha recaptchaNotConfigured=Recaptcha is required, but not configured consentDenied=Consent denied. -noAccount=New user? -username=Username -usernameOrEmail=Username or email +noAccount=Don''t have an account? +username=Username or Mobile number +emailOrPhone=Mobile number / Email ID +placeholderForEmailOrPhone=Enter Mobile number / Email ID firstName=First name givenName=Given name fullName=Full name @@ -53,7 +61,8 @@ lastName=Last name familyName=Family name email=Email password=Password -passwordConfirm=Confirm password +placeholderForPassword=Enter Password +passwordConfirm=Confirm Password passwordNew=New Password passwordNewConfirm=New Password confirmation rememberMe=Remember me @@ -86,15 +95,13 @@ emailLinkIdp3=to re-send the email. emailLinkIdp4=If you already verified the email in different browser emailLinkIdp5=to continue. -backToLogin=« Back to Login - -emailInstruction=Enter your username or email address and we will send you instructions on how to create a new password. +backToLogin= Back to Sign In copyCodeInstruction=Please copy this code and paste it into your application: pageExpiredTitle=Page has expired -pageExpiredMsg1=To restart the login process -pageExpiredMsg2=To continue the login process +pageExpiredMsg1=To restart the sign in process +pageExpiredMsg2=To continue the sign in process personalInfo=Personal Info: role_admin=Admin @@ -124,19 +131,19 @@ client_admin-cli=Admin CLI client_realm-management=Realm Management client_broker=Broker -invalidUserMessage=Invalid username or password. +invalidUserMessage=Invalid email ID/Mobile number or password. Please try again with valid credentials. invalidEmailMessage=Invalid email address. accountDisabledMessage=Account is disabled, contact admin. -accountTemporarilyDisabledMessage=Account is temporarily disabled, contact admin or try again later. -expiredCodeMessage=Login timeout. Please login again. -expiredActionMessage=Action expired. Please continue with login now. +accountTemporarilyDisabledMessage=Invalid username or password. You can try again after 24 hours or ask your organisation administrator to reset your credentials. +expiredCodeMessage=Sign in timeout. Please Sign In again. +expiredActionMessage=Action expired. Please continue with Sign In now. expiredActionTokenNoSessionMessage=Action expired. expiredActionTokenSessionExistsMessage=Action expired. Please start again. missingFirstNameMessage=Please specify first name. missingLastNameMessage=Please specify last name. missingEmailMessage=Please specify email. -missingUsernameMessage=Please specify username. +missingUsernameMessage=Please specify Email or Mobile number. missingPasswordMessage=Please specify password. missingTotpMessage=Please specify authenticator code. notMatchPasswordMessage=Passwords don''t match. @@ -148,7 +155,7 @@ invalidTotpMessage=Invalid authenticator code. usernameExistsMessage=Username already exists. emailExistsMessage=Email already exists. -federatedIdentityExistsMessage=User with {0} {1} already exists. Please login to account management to link the account. +federatedIdentityExistsMessage=User with {0} {1} already exists. Please Sign In to account management to link the account. confirmLinkIdpTitle=Account already exists federatedIdentityConfirmLinkMessage=User with {0} {1} already exists. How do you want to continue? @@ -158,7 +165,7 @@ confirmLinkIdpContinue=Add to existing account configureTotpMessage=You need to set up Mobile Authenticator to activate your account. updateProfileMessage=You need to update your user profile to activate your account. -updatePasswordMessage=Enter a new password to change your current password. +updatePasswordMessage=Enter the new password you would like to use to Sign In. verifyEmailMessage=You need to verify your email address to activate your account. linkIdpMessage=You need to verify your email address to link your account with {0}. @@ -184,7 +191,7 @@ failedToProcessResponseMessage=Failed to process response httpsRequiredMessage=HTTPS required realmNotEnabledMessage=Realm not enabled invalidRequestMessage=Invalid Request -failedLogout=Logout failed +failedLogout=Sign out failed unknownLoginRequesterMessage=Unknown login requester loginRequesterNotEnabledMessage=Login requester not enabled bearerOnlyMessage=Bearer-only applications are not allowed to initiate browser login @@ -209,7 +216,7 @@ couldNotSendAuthenticationRequestMessage=Could not send authentication request t unexpectedErrorHandlingRequestMessage=Unexpected error when handling authentication request to identity provider. invalidAccessCodeMessage=Invalid access code. sessionNotActiveMessage=Session not active. -invalidCodeMessage=An error occurred, please login again through your application. +invalidCodeMessage=An error occurred, please sign in again through your application. identityProviderUnexpectedErrorMessage=Unexpected error when authenticating with identity provider identityProviderNotFoundMessage=Could not find an identity provider with the identifier. identityProviderLinkSuccess=You successfully verified your email. Please go back to your original browser and continue there with the login. @@ -254,5 +261,6 @@ requiredAction.terms_and_conditions=Terms and Conditions requiredAction.UPDATE_PASSWORD=Update Password requiredAction.UPDATE_PROFILE=Update Profile requiredAction.VERIFY_EMAIL=Verify Email - +user_not_found=This email ID/mobile number doesn''t belong to a valid user p3pPolicy=CP="This is not a P3P policy!" + diff --git a/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/cyrillic-ext.woff2 b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/cyrillic-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1d76abd4cda38c17a67f5173eb9ad648cab61c8c Binary files /dev/null and b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/cyrillic-ext.woff2 differ diff --git a/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/cyrillic.woff2 b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/cyrillic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1809b57742e823b2e10ccc3b575f6c314f0ebb4a Binary files /dev/null and b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/cyrillic.woff2 differ diff --git a/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/devanagari.woff2 b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/devanagari.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f228192f296147f3df3b60aca44a812819631e34 Binary files /dev/null and b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/devanagari.woff2 differ diff --git a/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/greek-ext.woff2 b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/greek-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c0ed67f8e69c51f913880ecb6cddfea6eaaef503 Binary files /dev/null and b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/greek-ext.woff2 differ diff --git a/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/greek.woff2 b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/greek.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ae50fdd36e6ed769ad22e03ba34e9085ee2d2906 Binary files /dev/null and b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/greek.woff2 differ diff --git a/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/latin-ext.woff2 b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/latin-ext.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f330caf6dadef7ee58c8341d2812312af1e770e2 Binary files /dev/null and b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/latin-ext.woff2 differ diff --git a/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/latin.woff2 b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..22818e7d4c3314490e1566fe3b3dfeb8ab0b174a Binary files /dev/null and b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/latin.woff2 differ diff --git a/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/notosans.css b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/notosans.css new file mode 100644 index 0000000000000000000000000000000000000000..f8c30bf428365bb938ac0788bfd1aad24e987f7f --- /dev/null +++ b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/notosans.css @@ -0,0 +1,64 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Noto Sans'; + font-style: normal; + font-weight: 400; + src: local('Noto Sans'), local('NotoSans'), url(./cyrillic-ext.woff2) format('woff2'); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; + } + /* cyrillic */ + @font-face { + font-family: 'Noto Sans'; + font-style: normal; + font-weight: 400; + src: local('Noto Sans'), local('NotoSans'), url(./cyrillic.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; + } + /* devanagari */ + @font-face { + font-family: 'Noto Sans'; + font-style: normal; + font-weight: 400; + src: local('Noto Sans'), local('NotoSans'), url(./devanagari.woff2) format('woff2'); + unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB; + } + /* greek-ext */ + @font-face { + font-family: 'Noto Sans'; + font-style: normal; + font-weight: 400; + src: local('Noto Sans'), local('NotoSans'), url(./greek-ext.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; + } + /* greek */ + @font-face { + font-family: 'Noto Sans'; + font-style: normal; + font-weight: 400; + src: local('Noto Sans'), local('NotoSans'), url(./greek.woff2) format('woff2'); + unicode-range: U+0370-03FF; + } + /* vietnamese */ + @font-face { + font-family: 'Noto Sans'; + font-style: normal; + font-weight: 400; + src: local('Noto Sans'), local('NotoSans'), url(./vietnamese.woff2) format('woff2'); + unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; + } + /* latin-ext */ + @font-face { + font-family: 'Noto Sans'; + font-style: normal; + font-weight: 400; + src: local('Noto Sans'), local('NotoSans'), url(./latin-ext.woff2) format('woff2'); + unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; + } + /* latin */ + @font-face { + font-family: 'Noto Sans'; + font-style: normal; + font-weight: 400; + src: local('Noto Sans'), local('NotoSans'), url(./latin.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; + } \ No newline at end of file diff --git a/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/vietnamese.woff2 b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/vietnamese.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b28836f20376c17636d8fa3fa2fca8e43d5d9fff Binary files /dev/null and b/ansible/artifacts/sunbird/login/resources/css/fonts/notosans/vietnamese.woff2 differ diff --git a/ansible/artifacts/sunbird/login/resources/css/login.css b/ansible/artifacts/sunbird/login/resources/css/login.css index 04e3f9b656cca633cd1f66d0d598f113af5a6c84..434a223983a54fd5e8a167369ea4936c3cd20852 100644 --- a/ansible/artifacts/sunbird/login/resources/css/login.css +++ b/ansible/artifacts/sunbird/login/resources/css/login.css @@ -1,141 +1,282 @@ -body { - background-color: #FFFFFF; +@import "./fonts/notosans/notosans.css"; +body{ + font-family: "Noto Sans"; + position: relative; + letter-spacing: 0.2px; } - -div#kc-content-wrapper { - text-align: center; +.ui.container.fullpage-background-image{ + max-width: 320px !important; + margin: 0 auto !important; + box-shadow: none !important; + border: 0 !important; + border-radius: 0 !important; } - -div#kc-locale { - display: none; +.fs-14{ + font-size: 14px !important; } - -div#kc-header { - display: none; +@media screen and (min-width: 768px) { + body{ + background-size: cover; + background-repeat: no-repeat; + min-height: 100vh; + background: url(../img/bg.svg) no-repeat center center fixed; + background-size: cover; + + } + .ui.container.fullpage-background-image{ + max-width: 944px !important; + padding: 20px 0 !important; + margin: 30px auto!important; + box-shadow: 0 2px 16px 0 rgba(0,0,0,0.2) !important; + border-radius: 4px !important; + border: 1px solid #d8dee2 !important; + } } - -.page-login { - margin-top: 2em; +.ui.button:focus{ + box-shadow: 0 2px 8px 0 rgba(0,0,0,.16) !important; } - -.ui.form.pre-signin input { - border: 0!important; - border-bottom: 1px solid #979797!important; - border-radius: 0!important; - padding: 1em 0!important; +.w-100 { + width: 100px !important; } - -.ui.form.pre-signin .field>label { - color: #979797 !important; - font-size: 1rem !important; - font-weight: bold !important; +.w-95 { + width: 95px !important; } - -.forgot-passwordText { - height: 17px; - color: #007AFF; - font-size: 1.1em; - font-weight: 700; - line-height: 17px; - padding-top: 0.6em; +.activeLabelColor{ + color:#024f9d !important; } - -@media screen and (max-width: 900px) and (min-width: 300px) { - - .forgot-passwordText { - height: 17px; - color: #007AFF; - font-size: 1em; - font-weight: 700; - line-height: 17px; - padding-top: 0em; - } +input{ + border: 1px solid #9B9B9B !important; } - -.no-account-sign-up { +input:focus{ + border: 1px solid #024f9d !important; +} +.signInWithGoogle{ + vertical-align: bottom; + height: 18px !important; + margin-right: 5px; + +} +.ui.basic.blue.button.googleButton{ + color: #333 !important; + vertical-align: middle; + line-height: 18px; +} +.ui.basic.blue.button.googleButton:hover, +.ui.basic.blue.button.googleButton:focus{ + color: #024f9d !important; +} +.ui.basic.blue.button.stateButton{ + margin-top: 10px !important; + box-shadow: 0 0 0 1px #2CA58D inset!important; +} +.ui.basic.blue.button.stateButton:hover, +.ui.basic.blue.button.stateButton:focus{ + color: #2CA58D !important; +} +.ui.fluid.large.submit.button { + color: #F9F9F9; +} +.or{ + color: #9B9B9B; + background-image:linear-gradient(#979797,#979797),linear-gradient(#979797,#979797); + background-size:45% 1px; + background-position:center left,center right; + background-repeat:no-repeat; +} +.signUpMsg{ + font-size: 12px; + line-height: 17px; text-align: center; - padding: 2em 0em 0em 0em; - color: #007AFF; - font-size: 1.1em; - font-weight: 700; + /*margin-top: auto !important;*/ + margin-bottom: 10px !important; +} +.formMsg{ + font-size: 16px; + line-height: 22px; +} +.signInHead{ + font-size: 14px; + font-weight: bold; +} +.ui.form .field>label { + font-size: 1.05em; + font-weight: 500; +} +.forgetPasswordLink{ + color: #9B9B9B !important; + font-size: 12px; line-height: 17px; + position: absolute; + right: 0; + top: 85px; } - -@media screen and (max-width: 900px) and (min-width: 300px) { - .no-account-sign-up { - text-align: center; - padding: 2em 0em 0em 0em; - color: #007AFF; - font-size: 0.9em; - font-weight: 600; - line-height: 17px; - } - +.forgetPasswordLink:hover, +.forgetPasswordLink:focus{ + color:#024f9d !important; + outline: none; + font-weight:bold; } - -@media screen and (max-width: 900px) and (min-width: 300px) { - .signInLogo { - width:60% !important; - margin-bottom: 2em !important; - } +.textCenter { + text-align: center !important; } - -.margin-top3em { - margin-top:3em !important; +.mb-28{ + margin-bottom: 28px !important; } - -.margin-top2em { - margin-top:2em !important; +.mt-46{ + margin-top: 46px; } - -.signin-contentPadding { - padding: 2em !important; - border: none !important; +.mt-40{ + margin-top: 40px; } - -@media screen and (max-width: 900px) and (min-width: 300px) { - .signin-contentPadding { - padding: 1em !important; - } +.mt-8 { + margin-top: 8px !important; } - -@media screen and (max-width: 900px) and (min-width: 300px) { - .ui.button.buttonResizeClass { - font-size: 0.9rem !important; - } +.mb-18 { + margin-bottom: 18px !important; } - -@media screen and (max-width: 900px) and (min-width: 300px) { - .ui.form.pre-signin .field { - clear: both; - margin: 0 0 2em !important; - } - +.mt-90{ + margin-top: 90px; } - -@media screen and (max-width: 900px) and (min-width: 300px) { - .signInButtonAlign{ - margin-bottom:2em !important; - } +.mt-65{ + margin-top: 65px !important; } - -@media screen and (max-width: 900px) and (min-width: 300px) { - .signInGridAlign { - padding: 10px 0px 0px 0px !important; - } +.mt-127{ + margin-top: 127px; } - -@media screen and (max-width: 900px) and (min-width: 300px) { - .page-login .ui.container { - margin-left: 0em!important; - margin-right: 0em!important; - } +.mt-27{ + margin-top: 27px; +} +.mb-36 { + margin-bottom: 36px !important; +} +.mt-36{ + margin-top: 36px !important; +} +.mb-30 { + margin-bottom: 30px !important; +} +.mt-30{ + margin-top: 30px !important; +} +.mb-56{ + margin-bottom: 56px; +} +.mt-76{ + margin-top: 76px; +} +.backToLogin { + color: #E76026 !important; + font-size: 14px; + line-height: 19px; + margin-top: 10px; + display: block; +} +.logo-image{ + max-width: 100% !important; + width: auto !important; + max-height: 56px !important; + margin-top: 20px!important; +} +.button{ + color: #F9F9F9 !important; + font-size: 14px; + line-height: 19px; + background-color:#2CA58D !important; } -@media screen and (max-width: 900px) and (min-width: 300px) { - .signInGridAlign .ui.card { - border: none; - border-radius: 0rem !important; - box-shadow: unset !important; - } -} \ No newline at end of file +.ui.text.success{ + color: #33B17B; +} +.ui.text.warning{ + color: #794b02; +} +.ui.text.error{ + color:#9f3a38; +} +.ui.text.info{ + color:#276f86; +} +.hide{ + display: none !important; +} +i.icon.eye.slash:before { + content: "\f070"; +} +.mt-45{ + margin-top: 45px; +} +a{ + color: #024f9d !important; +} +.registerLink{ + color: #024f9d !important; + font-weight: bold; +} +.registerLink:hover, +.registerLink:focus{ + font-weight: bold; + outline:none; + cursor: pointer; +} +.ui.blue.button{ + box-shadow: 0 0 0 1px #024f9d inset!important; +} +.smsinput{ + letter-spacing: 3px; +} +.ui.form input:not([type]), .ui.form input[type=date], .ui.form input[type=datetime-local], .ui.form input[type=email], .ui.form input[type=file], .ui.form input[type=number], .ui.form input[type=password], .ui.form input[type=search], .ui.form input[type=tel], .ui.form input[type=text], .ui.form input[type=time], .ui.form input[type=url]{ + font-family: inherit !important; +} +.loginupdate .ui.text.warning { + color: #333; +} +button,input,textarea,optgroup,select, +h1, h2, h3, h4, h5, +.ui.header, +.ui.text.container, +.ui.input input, +.ui.list .list>.item .header, +.ui.list>.item .header, +.ui.steps .step .title, +.ui.ordered.steps .step:before, +.ui.ordered.steps .step.completed:before, +.ui.message .header, +.ui.sortable.table thead th:after, +.ui.card>.content>.header, +.ui.cards>.card>.content>.header, +.ui.items>.item>.content>.header, +.ui.statistic>.value, +.ui.statistics .statistic>.value, +.ui.statistic>.label, +.ui.statistics .statistic>.label, +.ui.accordion .title:not(.ui), +.ui.checkbox label, +.ui.modal>.header, +.ui.popup>.header, +.ui.search>.results .result .title, +.ui.search>.results>.message .header, +.ui.button, +.ui.form input:not([type]), +.ui.form input[type=date], +.ui.form input[type=datetime-local], +.ui.form input[type=email], +.ui.form input[type=file], +.ui.form input[type=number], +.ui.form input[type=password], +.ui.form input[type=search], +.ui.form input[type=tel], +.ui.form input[type=text], +.ui.form input[type=time], +.ui.form input[type=url], +.ui.menu, +.ui.dropdown, +.ui.category.search>.results .category>.name +{ + font-family: inherit; +} +.height-fix{ + min-height:90vh; + display: flex !important; + flex-direction: column; + justify-content: center; +} diff --git a/ansible/artifacts/sunbird/login/resources/css/semantic.min.css b/ansible/artifacts/sunbird/login/resources/css/semantic.min.css index 8b2670a045c8b0ddfd66c951d332b892fb036e22..3c9982667bcb83113e132b99ca8c9359cf49ec36 100644 --- a/ansible/artifacts/sunbird/login/resources/css/semantic.min.css +++ b/ansible/artifacts/sunbird/login/resources/css/semantic.min.css @@ -8,7 +8,7 @@ * http://opensource.org/licenses/MIT * */ -@import url(https://fonts.googleapis.com/css?family=Roboto:400,700,400italic,700italic&subset=latin);@import url(https://fonts.googleapis.com/css?family=Roboto);@import url(https://fonts.googleapis.com/css?family=Roboto:400,700);/*! +/*! * # Semantic UI 2.2.10 - Reset * http://github.com/semantic-org/semantic-ui/ * diff --git a/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.eot b/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.eot new file mode 100644 index 0000000000000000000000000000000000000000..33b2bb80055cc480e797de704925acaba4ba7d7d Binary files /dev/null and b/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.eot differ diff --git a/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.svg b/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.svg new file mode 100644 index 0000000000000000000000000000000000000000..1ee89d4368d31a368817a842f14d53f7a64c3038 --- /dev/null +++ b/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.svg @@ -0,0 +1,565 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"> +<metadata></metadata> +<defs> +<font id="fontawesomeregular" horiz-adv-x="1536" > +<font-face units-per-em="1792" ascent="1536" descent="-256" /> +<missing-glyph horiz-adv-x="448" /> +<glyph unicode=" " horiz-adv-x="448" /> +<glyph unicode="	" horiz-adv-x="448" /> +<glyph unicode=" " horiz-adv-x="448" /> +<glyph unicode="¨" horiz-adv-x="1792" /> +<glyph unicode="©" horiz-adv-x="1792" /> +<glyph unicode="®" horiz-adv-x="1792" /> +<glyph unicode="´" horiz-adv-x="1792" /> +<glyph unicode="Æ" horiz-adv-x="1792" /> +<glyph unicode="Ø" horiz-adv-x="1792" /> +<glyph unicode=" " horiz-adv-x="768" /> +<glyph unicode=" " horiz-adv-x="1537" /> +<glyph unicode=" " horiz-adv-x="768" /> +<glyph unicode=" " horiz-adv-x="1537" /> +<glyph unicode=" " horiz-adv-x="512" /> +<glyph unicode=" " horiz-adv-x="384" /> +<glyph unicode=" " horiz-adv-x="256" /> +<glyph unicode=" " horiz-adv-x="256" /> +<glyph unicode=" " horiz-adv-x="192" /> +<glyph unicode=" " horiz-adv-x="307" /> +<glyph unicode=" " horiz-adv-x="85" /> +<glyph unicode=" " horiz-adv-x="307" /> +<glyph unicode=" " horiz-adv-x="384" /> +<glyph unicode="™" horiz-adv-x="1792" /> +<glyph unicode="∞" horiz-adv-x="1792" /> +<glyph unicode="≠" horiz-adv-x="1792" /> +<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" /> +<glyph unicode="" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " /> +<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z " /> +<glyph unicode="" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" /> +<glyph unicode="" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" /> +<glyph unicode="" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" /> +<glyph unicode="" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" /> +<glyph unicode="" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" /> +<glyph unicode="" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" /> +<glyph unicode="" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" /> +<glyph unicode="" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> +<glyph unicode="" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57 q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -4 -0.5 -13t-0.5 -13q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5 q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" /> +<glyph unicode="" horiz-adv-x="1408" d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142 q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5 t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68.5 -0.5t67.5 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5 t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" /> +<glyph unicode="" horiz-adv-x="1024" d="M0 -126l17 85q6 2 81.5 21.5t111.5 37.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2 t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5 q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" /> +<glyph unicode="" d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1 t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5 t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49 t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" /> +<glyph unicode="" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> +<glyph unicode="" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" /> +<glyph unicode="" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" /> +<glyph unicode="" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" /> +<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" /> +<glyph unicode="" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" /> +<glyph unicode="" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" /> +<glyph unicode="" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" /> +<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" /> +<glyph unicode="" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" /> +<glyph unicode="" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" /> +<glyph unicode="" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" /> +<glyph unicode="" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" /> +<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" /> +<glyph unicode="" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" /> +<glyph unicode="" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " /> +<glyph unicode="" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" /> +<glyph unicode="" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" /> +<glyph unicode="" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " /> +<glyph unicode="" horiz-adv-x="1664" d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45 t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="2048" d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" /> +<glyph unicode="" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960z" /> +<glyph unicode="" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" /> +<glyph unicode="" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" /> +<glyph unicode="" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" /> +<glyph unicode="" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" /> +<glyph unicode="" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" /> +<glyph unicode="" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" /> +<glyph unicode="" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" /> +<glyph unicode="" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" /> +<glyph unicode="" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" /> +<glyph unicode="" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" /> +<glyph unicode="" horiz-adv-x="1024" d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" /> +<glyph unicode="" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" /> +<glyph unicode="" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" /> +<glyph unicode="" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5 t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" /> +<glyph unicode="" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" /> +<glyph unicode="" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" /> +<glyph unicode="" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" /> +<glyph unicode="" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" /> +<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" /> +<glyph unicode="" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" /> +<glyph unicode="" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " /> +<glyph unicode="" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " /> +<glyph unicode="" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" /> +<glyph unicode="" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" /> +<glyph unicode="" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" /> +<glyph unicode="" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" /> +<glyph unicode="" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" /> +<glyph unicode="" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" /> +<glyph unicode="" d="M829 318q0 -76 -58.5 -112.5t-139.5 -36.5q-41 0 -80.5 9.5t-75.5 28.5t-58 53t-22 78q0 46 25 80t65.5 51.5t82 25t84.5 7.5q20 0 31 -2q2 -1 23 -16.5t26 -19t23 -18t24.5 -22t19 -22.5t17 -26t9 -26.5t4.5 -31.5zM755 863q0 -60 -33 -99.5t-92 -39.5q-53 0 -93 42.5 t-57.5 96.5t-17.5 106q0 61 32 104t92 43q53 0 93.5 -45t58 -101t17.5 -107zM861 1120l88 64h-265q-85 0 -161 -32t-127.5 -98t-51.5 -153q0 -93 64.5 -154.5t158.5 -61.5q22 0 43 3q-13 -29 -13 -54q0 -44 40 -94q-175 -12 -257 -63q-47 -29 -75.5 -73t-28.5 -95 q0 -43 18.5 -77.5t48.5 -56.5t69 -37t77.5 -21t76.5 -6q60 0 120.5 15.5t113.5 46t86 82.5t33 117q0 49 -20 89.5t-49 66.5t-58 47.5t-49 44t-20 44.5t15.5 42.5t37.5 39.5t44 42t37.5 59.5t15.5 82.5q0 60 -22.5 99.5t-72.5 90.5h83zM1152 672h128v64h-128v128h-64v-128 h-128v-64h128v-160h64v160zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M735 740q0 -36 32 -70.5t77.5 -68t90.5 -73.5t77 -104t32 -142q0 -90 -48 -173q-72 -122 -211 -179.5t-298 -57.5q-132 0 -246.5 41.5t-171.5 137.5q-37 60 -37 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 42 -47.5 74t-15.5 73q0 36 21 85q-46 -4 -68 -4 q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q77 66 182.5 98t217.5 32h418l-138 -88h-131q74 -63 112 -133t38 -160q0 -72 -24.5 -129.5t-59 -93t-69.5 -65t-59.5 -61.5t-24.5 -66zM589 836q38 0 78 16.5t66 43.5q53 57 53 159q0 58 -17 125t-48.5 129.5 t-84.5 103.5t-117 41q-42 0 -82.5 -19.5t-65.5 -52.5q-47 -59 -47 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26zM591 -37q58 0 111.5 13t99 39t73 73t27.5 109q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -48 2 q-53 0 -105 -7t-107.5 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -70 35 -123.5t91.5 -83t119 -44t127.5 -14.5zM1401 839h213v-108h-213v-219h-105v219h-212v108h212v217h105v-217z" /> +<glyph unicode="" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" /> +<glyph unicode="" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" /> +<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" /> +<glyph unicode="" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" /> +<glyph unicode="" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" /> +<glyph unicode="" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" /> +<glyph unicode="" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5 t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704 q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" /> +<glyph unicode="" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" /> +<glyph unicode="" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" /> +<glyph unicode="" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" /> +<glyph unicode="" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" /> +<glyph unicode="" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1792" d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5 t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5 q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" /> +<glyph unicode="" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" /> +<glyph unicode="" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" /> +<glyph unicode="" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> +<glyph unicode="" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" /> +<glyph unicode="" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" /> +<glyph unicode="" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" /> +<glyph unicode="" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" /> +<glyph unicode="" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" /> +<glyph unicode="" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" /> +<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" /> +<glyph unicode="" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" /> +<glyph unicode="" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" /> +<glyph unicode="" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" /> +<glyph unicode="" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" /> +<glyph unicode="" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" /> +<glyph unicode="" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" /> +<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> +<glyph unicode="" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" /> +<glyph unicode="" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" /> +<glyph unicode="" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" /> +<glyph unicode="" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" /> +<glyph unicode="" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" /> +<glyph unicode="" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" /> +<glyph unicode="" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" /> +<glyph unicode="" d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" /> +<glyph unicode="" d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" /> +<glyph unicode="" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" /> +<glyph unicode="" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" /> +<glyph unicode="" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" /> +<glyph unicode="" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" /> +<glyph unicode="" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" /> +<glyph unicode="" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" /> +<glyph unicode="" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" /> +<glyph unicode="" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" /> +<glyph unicode="" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" /> +<glyph unicode="" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" /> +<glyph unicode="" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14 q78 2 134 29z" /> +<glyph unicode="" d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" /> +<glyph unicode="" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" /> +<glyph unicode="" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" /> +<glyph unicode="" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" /> +<glyph unicode="" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" /> +<glyph unicode="" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324 l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" /> +<glyph unicode="" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" /> +<glyph unicode="" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" /> +<glyph unicode="" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " /> +<glyph unicode="" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" /> +<glyph unicode="" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="2176" d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40 t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29 q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9 q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102 t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69 q-46 32 -141.5 92.5t-142.5 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13 t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5 t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21 t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286 t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273 t273 -182.5t331.5 -68z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" /> +<glyph unicode="" horiz-adv-x="2048" d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" /> +<glyph unicode="" horiz-adv-x="2304" d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" /> +<glyph unicode="" d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" /> +<glyph unicode="" horiz-adv-x="1280" d="M981 197q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -49 2q-53 0 -104.5 -7t-107 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -56 23.5 -102t61 -75.5t87 -50t100 -29t101.5 -8.5q58 0 111.5 13t99 39t73 73t27.5 109zM864 1055 q0 59 -17 125.5t-48 129t-84 103.5t-117 41q-42 0 -82.5 -19.5t-66.5 -52.5q-46 -59 -46 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26q37 0 77.5 16.5t65.5 43.5q53 56 53 159zM752 1536h417l-137 -88h-132q75 -63 113 -133t38 -160q0 -72 -24.5 -129.5 t-59.5 -93t-69.5 -65t-59 -61.5t-24.5 -66q0 -36 32 -70.5t77 -68t90.5 -73.5t77.5 -104t32 -142q0 -91 -49 -173q-71 -122 -209.5 -179.5t-298.5 -57.5q-132 0 -246.5 41.5t-172.5 137.5q-36 59 -36 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 41 -47.5 73.5 t-15.5 73.5q0 40 21 85q-46 -4 -68 -4q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q76 66 182 98t218 32z" /> +<glyph unicode="" horiz-adv-x="2304" d="M1509 107q0 -14 -12 -29q-52 -59 -147.5 -83t-196.5 -24q-252 0 -346 107q-12 15 -12 29q0 17 12 29.5t29 12.5q15 0 30 -12q58 -49 125.5 -66t159.5 -17t160 17t127 66q15 12 30 12q17 0 29 -12.5t12 -29.5zM978 498q0 -61 -43 -104t-104 -43q-60 0 -104.5 43.5 t-44.5 103.5q0 61 44 105t105 44t104 -44t43 -105zM1622 498q0 -61 -43 -104t-104 -43q-60 0 -104.5 43.5t-44.5 103.5q0 61 44 105t105 44t104 -44t43 -105zM415 793q-39 27 -88 27q-66 0 -113 -47t-47 -113q0 -72 54 -121q53 141 194 254zM2020 382q0 222 -249 387 q-128 85 -291.5 126.5t-331.5 41.5t-331.5 -41.5t-292.5 -126.5q-249 -165 -249 -387t249 -387q129 -85 292.5 -126.5t331.5 -41.5t331.5 41.5t291.5 126.5q249 165 249 387zM2137 660q0 66 -47 113t-113 47q-50 0 -93 -30q140 -114 192 -256q61 48 61 126zM1993 1335 q0 49 -34.5 83.5t-82.5 34.5q-49 0 -83.5 -34.5t-34.5 -83.5q0 -48 34.5 -82.5t83.5 -34.5q48 0 82.5 34.5t34.5 82.5zM2220 660q0 -65 -33 -122t-89 -90q5 -35 5 -66q0 -139 -79 -255.5t-208 -201.5q-140 -92 -313.5 -136.5t-354.5 -44.5t-355 44.5t-314 136.5 q-129 85 -208 201.5t-79 255.5q0 36 6 71q-53 33 -83.5 88.5t-30.5 118.5q0 100 71 171.5t172 71.5q91 0 159 -60q265 170 638 177l144 456q10 29 40 29q24 0 384 -90q24 55 74 88t110 33q82 0 141 -59t59 -142t-59 -141.5t-141 -58.5q-83 0 -141.5 58.5t-59.5 140.5 l-339 80l-125 -395q349 -15 603 -179q71 63 163 63q101 0 172 -71.5t71 -171.5z" /> +<glyph unicode="" d="M950 393q7 7 17.5 7t17.5 -7t7 -18t-7 -18q-65 -64 -208 -64h-1h-1q-143 0 -207 64q-8 7 -8 18t8 18q7 7 17.5 7t17.5 -7q49 -51 172 -51h1h1q122 0 173 51zM671 613q0 -37 -26 -64t-63 -27t-63 27t-26 64t26 63t63 26t63 -26t26 -63zM1214 1049q-29 0 -50 21t-21 50 q0 30 21 51t50 21q30 0 51 -21t21 -51q0 -29 -21 -50t-51 -21zM1216 1408q132 0 226 -94t94 -227v-894q0 -133 -94 -227t-226 -94h-896q-132 0 -226 94t-94 227v894q0 133 94 227t226 94h896zM1321 596q35 14 57 45.5t22 70.5q0 51 -36 87.5t-87 36.5q-60 0 -98 -48 q-151 107 -375 115l83 265l206 -49q1 -50 36.5 -85t84.5 -35q50 0 86 35.5t36 85.5t-36 86t-86 36q-36 0 -66 -20.5t-45 -53.5l-227 54q-9 2 -17.5 -2.5t-11.5 -14.5l-95 -302q-224 -4 -381 -113q-36 43 -93 43q-51 0 -87 -36.5t-36 -87.5q0 -37 19.5 -67.5t52.5 -45.5 q-7 -25 -7 -54q0 -98 74 -181.5t201.5 -132t278.5 -48.5q150 0 277.5 48.5t201.5 132t74 181.5q0 27 -6 54zM971 702q37 0 63 -26t26 -63t-26 -64t-63 -27t-63 27t-26 64t26 63t63 26z" /> +<glyph unicode="" d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328 v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" /> +<glyph unicode="" d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123 v-369h123z" /> +<glyph unicode="" d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101 v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="2038" d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14 q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24 q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33 q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5 t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43 q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5 t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13 t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" /> +<glyph unicode="" d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10 q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14 q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14 t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44 q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" /> +<glyph unicode="" d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5 t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5 q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126 t135.5 51q85 0 145 -60.5t60 -145.5z" /> +<glyph unicode="" d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5 q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28 q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11 q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q106 35 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5 q20 0 20 -21v-418z" /> +<glyph unicode="" horiz-adv-x="1792" d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48 l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23 t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128 q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128 q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" /> +<glyph unicode="" d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9 t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9 t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9 t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68t68 28t68 -28l228 -228h368l228 228q28 28 68 28t68 -28t28 -68t-28 -68zM864 1152q0 -93 -65.5 -158.5 t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" horiz-adv-x="1664" d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5 q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819 q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5 t100.5 134t141.5 55.5z" /> +<glyph unicode="" horiz-adv-x="768" d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z " /> +<glyph unicode="" horiz-adv-x="2304" d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67 t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-5 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70 v-400l434 -186q36 -16 57 -48t21 -70z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658 q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204 q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" /> +<glyph unicode="" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5 t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217 t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5 q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89 q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" /> +<glyph unicode="" d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5 q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5 q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z " /> +<glyph unicode="" horiz-adv-x="1792" d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188 l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5 t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1 q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" /> +<glyph unicode="" horiz-adv-x="2048" d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384 q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5 l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5 t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" /> +<glyph unicode="" d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384 q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" /> +<glyph unicode="" d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64 q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37 q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1024" d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" /> +<glyph unicode="" horiz-adv-x="2304" d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11 q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245 q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785 l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242 q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236q0 -11 -8 -19 t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786q-13 2 -22 11t-9 22v899 q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" /> +<glyph unicode="" d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127 t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5 t-103 128v128q0 69 103 128t280 93.5t385 34.5z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197 q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8 q-1 1 -1 2t-0.5 1.5t-0.5 1.5q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4l-3 21q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5t-3.5 -21.5l-4 -21h-4l-2 21 q-2 26 -7 46l-99 438h90v107h-300z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107 h-290v-107h68l189 -272l-194 -283h-68z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" /> +<glyph unicode="" d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400 v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79 q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5 q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" /> +<glyph unicode="" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243 l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" /> +<glyph unicode="" d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406 q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" /> +<glyph unicode="" horiz-adv-x="1792" d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5 t-85 -189.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348q0 222 101 414.5t276.5 317t390.5 155.5v-260q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 q0 230 -145.5 406t-366.5 221v260q215 -31 390.5 -155.5t276.5 -317t101 -414.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" /> +<glyph unicode="" horiz-adv-x="1792" d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" /> +<glyph unicode="" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58 q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47 q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171 v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" /> +<glyph unicode="" d="M825 547l343 588h-150q-21 -39 -63.5 -118.5t-68 -128.5t-59.5 -118.5t-60 -128.5h-3q-21 48 -44.5 97t-52 105.5t-46.5 92t-54 104.5t-49 95h-150l323 -589v-435h134v436zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5 t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153 t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5 q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20 t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5 t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" /> +<glyph unicode="" horiz-adv-x="2048" d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25 q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5 q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109 q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137 l863 639l-478 -797z" /> +<glyph unicode="" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23 t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15 t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2 t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160 q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5 q0 -26 -12 -48t-36 -22z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179 q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" /> +<glyph unicode="" d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256 q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" /> +<glyph unicode="" d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5 t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" /> +<glyph unicode="" d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5 t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5 t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91 q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9 t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323 l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" /> +<glyph unicode="" horiz-adv-x="1792" d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23 zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5 t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" /> +<glyph unicode="" horiz-adv-x="1792" d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1755 1083q37 -37 37 -90t-37 -91l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234l401 400 q38 37 91 37t90 -37z" /> +<glyph unicode="" horiz-adv-x="1792" d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5 t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q3 -2 11 -7 t11 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" /> +<glyph unicode="" horiz-adv-x="1792" d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" /> +<glyph unicode="" d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36 q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q70 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5 t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87 q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19 t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121 q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" /> +<glyph unicode="" horiz-adv-x="1792" d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38 h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1112 1090q0 159 -237 159h-70q-32 0 -59.5 -21.5t-34.5 -52.5l-63 -276q-2 -5 -2 -16q0 -24 17 -39.5t41 -15.5h53q69 0 128.5 13t112.5 41t83.5 81.5t30.5 126.5zM1716 938q0 -265 -220 -428q-219 -161 -612 -161h-61q-32 0 -59 -21.5t-34 -52.5l-73 -316 q-8 -36 -40.5 -61.5t-69.5 -25.5h-213q-31 0 -53 20t-22 51q0 10 13 65h151q34 0 64 23.5t38 56.5l73 316q8 33 37.5 57t63.5 24h61q390 0 607 160t217 421q0 129 -51 207q183 -92 183 -335zM1533 1123q0 -264 -221 -428q-218 -161 -612 -161h-60q-32 0 -59.5 -22t-34.5 -53 l-73 -315q-8 -36 -40 -61.5t-69 -25.5h-214q-31 0 -52.5 19.5t-21.5 51.5q0 8 2 20l300 1301q8 36 40.5 61.5t69.5 25.5h444q68 0 125 -4t120.5 -15t113.5 -30t96.5 -50.5t77.5 -74t49.5 -103.5t18.5 -136z" /> +<glyph unicode="" horiz-adv-x="1792" d="M602 949q19 -61 31 -123.5t17 -141.5t-14 -159t-62 -145q-21 81 -67 157t-95.5 127t-99 90.5t-78.5 57.5t-33 19q-62 34 -81.5 100t14.5 128t101 81.5t129 -14.5q138 -83 238 -177zM927 1236q11 -25 20.5 -46t36.5 -100.5t42.5 -150.5t25.5 -179.5t0 -205.5t-47.5 -209.5 t-105.5 -208.5q-51 -72 -138 -72q-54 0 -98 31q-57 40 -69 109t28 127q60 85 81 195t13 199.5t-32 180.5t-39 128t-22 52q-31 63 -8.5 129.5t85.5 97.5q34 17 75 17q47 0 88.5 -25t63.5 -69zM1248 567q-17 -160 -72 -311q-17 131 -63 246q25 174 -5 361q-27 178 -94 342 q114 -90 212 -211q9 -37 15 -80q26 -179 7 -347zM1520 1440q9 -17 23.5 -49.5t43.5 -117.5t50.5 -178t34 -227.5t5 -269t-47 -300t-112.5 -323.5q-22 -48 -66 -75.5t-95 -27.5q-39 0 -74 16q-67 31 -92.5 100t4.5 136q58 126 90 257.5t37.5 239.5t-3.5 213.5t-26.5 180.5 t-38.5 138.5t-32.5 90t-15.5 32.5q-34 65 -11.5 135.5t87.5 104.5q37 20 81 20q49 0 91.5 -25.5t66.5 -70.5z" /> +<glyph unicode="" horiz-adv-x="2304" d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27 q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128 q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="2304" d="M671 603h-13q-47 0 -47 -32q0 -22 20 -22q17 0 28 15t12 39zM1066 639h62v3q1 4 0.5 6.5t-1 7t-2 8t-4.5 6.5t-7.5 5t-11.5 2q-28 0 -36 -38zM1606 603h-12q-48 0 -48 -32q0 -22 20 -22q17 0 28 15t12 39zM1925 629q0 41 -30 41q-19 0 -31 -20t-12 -51q0 -42 28 -42 q20 0 32.5 20t12.5 52zM480 770h87l-44 -262h-56l32 201l-71 -201h-39l-4 200l-34 -200h-53l44 262h81l2 -163zM733 663q0 -6 -4 -42q-16 -101 -17 -113h-47l1 22q-20 -26 -58 -26q-23 0 -37.5 16t-14.5 42q0 39 26 60.5t73 21.5q14 0 23 -1q0 3 0.5 5.5t1 4.5t0.5 3 q0 20 -36 20q-29 0 -59 -10q0 4 7 48q38 11 67 11q74 0 74 -62zM889 721l-8 -49q-22 3 -41 3q-27 0 -27 -17q0 -8 4.5 -12t21.5 -11q40 -19 40 -60q0 -72 -87 -71q-34 0 -58 6q0 2 7 49q29 -8 51 -8q32 0 32 19q0 7 -4.5 11.5t-21.5 12.5q-43 20 -43 59q0 72 84 72 q30 0 50 -4zM977 721h28l-7 -52h-29q-2 -17 -6.5 -40.5t-7 -38.5t-2.5 -18q0 -16 19 -16q8 0 16 2l-8 -47q-21 -7 -40 -7q-43 0 -45 47q0 12 8 56q3 20 25 146h55zM1180 648q0 -23 -7 -52h-111q-3 -22 10 -33t38 -11q30 0 58 14l-9 -54q-30 -8 -57 -8q-95 0 -95 95 q0 55 27.5 90.5t69.5 35.5q35 0 55.5 -21t20.5 -56zM1319 722q-13 -23 -22 -62q-22 2 -31 -24t-25 -128h-56l3 14q22 130 29 199h51l-3 -33q14 21 25.5 29.5t28.5 4.5zM1506 763l-9 -57q-28 14 -50 14q-31 0 -51 -27.5t-20 -70.5q0 -30 13.5 -47t38.5 -17q21 0 48 13 l-10 -59q-28 -8 -50 -8q-45 0 -71.5 30.5t-26.5 82.5q0 70 35.5 114.5t91.5 44.5q26 0 61 -13zM1668 663q0 -18 -4 -42q-13 -79 -17 -113h-46l1 22q-20 -26 -59 -26q-23 0 -37 16t-14 42q0 39 25.5 60.5t72.5 21.5q15 0 23 -1q2 7 2 13q0 20 -36 20q-29 0 -59 -10q0 4 8 48 q38 11 67 11q73 0 73 -62zM1809 722q-14 -24 -21 -62q-23 2 -31.5 -23t-25.5 -129h-56l3 14q19 104 29 199h52q0 -11 -4 -33q15 21 26.5 29.5t27.5 4.5zM1950 770h56l-43 -262h-53l3 19q-23 -23 -52 -23q-31 0 -49.5 24t-18.5 64q0 53 27.5 92t64.5 39q31 0 53 -29z M2061 640q0 148 -72.5 273t-198 198t-273.5 73q-181 0 -328 -110q127 -116 171 -284h-50q-44 150 -158 253q-114 -103 -158 -253h-50q44 168 171 284q-147 110 -328 110q-148 0 -273.5 -73t-198 -198t-72.5 -273t72.5 -273t198 -198t273.5 -73q181 0 328 110 q-120 111 -165 264h50q46 -138 152 -233q106 95 152 233h50q-45 -153 -165 -264q147 -110 328 -110q148 0 273.5 73t198 198t72.5 273zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="2304" d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42 q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604 v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569 q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73 t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" /> +<glyph unicode="" horiz-adv-x="2304" d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260 l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279 v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040 q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168 q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5 t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21 h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5 t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" /> +<glyph unicode="" horiz-adv-x="2304" d="M322 689h-15q-19 0 -19 18q0 28 19 85q5 15 15 19.5t28 4.5q77 0 77 -49q0 -41 -30.5 -59.5t-74.5 -18.5zM664 528q-47 0 -47 29q0 62 123 62l3 -3q-5 -88 -79 -88zM1438 687h-15q-19 0 -19 19q0 28 19 85q5 15 14.5 19t28.5 4q77 0 77 -49q0 -41 -30.5 -59.5 t-74.5 -18.5zM1780 527q-47 0 -47 30q0 62 123 62l3 -3q-5 -89 -79 -89zM373 894h-128q-8 0 -14.5 -4t-8.5 -7.5t-7 -12.5q-3 -7 -45 -190t-42 -192q0 -7 5.5 -12.5t13.5 -5.5h62q25 0 32.5 34.5l15 69t32.5 34.5q47 0 87.5 7.5t80.5 24.5t63.5 52.5t23.5 84.5 q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM719 798q-38 0 -74 -6q-2 0 -8.5 -1t-9 -1.5l-7.5 -1.5t-7.5 -2t-6.5 -3t-6.5 -4t-5 -5t-4.5 -7t-4 -9q-9 -29 -9 -39t9 -10q5 0 21.5 5t19.5 6q30 8 58 8q74 0 74 -36q0 -11 -10 -14q-8 -2 -18 -3t-21.5 -1.5t-17.5 -1.5 q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5q0 -38 26 -59.5t64 -21.5q24 0 45.5 6.5t33 13t38.5 23.5q-3 -7 -3 -15t5.5 -13.5t12.5 -5.5h56q1 1 7 3.5t7.5 3.5t5 3.5t5 5.5t2.5 8l45 194q4 13 4 30q0 81 -145 81zM1247 793h-74q-22 0 -39 -23q-5 -7 -29.5 -51 t-46.5 -81.5t-26 -38.5l-5 4q0 77 -27 166q-1 5 -3.5 8.5t-6 6.5t-6.5 5t-8.5 3t-8.5 1.5t-9.5 1t-9 0.5h-10h-8.5q-38 0 -38 -21l1 -5q5 -53 25 -151t25 -143q2 -16 2 -24q0 -19 -30.5 -61.5t-30.5 -58.5q0 -13 40 -13q61 0 76 25l245 415q10 20 10 26q0 9 -8 9zM1489 892 h-129q-18 0 -29 -23q-6 -13 -46.5 -191.5t-40.5 -190.5q0 -20 43 -20h7.5h9h9t9.5 1t8.5 2t8.5 3t6.5 4.5t5.5 6t3 8.5l21 91q2 10 10.5 17t19.5 7q47 0 87.5 7t80.5 24.5t63.5 52.5t23.5 84q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM1835 798q-26 0 -74 -6 q-38 -6 -48 -16q-7 -8 -11 -19q-8 -24 -8 -39q0 -10 8 -10q1 0 41 12q30 8 58 8q74 0 74 -36q0 -12 -10 -14q-4 -1 -57 -7q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5t26 -58.5t64 -21.5q24 0 45 6t34 13t38 24q-3 -15 -3 -16q0 -5 2 -8.5t6.5 -5.5t8 -3.5 t10.5 -2t9.5 -0.5h9.5h8q42 0 48 25l45 194q3 15 3 31q0 81 -145 81zM2157 889h-55q-25 0 -33 -40q-10 -44 -36.5 -167t-42.5 -190v-5q0 -16 16 -18h1h57q10 0 18.5 6.5t10.5 16.5l83 374h-1l1 5q0 7 -5.5 12.5t-13.5 5.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048 q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="2304" d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109 q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118 q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151 q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31 q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5 l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5 l418 363q10 8 23.5 7t21.5 -11z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128 q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161 q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" /> +<glyph unicode="" horiz-adv-x="1408" d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704 q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167 q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5 t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53 q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24 t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61 t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10 t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5 t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11t55.5 -11t52.5 -38q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5t47 37.5 q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-35 0 -55.5 11t-52.5 38q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38t-58 27 t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448h256v448 h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51 t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" /> +<glyph unicode="" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" /> +<glyph unicode="" horiz-adv-x="1792" d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9 t9 -23z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20 q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50 t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1 q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" /> +<glyph unicode="" d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73 q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110 q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5 t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5 t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5 t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" /> +<glyph unicode="" horiz-adv-x="2304" d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94 q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469 q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400 q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" /> +<glyph unicode="" d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5 h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327 q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5 q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" /> +<glyph unicode="" horiz-adv-x="1280" d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q18 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119 t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5 t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14 q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88 q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5 t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206 q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307 t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14 t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" /> +<glyph unicode="" d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5 t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" /> +<glyph unicode="" d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55 q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410 q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" /> +<glyph unicode="" d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" /> +<glyph unicode="" horiz-adv-x="2048" d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335 q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5 q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360q2 0 4.5 -1t5.5 -2.5l5 -2.5l188 199v347l-187 194 q-13 -8 -29 -10zM986 1438h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13 zM552 226h402l64 66l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224 l213 -225zM1023 946l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196 l-48 -227l130 227h-82zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" /> +<glyph unicode="" d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" /> +<glyph unicode="" d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384 q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021 q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25 q209 0 374 -102q172 107 374 102z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101 q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284 q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" /> +<glyph unicode="" d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34 l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114 v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378 v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51 h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5 t-43 -34t-16.5 -53.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832 q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126.5t-103.5 132.5t-108.5 126t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5 t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113 t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5 q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" /> +<glyph unicode="" horiz-adv-x="1664" d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" /> +<glyph unicode="" horiz-adv-x="2048" d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20 l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83 q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314 v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" /> +<glyph unicode="" d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14 t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5 q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31 t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" /> +<glyph unicode="" horiz-adv-x="2304" d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5 t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105 l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226 t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" /> +<glyph unicode="" d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12 q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384 q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5 t158.5 -65.5t65.5 -158.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221 q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124 t127 -344z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292 q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 1504q0 14 9 23t23 9h416q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-419 -420q87 -104 129.5 -236.5t30.5 -276.5q-22 -250 -200.5 -431t-428.5 -206q-163 -17 -314 39.5t-256.5 162t-162 256.5t-39.5 314q25 250 206 428.5 t431 200.5q144 12 276.5 -30.5t236.5 -129.5l419 419h-261q-14 0 -23 9t-9 23v64zM704 -128q117 0 223.5 45.5t184 123t123 184t45.5 223.5t-45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123 t223.5 -45.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5 t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> +<glyph unicode="" d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9 t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5 t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23 t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391 q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391 q0 -226 -154 -391q103 -57 218 -57z" /> +<glyph unicode="" horiz-adv-x="1920" d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230 q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9 t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128 q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -29 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" /> +<glyph unicode="" horiz-adv-x="2048" d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23 t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9 t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5 t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1728 1536q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-229 -230l156 -156q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-156 157l-99 -100q87 -104 129.5 -236.5t30.5 -276.5q-22 -250 -200.5 -431t-428.5 -206q-163 -17 -314 39.5 t-256.5 162t-162 256.5t-39.5 314q25 250 206 428.5t431 200.5q144 12 276.5 -30.5t236.5 -129.5l99 99l-156 156q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l156 -156l229 229h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM1280 448q0 117 -45.5 223.5t-123 184t-184 123 t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22 t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5 t131.5 -316.5t316.5 -131.5z" /> +<glyph unicode="" horiz-adv-x="2048" d="M2029 685q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-131q-12 -119 -67 -226t-139 -183.5t-196.5 -121.5t-234.5 -45q-180 0 -330.5 91t-234.5 247 t-74 337q8 162 94 300t226.5 219.5t302.5 85.5q166 4 310.5 -71.5t235.5 -208.5t107 -296h131v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM640 128q104 0 198.5 40.5t163.5 109.5t109.5 163.5 t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" /> +<glyph unicode="" horiz-adv-x="1280" d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5 t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" /> +<glyph unicode="" horiz-adv-x="1280" d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5 l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5 q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" /> +<glyph unicode="" d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5 t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233 l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" /> +<glyph unicode="" horiz-adv-x="1792" d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216 q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" /> +<glyph unicode="" horiz-adv-x="2048" d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5 t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" /> +<glyph unicode="" horiz-adv-x="2048" d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136 q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69 t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" /> +<glyph unicode="" horiz-adv-x="2048" d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704 q-26 0 -45 -19t-19 -45v-384h1152z" /> +<glyph unicode="" d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" /> +<glyph unicode="" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56 t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" /> +<glyph unicode="" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47 t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" /> +<glyph unicode="" horiz-adv-x="1792" d="M1792 204v-209h-642v209h134v926h-6l-314 -1135h-243l-310 1135h-8v-926h135v-209h-538v209h69q21 0 43 19.5t22 37.5v881q0 18 -22 40t-43 22h-69v209h672l221 -821h6l223 821h670v-209h-71q-19 0 -41 -22t-22 -40v-881q0 -18 21.5 -37.5t41.5 -19.5h71z" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +<glyph unicode="" horiz-adv-x="1792" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.ttf b/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ed9372f8ea0fbaa04f42630a48887e4b38945345 Binary files /dev/null and b/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.ttf differ diff --git a/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.woff b/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.woff new file mode 100644 index 0000000000000000000000000000000000000000..8b280b98fa2fa261aa4b0f8fd061f772073ef83e Binary files /dev/null and b/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.woff differ diff --git a/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.woff2 b/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3311d585145b1cc1b9581e914acbb32d8542b4f5 Binary files /dev/null and b/ansible/artifacts/sunbird/login/resources/css/themes/default/assets/fonts/icons.woff2 differ diff --git a/ansible/artifacts/sunbird/login/resources/img/bg.svg b/ansible/artifacts/sunbird/login/resources/img/bg.svg new file mode 100644 index 0000000000000000000000000000000000000000..c5d85d89205428fc0410cfda65870a113645dc8e --- /dev/null +++ b/ansible/artifacts/sunbird/login/resources/img/bg.svg @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="1280px" height="720px" viewBox="0 0 1280 720" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 51.3 (57544) - http://www.bohemiancoding.com/sketch --> + <title>bg</title> + <desc>Created with Sketch.</desc> + <defs> + <rect id="path-1" x="61" y="19" width="1635" height="920"></rect> + <pattern id="pattern-2" width="14.4" height="14.4" x="46.6" y="4.6" patternUnits="userSpaceOnUse"> + <use xlink:href="#image-3" transform="scale(0.3,0.3)"></use> + </pattern> + <image id="image-3" width="48" height="48" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAEDWlDQ1BJQ0MgUHJvZmlsZQAAOI2NVV1oHFUUPrtzZyMkzlNsNIV0qD8NJQ2TVjShtLp/3d02bpZJNtoi6GT27s6Yyc44M7v9oU9FUHwx6psUxL+3gCAo9Q/bPrQvlQol2tQgKD60+INQ6Ium65k7M5lpurHeZe58853vnnvuuWfvBei5qliWkRQBFpquLRcy4nOHj4g9K5CEh6AXBqFXUR0rXalMAjZPC3e1W99Dwntf2dXd/p+tt0YdFSBxH2Kz5qgLiI8B8KdVy3YBevqRHz/qWh72Yui3MUDEL3q44WPXw3M+fo1pZuQs4tOIBVVTaoiXEI/MxfhGDPsxsNZfoE1q66ro5aJim3XdoLFw72H+n23BaIXzbcOnz5mfPoTvYVz7KzUl5+FRxEuqkp9G/Ajia219thzg25abkRE/BpDc3pqvphHvRFys2weqvp+krbWKIX7nhDbzLOItiM8358pTwdirqpPFnMF2xLc1WvLyOwTAibpbmvHHcvttU57y5+XqNZrLe3lE/Pq8eUj2fXKfOe3pfOjzhJYtB/yll5SDFcSDiH+hRkH25+L+sdxKEAMZahrlSX8ukqMOWy/jXW2m6M9LDBc31B9LFuv6gVKg/0Szi3KAr1kGq1GMjU/aLbnq6/lRxc4XfJ98hTargX++DbMJBSiYMIe9Ck1YAxFkKEAG3xbYaKmDDgYyFK0UGYpfoWYXG+fAPPI6tJnNwb7ClP7IyF+D+bjOtCpkhz6CFrIa/I6sFtNl8auFXGMTP34sNwI/JhkgEtmDz14ySfaRcTIBInmKPE32kxyyE2Tv+thKbEVePDfW/byMM1Kmm0XdObS7oGD/MypMXFPXrCwOtoYjyyn7BV29/MZfsVzpLDdRtuIZnbpXzvlf+ev8MvYr/Gqk4H/kV/G3csdazLuyTMPsbFhzd1UabQbjFvDRmcWJxR3zcfHkVw9GfpbJmeev9F08WW8uDkaslwX6avlWGU6NRKz0g/SHtCy9J30o/ca9zX3Kfc19zn3BXQKRO8ud477hLnAfc1/G9mrzGlrfexZ5GLdn6ZZrrEohI2wVHhZywjbhUWEy8icMCGNCUdiBlq3r+xafL549HQ5jH+an+1y+LlYBifuxAvRN/lVVVOlwlCkdVm9NOL5BE4wkQ2SMlDZU97hX86EilU/lUmkQUztTE6mx1EEPh7OmdqBtAvv8HdWpbrJS6tJj3n0CWdM6busNzRV3S9KTYhqvNiqWmuroiKgYhshMjmhTh9ptWhsF7970j/SbMrsPE1suR5z7DMC+P/Hs+y7ijrQAlhyAgccjbhjPygfeBTjzhNqy28EdkUh8C+DU9+z2v/oyeH791OncxHOs5y2AtTc7nb/f73TWPkD/qwBnjX8BoJ98VVBg/m8AAAFFSURBVGgF7djbDYMwDAXQBjEMYqyqY1WMxTppLiJIQIA8ariWkp8IPuweO60am67r7MstY8wwjuPH7dMz3uUua63p+/7r9rePIRW/9QmQzCV9ub0YgSIgzhxvQkjFb1EZBAdEKolkfJTqtnb7bv/zOJm58moRE0AzYgFoRawAGhE7gDZEEKAJcQjQgjgFaEBcAtgRUQBmRDSAFZEEYEQkA9gQWQAmRDaABVEEYEAUAx5H4EaGOyw+SMl66mbXzNOD4k6gCPNUY/CFwF1YOn5zRxJJRINqaUbUuZA/79sd3wm3xIdbdS60rXzo2XVCbO60/HxKJgFKKv4CkEziuyKBWAE0InYAbYggQBPiEKAFcQrQgLgEsCOiAMyIaAArIgnAiEgGsCGyAEyIbAALogjAgCgGPI7AX9w6F3JtqHMhnMWLFSrSD9jOnakVHpZYAAAAAElFTkSuQmCC"></image> + <linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="linearGradient-4"> + <stop stop-color="#35A0EF" offset="0%"></stop> + <stop stop-color="#005DA2" offset="100%"></stop> + </linearGradient> + <pattern id="pattern-5" width="21.8014706" height="21.8014706" x="732.198529" y="-21.8014706" patternUnits="userSpaceOnUse"> + <use xlink:href="#image-6" transform="scale(0.454197304,0.454197304)"></use> + </pattern> + <image id="image-6" width="48" height="48" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAEDWlDQ1BJQ0MgUHJvZmlsZQAAOI2NVV1oHFUUPrtzZyMkzlNsNIV0qD8NJQ2TVjShtLp/3d02bpZJNtoi6GT27s6Yyc44M7v9oU9FUHwx6psUxL+3gCAo9Q/bPrQvlQol2tQgKD60+INQ6Ium65k7M5lpurHeZe58853vnnvuuWfvBei5qliWkRQBFpquLRcy4nOHj4g9K5CEh6AXBqFXUR0rXalMAjZPC3e1W99Dwntf2dXd/p+tt0YdFSBxH2Kz5qgLiI8B8KdVy3YBevqRHz/qWh72Yui3MUDEL3q44WPXw3M+fo1pZuQs4tOIBVVTaoiXEI/MxfhGDPsxsNZfoE1q66ro5aJim3XdoLFw72H+n23BaIXzbcOnz5mfPoTvYVz7KzUl5+FRxEuqkp9G/Ajia219thzg25abkRE/BpDc3pqvphHvRFys2weqvp+krbWKIX7nhDbzLOItiM8358pTwdirqpPFnMF2xLc1WvLyOwTAibpbmvHHcvttU57y5+XqNZrLe3lE/Pq8eUj2fXKfOe3pfOjzhJYtB/yll5SDFcSDiH+hRkH25+L+sdxKEAMZahrlSX8ukqMOWy/jXW2m6M9LDBc31B9LFuv6gVKg/0Szi3KAr1kGq1GMjU/aLbnq6/lRxc4XfJ98hTargX++DbMJBSiYMIe9Ck1YAxFkKEAG3xbYaKmDDgYyFK0UGYpfoWYXG+fAPPI6tJnNwb7ClP7IyF+D+bjOtCpkhz6CFrIa/I6sFtNl8auFXGMTP34sNwI/JhkgEtmDz14ySfaRcTIBInmKPE32kxyyE2Tv+thKbEVePDfW/byMM1Kmm0XdObS7oGD/MypMXFPXrCwOtoYjyyn7BV29/MZfsVzpLDdRtuIZnbpXzvlf+ev8MvYr/Gqk4H/kV/G3csdazLuyTMPsbFhzd1UabQbjFvDRmcWJxR3zcfHkVw9GfpbJmeev9F08WW8uDkaslwX6avlWGU6NRKz0g/SHtCy9J30o/ca9zX3Kfc19zn3BXQKRO8ud477hLnAfc1/G9mrzGlrfexZ5GLdn6ZZrrEohI2wVHhZywjbhUWEy8icMCGNCUdiBlq3r+xafL549HQ5jH+an+1y+LlYBifuxAvRN/lVVVOlwlCkdVm9NOL5BE4wkQ2SMlDZU97hX86EilU/lUmkQUztTE6mx1EEPh7OmdqBtAvv8HdWpbrJS6tJj3n0CWdM6busNzRV3S9KTYhqvNiqWmuroiKgYhshMjmhTh9ptWhsF7970j/SbMrsPE1suR5z7DMC+P/Hs+y7ijrQAlhyAgccjbhjPygfeBTjzhNqy28EdkUh8C+DU9+z2v/oyeH791OncxHOs5y2AtTc7nb/f73TWPkD/qwBnjX8BoJ98VVBg/m8AAAFFSURBVGgF7djbDYMwDAXQBjEMYqyqY1WMxTppLiJIQIA8ariWkp8IPuweO60am67r7MstY8wwjuPH7dMz3uUua63p+/7r9rePIRW/9QmQzCV9ub0YgSIgzhxvQkjFb1EZBAdEKolkfJTqtnb7bv/zOJm58moRE0AzYgFoRawAGhE7gDZEEKAJcQjQgjgFaEBcAtgRUQBmRDSAFZEEYEQkA9gQWQAmRDaABVEEYEAUAx5H4EaGOyw+SMl66mbXzNOD4k6gCPNUY/CFwF1YOn5zRxJJRINqaUbUuZA/79sd3wm3xIdbdS60rXzo2XVCbO60/HxKJgFKKv4CkEziuyKBWAE0InYAbYggQBPiEKAFcQrQgLgEsCOiAMyIaAArIgnAiEgGsCGyAEyIbAALogjAgCgGPI7AX9w6F3JtqHMhnMWLFSrSD9jOnakVHpZYAAAAAElFTkSuQmCC"></image> + </defs> + <g id="bg" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <rect fill="#FFFFFF" x="0" y="0" width="1280" height="720"></rect> + <g id="Group" transform="translate(-278.000000, -19.000000)"> + <g id="Rectangle-Copy"> + <use fill-opacity="0.06" fill="url(#pattern-2)" style="mix-blend-mode: multiply;" xlink:href="#path-1"></use> + <use fill="#FFFFFF" xlink:href="#path-1"></use> + </g> + <circle id="Oval-3" fill="#2CA58D" fill-rule="nonzero" cx="449" cy="926" r="449"></circle> + <path d="M1841,886.403544 L1841,0 L1126.10151,0 C1051.81862,76.0198684 1005.9118,153.227547 988.381039,231.623037 C962.084898,349.216271 1014.67718,441.420056 1014.67718,537.632702 C1014.67718,633.845348 706.402823,686.851389 760.332198,855.22352 C796.285114,967.471607 1156.50771,977.864948 1841,886.403544 Z" id="Path-2" fill="url(#linearGradient-4)" fill-rule="nonzero"></path> + <path d="M1841,886.403544 L1841,0 L1126.10151,0 C1051.81862,76.0198684 1005.9118,153.227547 988.381039,231.623037 C962.084898,349.216271 1014.67718,441.420056 1014.67718,537.632702 C1014.67718,633.845348 706.402823,686.851389 760.332198,855.22352 C796.285114,967.471607 1156.50771,977.864948 1841,886.403544 Z" id="Path-2-Copy" fill="url(#pattern-5)" fill-rule="nonzero" opacity="0.400000006"></path> + </g> + </g> +</svg> \ No newline at end of file diff --git a/ansible/artifacts/sunbird/login/resources/img/diksha_gov_logo.svg b/ansible/artifacts/sunbird/login/resources/img/diksha_gov_logo.svg new file mode 100644 index 0000000000000000000000000000000000000000..fd3c8c70aeb44a1142ae26d04bf181b8949135b6 --- /dev/null +++ b/ansible/artifacts/sunbird/login/resources/img/diksha_gov_logo.svg @@ -0,0 +1 @@ +<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 85.57 51.99"><defs><style>.cls-1,.cls-145{fill:none;}.cls-2{clip-path:url(#clip-path);}.cls-3{clip-path:url(#clip-path-2);}.cls-4{clip-path:url(#clip-path-3);}.cls-5{clip-path:url(#clip-path-5);}.cls-6{clip-path:url(#clip-path-7);}.cls-7{clip-path:url(#clip-path-9);}.cls-8{clip-path:url(#clip-path-11);}.cls-9{clip-path:url(#clip-path-13);}.cls-10{clip-path:url(#clip-path-15);}.cls-11{clip-path:url(#clip-path-17);}.cls-12{clip-path:url(#clip-path-19);}.cls-13{clip-path:url(#clip-path-21);}.cls-14{clip-path:url(#clip-path-23);}.cls-15{clip-path:url(#clip-path-25);}.cls-16{clip-path:url(#clip-path-27);}.cls-17{clip-path:url(#clip-path-29);}.cls-18{clip-path:url(#clip-path-31);}.cls-19{clip-path:url(#clip-path-33);}.cls-20{clip-path:url(#clip-path-35);}.cls-21{clip-path:url(#clip-path-37);}.cls-22{clip-path:url(#clip-path-39);}.cls-23{clip-path:url(#clip-path-41);}.cls-24{clip-path:url(#clip-path-43);}.cls-25{clip-path:url(#clip-path-45);}.cls-26{clip-path:url(#clip-path-47);}.cls-27{clip-path:url(#clip-path-49);}.cls-28{clip-path:url(#clip-path-51);}.cls-29{clip-path:url(#clip-path-53);}.cls-30{clip-path:url(#clip-path-55);}.cls-31{clip-path:url(#clip-path-57);}.cls-32{clip-path:url(#clip-path-59);}.cls-33{clip-path:url(#clip-path-61);}.cls-34{clip-path:url(#clip-path-63);}.cls-35{clip-path:url(#clip-path-65);}.cls-36{clip-path:url(#clip-path-67);}.cls-37{clip-path:url(#clip-path-69);}.cls-38{clip-path:url(#clip-path-71);}.cls-39{clip-path:url(#clip-path-73);}.cls-40{clip-path:url(#clip-path-75);}.cls-41{clip-path:url(#clip-path-77);}.cls-42{clip-path:url(#clip-path-79);}.cls-43{clip-path:url(#clip-path-81);}.cls-44{clip-path:url(#clip-path-83);}.cls-45{clip-path:url(#clip-path-85);}.cls-46{clip-path:url(#clip-path-87);}.cls-47{clip-path:url(#clip-path-89);}.cls-48{clip-path:url(#clip-path-91);}.cls-49{clip-path:url(#clip-path-93);}.cls-50{clip-path:url(#clip-path-95);}.cls-51{clip-path:url(#clip-path-97);}.cls-52{clip-path:url(#clip-path-99);}.cls-53{clip-path:url(#clip-path-101);}.cls-54{clip-path:url(#clip-path-103);}.cls-55{clip-path:url(#clip-path-105);}.cls-56{clip-path:url(#clip-path-107);}.cls-57{clip-path:url(#clip-path-109);}.cls-58{clip-path:url(#clip-path-111);}.cls-59{clip-path:url(#clip-path-113);}.cls-60{clip-path:url(#clip-path-115);}.cls-61{clip-path:url(#clip-path-117);}.cls-62{clip-path:url(#clip-path-119);}.cls-63{clip-path:url(#clip-path-121);}.cls-64{clip-path:url(#clip-path-123);}.cls-65{clip-path:url(#clip-path-125);}.cls-66{clip-path:url(#clip-path-127);}.cls-67{clip-path:url(#clip-path-129);}.cls-68{clip-path:url(#clip-path-131);}.cls-69{clip-path:url(#clip-path-133);}.cls-70{clip-path:url(#clip-path-135);}.cls-71{clip-path:url(#clip-path-137);}.cls-72{clip-path:url(#clip-path-139);}.cls-73{clip-path:url(#clip-path-141);}.cls-74{clip-path:url(#clip-path-143);}.cls-75{clip-path:url(#clip-path-145);}.cls-76{clip-path:url(#clip-path-147);}.cls-77{clip-path:url(#clip-path-149);}.cls-78{clip-path:url(#clip-path-151);}.cls-79{clip-path:url(#clip-path-153);}.cls-80{clip-path:url(#clip-path-155);}.cls-81{clip-path:url(#clip-path-157);}.cls-82{clip-path:url(#clip-path-159);}.cls-83{clip-path:url(#clip-path-161);}.cls-84{clip-path:url(#clip-path-163);}.cls-85{clip-path:url(#clip-path-165);}.cls-86{clip-path:url(#clip-path-167);}.cls-87{clip-path:url(#clip-path-169);}.cls-88{clip-path:url(#clip-path-171);}.cls-89{clip-path:url(#clip-path-173);}.cls-90{clip-path:url(#clip-path-175);}.cls-91{clip-path:url(#clip-path-177);}.cls-92{clip-path:url(#clip-path-179);}.cls-93{clip-path:url(#clip-path-181);}.cls-94{clip-path:url(#clip-path-183);}.cls-95{clip-path:url(#clip-path-185);}.cls-96{clip-path:url(#clip-path-187);}.cls-97{clip-path:url(#clip-path-189);}.cls-98{clip-path:url(#clip-path-191);}.cls-99{clip-path:url(#clip-path-193);}.cls-100{clip-path:url(#clip-path-195);}.cls-101{clip-path:url(#clip-path-197);}.cls-102{clip-path:url(#clip-path-199);}.cls-103{clip-path:url(#clip-path-201);}.cls-104{clip-path:url(#clip-path-203);}.cls-105{clip-path:url(#clip-path-205);}.cls-106{clip-path:url(#clip-path-207);}.cls-107{clip-path:url(#clip-path-209);}.cls-108{clip-path:url(#clip-path-211);}.cls-109{clip-path:url(#clip-path-213);}.cls-110{clip-path:url(#clip-path-215);}.cls-111{clip-path:url(#clip-path-217);}.cls-112{clip-path:url(#clip-path-219);}.cls-113{clip-path:url(#clip-path-221);}.cls-114{clip-path:url(#clip-path-223);}.cls-115{clip-path:url(#clip-path-225);}.cls-116{clip-path:url(#clip-path-227);}.cls-117{clip-path:url(#clip-path-229);}.cls-118{clip-path:url(#clip-path-231);}.cls-119{clip-path:url(#clip-path-233);}.cls-120{clip-path:url(#clip-path-235);}.cls-121{clip-path:url(#clip-path-237);}.cls-122{clip-path:url(#clip-path-239);}.cls-123{clip-path:url(#clip-path-241);}.cls-124{clip-path:url(#clip-path-243);}.cls-125{clip-path:url(#clip-path-245);}.cls-126{clip-path:url(#clip-path-247);}.cls-127{clip-path:url(#clip-path-249);}.cls-128{clip-path:url(#clip-path-251);}.cls-129{clip-path:url(#clip-path-253);}.cls-130{clip-path:url(#clip-path-255);}.cls-131{clip-path:url(#clip-path-257);}.cls-132{clip-path:url(#clip-path-259);}.cls-133{clip-path:url(#clip-path-261);}.cls-134{clip-path:url(#clip-path-263);}.cls-135{clip-path:url(#clip-path-265);}.cls-136{clip-path:url(#clip-path-267);}.cls-137{clip-path:url(#clip-path-269);}.cls-138{clip-path:url(#clip-path-271);}.cls-139{clip-path:url(#clip-path-273);}.cls-140{clip-path:url(#clip-path-275);}.cls-141{clip-path:url(#clip-path-277);}.cls-142{clip-path:url(#clip-path-279);}.cls-143{clip-path:url(#clip-path-281);}.cls-144{clip-path:url(#clip-path-283);}.cls-145{stroke:#979797;stroke-linecap:square;stroke-miterlimit:10;stroke-width:0.5px;opacity:0.7;}.cls-146{clip-path:url(#clip-path-286);}.cls-147{isolation:isolate;}.cls-148{clip-path:url(#clip-path-288);}.cls-149{clip-path:url(#clip-path-289);}.cls-150{fill:#e55a28;}.cls-151{clip-path:url(#clip-path-291);}.cls-152{fill:#024f9d;}.cls-153{clip-path:url(#clip-path-293);}.cls-154{clip-path:url(#clip-path-295);}.cls-155{clip-path:url(#clip-path-296);}.cls-156{clip-path:url(#clip-path-297);}.cls-157{fill:#008840;}.cls-158{clip-path:url(#clip-path-298);}.cls-159{fill:#005ea3;}.cls-160{clip-path:url(#clip-path-300);}.cls-161{clip-path:url(#clip-path-302);}.cls-162{clip-path:url(#clip-path-303);}.cls-163{clip-path:url(#clip-path-304);}.cls-164{clip-path:url(#clip-path-307);}.cls-165{clip-path:url(#clip-path-308);}.cls-166{clip-path:url(#clip-path-312);}.cls-167{clip-path:url(#clip-path-313);}.cls-168{clip-path:url(#clip-path-317);}.cls-169{clip-path:url(#clip-path-318);}.cls-170{clip-path:url(#clip-path-322);}.cls-171{clip-path:url(#clip-path-323);}.cls-172{clip-path:url(#clip-path-327);}.cls-173{clip-path:url(#clip-path-328);}</style><clipPath id="clip-path" transform="translate(-356.73 -91.29)"><circle class="cls-1" cx="374.41" cy="127.43" r="0.76"/></clipPath><clipPath id="clip-path-2" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="219.71" y="64.28" width="360" height="640"/></clipPath><clipPath id="clip-path-3" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M376.23,127.57c-.52-.06-1-.09-1.16-.09v-.12a16.86,16.86,0,0,0,2.34-.35s0,.08,0,.12a.25.25,0,0,0-.17.27.26.26,0,0,0,.17.26.28.28,0,0,1,0,.09A8.8,8.8,0,0,0,376.23,127.57Zm1.17.34c-.09,0-.19.08-.23.22s0,.26.1.29l0,.09a10.24,10.24,0,0,0-1.11-.48c-.48-.19-.91-.34-1.1-.39a.2.2,0,0,0,0-.11,11.22,11.22,0,0,0,1.15.17,11.65,11.65,0,0,0,1.21.09S377.41,127.87,377.4,127.91Zm-.23.75a.25.25,0,0,0-.27.15.25.25,0,0,0,0,.31l-.07.1a9.31,9.31,0,0,0-.94-.76c-.41-.31-.78-.56-.95-.66a.41.41,0,0,0,.07-.11,10.43,10.43,0,0,0,1.06.46,8.93,8.93,0,0,0,1.15.39Zm-.41.67a.25.25,0,0,0-.31.07c-.09.1-.12.23-.06.3l-.1.08a11.11,11.11,0,0,0-.71-1c-.32-.41-.6-.74-.74-.88l.08-.08c.14.13.49.41.9.72a9.57,9.57,0,0,0,1,.68Zm-.58.53a.25.25,0,0,0-.31,0,.26.26,0,0,0-.15.28l-.11.05a8.28,8.28,0,0,0-.43-1.12,11.29,11.29,0,0,0-.49-1,.3.3,0,0,0,.11-.06,10.14,10.14,0,0,0,.68.93,9.61,9.61,0,0,0,.78.91Zm-.7.37c0-.08-.16-.12-.3-.09s-.22.14-.21.23l-.12,0a9.19,9.19,0,0,0-.12-1.19c-.07-.5-.15-.94-.2-1.13a.2.2,0,0,0,.11,0c.06.19.22.6.42,1.07a9,9,0,0,0,.52,1.09Zm-.77.18c0-.09-.13-.16-.27-.16s-.25.08-.26.17h-.12a9.08,9.08,0,0,0,.2-1.19c.06-.5.1-.94.1-1.14h.12a8.91,8.91,0,0,0,.12,1.14,10.59,10.59,0,0,0,.21,1.18Zm-.79,0c0-.1-.08-.19-.22-.23s-.26,0-.29.1l-.12,0a8.76,8.76,0,0,0,.5-1.1,9.82,9.82,0,0,0,.4-1.07l.11,0c0,.19-.11.62-.18,1.13a9.63,9.63,0,0,0-.1,1.19Zm-.76-.23c0-.08,0-.2-.15-.27a.24.24,0,0,0-.31,0l-.09-.07c.11-.11.42-.48.76-.93s.57-.77.67-.94l.1.06a9.49,9.49,0,0,0-.47,1.05,8.64,8.64,0,0,0-.41,1.12Zm-.67-.41c.06-.08,0-.2-.07-.3a.26.26,0,0,0-.31-.07.31.31,0,0,1-.07-.09,10.59,10.59,0,0,0,1-.69c.41-.32.75-.6.89-.74a.6.6,0,0,0,.08.08c-.13.14-.42.48-.73.89s-.61.84-.69,1Zm-.48-.49-.06-.08a.25.25,0,0,0,0-.31c-.08-.12-.2-.18-.28-.14a.47.47,0,0,1-.05-.1c.15,0,.61-.21,1.13-.43a10.58,10.58,0,0,0,1.05-.49l.06.11a11,11,0,0,0-.93.67A11.47,11.47,0,0,0,372,129.26Zm-.44-.77c.09,0,.13-.16.09-.3a.25.25,0,0,0-.23-.2s0-.08,0-.11a11.77,11.77,0,0,0,1.21-.12c.51-.08.95-.16,1.14-.21l0,.12a11.4,11.4,0,0,0-1.08.41c-.53.22-1,.43-1.1.51A1,1,0,0,1,371.57,128.49Zm-.18-.76c.1,0,.17-.13.17-.26s-.08-.25-.17-.26a.37.37,0,0,1,0-.11c.15,0,.63.12,1.19.19s1,.09,1.16.09v.12a11.41,11.41,0,0,0-1.15.12,9.73,9.73,0,0,0-1.19.22S371.4,127.77,371.39,127.73Zm0-.78c.09,0,.19-.08.22-.21a.25.25,0,0,0-.09-.3.42.42,0,0,1,0-.1,10.25,10.25,0,0,0,1.1.49c.49.19.91.34,1.1.39a.2.2,0,0,0,0,.11c-.19,0-.63-.11-1.15-.18a11.65,11.65,0,0,0-1.21-.09S371.41,127,371.42,127Zm.22-.75c.09,0,.21,0,.28-.15a.25.25,0,0,0,0-.31l.06-.08a8.35,8.35,0,0,0,.94.75c.42.31.78.56.95.66l-.06.1a9.48,9.48,0,0,0-1.06-.46,11.2,11.2,0,0,0-1.14-.41A1,1,0,0,0,371.64,126.2Zm.42-.66a.27.27,0,0,0,.31-.08.24.24,0,0,0,.06-.3l.09-.06a9.51,9.51,0,0,0,.71,1,11.18,11.18,0,0,0,.75.88l-.09.08c-.14-.13-.48-.41-.9-.72a10.43,10.43,0,0,0-1-.67Zm.58-.54a.25.25,0,0,0,.31,0,.26.26,0,0,0,.15-.28l.09,0a10.85,10.85,0,0,0,.44,1.12,9.67,9.67,0,0,0,.49,1l-.1.07a10.81,10.81,0,0,0-.69-.93,11.19,11.19,0,0,0-.78-.91Zm.7-.37c0,.09.16.13.3.09s.22-.14.21-.23l.1,0a7.86,7.86,0,0,0,.13,1.19c.07.51.15.94.2,1.13l-.11,0c-.05-.18-.22-.59-.42-1.06s-.44-1-.52-1.08Zm.77-.18c0,.1.12.17.26.17a.28.28,0,0,0,.27-.17h.1a9.8,9.8,0,0,0-.19,1.18c-.06.51-.09,1-.09,1.14h-.12c0-.19,0-.63-.13-1.14a10,10,0,0,0-.22-1.17Zm.79,0c0,.09.08.19.21.22a.25.25,0,0,0,.3-.09l.1,0a8.5,8.5,0,0,0-.49,1.1,9.16,9.16,0,0,0-.39,1.08.27.27,0,0,0-.12,0,10.63,10.63,0,0,0,.18-1.14,11.21,11.21,0,0,0,.09-1.19Zm.75.22a.24.24,0,0,0,.15.27.26.26,0,0,0,.32,0l.08.06a10.07,10.07,0,0,0-.76.93c-.31.41-.56.77-.66.94l-.1,0c.09-.18.27-.58.46-1a10.41,10.41,0,0,0,.4-1.13Zm-.75,2.73a.49.49,0,0,1-1,0,.48.48,0,0,1,.48-.49A.5.5,0,0,1,374.9,127.43Zm1.43-2.32a.23.23,0,0,0,.07.3.25.25,0,0,0,.31.07l.06.08a9.48,9.48,0,0,0-1,.7c-.4.32-.74.61-.88.74l-.09-.08a10.64,10.64,0,0,0,.73-.89,9.57,9.57,0,0,0,.68-1Zm.54.57a.25.25,0,0,0,0,.31.24.24,0,0,0,.28.14.36.36,0,0,1,0,.09c-.15,0-.6.21-1.13.43s-.88.4-1.05.5a.21.21,0,0,0-.06-.1c.17-.11.53-.37.94-.68a11.19,11.19,0,0,0,.91-.78Zm.38.69a.24.24,0,0,0-.09.3.25.25,0,0,0,.23.21s0,.06,0,.09c-.16,0-.64,0-1.2.13a11.21,11.21,0,0,0-1.14.21l0-.11c.18-.06.6-.22,1.08-.42s1-.44,1.09-.52Zm-2.88-2.14a3.21,3.21,0,1,0,3.29,3.16A3.22,3.22,0,0,0,374.37,124.23Z"/></clipPath><clipPath id="clip-path-5" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M376.63,99.48c-.12-.07-.28-.39-.63-.38s-.55.44-.62.52,0,.16.13.12.18-.39.53-.41.35.26.54.28S376.75,99.55,376.63,99.48Z"/></clipPath><clipPath id="clip-path-7" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M372.11,99.66c.13,0,.32-.31.53-.39a.44.44,0,0,1,.49.19c.06.08.14.18.22.19s.11-.11.09-.11-.1-.31-.3-.45a.63.63,0,0,0-.52,0,1.71,1.71,0,0,0-.55.37,1.86,1.86,0,0,0-.24.19A.47.47,0,0,0,372.11,99.66Z"/></clipPath><clipPath id="clip-path-9" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M374.27,103c-.13,0,0,.23-.17.26s-.11-.24-.17-.21,0,.26,0,.3.21.19.3,0S374.34,103,374.27,103Z"/></clipPath><clipPath id="clip-path-11" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M373.23,103.59a.35.35,0,0,0,0,.46c.13.13.28.16.31.12s-.13-.18-.22-.23S373.23,103.59,373.23,103.59Z"/></clipPath><clipPath id="clip-path-13" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M375.5,104.21a.5.5,0,0,0,.3-.39.69.69,0,0,0-.05-.42c-.09,0,0,.29-.14.46S375.28,104.26,375.5,104.21Z"/></clipPath><clipPath id="clip-path-15" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="380.86" y="129.41" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-17" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="380.77" y="129.8" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-19" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="380.73" y="130.19" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-21" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="380.59" y="125.29" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-23" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="380.86" y="125.29" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-25" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="380.91" y="125.73" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-27" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="380.32" y="124.9" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-29" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="381.23" y="125.76" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-31" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="381.69" y="126.83" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-33" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="382.02" y="126.15" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-35" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="381.69" y="126.51" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-37" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="382.02" y="125.82" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-39" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="381.64" y="125.79" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-41" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="381.23" y="125.34" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-43" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="381.69" y="126.19" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-45" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="377.28" y="130.12" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-47" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="377.32" y="130.49" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-49" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="377.66" y="130.13" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-51" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="376.95" y="130.52" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-53" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="377.64" y="130.49" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-55" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="378.01" y="130.49" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-57" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="378.27" y="130.07" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-59" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="378.01" y="129.24" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-61" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="377.66" y="129.62" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-63" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="378.01" y="129.62" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-65" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="377.97" y="130.07" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-67" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="378.43" y="128.39" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-69" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="378.71" y="129.24" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-71" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="378.32" y="129.63" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-73" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="378.36" y="129.24" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-75" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="378.38" y="128.86" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-77" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="378.1" y="125.21" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-79" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="378.19" y="126.01" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-81" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="378.1" y="124.82" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-83" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="377.77" y="124.82" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-85" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="378.13" y="125.56" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-87" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.2" y="126.88" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-89" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.2" y="126.61" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-91" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.52" y="125.64" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-93" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.47" y="125.19" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-95" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.9" y="125.64" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-97" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.47" y="124.81" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-99" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="370.04" y="124.81" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-101" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.9" y="126.2" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-103" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.56" y="126.9" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-105" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.2" y="124.81" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-107" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="370.42" y="124.79" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-109" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.74" y="124.81" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-111" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.74" y="125.19" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-113" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.9" y="126.59" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-115" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.89" y="125.68" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-117" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.93" y="126.61" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-119" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.2" y="125.19" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-121" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.19" y="125.22" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-123" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.19" y="126.2" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-125" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.19" y="125.68" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-127" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.86" y="124.91" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-129" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.52" y="125.68" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-131" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.52" y="125.22" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-133" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.52" y="124.91" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-135" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.85" y="126.2" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-137" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.89" y="125.22" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-139" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.9" y="124.83" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-141" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.88" y="125.22" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-143" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.92" y="126.9" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-145" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.2" y="125.66" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-147" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.19" y="126.2" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-149" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.51" y="126.61" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-151" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.25" y="126.61" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-153" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.48" y="124.85" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-155" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.51" y="126.2" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-157" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.19" y="124.91" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-159" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.51" y="125.66" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-161" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.51" y="125.22" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-163" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="366.94" y="129.22" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-165" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.26" y="129.6" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-167" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="366.28" y="129.95" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-169" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="366.28" y="129.57" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-171" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="365.94" y="129.55" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-173" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="366.28" y="130.35" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-175" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.83" y="130.42" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-177" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.21" y="130.42" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-179" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.49" y="130.4" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-181" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.49" y="129.63" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-183" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.21" y="130.04" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-185" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.17" y="129.65" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-187" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.88" y="130.04" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-189" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.49" y="130.02" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-191" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="366.59" y="129.22" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-193" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.19" y="130.4" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-195" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.88" y="130.42" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-197" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="368.83" y="130.04" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-199" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.19" y="130.04" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-201" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="366.97" y="129.57" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-203" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="366.97" y="130.4" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-205" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="366.69" y="130.4" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-207" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="366.94" y="130.02" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-209" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="366.59" y="129.57" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-211" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="366.64" y="129.97" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-213" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.29" y="130.4" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-215" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.59" y="130.02" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-217" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.26" y="130.04" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-219" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.59" y="129.6" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-221" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.84" y="129.65" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-223" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="367.59" y="130.4" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-225" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="370.92" y="129.6" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-227" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="370.1" y="128.31" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-229" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.74" y="128.01" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-231" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="369.79" y="128.38" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-233" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="370.15" y="128.78" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-235" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="370.43" y="128.31" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-237" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="370.1" y="128.01" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-239" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="370.52" y="128.7" width="0.38" height="0.38"/></clipPath><clipPath id="clip-path-241" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M366.6,126.61c0-.07.11-.09.25-.19s.06-.27,0-.25-.22.12-.31.25S366.55,126.71,366.6,126.61Z"/></clipPath><clipPath id="clip-path-243" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M367.4,127.5c-.07-.08,0-.45-.13-.44s-.26.33-.23.42S367.48,127.59,367.4,127.5Z"/></clipPath><clipPath id="clip-path-245" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M375.05,97.9h0Z"/></clipPath><clipPath id="clip-path-247" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M374.29,97.85Z"/></clipPath><clipPath id="clip-path-249" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M366.22,125.91a.19.19,0,0,0,.22.14c.05,0-.11-.1.1-.24s0-.31-.07-.23S366.18,125.74,366.22,125.91Z"/></clipPath><clipPath id="clip-path-251" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M366.12,125.65c.06,0,.16,0,.1-.14s.1-.14.17-.17-.1-.09-.24,0A.18.18,0,0,0,366.12,125.65Z"/></clipPath><clipPath id="clip-path-253" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M372,101.24h0Z"/></clipPath><clipPath id="clip-path-255" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M366.52,126.27c0-.14.19-.16.23-.24s0-.21-.06-.13-.27.14-.3.23S366.51,126.34,366.52,126.27Z"/></clipPath><clipPath id="clip-path-257" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M366.21,125.13c-.12-.06-.47.12-.33.26s.32.16.22-.07S366.29,125.17,366.21,125.13Z"/></clipPath><clipPath id="clip-path-259" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M366.75,126.65a.24.24,0,0,0-.12.29c.06.12.1.14.13,0a.42.42,0,0,1,.14-.18.19.19,0,0,0,.05-.28S366.88,126.56,366.75,126.65Z"/></clipPath><clipPath id="clip-path-261" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M366.82,127a.2.2,0,0,0,.15.3c.13,0,.12-.18.13-.24s.1-.25,0-.25A.56.56,0,0,0,366.82,127Z"/></clipPath><clipPath id="clip-path-263" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M366,125c-.22,0-.38.26-.27.33s.17,0,.17-.1S366.21,125,366,125Z"/></clipPath><clipPath id="clip-path-265" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M367.61,127.72c.15.07.18,0,.12-.15s-.34-.24-.35-.17A.44.44,0,0,0,367.61,127.72Z"/></clipPath><clipPath id="clip-path-267" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M372.37,101.13a1.86,1.86,0,0,0-.32.31.14.14,0,0,1-.06.07A2.22,2.22,0,0,0,372.37,101.13Z"/></clipPath><clipPath id="clip-path-269" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M380.76,126.74a.3.3,0,0,0-.27.28c0,.15.27.1.34,0A.19.19,0,0,0,380.76,126.74Z"/></clipPath><clipPath id="clip-path-271" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M379.51,126.24a.34.34,0,0,0,.22-.27c0-.1-.12,0-.18-.1s.05-.15.13-.23-.18-.1-.41,0-.32.44-.23.4.14-.11.17-.09,0,0,0,.08a.13.13,0,0,0,.11.14s0-.06,0-.11a.09.09,0,0,1,.11-.07c.1,0,0,.14-.08.19S379.32,126.32,379.51,126.24Z"/></clipPath><clipPath id="clip-path-273" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M367.61,104h0Z"/></clipPath><clipPath id="clip-path-275" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M384.57,102.83a.32.32,0,0,1-.29-.09,3.37,3.37,0,0,0,.52-.54c.13-.2.35,0,.31.15A.72.72,0,0,1,384.57,102.83Zm1.74,1c0,.11-.16.39-.29.33s-.09-.39-.43-.51a1.4,1.4,0,0,0-.51-.07c-.07,0,0-.15-.05-.25a.22.22,0,0,0-.13-.17c-.11,0-.15-.17-.09-.19s.32.35.44.2-.13-.12-.08-.33a.47.47,0,0,1,.21-.28l0,0c-.05-.07,0-.41-.05-.54a.92.92,0,0,0-.13-.19.22.22,0,0,0-.31,0,6.92,6.92,0,0,0-.66.86c-.18.23-.24.2.28.46a.36.36,0,0,1,.19.52c0,.1-.06.18.16.18a1.71,1.71,0,0,1,.45,0,1.18,1.18,0,0,1,.57.44c.14.18.08.34,0,.29a3.14,3.14,0,0,1-.45-.41c-.1-.08-.22-.18-.32-.13s0,.16.12.24.47.44.33.55-.3-.21-.38-.32-.15-.25-.27-.3.11.21.13.25a1.57,1.57,0,0,1,.15.43c0,.16.05.32-.07.32s-.12-.15-.27-.25a6.4,6.4,0,0,1-.52-.71c0-.07.06-.12.09-.09s.35.54.46.65.07-.1,0-.22-.14-.37-.15-.42h0a2.17,2.17,0,0,1-.37-.4c-.22-.26-.56,0-.61-.15,0,0-.08.18-.14.27a2,2,0,0,0-.26.66c-.05.44-.2.25-.37.34s-.22.35,0,.6.6.14.8.15.1.12.11.29a.85.85,0,0,0,.22.47c.08.1-.07.19-.27.27a.37.37,0,0,1-.45-.15c-.06-.08,0-.29-.17-.44s-.48-.24-.63-.4a2.25,2.25,0,0,1-.05-1c0-.12-.12-.39,0-.51s.41.14.57,0,.22-.2.28-.27c.22-.24.31-.26.33-.23s-.26,0-.44,0-.58.12-.61,0,.09-.17.06-.41-.13-.27-.12-.43.08-.29.4-.31a1.59,1.59,0,0,1,.73.12c.13,0,.27.06.27,0a1,1,0,0,0-.55-.43.4.4,0,0,0-.34.06c-.09,0-.33,0-.34-.11s-.09-.14-.11-.29-.07-.38.23-.38.29-.41.51-.49a.56.56,0,0,1,.49.08c1,.52,1.18.25,1.37.57a3.09,3.09,0,0,1,.19.35,1.69,1.69,0,0,1,0,.58c.11,0,.06.32.23.43a2,2,0,0,1,.38.33A.77.77,0,0,1,386.31,103.79Zm-2,.71c.1.07.22.27.15.3s-.17-.15-.22-.2-.17,0-.19-.07a.07.07,0,0,1,0-.12A.52.52,0,0,1,384.29,104.5Zm.72,1a1.63,1.63,0,0,1-.48.36c-.08,0,.15.18,0,.19a.44.44,0,0,1-.32-.25c-.08-.14-.18-.37-.33-.36a.7.7,0,0,1-.48-.1.34.34,0,0,1-.2-.21c0-.06,0-.12.18-.26a.85.85,0,0,0,.18-.23,3.25,3.25,0,0,1,.27-.51,2.19,2.19,0,0,1,.23-.26c.05,0,.11,0,0,.09a5,5,0,0,0-.37.67c-.07.13-.25.38-.24.45s.15.11.22.09.1-.29.19-.28.13.15.11.24c-.06.25.16-.07.24,0s-.16.46.14.2c.11-.09.15-.38.29-.29s.14.13.1.17-.31.22-.37.29,0,.19,0,.21.25-.24.44-.32S385.06,105.39,385,105.45Zm-2.44,1.91a.48.48,0,0,0,.23.42c.14.09-.07.09-.12.06s-.34-.31-.48-.41.25-.19.24-.26,0-.2-.12-.12a.54.54,0,0,1-.54-.12.8.8,0,0,1-.1-.79.53.53,0,0,1,.3-.36c.06,0,.23,0,.23.09s-.16.36-.26.53,0,.54.22.54.15-.14.27-.15S382.6,107.12,382.57,107.36Zm.34,1.76a4.7,4.7,0,0,1-.46.58c-.07.11.07.32.16.26s.31-.52.52-.58.2.12.17.32-.37.29-.48.53a.49.49,0,0,0,0,.31s-.13,0-.18,0,0-.26-.07-.29c-.44-.23-.52-.5-.5-.61a2.24,2.24,0,0,1,.47-.71c.14-.13.22-.35.34-.36S383,109,382.91,109.12Zm-.66,2.79c0,.13.16.26.26.35s-.06.11-.22.12A.42.42,0,0,1,382,112a1,1,0,0,1,.34-.77c.21-.15.18-.25.14-.34s.26,0,.27.27C382.79,111.65,382.29,111.77,382.25,111.91Zm-.46-.58a4.21,4.21,0,0,1-.05.58,1.07,1.07,0,0,1-.23-.77,1,1,0,0,1,.26-.51c.09-.13.13-.3.2-.27s.12.19.15.39S381.79,111.14,381.79,111.33Zm0,1.39a1,1,0,0,1-.31.45c-.1.08-.32.23,0,.47.1.08,0,.27-.27.07a.62.62,0,0,1-.07-.6.83.83,0,0,1,.4-.39c.19-.12.1-.34.24-.33S381.8,112.54,381.75,112.72Zm-.67,1.47a1.44,1.44,0,0,0-.28.37c-.05.11,0,.14.09.2s.1.21,0,.25-.42-.11-.45-.32.24-.31.15-.37-.39.06-.57,0a.37.37,0,0,1-.25-.34.72.72,0,0,1,.32-.62.12.12,0,0,1,.17.16c-.05.13-.31.19-.35.4a.25.25,0,0,0,.3.27c.19,0,.22-.12.5-.14S381.17,114.07,381.08,114.19Zm-.33,3.46c0,.3-.35,1.81-.33,2.08s.39,1,.37,1.28.32.72.34.88-.15,0-.27-.17a1.59,1.59,0,0,0-.29-.42c-.09,0,.06.43.13.56s.39.44.34.45a1.67,1.67,0,0,1-.64-.6,7.1,7.1,0,0,1-.28-1,4.43,4.43,0,0,1-.05-1c.06-1.11.28-2.14.26-2.39a9.23,9.23,0,0,0,0-1.49c-.06-.08-.13-.44,0-.53s.24.06.29.15A6.61,6.61,0,0,1,380.75,117.65Zm-.78-3s.16-.08.18,0,0,.2-.09.21S379.82,114.78,380,114.67Zm1.19,8c0,.2,0,.39.13.48a2,2,0,0,0,.48.31c.1,0,.09.21.06.29s-.22.32-.2-.08c0-.13-.28-.18-.35-.12s-.06.25-.15.27-.12-.3,0-.35a1,1,0,0,0-.29-.75c-.14-.08.06.36,0,.53s0,.5-.24.47c-.44,0-.71-.84-.87-.92s0-.37-.44-.83c-.09-.09,0-.7-.11-.74s0-.62-.15-.68-.06-.44-.33-.61a.9.9,0,0,1-.21-.4,2,2,0,0,0-.13-.51,1.35,1.35,0,0,1-.18-1.12.53.53,0,0,0,.08-.49,1.2,1.2,0,0,1,.1-.83c.1-.11-.09-1.21.13-1.62.05-.09,0-.21,0-.22s.07-.2,0-.25-.08-.28-.1-.4-.13-.35,0-.42.12.22.26.29a1.64,1.64,0,0,1,.53.42.78.78,0,0,0,.32.35.76.76,0,0,1,.4.48,6.55,6.55,0,0,1,.19,1.61c0,.44.11.64,0,.75s.09.68,0,.81a8.43,8.43,0,0,0,0,2.14c.1.27.13,1,.2,1.13s.15.5.37.59.23.16.38.09S381.13,122.54,381.16,122.69Zm.28-.33c.13-.06.32,0,.41.06s.31.14.32.25a4.07,4.07,0,0,0,0,.6,1.69,1.69,0,0,1,.1.35,1.5,1.5,0,0,1,0,.3s-.11,0-.17,0,.07-.29,0-.56a.48.48,0,0,0-.24-.23,1.31,1.31,0,0,1-.4-.56C381.44,122.5,381.34,122.4,381.44,122.36Zm.9-.17a.48.48,0,0,1,.22.13c.07.07,0,.5,0,.57s.16.17.76.47a.46.46,0,0,1,.1.31c0,.08,0,.28-.11.28s-.07,0,0-.23a.31.31,0,0,0-.09-.28.22.22,0,0,0-.21,0c-.08,0-.07.17,0,.34s.15.14.09.3-.2.07-.25,0,0-.15.05-.18a.77.77,0,0,0,0-.4c-.06,0-.39-.34-.39-.42s0-.28-.15-.34,0-.33-.27-.45C382,122.18,382.26,122.18,382.34,122.19Zm1.12,2.51a.12.12,0,0,1-.23,0c0-.16-.11-.32-.05-.32a.31.31,0,0,1,.2.07A.29.29,0,0,1,383.46,124.7Zm.1,4.34a10.45,10.45,0,0,1-.15,1.39c0,.09-.14-2.75-.14-3s0-2.26.06-2.23.19,1.11.19,1.54C383.52,127,383.58,128.52,383.56,129Zm-.4-5.47a.17.17,0,0,1,.18.19c0,.12,0,.25,0,.26s-.1-.12-.14-.2S383,123.58,383.16,123.57Zm-.12,6.86c-.07.2-.18-3-.18-3.21a8.92,8.92,0,0,1,.05-2.08c.06,0,.21.49.24,1.42A22.77,22.77,0,0,1,383,130.43Zm-.27.58c-.06,0-.12.07-.14,0s0-.1-.06-.16-.12-.15-.06-.16a.23.23,0,0,1,.22.13C382.77,130.93,382.83,131,382.77,131Zm-.3.11s-.1,0-.13,0,0-.07,0-.1-.17-.16-.16-.17a.32.32,0,0,1,.07-.06c.05,0,.22.16.25.21S382.5,131.11,382.47,131.12Zm-.44.12s-.07.06-.09-.05-.26-.28-.15-.3.13,0,.17,0a1.31,1.31,0,0,1,.2.23S382.08,131.19,382,131.24Zm0-.9c0,.09,0,.26,0,.29s-.06,0-.09-.1a.79.79,0,0,1,0-.44c.05-.1.08-.15.18-.16s.11.06.08.15S382,130.25,382,130.34Zm-3.25-3.65c.14,0,.12.17.07.22s-.16,0-.21-.06S378.7,126.68,378.75,126.69Zm2.78,3.87c0,.08-.18.06-.42.07-.07,0,0-.3,0-.35.26-.19.1-.28.24-.39a5.89,5.89,0,0,1,.55-.62c.08-.06,0-.09,0-.09s0-.34,0-.35.18-.27.16-.29-.09.1-.28.28a1.08,1.08,0,0,1-1.17.08c-.09-.09,0,0,.2-.34A1,1,0,0,0,381,128c0-.2-.1-.41-.15-.42a1.33,1.33,0,0,1-.11.72,1.32,1.32,0,0,1-.35.47c-.05.06,0,.2.08.18s0,.48,0,.54a.63.63,0,0,0-.15.33,1.12,1.12,0,0,0-.05.36c0,.14.09.26,0,.27s-.09.19-.08.23-.45.11-.52,0,.08-.11.13-.15,0-.4,0-.42-.1-.14,0-.16.12.11.15.14.09,0,.12-.05a.46.46,0,0,0,0-.32c-.06-.24-.34-.4-.3-.48s.08-.2,0-.23-.1.21-.18.23.08.23,0,.28-.13.15-.1.22a.85.85,0,0,1-.19.44c-.08.07-.26.56-.43.55s-.45.05-.43,0,.31-.28.35-.38a4.38,4.38,0,0,0,.27-.66.61.61,0,0,1,0-.36c.08-.15.26,0,.41-.2a2.33,2.33,0,0,0,.4-.59c0-.13.12-.52.16-.64s-.12.12-.18.25-.09.27-.14.4a1.56,1.56,0,0,1-.25.42c-.12.11-.31.12-.3,0a.76.76,0,0,1,.08-.15l.34-.62c.11-.19.38-.6.41-.67a3.74,3.74,0,0,0-.45.59l-.36.56a.15.15,0,0,1-.18,0c-.09,0-.17-.16-.13-.23l.21-.22a3.1,3.1,0,0,0,.41-.41,5,5,0,0,0,.37-.61s-.38.51-.48.6a2.18,2.18,0,0,1-.41.35c-.1,0-.18,0-.21,0s.1-.07.17-.12a3.67,3.67,0,0,0,.34-.32,2.81,2.81,0,0,0,.26-.25,1.18,1.18,0,0,0,.24-.39s-.13.18-.2.26-.25.24-.4.39a3.17,3.17,0,0,1-.27.21c-.06,0-.12,0-.16,0s0-.08,0-.12.34-.2.37-.25-.24.08-.34.08-.12-.08,0-.13a1,1,0,0,0,.29-.2c.09-.14.07-.17-.07-.12s-.08.06-.18.06-.16-.08-.08-.14a.69.69,0,0,1,.33-.13c.07,0,.29,0,.29-.07s-.16-.15-.3-.15-.08,0-.16.12a.34.34,0,0,1-.49,0c0-.06.37.14.45-.06a.17.17,0,0,0-.11-.25.42.42,0,0,0-.22,0c-.13.07,0-.08.13-.11s.19-.07.13-.12-.09,0-.13-.07-.11-.49.12-.63.13-.09.14-.16-.12-.18-.16-.2a.15.15,0,0,1,0-.18s.12,0,.09-.06a.21.21,0,0,1,0-.22.49.49,0,0,1,.27-.15s-.07.23-.09.3a.38.38,0,0,0,0,.26.44.44,0,0,0,.22.14.33.33,0,0,0,.39-.14c.11-.19,0-.3,0-.42s.12,0,.17.07a.39.39,0,0,1,.09.31c0,.21,0,.12.08.16s.09.07.1.13-.06,0-.07.09.05.17,0,.19,0,.17.05.14.05.06,0,.1,0,.3-.09.42a1,1,0,0,1-.25.24c-.12.06-.3,0-.36,0s-.09.09,0,.09a.12.12,0,0,1,.13.1.17.17,0,0,1,0,.17c-.08.07-.07.12,0,.09s.12-.13.24-.23a.84.84,0,0,0,.19-.11.86.86,0,0,1,.24-.12c.12,0,.1-.27.31-.36a.48.48,0,0,1,.4,0c.1,0,.31.18.19.4a.61.61,0,0,1-.24.3c-.09.06-.08.24,0,.34s.08.15.15.21.13.06.3,0a.62.62,0,0,1,.33-.11,1.49,1.49,0,0,1,.59.13.69.69,0,0,1,.29.28,1.19,1.19,0,0,1,.05.22,1,1,0,0,1,.09.29c0,.22-.1.28-.08.37s0,.39-.1.4-.19.06-.18.16a.35.35,0,0,1-.06.23,3.57,3.57,0,0,0-.28.28c-.08.09-.07.2-.11.26a.65.65,0,0,0-.13.34C381.73,130.44,381.56,130.49,381.53,130.56Zm0,.81a1.11,1.11,0,0,1-.14-.35c0-.06,0-.07.09-.07s.22.26.22.31S381.57,131.39,381.55,131.37Zm-.19.71c-.09,0-.1-.13-.08-.2s.11,0,.18,0,.05.09.06.14S381.44,132.08,381.36,132.08Zm-.21-.65c0-.07-.19-.43-.13-.46a.1.1,0,0,1,.15,0c0,.05.13.24.1.3S381.17,131.46,381.15,131.43Zm-.09.64c-.1,0-.12-.13-.1-.2s.1,0,.17,0,.06.08.07.14S381.13,132.07,381.06,132.07Zm-.14.4c-.16.22-.33.2-.34.14s.15-.15.17-.27,0-.24,0-.24S381,132.32,380.92,132.47Zm-.2-.41c-.09,0-.11-.13-.1-.2s.11,0,.18,0,.06.08.07.13S380.79,132.06,380.72,132.06Zm-.16-1.05c.05,0,.27,0,.28,0s.12.33.07.37-.16.08-.2.05S380.51,131,380.56,131Zm-.18,1c-.09,0-.1-.13-.09-.2s.11,0,.18,0,0,.08.06.13S380.46,132.05,380.38,132.05Zm.25-2v-.21h-.17c0-.17.1-.36.16-.58a1.71,1.71,0,0,0,1.14-.07c.1,0,.13,0,.1.07s-.24.08-.4.24v-.08h-.18v.12h.14a1.17,1.17,0,0,0-.2.42,2,2,0,0,1-.3.59v0h-.19v.17h.08l-.13.14a.32.32,0,0,1-.18-.14h.08v-.17h-.15a.3.3,0,0,1,0-.1.08.08,0,0,0,0,0h.14v-.2h-.14a1.71,1.71,0,0,1,.05-.3V130Zm-.45,1.35c-.06-.06-.24-.31-.14-.35a.28.28,0,0,1,.36.35c0,.11,0,.19-.13.19S380.23,131.43,380.18,131.36Zm-.23.49c0-.07.11,0,.18,0s.06.09.06.14-.07.1-.15.1S379.94,131.92,380,131.85Zm.11.78c-.05,0-.22.08-.27.05s.07-.28,0-.41.2-.05.28,0S380.18,132.55,380.06,132.63Zm-.44-.59c-.1,0-.12-.13-.1-.2s.12,0,.2,0,.06.08.07.13S379.7,132,379.62,132Zm.08-1a.55.55,0,0,1,.15.43c0,.08-.12.08-.2.07s0-.1,0-.23-.21-.23-.26-.28,0-.08.05-.08A.36.36,0,0,1,379.7,131.06Zm-.1-.85s-.09.07-.13,0a.19.19,0,0,1,0-.26c.08-.05.08-.11.11-.12s.08.18,0,.19S379.57,130.16,379.6,130.21Zm-.19,1.12c0,.06-.12.21-.22.23s-.25,0-.24-.06.07-.16,0-.23-.32-.23-.18-.27a.4.4,0,0,1,.3,0C379.24,131.07,379.45,131.27,379.41,131.33Zm-.2.71c-.12,0-.13-.13-.11-.2s.12,0,.21,0,.07.08.07.13S379.29,132,379.21,132Zm-.34.68c-.1,0-.07-.11-.06-.25s-.05-.25,0-.28.22,0,.31,0,.11.29.12.46S379.14,132.7,378.87,132.72Zm-.22-.87c0-.1.13-.06.23-.06s.07.1.08.15-.09.08-.19.08S378.64,131.91,378.65,131.85Zm-.21.85c-.11,0-.29.06-.29,0s-.15-.43-.07-.5.37,0,.43,0S378.56,132.65,378.44,132.7Zm-.63-.89c0-.05.15,0,.24,0s.07.08.07.12-.09.12-.19.12S377.79,131.86,377.81,131.81Zm0,.91c-.13,0-.37.06-.36-.05s-.2-.45-.11-.45.51-.06.55,0S377.88,132.7,377.77,132.72Zm-.72-.71c-.12,0-.08-.15-.09-.21s.14,0,.24,0,.07.07.07.12S377.15,132,377.05,132Zm-.19.73a1,1,0,0,1-.07-.56c.06-.07.26,0,.33,0s0,.19.12.42S377,132.8,376.86,132.74Zm-.21-.07c0,.08-.21.11-.34.07s-.26-.51-.11-.55a.85.85,0,0,1,.39,0C376.68,132.2,376.68,132.6,376.65,132.67Zm-.78-.87c0-.07.19,0,.33,0s.11.07.11.12-.11.11-.26.11S375.86,131.93,375.87,131.8Zm.15.92a.66.66,0,0,1-.4,0c-.09,0-.2-.48-.14-.5a1.46,1.46,0,0,1,.38,0C376,132.23,376.05,132.68,376,132.72Zm-.7-.94c0-.06.19,0,.33,0s.11.08.11.13-.15.09-.28.11A.14.14,0,0,1,375.32,131.78Zm0,.91a.66.66,0,0,1-.4,0c-.12,0-.17-.44-.11-.46a1.93,1.93,0,0,1,.49,0C375.43,132.28,375.37,132.65,375.34,132.69Zm-.49-1h.42a.72.72,0,0,1-.13.28,2.54,2.54,0,0,1-.39,0S374.85,131.71,374.85,131.71Zm-.19,1c0,.06-.18.05-.28,0s-.14-.38-.14-.43.4-.07.41,0A1.14,1.14,0,0,1,374.66,132.67Zm-.64,0c-.1,0-.27,0-.29,0a1.41,1.41,0,0,1,0-.41c0-.08.42-.06.42,0S374.18,132.64,374,132.69Zm-.57,0a.51.51,0,0,1-.39,0s-.09-.41,0-.44a1.34,1.34,0,0,1,.4,0C373.53,132.27,373.58,132.66,373.45,132.69Zm-.67.06a.66.66,0,0,1-.4,0s0-.52.15-.5a3.07,3.07,0,0,1,.38,0C373,132.27,372.86,132.72,372.78,132.75Zm-.44-.88c0-.05,0-.14.18-.14s.33,0,.33,0a.25.25,0,0,1-.26.21C372.45,132,372.25,132,372.34,131.87Zm-.36.1c-.14,0-.34,0-.25-.1s0-.14.18-.14.34,0,.34,0A.24.24,0,0,1,372,132Zm.08.75c-.13,0-.38,0-.4-.07s-.17-.49-.09-.51a.8.8,0,0,1,.41.06C372.12,132.25,372.14,132.69,372.06,132.72Zm-.75-.85c0-.05,0-.14.13-.14s.24,0,.24,0a.2.2,0,0,1-.19.2C371.39,132,371.24,132,371.31,131.87Zm0,.8c-.14,0-.42.07-.43-.18s-.07-.34,0-.37.24,0,.3,0S371.49,132.66,371.32,132.67Zm-.46-.79s0-.13.13-.13.24,0,.24,0a.2.2,0,0,1-.19.2C370.94,132,370.8,132,370.86,131.88Zm-.28.09c-.1,0-.25,0-.18-.1s0-.13.13-.13.24,0,.24,0A.2.2,0,0,1,370.58,132Zm-.24.69c-.13,0-.17-.38-.14-.47s.15-.08.25-.07.15.35.25.46S370.47,132.69,370.34,132.66Zm-.38-.78s0-.13.12-.13.25,0,.25,0a.2.2,0,0,1-.19.2C370,132,369.89,132,370,131.88Zm-.32.78c-.11,0-.21-.53-.09-.54s.21,0,.27,0,.09.47.12.52S369.76,132.71,369.64,132.66Zm-.15-.76c0-.05,0-.14.12-.14s.24,0,.24,0a.19.19,0,0,1-.18.2C369.56,132,369.42,132,369.49,131.9Zm.33-1.12c.07,0,.21.06.16.08s-.22.07-.22.16a.58.58,0,0,0,.12.31c.05,0-.12.07-.21,0a.55.55,0,0,1-.2-.3C369.47,131,369.67,130.81,369.82,130.78Zm-.38,0c-.07.07-.23.11-.18.18s.23.3.15.33a.65.65,0,0,1-.31,0c-.09,0-.18-.22-.18-.28a.53.53,0,0,1,.34-.35C369.35,130.69,369.5,130.75,369.44,130.81ZM369.2,132c-.09,0-.22,0-.16-.09s0-.14.11-.14.22,0,.22,0S369.32,132,369.2,132Zm-.08.67c-.23.13-.3-.11-.31-.29s0-.24,0-.25a.23.23,0,0,1,.21.08C369.09,132.26,369.28,132.57,369.12,132.66Zm-.51-.77s0-.13.1-.13.21,0,.21,0-.05.2-.16.2S368.55,132,368.61,131.89Zm-.15-.86a.72.72,0,0,1,.33-.28s.19,0,.15,0-.2.14-.2.18.14.3.1.32-.19.06-.23,0S368.43,131.1,368.46,131Zm-.25-.06c0,.06.14.23.12.26a.29.29,0,0,1-.25,0c-.08,0-.22-.22-.19-.27a1.18,1.18,0,0,1,.41-.28c.1,0,.18,0,.15.07S368.2,130.91,368.21,131Zm.1,1c-.08,0-.19,0-.14-.1s0-.14.1-.14.18,0,.18,0S368.41,132,368.31,132Zm.07.61s-.05.08-.14,0-.17-.46-.05-.48.2,0,.22.07S368.36,132.5,368.38,132.61ZM368,132c-.08,0-.19,0-.14-.1s0-.14.1-.14.18,0,.18,0S368.05,132,368,132Zm-.4-.75c-.11,0-.39-.27-.34-.33a1.26,1.26,0,0,1,.49-.21c.12,0,.26,0,.18.07l-.29.17c0,.05.16.19.15.23S367.66,131.25,367.55,131.25Zm0,.76c-.07,0-.18,0-.13-.1s0-.14.09-.14.19,0,.19,0S367.68,132,367.58,132Zm.1.27c0,.12,0,.28-.05.32s-.16,0-.2-.08-.09-.36.08-.35S367.71,132.16,367.68,132.28Zm-.44-.26c-.07,0-.17,0-.12-.1s0-.13.08-.13.17,0,.17,0S367.33,132,367.24,132Zm-.19-1a.11.11,0,0,1-.1.05.72.72,0,0,1-.25-.22c-.06-.08.21-.14.28-.15s.23,0,.19.09a.93.93,0,0,1-.2.1S367.06,131,367.05,131Zm-.07,1c-.07,0-.16,0-.12-.1s0-.14.09-.14.15,0,.15,0S367.07,132,367,132Zm-.35-1.21c-.05,0-.16.09-.13.14s.13.11.06.12-.08,0-.15,0-.13-.2-.1-.25a.32.32,0,0,1,.21-.12C366.59,130.72,366.68,130.79,366.63,130.82Zm-.45,0a.11.11,0,0,0,0,.2c.09.07,0,.11-.15.09a.17.17,0,0,1-.15-.23.45.45,0,0,1,.25-.19C366.19,130.68,366.25,130.78,366.18,130.81Zm-.53-.29a.67.67,0,0,1-.43-.42c0-.15-.09-.26,0-.39v0a.08.08,0,0,0,0-.12s-.07-.24,0-.29a1.32,1.32,0,0,1,.34-.2.77.77,0,0,0,.28-.1.16.16,0,0,0,0-.16c0-.08-.11-.11-.17-.23a1,1,0,0,1,.05-.68c.06-.08.18-.2.21-.26a.33.33,0,0,0,0-.06c0-.06.06-.17-.08-.16s-.18,0-.17-.23,0-.25.07-.29,0-.23.06-.34.1-.32,0-.37-.07-.4-.07-.48-.14-.23-.21-.21,0,.14,0,.14a.42.42,0,0,0-.1-.07.49.49,0,0,1,.26.42c0,.33-.07.18-.15.35s0,.25-.07.31-.28-.18-.3-.28,0-.25.06-.29.05-.11,0-.22,0-.29.11-.3h0s-.06-.28,0-.33a.19.19,0,0,0,.11-.18.22.22,0,0,1,.06-.17s.18-.07.2-.11a.26.26,0,0,1,.21-.12,2.13,2.13,0,0,1,.25,0c.09,0,.21,0,.28,0a.14.14,0,0,1,0,.2c-.08.07-.05.28,0,.28s0-.14.16-.23.09-.09.12-.09.07.27,0,.35.06-.12.15-.13.1.22.05.25a.41.41,0,0,0-.1.18c0,.12,0,.18.1,0s.12,0,.13,0a.16.16,0,0,1-.06.2.27.27,0,0,0-.1.11c0,.08,0,.2.08.16s.06-.15.1-.17.09,0,.11.08,0,.09,0,.12-.17.18-.09.17.22-.06.23,0,.06.12-.07.21a.61.61,0,0,0-.16.12s0,.09,0,.09.24-.11.33-.06,0,.2,0,.23-.27.17-.19.18a.81.81,0,0,0,.31-.1c.08,0,0,.13,0,.18s-.25,0-.28.09.1.15.28.08a.47.47,0,0,1,.17,0,1.17,1.17,0,0,0,.26.1.69.69,0,0,0,.25-.08.83.83,0,0,1,.35-.06,1,1,0,0,1,.54.18.58.58,0,0,0,.4.09.53.53,0,0,0,.41-.23.65.65,0,0,0,0-.56c-.09-.18-.17-.46,0-.61s.13-.25.16-.39.31-.34.38-.39a.3.3,0,0,0,.15-.21c0-.08.12-.15.22-.12a.11.11,0,0,1,0,.19,1.26,1.26,0,0,1-.21.23c-.05,0-.21.09-.19.17s.12.08.19.2,0,.21,0,.23l-.19.08c-.05,0-.07.07-.06.08s.13.07.14.1,0,.11-.11.11a.06.06,0,0,0,0,.11.14.14,0,0,1,0,.25.16.16,0,0,0-.1.11.07.07,0,0,0,.06.09c.06,0,.06.13,0,.16s-.08.07-.07.14.06.17,0,.26a.48.48,0,0,1-.3.17c-.13,0-.16.08-.31.07s-.39.1-.53.07-.07,0,0,.11c.26.25.06.52.17.66.24.32.44.65.58.68a1.48,1.48,0,0,1,.46.17c.07.06,0,.18,0,.22s-.08.15,0,.18.18-.05.24,0a4,4,0,0,0,.22.37.49.49,0,0,1,0,.42c-.07,0-.25.11-.35.06s.1-.21.08-.31a1.18,1.18,0,0,0-.21-.37c-.1-.1-.29-.41-.42-.45s-.62-.41-.78-.4a1.94,1.94,0,0,1-1.27-.53c-.12-.12-.09,0-.09.18a.25.25,0,0,1-.28.22c-.23,0-.32-.23-.4-.31a.49.49,0,0,0-.27-.15c-.15,0-.27-.42-.3-.44s.09.52,0,.6-.32.43-.53.48l-.49.1c-.12,0-.24.22-.1.29s0,.5,0,.54a.81.81,0,0,0,.27,0c.05,0,.07.11.1.2s.1.11.07.14S365.87,130.55,365.65,130.52Zm.07.16a1.13,1.13,0,0,1-.19.19s.21.17.15.19a.41.41,0,0,1-.19,0s-.19-.2-.19-.26.24-.16.3-.18S365.73,130.67,365.72,130.68Zm-.67-1.51a5.91,5.91,0,0,0-.11,1.05c0,.35-.36.41-.29.33a1,1,0,0,0,.17-.62c0-.29-.09-1,0-1.19s.24,0,.31,0,.29-.06.28.14S365.13,129,365.05,129.17Zm-.7,1.46s.09-.28.1-.35c0-.27.05-.81.07-1.11s0-1.32,0-1.7c0-.18-.06-1.29-.1-1.6a3.07,3.07,0,0,1,0-.68c0-.15.2.46.26.86s0,1.27,0,1.47a11.1,11.1,0,0,1-.13,2.84C364.53,130.47,364.38,130.7,364.35,130.63Zm-.27-.67c-.09.14-.08.08-.06,0a4.07,4.07,0,0,0,.21-1.23c0-.49,0-1.91,0-2.08a4.48,4.48,0,0,0-.22-1.08,1.74,1.74,0,0,1-.19-.35c0-.17.11-.14.23,0a3.72,3.72,0,0,1,.34,1.45c0,.29.08,1.52,0,2.08A3.67,3.67,0,0,1,364.08,130Zm-.32-.79s0-1.23,0-1.59-.05-1.72,0-1.77.21,1.11.21,1.39S364,129.17,363.76,129.17Zm-.34-1.14a1.18,1.18,0,0,0,0-.66c0-.09.27.08.27.33S363.38,128.15,363.42,128Zm1.32-2.69a11.75,11.75,0,0,1,.4,2.68,2.86,2.86,0,0,0-.28.37S364.67,125.57,364.74,125.34Zm.56,2.6c-.16.08-.25-1.36-.16-1.36s.45.4.45.48S365.45,127.86,365.3,127.94Zm0,.66c-.17,0-.25.05-.29-.06s.14-.37.22-.45.44-.07.44-.07l0,.13-.13,0a.18.18,0,0,0-.09.16C365.39,128.49,365.42,128.61,365.26,128.6Zm-.32-4.12c.06-.26,0-.26.23-.28s0,.09,0,.2.09.2,0,.2S364.9,124.61,364.94,124.48Zm0-1.09c.06,0,.24,0,.24,0s-.12.08-.06.17,0,.16-.1.08S364.89,123.42,364.94,123.39Zm0-.33c.14-.13.28,0,.4,0s.19-.24.27-.66.25-.41.28-.32-.08.25-.07.4a.89.89,0,0,1,0,.26,1.1,1.1,0,0,1-.19.29c-.06.07-.08.33-.25.39S364.83,123.2,365,123.06Zm.36.43c.11,0,.17.13.19.21s-.12.1-.09.15,0,.22,0,.25-.3.06-.36,0,0-.14.12-.17.1-.21.1-.21S365.22,123.51,365.32,123.49Zm.4.92c0,.12,0,.15-.14.15s-.26-.14-.12-.31a.41.41,0,0,1,.39-.22c.07,0,.14.15.07.16S365.7,124.32,365.72,124.41Zm.49-.72a.37.37,0,0,1-.4.29c-.13,0,.09-.21.14-.33s-.21-.42-.24-.17-.16.08-.1-.13a.2.2,0,0,1,.32-.11C366.08,123.32,366.29,123.42,366.21,123.69Zm-.09-1.27c.11-.21.24-.28.33-.28s.2.06.31.2-.05,0-.16.14.07.41,0,.49-.4.4-.43.2a3.74,3.74,0,0,0-.13-.5C366,122.58,366,122.58,366.12,122.42Zm.26,2c0,.13-.36.13-.37.05s.19-.42.26-.45.22,0,.21,0S366.36,124.24,366.38,124.38Zm.91-1.91a.67.67,0,0,0,.62-.15.82.82,0,0,0,.29-.54,4.3,4.3,0,0,0,.08-.69c0-.1-.1,0-.12.27a.66.66,0,0,1-.18.48c-.06.08-.12.19-.19.08s.07-.44.14-.72-.08-.6-.19-.25,0,.87-.25,1-.28,0-.17-.27.13-.44.16-.52.11-.43.12-.52,0-.2-.09-.2-.08.22-.09.34c0,.31-.07.69-.17.59a1.92,1.92,0,0,1,.05-.83c0-.16.08-.35.13-.55s0-.43.06-.6a2.35,2.35,0,0,0,.2-.51,4.59,4.59,0,0,1,.18-.56,3.39,3.39,0,0,0,.08-1.66,8.22,8.22,0,0,1-.13-2.13c.05-.08.35-.11.47-.2s.15-.31.19-.36.34-.19.59-.46c.08-.08,0-.52.22-.55s.3.36.2.52.35.38.38.6-.09.11-.06.57a18.78,18.78,0,0,0,.22,2.12c0,.25.12.48.19.79s-.15.44-.08.88a.51.51,0,0,1-.11.45c-.19.26-.36.36-.39.76s-.35,1.07-.31.62c0-.13,0-.55,0-.45s-.08.62-.26.91-.08.41-.09.75-.37.34-.3.61-.36.66-.62.92c-.12.11,0,.15.17.06s.34-.25.36-.22-.16.43-.44.49a1.29,1.29,0,0,0-.4.06,2,2,0,0,0-.31.22.51.51,0,0,1-.35.11c-.08,0-.17.22-.24.09a2.2,2.2,0,0,1,.07-.37c0-.15-.12-.18-.15-.12s0,.29-.14.29-.2-.3-.06-.42a.27.27,0,0,1,.31-.1c.12,0,.2-.07.06-.18a.34.34,0,0,1-.08-.46C367,122.3,367,122.4,367.29,122.47Zm0-5.71c0-.13,0-.22-.1-.61s-.09-1.61.07-1.67.41.75.41.93a2.18,2.18,0,0,1-.06.55,8,8,0,0,1,0,1.3c-.05.17-.05.3-.16.3S367.3,117,367.28,116.76Zm-.18-5.29c0-.1.17-.44,0-.56a1.1,1.1,0,0,0-.45-.2c-.14,0-.25-.2-.31-.31s.08-.49.21-.47.16.38.39.41.27-.35.21-.47-.58-.33-.52-.76c0-.19.12-.18.21-.17s.28.2.43.21.23-.2.2-.37-.61-.49-.68-.6.16-.39.3-.45.21.23.39.3.2,0,.25-.07c.15-.27-.46-.38-.64-.83-.07-.18.22-.39.4-.47s.3.25.44.22a.19.19,0,0,0,.09-.26c-.19-.21-.45-.21-.5-.3s-.28-.83,0-.84c.1,0,.33.42.64.39.13,0,.18,0,.18.17s.14.26.22.4a.52.52,0,0,1-.19.62c-.22.14-.49,0-.61-.07s-.08.15.19.25.53.65.25.85-.6.1-.66.17.06.08.15.13.07.11.13.19.32.09.18.44-.68.37-.6.46c.22.25.32.29.31.45a.58.58,0,0,1-.44.52c-.17,0-.3,0-.06.2s.5.15.34.54S367.05,111.58,367.1,111.47Zm-.26,2.93c-.26,0-.34-.12-.24-.22s.2-.09.2-.2-.12-.18-.13-.38.19-.1.19-.1c.17.06.17.36.17.61A.3.3,0,0,1,366.84,114.4Zm-.38-1.93s.06.33,0,.48a.35.35,0,0,1-.39.19c-.12,0,.2-.17.22-.29a.35.35,0,0,0-.2-.37.57.57,0,0,1-.36-.43c0-.1.1-.16.22,0a.61.61,0,0,0,.42.24c.21,0,.31-.09.33-.15.07-.22-.2-.32-.32-.4a.71.71,0,0,1-.22-.39c0-.11-.08-.29,0-.35s.3.07.3.15-.05.18,0,.22a1.39,1.39,0,0,1,.49.51.39.39,0,0,1-.12.55C366.71,112.5,366.5,112.43,366.46,112.47Zm-1.16-1c.11-.08.1-.15.08-.28s-.33-.36-.36-.56-.1-.34,0-.32.24.34.44.48.39.45.27.62C365.49,111.78,365.09,111.66,365.3,111.52Zm-.2-2.2c.08-.08.27.12.27.23s.06.34.22.31.41-.28.15-.5.06-.18-.4-.57c-.15-.13-.24-.63,0-.68s.4.32.47.39.07.2.33.15c.08,0,.11-.24-.07-.4a1.82,1.82,0,0,1-.46-.69c-.07-.23.07-.32.19-.26s.33.37.51.37.15-.11.19-.24-.36-.33-.51-.47a.55.55,0,0,1-.18-.45A.81.81,0,0,1,366,106c.1-.07.27.08.3.15s.19.17.19.17,0,.12-.09.1-.22,0-.21.09a.55.55,0,0,0,.19.31,3.11,3.11,0,0,1,.41.32.67.67,0,0,1,0,.5c-.16.06,0,.16-.21.22a1,1,0,0,1-.53.05c-.07,0,.2.23.3.26s.3.36.26.54-.08,0-.14.19-.52.11-.69,0-.17,0,0,.21.46.29.47.47a.51.51,0,0,1-.23.42c-.11.07-.3,0-.33.19s.16.21.16.3a.79.79,0,0,1-.38.36c-.1,0-.08-.1.05-.23s0-.24-.11-.39-.36-.18-.43-.35A.46.46,0,0,1,365.1,109.32Zm-1.63-7.38c0-.11.33-.11.39,0s.09.18,0,.2c-.26,0-.22-.07-.28-.08S363.45,102,363.47,101.94Zm1.58,4.1c-.19.48-.1-.06-.15-.05s-.16.29-.24.37a.79.79,0,0,1-.48.09c-.11,0,0-.37,0-.44.14-.3.2-.37.3-.37a1.56,1.56,0,0,0,.48,0c.07,0,.09-.15.19-.24s-.09-.2,0-.23.15-.19.19-.36a.39.39,0,0,0-.17-.43c-.13-.09-.45-.38-.47-.52s-.43-.53-.22-.42a.66.66,0,0,0,.8,0c.19-.14.26-.23.29-.36s-.1-.17-.13-.12a.52.52,0,0,1-.61.27c-.22,0-.21,0-.06-.1s.19-.09.11-.14a2.08,2.08,0,0,0-1,0c-.12,0-.4.29-.55.33s-.3.06-.12-.1a2.81,2.81,0,0,1,.39-.31c.1-.07,0-.43.07-.56s.14-.3.78-.3c.12,0-.11-.3-.28-.29s-.16-.29-.48-.29a.61.61,0,0,0-.4.27c-.1.15-.13.51,0,.5s.22.13.23.3a.42.42,0,0,1-.32.45.49.49,0,0,0-.36.41.46.46,0,0,1-.16.34.36.36,0,0,1-.6-.21,1.17,1.17,0,0,1,.49-.79c.15-.08.21.06.22-.15s.1-.38.23-.42,0-.49,0-.6a1.49,1.49,0,0,1,.69-.52,1.24,1.24,0,0,0,.58-.21c.13-.13.16-.39.27-.39s.3.3.51.4.57.21.66.37c.19.37-.22.38-.26.43-.34.35-.85.14-.87.22s0,.11,0,.11.54,0,.74,0a.65.65,0,0,1,.42.57c0,.12.34-.1.08.35a1,1,0,0,0-.1.34,1.22,1.22,0,0,0,.1.81c.17.29.06.36-.07.53s.07.85-.1.88A.65.65,0,0,0,365.05,106Zm-1.22-.1c-.12-.08.61-.68.69-.71a1,1,0,0,1,.38,0s.17,0,.18,0-.09.12-.25.1-.28.1-.35.14S363.92,106,363.83,105.94Zm.53-1.54s.17.09.19.14.08.18,0,.21-.24-.16-.26-.22A.14.14,0,0,1,364.36,104.4Zm-.92,1.2c-.08-.09.25-.15,0-.2s-.36-.39-.27-.45.2.42.35.24-.19-.25-.21-.4,0-.23.15-.19a.56.56,0,0,1,.26.5c-.05.28.14.07.09.11s-.07-.38,0-.33a1.2,1.2,0,0,1,.12.35c0,.07.17-.14.25-.18s.38-.1.48-.22a.33.33,0,0,0,0-.4c-.07-.08-.29-.19-.38-.3s0-.17-.06-.23-.13-.2,0-.18.42.41.5.54.35.51.31.62-.51.15-.64.21,0,.14-.18.2a1.84,1.84,0,0,0-.25.13s0,.12-.2.14l-.08,0C363.83,105.57,363.54,105.71,363.44,105.6Zm-.38-.89a.81.81,0,0,1,.12-.43.31.31,0,0,1,.16,0c0,.07,0,.15-.07.2S363.07,104.86,363.06,104.71Zm.58-.36c-.07.12-.2,0-.12-.08s.3-.28.4-.29.1,0,.08,0S363.74,104.18,363.64,104.35Zm.62.43a.1.1,0,0,1-.13.1c-.09,0-.16-.07-.16-.13a.16.16,0,0,1,.1-.11C364.12,104.63,364.24,104.73,364.26,104.78Zm-.08-.47a2.57,2.57,0,0,1-.44.29c-.07,0-.11-.08-.1-.11a1.5,1.5,0,0,1,.45-.27C364.15,104.2,364.2,104.29,364.18,104.31Zm-1.38.32s-.09-.19.08-.41.26-.29.13-.24-.3.12-.34.21c-.12.28-.19.13-.13,0a1.3,1.3,0,0,1,.39-.47,3.37,3.37,0,0,1,.5-.15c.17-.07.46-.34.58-.36s.13,0,.11.13-.08.11-.2.25a5.64,5.64,0,0,0-.4.54c0,.08-.17.1-.31.1s-.15,0-.23.17S362.83,104.64,362.8,104.63Zm2.59-4.95c.25,0,.3.39.35.08,0-.12-.19-.23-.27-.28s0-.15.07-.15.32.25.45.21c.38-.14.5-.49,1-.46s.43.36.44.54.26,0,.25.5.14.12.09.47c0,0-.11,0-.09.08.13.32-.1.36-.2.39s-.15.12-.1.16.29.29.17.38-.53-.06-.31.1.48.81.21,1-.35-.23-.62-.28c-.1,0-.1.1,0,.21s.49.31.51.64a.85.85,0,0,1-.31.69c-.24.08-.19-.12-.11-.25s.12-.14,0-.21,0-.15-.11-.19-.41,0-.64-.18-.13-.35,0-.37.17.14.3.12.16-.38.05-.45a.9.9,0,0,0-.5-.14c-.1,0-.18-.15-.11-.15a1,1,0,0,0,.9-.53,1.33,1.33,0,0,0-.2-.95.74.74,0,0,0-.35-.31.57.57,0,0,0-.27,0,.81.81,0,0,1,.44,1.34c-.5.38-.77.17-.62.08a.72.72,0,0,0,.41-.6c0-.15-.3-.38-.67-.43s-.6-.15-.66-.5A.43.43,0,0,1,365.39,99.68Zm2.44,1.46c.16.14.12.46.44.51.09,0,.24-.05.32,0a.69.69,0,0,0,.53,0c.08-.07,0-.32-.27-.36s-.58,0-.82-.13a.41.41,0,0,1-.12-.54c.07-.09-.13-.22.09-.38s.76,0,1,0a3.3,3.3,0,0,1,.73.52.52.52,0,0,1,0,.53c-.06.13-.25,0-.32-.24a1.54,1.54,0,0,0-.4-.58c-.07-.06-.25-.06-.26,0s.24.23.34.37c.25.34.43.81.12,1-.12.07-.52,0-.42,0s.05.25.14.31.33.3.28.58a.37.37,0,0,1-.41.3c-.11,0,.1-.55-.12-.53s-.58-.07-.67-.33-.17-.14-.25-.19a.15.15,0,0,1,0-.22.5.5,0,0,0,0-.55C367.64,101.18,367.69,101,367.83,101.14Zm.11-1.49c.21-.11,1,.29.88.34s-.68.13-.82,0S367.85,99.69,367.94,99.65Zm1.07.15a.59.59,0,0,1,.52.19c.25.3.28.6.2.49s-.3-.19-.49-.29-.06-.17-.1-.24S369,99.8,369,99.8Zm.81,3.1c0,.11-.2.16-.21.07a.33.33,0,0,0-.09-.33c-.1-.1-.11-.25-.21-.3s-.26-.2-.21-.27.29,0,.45-.13.09-.32.13-.4.08-.07.1,0a.75.75,0,0,1,0,.47c-.07.13-.18.21-.05.37A.61.61,0,0,1,369.82,102.9Zm.06,1.22s-.19,0-.25-.22-.28-.11-.34-.39a.47.47,0,0,1,.18-.42c.09-.1.28.26.35.49A1.89,1.89,0,0,1,369.88,104.12Zm.07.32c.15,0,.18,1.13-.05,1.23-.08,0-.08.25-.06.44s-.14.1-.26.35-.08.42-.19.35-.06-.25-.05-.43a1.27,1.27,0,0,0-.21-.63c-.12-.23,0-.27.18-.25s.26.53.33.38a.94.94,0,0,0,0-.44c0-.08-.09-.09-.22-.25a.69.69,0,0,1,0-.48c0-.16-.1-.09-.16-.4,0-.13.15-.21.2-.16s0,.15.15.23.19.12.19.25.08.25.08.25S369.83,104.47,370,104.44Zm0-3.7c0-.15.1-.25.24-.19a.48.48,0,0,1,.2.46.35.35,0,0,0,.2.38c.11,0,.19-.06.2-.24a1.1,1.1,0,0,0-.23-.56c-.14-.21-.34-.16-.42-.44-.12-.48.05-.54.07-.73s.09-.42.25-.43.28.1.26.37c0,.56,0,.16.08.09a1.91,1.91,0,0,0,.14-.31.5.5,0,0,0-.16-.46.42.42,0,0,1-.1-.35c0-.12.08-.14.18-.2s.1-.16,0-.18-.12,0-.18.07-.11-.28-.11-.41a.38.38,0,0,1,.27-.37c.2-.1.26,0,.38,0a.32.32,0,0,0,.32-.09c.08-.08.11-.18.26-.2s.19,0,.39.16a1.12,1.12,0,0,1,.37.53c.08.16.09.24.05.32a.13.13,0,0,1-.19,0,1.67,1.67,0,0,0-.21-.28c-.09-.09-.13-.22-.28-.25s-.2-.09-.05.06a1.74,1.74,0,0,1,.33.41c.06.15,0,.13-.08.13a.72.72,0,0,1-.26-.25.4.4,0,0,0-.31-.17c-.11,0-.21.17-.32.18s-.17,0-.25,0,.2.1.25.18,0,.07-.12.2.12.11.23.1.18-.19.2-.24-.06-.25,0-.29.19.15.22.23.06.31,0,.35a3,3,0,0,0-.65.77,1,1,0,0,0,0,.62c0,.13-.21.37-.26.5a1.2,1.2,0,0,0,0,.68c.07.17.22.42.28.56a.31.31,0,0,1-.07.37c-.19.18-.15-.16-.24,0a.78.78,0,0,1-.55.42.31.31,0,0,1-.34-.14c-.06-.06.05-.15.16-.23s.09-.17.09-.28-.12-.19-.22-.31S370,100.89,370,100.74ZM372.56,97c.08-.16.36-.2.53.09a.69.69,0,0,1,.06.55.4.4,0,0,1-.16.27s-.08,0-.07-.06-.19-.28-.28-.4A.45.45,0,0,1,372.56,97Zm1,1a.34.34,0,0,0,.07-.19.67.67,0,0,0-.2-.35.45.45,0,0,1-.13-.4.22.22,0,0,1,.2-.23.36.36,0,0,1,.33.09.48.48,0,0,1,.12.47,2.69,2.69,0,0,1-.13.4.33.33,0,0,0,0,.17h0a4.24,4.24,0,0,1,.53,0s-.05-.06-.06-.2a.3.3,0,0,0-.06-.23.52.52,0,0,1,0-.55.28.28,0,0,1,.28-.09c.14.07.14.33.14.34a2.34,2.34,0,0,1,0,.48c-.1.18-.17.16-.12.25h.09l.28,0h0s.07,0,0-.19-.12-.19-.15-.36a.75.75,0,0,1,.05-.46c.08-.15.15-.18.23-.17s.25.07.27.38-.11.3-.16.5,0,.22.05.3,0,0,0,0l.3,0c1.3.3,1.54.78,1.62.94.19.35.14.78.24.87a.86.86,0,0,1,.27.5c.05.32-.47.46-.57.68s-.12.19-.2.16c-.29-.08-.4-.71-.66-.81s.59-.26.79-.49.08-.13-.35,0-.94.37-1.3.13,0-.85.3-1,.54-.26.93.13.38.38.42.36a1.7,1.7,0,0,0-.66-.79c-.45-.16-.87-.12-1.39.62-.31.43.12.55.19.87s-.16.31-.21.38-.09.07-.31.07-.19,0-.31-.08-.42.07-.34-.36.32-.38.13-.86a1,1,0,0,0-1.39-.64,2.93,2.93,0,0,0-.83.71c.05,0,.3-.12.63-.39a.73.73,0,0,1,.92,0,.6.6,0,0,1,0,.91c-.36.25-.62.1-1,0a2.58,2.58,0,0,0-.72-.17c-.21,0,0,.09,0,.09a.78.78,0,0,1,.32.08c.09,0,.21.2.38.27s.55,0,.49.09-.36,0-.56.65c0,.11-.13.13-.22.21a.89.89,0,0,1,0,.15c-.05.16-.08.07-.08.22s.19.06.17.37.07.3-.12.23-.16-.29-.34-.24,0,.13.11.17a.31.31,0,0,1,.15.22,3.34,3.34,0,0,1,0,.59c0,.2.05.23.26.28a.93.93,0,0,1,.54.22c.15.16,0,.34,0,.45s-.14.06-.25-.06,0-.26-.37-.36a1.12,1.12,0,0,1-.4-.13c-.11-.07-.08-.27-.09-.45s.15-.12.13-.35-.14-.14-.18-.37,0-.25.17-.39.15-.22.15-.22l0-.41c-.29-.3-.69-.43-.72-.89,0-.16.14-.35.35-.52s-.06-.52.09-.85a3.19,3.19,0,0,1,2-.86h0Zm1.77-.52a1,1,0,0,1,.15-.46.63.63,0,0,1,.46-.28c.18,0,.13.22.1.31s-.12.2-.26.59c-.05.17-.23.31-.32.26S375.27,97.68,375.29,97.41Zm1-.37a1.16,1.16,0,0,1,.74-.12c.3,0,.44.21.39.4s-.29.36-.6.5-.18.17-.12.22.23,0,.32,0c.28.12.36.38.42.39s.14-.09,0-.23-.29-.29-.3-.42.14-.24.34-.15.06.31.17.46a.86.86,0,0,1,.22.47.74.74,0,0,1-.28.54c-.19.13-.08.17-.06.18s.12-.13.23-.06.15.17.27.32.27.19.3.48a.72.72,0,0,1-.1.48c-.26.43,0,.3.12.44s.09.14.07.27-.18.36,0,.59c.07.08.08.22,0,.26s0,.46-.08.51-.26-.18-.25,0,.18.2.14.32-.18.16-.22.1a1.24,1.24,0,0,0-.16-.3c-.05,0-.16-.15-.09,0a.93.93,0,0,0,.1.2.92.92,0,0,1,0,.3c0,.19,0,.25-.08.28s-.38-.25-.39-.36,0-.21-.08-.33-.24-.44-.1-.61.2,0,.24,0,.17,0,.08-.11-.15-.07-.15-.22a1.07,1.07,0,0,1,.23-.73,1.05,1.05,0,0,0,.2-.84,4.43,4.43,0,0,0-.42-.64.43.43,0,0,1-.13-.46c.06-.29.14-.61.06-.62s-.31-.36-.42-.32-.66-.13-.72-.28a.35.35,0,0,1,.2-.51c.31-.15.41.11.42,0a.19.19,0,0,0-.25-.23c-.17,0-.27,0-.35.18s-.14.33-.24.34-.14-.15-.13-.23A.91.91,0,0,1,376.25,97Zm2.55,5.36s.11-.05.05.17a3.8,3.8,0,0,0-.08.84s0,.06,0,.09,0,0-.07.07c-.25.18-.27.45-.23.44a2.63,2.63,0,0,1,.31-.34c.06,0,.09.08.09.15a1.31,1.31,0,0,1-.09.47c-.09.24-.26.31-.31.57a1.24,1.24,0,0,0,0,.58c.11.27.1.17.1-.07a.84.84,0,0,1,0-.35c0-.07.14-.24.19-.32s.16-.25.28-.24.15.42.13.55-.06.28-.08.38c-.09.33-.28.17-.35.53s0,.46.05.46.08-.36.48-.64c0,0,.21,0,.15.27,0,.08-.16,0-.07.16s-.12.21-.17.38-.27.26-.22.29.1.67.18.5.32-.66.5-.66.11.25-.11.6-.29.57-.38.57-.2-.2-.19-.52-.22-.31-.36-.58,0-.52-.15-1-.28-.41-.33-.72.25-.67.17-.87a.38.38,0,0,1,0-.35c.12-.18.23-.29.22-.47A2,2,0,0,1,378.8,102.4Zm2.74,3c-.23.08-.34.18-.32.32s.13.18.19.23,0,.11-.22.11-.17-.17-.24-.33-.06-.26.14-.42a4.38,4.38,0,0,0,.69-.71c0-.08-.14-.13,0-.2s.46-.41.55-.34.09.29.09.38a1.17,1.17,0,0,1-.26.61A1.46,1.46,0,0,1,381.54,105.38Zm-2.14,3.06c.12,0,.12.17.06.37a1.06,1.06,0,0,0,0,.5c0,.09-.2,0-.25-.26S379.27,108.4,379.4,108.44Zm.67,1.06c.31.19.37-.31.46-.54s.21-.2.3,0-.06.41-.11.62c-.13.64-.33.23-.29.53s.14.49,0,.49-.36-.3-.34-.47.1-.34,0-.41-.41-.22-.47-.58.22-.93.45-.92c.08,0,.18.11.18.25s-.31.48-.37.64A.31.31,0,0,0,380.07,109.5Zm-.22-2c.08,0,.13.19.13.32s-.28.43-.43.61-.19-.27-.14-.37S379.67,107.45,379.85,107.45Zm-.23-1.66c0-.11.36-.26.41-.33s0-.16,0-.26.22-.12.33-.18a.4.4,0,0,1,.33,0c.18.1.11.28-.11.49s-.59.31-.55.38a.34.34,0,0,1,0,.35c-.11.15-.17.11-.25,0A.5.5,0,0,1,379.62,105.79Zm0-1.51a.89.89,0,0,1,.63-.31c.13,0,.1.43.2.52s-.1.2-.27.29-.36.1-.38.15.11.31,0,.37-.33,0-.38-.09A1,1,0,0,1,379.62,104.28Zm-.69-1.59c0-.23.29-.32.35-.36s0-.28.08-.27a2.27,2.27,0,0,0,.61,0c.25-.07.41-.38.44-.25a1.7,1.7,0,0,1-.28.9c-.11.15-.36,0-.53,0s-.28.06-.31.21,0,.23-.12.2A.34.34,0,0,1,378.93,102.69Zm.24,1.25c-.09,0-.29-.19-.12-.32a1.6,1.6,0,0,1,.32-.26c.24-.13,0-.22.3-.29s.46-.16.55-.15a.9.9,0,0,1,.52.3c.1.07-.19.33-.46.43s-.65,0-.77.13-.29.17-.06.34,0,.09-.12.08S379.24,104,379.17,103.94Zm.41,7.49a.4.4,0,0,0,0,.42c.12.2-.06.09-.06.09s-.18,0-.23-.45a1.14,1.14,0,0,1,.25-.81c.17-.18.27-.55.09-.53s0,.41-.21.45-.33-.18-.32-.45,0-.34-.06-.41-.2-.08-.2-.14.08-.17.24,0,.08.08.22,0,.32-.07.36,0-.34.47-.3.61.22-.42.45-.36,0,.4.14.46a.57.57,0,0,1,.06.66C379.89,111.24,379.7,111.25,379.58,111.43Zm-.15,2.9c-.06,0-.35-.24-.16-.41s.29,0,.31.1S379.52,114.25,379.43,114.33Zm-1.35-.94c0,.08-.22,0-.22-.18s.15-.41.27-.41.16.22.11.33S378,113.32,378.08,113.39Zm-.18,4.48a3.72,3.72,0,0,1-.54,1.3c-.08,0-.13-.32.06-1.51a2.85,2.85,0,0,0,.06-.39c-.09-.4.07-.34.13-.53s-.13-.19,0-.38,0-1.86.29-1.94c.12,0,.28.69.15,1.85A13.49,13.49,0,0,0,377.9,117.87Zm.4,4c0,.11-.43,0-.54-.11a7.26,7.26,0,0,1-.08-1.76c0-.1.06-.57.24-.59s.21.3.26.45A14.31,14.31,0,0,1,378.3,121.86Zm.17.44a1.05,1.05,0,0,0,.2.61s0,.13,0,.15,0,0,.06,0,.19-.05.24.08a.35.35,0,0,0-.26.08s-.12.18,0,.25.2.23.1.23-.21,0-.24-.1,0-.23-.07-.47-.12-.19-.2-.42-.21-.31-.06-.46S378.48,122.15,378.47,122.3Zm.46.22s-.06.12-.11.09,0-.32-.11-.42,0-.13.11-.13S378.94,122.42,378.93,122.52Zm.2.16c-.08.06-.11,0-.13-.06s.1-.21.05-.33-.14-.31-.08-.32a.68.68,0,0,1,.23.41C379.2,122.49,379.2,122.63,379.13,122.68Zm-.25.62c0-.07,0-.14.1-.13s.08.1.1.14a.77.77,0,0,1,0,.31c0,.06-.1.1-.19-.12A.32.32,0,0,1,378.88,123.3Zm-.46,3.6c-.05,0-.07-.21.07-.22s.18.1.13.17S378.47,127,378.42,126.9Zm-1.76,4.63a.25.25,0,0,0,0-.19c-.05-.1-.3-.37-.21-.37s.11,0,.2,0,.26.21.28.29,0,.25-.05.28S376.63,131.61,376.66,131.53Zm-.23.27c0-.06.19,0,.33,0s.1.08.11.12-.14.12-.27.12S376.42,131.92,376.43,131.8Zm-1.4-.26c.07-.06.1-.15.06-.2s-.1-.2,0-.21l.2,0c.05,0,.25.35.16.44S375,131.58,375,131.54Zm-4.37-7.17s0-.2.11-.4.13-.23.24-.23h.3c.2,0-.08.15-.2.25s-.05.36-.13.38A.89.89,0,0,1,370.66,124.37Zm-1.54-.46c-.36.18-.24.5-.34.49h-.35c-.08,0,0-.2,0-.26a.59.59,0,0,1,.43-.31C369,123.82,369.17,123.89,369.12,123.91Zm.26-1.44c.14,0,.25-.58.37-.49s-.05.68-.22.72c-.35.1-.47.57-.5.43s-.14-.72,0-.77S369.15,122.53,369.38,122.47Zm.16-.64a1,1,0,0,1-.06.27c0,.13-.19,0-.19-.17s.06-.28.19-.29A.59.59,0,0,1,369.54,121.83Zm.12-1.42c0,.2-.12.94-.18.9a2.17,2.17,0,0,1,0-.94,1.39,1.39,0,0,1,.28-.44C369.86,119.89,369.71,120.21,369.66,120.41Zm.46-5.87c0-.11.08-.47.22-.47s.13,1.31.05,1.42,0,1.32-.06,1.26a4.11,4.11,0,0,1-.3-1.36c0-.14,0-.35-.06-.51S370.08,114.65,370.12,114.54Zm-.18-1.57c.1,0,.14.18.12.27s.11.28,0,.28-.17-.09-.23-.21S369.86,113,369.94,113Zm-.35-1c.08,0,.24.12.25.18s.13.27.09.32-.18.14-.34-.07S369.39,112.11,369.59,112Zm-.39-.92c0-.18.12-.22.2-.22s.13,0,.13.2a.56.56,0,0,1-.17.42C369.3,111.48,369.18,111.25,369.2,111.08Zm.17-1.2c.08,0,.22.25.16.4s-.34-.1-.34-.2S369.3,109.91,369.37,109.88Zm.17-.31c-.1.22-.15-.09-.16-.14s-.06-.4,0-.44S369.72,109.16,369.54,109.57Zm-.15-.94c-.07,0,0-.3.11-.36s.15.07.15.13S369.53,108.72,369.39,108.63Zm.39-1c0,.14,0,.32-.21.4s-.12-.07-.13-.24,0-.34.11-.36S369.82,107.41,369.78,107.59Zm.38,2c.16-.1.25.27.16.41s-.34.37-.41.53-.18-.26-.11-.41A1.55,1.55,0,0,1,370.16,109.57Zm0-2.84c0,.11-.1.34-.24.28a.42.42,0,0,1,.06-.55C370,106.41,370.18,106.62,370.13,106.73Zm.07,2.25c-.15.12-.21.42-.28.31a.67.67,0,0,1,0-.48c.07-.3.24-.46.37-.41A.76.76,0,0,1,370.2,109Zm.15-1.74c.13,0,.32.17.2.31s-.52.3-.49.41-.31-.1-.09-.38S370.24,107.27,370.35,107.24Zm2.58-2c.06,0,0,.32,0,.35s.12-.16.12-.16.13-.22.19-.23.06.08,0,.19-.25.3-.24.43.11.35,0,.44-.27.08-.47-.05-.19-.42-.27-.55-.09-.13-.24-.15-.1-.3-.08-.41.15-.14.15-.14c.15,0,.2.11.21.23s.12,0,.2-.13.06.42.14.42S372.79,105.22,372.93,105.24Zm5,1.33c-.18,0-.17-.15-.24-.33s0-.35.09-.35.13.22.2.32S378.1,106.56,377.92,106.57Zm.33,1c-.23,0-.19-.11-.27-.25s-.23-.15-.28-.33a.22.22,0,0,1,.06-.22c.1-.08.22,0,.33.07s.36.24.39.36S378.52,107.56,378.25,107.56Zm-.38,2.6c.06-.06.13-.07.08-.19s-.42-.17-.51-.43.06-.26.26-.26.2,0,.35.2a.38.38,0,0,1,.08.51C378,110.22,377.82,110.22,377.87,110.16Zm0,1.12a.86.86,0,0,0-.32-.46c-.14-.12-.17-.06-.21-.14s.15-.44.29-.43a.2.2,0,0,1,.13.09.57.57,0,0,1,0,.29c0,.06.12.06.24.17a.39.39,0,0,1,.07.38C378,111.27,377.87,111.46,377.83,111.28Zm-.2.72c0-.12-.19.06-.31-.1a.19.19,0,0,1,.09-.3c.19-.07.48.18.54.27s0,.28-.11.32S377.62,112.21,377.63,112Zm-.28,1.41c-.17,0-.09,0-.09,0a.34.34,0,0,0,.14-.29.74.74,0,0,0-.14-.36c-.07-.14-.06-.27.05-.31s.33.25.33.36S377.61,113.35,377.35,113.41Zm-4.54,5.53c-.14.14-.13-.55-.13-.66,0-.47-.14-1.66-.15-1.89a3.57,3.57,0,0,1,0-1.22c.08-.15,0-.64.45-.65.14,0,.32.34.44.38s-.11.48-.13.61-.06.13-.06.24a1.21,1.21,0,0,0,.09.4C373.34,116.39,373.33,118.43,372.81,118.94Zm.27,2.42a6.59,6.59,0,0,1,.09,1.24,5.25,5.25,0,0,1-.29-1.57c0-.28,0-.92.15-1v.54C373,120.8,373.07,121.29,373.08,121.36ZM370.39,113c0-.07,0-.38.16-.31s.09.13.12.19,0,.16-.09.28,0,.34-.06.38-.24-.21-.25-.38S370.38,113,370.39,113Zm.21-6.39c0,.15-.39-.26-.22-.44s.25-.38.38-.48.24.08.26.31S370.62,106.41,370.6,106.58Zm1.2.09c-.15.44-.38.32-.8.55-.17.09-.14-.18-.1-.31s.33-.31.49-.38.21-.27.3-.26A.42.42,0,0,1,371.8,106.67Zm.3,1.54c.17-.06.45.07.4.27s-.35.33-.39.47a.42.42,0,0,0,.05.42c.1.09-.2,0-.33-.1a.71.71,0,0,1-.15-.56A.77.77,0,0,1,372.1,108.21Zm.31-.66c-.18.17-.13.27-.16.35s-.3.1-.35-.11a1.45,1.45,0,0,1,.68-1.13c.11-.06.46-.06.49.08C373.13,107.07,372.59,107.38,372.41,107.55Zm.9-.54a.81.81,0,0,1,.35-.22,1.29,1.29,0,0,1,.39,0c.15,0,.12.56-.16.8s-.55.2-.69.4a.4.4,0,0,0,0,.45c.08.08-.41,0-.46-.28a.57.57,0,0,1,.22-.49c0-.05,0-.14.06-.23A1.79,1.79,0,0,1,373.31,107Zm.14-1.69s.05.27.09.33.12-.25.18-.26,0,.2.08.29.33-.36.43-.35-.19.35-.22.44a.26.26,0,0,0,.06.25c.17.11.26,0,.26.14s-.07,0-.21.12-.14.14-.25.13a.72.72,0,0,1-.35-.13c-.1-.06-.25-.1-.25-.44S373.31,105.35,373.45,105.32Zm3.7,2.43c0,.1-.21.36-.39.3s0-.12-.07-.32-.29-.18-.42-.24a1,1,0,0,1-.51-.48c-.11-.29.2-.26.2-.26.27,0,.28.15.29.18a.94.94,0,0,0,.42.33C377,107.38,377.15,107.6,377.15,107.75Zm.36.2c-.25,0-.14-.13-.08-.18a.23.23,0,0,0,0-.38c-.2-.11-.3-.23-.16-.33s.29-.09.55.21S377.76,107.9,377.51,108Zm-.74,1.34c-.09,0,.1-.19.1-.33s-.32-.33-.56-.44-.09-.2,0-.27,0-.43.08-.4a.83.83,0,0,1,.4.29c.07.1.23.16.41.37s.28.28.2.52A.48.48,0,0,1,376.77,109.29Zm-.55-.64c.22.15.2.29.42.64s.45.25.52.4a.52.52,0,0,1,0,.35.39.39,0,0,1-.36.29c-.09,0-.08-.26-.1-.42s-.4-.2-.47-.28S376.08,108.55,376.22,108.65Zm.48,2.92c-.05,0-.11,0,0-.13a.33.33,0,0,0,0-.37,1.56,1.56,0,0,0-.48-.45c-.1,0-.1-.22,0-.28s.15,0,.06-.08a1,1,0,0,1-.22-.37.19.19,0,0,1,0-.2c.08-.06.22.14.26.17s.28.27.3.31,0,.24,0,.26.09.17.36.21.23.36.18.5A.88.88,0,0,1,376.7,111.57Zm.21,1.65c0-.07,0-.13.09-.13s.16.23.17.26-.07.14-.17.09S376.9,113.33,376.91,113.22Zm-1.55-2.6c-.18-.09.07-.22.08-.35s-.09-.37-.28-.39a.81.81,0,0,1-.52-.13.57.57,0,0,1-.28-.44.3.3,0,0,1,.23-.35c.06,0,0,.17.26.22a.49.49,0,0,1,.37.23c.15.17.16.37.4.42s.47.38.3.55S375.5,110.7,375.36,110.62Zm-1-2.75c.08-.05,0-.31.11-.31s.53.4.66.52.18.53.45.6.38.29.35.4a.86.86,0,0,1-.38.46.18.18,0,0,1-.27-.11c0-.1.05-.21,0-.37s-.73-.51-.92-.57a.53.53,0,0,1-.25-.49C374.2,107.93,374.32,107.92,374.4,107.87Zm.06-1.92a.12.12,0,1,1,0-.24.12.12,0,0,1,0,.24Zm1.22,2.12c0-.25-.36-.24-.53-.35a.92.92,0,0,1-.44-.62c0-.18-.42-.33.17-.33.36,0,.37.18.44.27a1.82,1.82,0,0,0,.42.55.56.56,0,0,1,.22.75.27.27,0,0,1-.39.15C375.43,108.37,375.72,108.41,375.68,108.07Zm-1.12-2.75a.55.55,0,0,1,.43.14c.08.1.17.24.17.24s0-.4.13-.4.25.43.24.6,0,.29-.21.37a.88.88,0,0,1-.81,0c-.15-.09.12-.16.25-.41S374.29,105.35,374.56,105.32Zm-1.73,4.28a.61.61,0,0,1,0-.62c.12-.16.23-.09.46-.27s.11-.31.18-.44a.48.48,0,0,1,.24-.21c.24-.07.43,0,.45.31a.44.44,0,0,1-.18.41c-.07.07-.14.07-.28.11a1.26,1.26,0,0,0-.48.52c0,.12.17.33.11.38A.36.36,0,0,1,372.83,109.6Zm-1,3.25c.06-.21.32-.25.42-.45s-.1-.35.13-.36.14-.07.18-.08.17.13.1.22,0,.24,0,.32-.46.18-.46.31-.14.17-.08.35.08.3,0,.25A.63.63,0,0,1,371.84,112.85Zm0-1.23c.44-.42.48-.8.6-.72s.2.44.18.66-.71.44-.73.51S371.72,111.77,371.88,111.62Zm-.15-1.32c.13-.09,0-.33.25-.45s.28-.28.39-.38.3.42.26.59-.38.32-.54.49,0,.23,0,.36-.15.21-.3,0S371.54,110.45,371.73,110.3Zm-.69-1.84c-.05.05-.19.07-.15.36,0,.1-.44-.07-.18-.6a1.14,1.14,0,0,1,.64-.62c.15,0,.27.23.31.37S371.18,108.33,371,108.46Zm0,1.8c.09.11-.36.19-.36-.36,0-.14.14-.43.26-.46s.31-.35.37-.33.24.25.19.34c-.21.45-.43.4-.46.51A.35.35,0,0,0,371,110.26Zm.14,1.45c-.16,0-.31,0-.31-.12a1.57,1.57,0,0,1,.09-.72c.12-.29.25-.27.25-.27s.28,0,.14.45c-.05.17-.33.3-.28.46s.3,0,.36.13a1,1,0,0,1-.07.62c-.15.24-.39.39-.39.2s-.15-.28,0-.38S371.36,111.78,371.15,111.71Zm.07,2c-.14,0-.29-.3-.22-.57s.18-.14.25-.21,0-.15.07-.19a.11.11,0,0,1,.19.06c-.06.22-.24.28-.29.64C371.21,113.53,371.43,113.67,371.22,113.67Zm1.2.37c0,.14.23.22,0,.23s-.37-.19-.39-.46.25-.38.34-.48,0-.1,0-.18a1.42,1.42,0,0,1,.39-.28c.12,0,.13.5,0,.55A.72.72,0,0,0,372.42,114Zm3.34-2.52a.4.4,0,0,1-.26.13c-.18,0,0-.16,0-.26s-.24-.38-.53-.5c-.14,0-.25,0-.52-.23-.1-.11-.07-.35-.25-.44s.06-.19-.26-.41h0a.75.75,0,0,0,0,.15c.05.32-.13.35-.24.46a.67.67,0,0,0-.3.59c0,.2-.16.3-.36.09s0-.66.05-.79.09-.19.26-.26.22-.26.15-.36-.09-.1-.05-.16a.58.58,0,0,1,.54-.09c.08-.07.24-.16.26-.1s0,.26.05.4a.7.7,0,0,0,.3.41c.14.09.34.06.53.24s0,.26.11.34a1,1,0,0,0,.5.26C375.92,111.05,375.87,111.39,375.76,111.52ZM375,115.2c0-.24.57-.38.63-.33s.05.5.06.62c0,.49.2.5.21.6a12.26,12.26,0,0,1-.32,2.3c-.16.19-.14-.15-.27-.57a6.57,6.57,0,0,1-.23-1.6C375.07,115.78,375,115.45,375,115.2Zm-1-.63c.15-.06,0-.22.11-.32a.2.2,0,0,1,.2-.06c.1,0,.15.11.1.28s-.13.46-.32.49S373.94,114.6,374,114.57Zm-.09-1.07c.09-.09.26-.5.28-.44.11.32-.06.35-.12.56s-.47.37-.48.55,0,.27-.08.32-.3.07-.3-.38S373.81,113.61,373.94,113.5Zm.18-2.1c0,.22-.52.58-.61.62s-.06.28-.14.34-.22,0-.27-.26a.49.49,0,0,1,.37-.56c.2-.05.2-.15.21-.27a.32.32,0,0,1,.25-.27C374.05,111,374.16,111.17,374.12,111.4Zm1.23,2.84c.06,0,.1.16.06.25s-.28.21-.29.17.09,0,.08-.16S375.28,114.22,375.35,114.24Zm.41-2c.12.12.07.39,0,.41s-.19-.12-.19-.2-.11-.16-.12-.22S375.65,112.15,375.76,112.25Zm-.15.94a.49.49,0,0,1,.18.41c0,.16,0,.17-.35.34-.05,0-.21,0-.15-.1a1.2,1.2,0,0,0,0-.62C375.22,113,375.55,113.15,375.61,113.19ZM374.33,112s.06,0,.07.07h0s.7.45.8.54.05.52,0,.55-.45-.2-.44-.33.09-.12.09-.21-.4-.25-.36-.36,0,0,0,0h0a.62.62,0,0,1,0,.2s-.08,0-.27.08-.36.45-.38.64.09.39-.09.32-.38-.33-.35-.47.28-.14.37-.3,0-.43.15-.45A1,1,0,0,0,374.33,112Zm.05-.75c-.2-.11-.16-.33-.11-.28.23.19.81.5.93.63a.44.44,0,0,1,0,.42c-.24.17-.7-.34-.77-.44S374.48,111.26,374.38,111.2Zm.45,3.92c-.08.07-.18.09-.2.06s.06-.43.17-.37S375.12,114.86,374.83,115.12Zm-.3-1.28c0-.29-.12-.55-.08-.58s.24.08.32.13a.71.71,0,0,1,.31.31c.08.23-.19.16-.18.23s.11.07.23.14.05.2-.11.22S374.53,113.93,374.53,113.84Zm1.6-.8a1.27,1.27,0,0,1,0-.67c0-.11-.15-.18-.2-.29s.13-.11.29,0a.39.39,0,0,1,.2.3c0,.17,0,.29,0,.31s.34.47.28.65-.14.28-.27.14A3.11,3.11,0,0,1,376.13,113Zm-.12.36c.05-.1.17,0,.19.07s.09.23,0,.22S375.94,113.58,376,113.4Zm.07.62c0-.07.18,0,.21,0a.12.12,0,0,1,0,.22C376.16,114.31,376.07,114.12,376.08,114Zm0-2.41a1.11,1.11,0,0,1,0-.74c.15-.13.34.63.6.83s.32.32.26.44-.29.34-.2,0S376.19,111.69,376.11,111.61Zm1.26-3.15c-.07-.12,0-.36.31-.32a.38.38,0,0,1,.33.21.89.89,0,0,1,0,.52c0,.12-.21.46-.18.09S377.55,108.81,377.37,108.46Zm-.58-1.85c-.06-.13-.05-.32.16-.33a.27.27,0,0,1,.27.37.35.35,0,0,1-.39.27C376.58,106.89,376.91,106.83,376.79,106.61Zm-.56-1.19c.1-.14,0-.61.09-.61s.18.15.22.33c.1.42-.2,0-.11.21.16.36.05.58,0,.65a.93.93,0,0,1-.7.29c-.18,0-.14-.06-.06-.13a.56.56,0,0,0,.08-.4c0-.16-.17-.32-.15-.42s.31.27.39.25-.09-.41,0-.44S376.17,105.51,376.23,105.42Zm.38-2.81c0-.11.14-.12.18-.17s0-.27.11-.34.11-.08.16.05,0,.29.05.42,0,.25,0,.38-.22.19-.42.24a.53.53,0,0,0-.37.36c-.09.24-.24,0-.23,0s-.09-.31,0-.36a1.51,1.51,0,0,0,.46-.32C376.65,102.71,376.58,102.74,376.61,102.61Zm-3,.89a1,1,0,0,0,.59.34,1.12,1.12,0,0,0,.78-.1c.26-.19.56-.88.76-.92s.21,1,.19,1.13a1,1,0,0,1-.62.52c-.15,0-.43,0-.36-.08s.24-.1.26-.2-.13,0-.25,0-.29-.09-.26,0,.12.18,0,.23-.57.11-.65,0,.13-.25.07-.31-.11.1-.25.15-.44,0-.38.07.17.06.26.08.16.07-.05.09-.53,0-.68-.11a.73.73,0,0,1-.23-.64c.06-.26.09-.84.19-.84S373.47,103.34,373.64,103.5Zm.81-.1a.24.24,0,0,0,.27,0c.12-.06.1-.11.3-.31s.29-.13.26,0-.25.51-.52.52c-.08,0-.27,0-.29.05s-.25.13-.45,0-.42-.46-.38-.65.28-.29.48-.3.15-.16.2-.12a.68.68,0,0,0,.59.24c.26,0,0,.44-.27.46S374.39,103.35,374.45,103.4Zm-4.4,8.11c-.14.08-.16-.25-.11-.4a.83.83,0,0,1,.38-.42c.07,0,.32,0,.24.17A2.53,2.53,0,0,1,370.05,111.51Zm.45.16c.08,0,.25.26.15.36s.06,0-.1.28-.35.15-.42,0S370.39,111.73,370.5,111.67Zm-.81,12.11c.18,0,.23,0,.23.1s-.21.16-.26.25,0,.23-.07.29a1.45,1.45,0,0,1-.39,0c-.16,0-.07-.18,0-.35A.51.51,0,0,1,369.69,123.78Zm.07-.45c0,.08-.08.18-.16.12s-.05-.28.06-.3S369.8,123.24,369.76,123.33Zm.58-1c-.08.17-.39.5-.38.59s0,.14,0,.24c0,.3-.1.49-.14.47s.08-.24,0-.46-.32-.16-.38-.12,0,.62-.08.58a.55.55,0,0,1-.13-.47.55.55,0,0,1,.49-.34c.2,0,.22-.14.23-.3s.08-.49.32-.54S370.42,122.16,370.34,122.32Zm.22,1.09c-.06,0-.18-.07-.15-.14s0-.14.08-.14.12,0,.15.09S370.63,123.4,370.56,123.41Zm-.2-.44a.36.36,0,0,0,0,.41c.06.08.11.19.06.24s-.25,0-.32-.05a.82.82,0,0,1,.09-.66.33.33,0,0,1,.28-.11.52.52,0,0,1,.24.15c.21.2.07.37.05.38s.05-.18-.17-.36C370.53,122.94,370.41,122.91,370.36,123Zm0,1.33c.05.16,0,.17-.25.17s-.24,0-.24-.16a1,1,0,0,1,.18-.36.4.4,0,0,1,.34-.21c.12,0,.31-.06.31,0s-.09.11-.18.19A.53.53,0,0,0,370.4,124.3Zm.77-1.76a.84.84,0,0,1-.05.31c0,.1,0,.24-.05.34s-.11.22-.08.31-.32.19-.35.08.06-.28.17-.27.13-.08.07-.31c0-.08.08-.2.1-.3s0-.16-.09-.16-.36,0-.32-.08,0-.3.08-.39a.11.11,0,0,1,.19,0c.1.07.25,0,.34-.13s.32-1.35.2-1.25-.06.49-.12.7a.8.8,0,0,1-.15.26c-.19.22-.34.22-.39.18s0-.51.1-.51.13.27.17.26.1-.36.06-.52a1.7,1.7,0,0,1,0-.28c0-.37.05-1.23,0-1.27s0-1.71,0-1.8a8.76,8.76,0,0,1-.29-1.85,1.94,1.94,0,0,0-.12-.58,1,1,0,0,1,.2-1,1.11,1.11,0,0,1,.93.14c.17.16.54.48.57.65a2.61,2.61,0,0,1,0,1.06,1.1,1.1,0,0,0-.11.35,8.16,8.16,0,0,0,0,1.46c0,.11,0,.23,0,.32a3.31,3.31,0,0,0,.3,1,.76.76,0,0,1,.15.68c-.09.06-.11-.3-.2-.36s-.14,0-.13,0a2.14,2.14,0,0,1,.2.7,2.55,2.55,0,0,0,.1.51c.07.26,0,.68-.16.7a1.34,1.34,0,0,1-.17-.52,1,1,0,0,0-.07-.24c0-.08-.07-.18-.11-.19s.17.72,0,.85-.21.23-.25.17-.1-.9-.18-1,0,.91-.1,1.13S371.12,122.34,371.17,122.54Zm1.28.37c-.06,0,0,0,0,.12s0,.57-.1.59-.08-.16,0-.28-.07-.3-.1-.39,0-.29-.08-.43-.12-.23-.16-.24-.09.26-.19.34-.16.12-.18.16,0,.11.05.11a.77.77,0,0,1,.28.07.35.35,0,0,1,.12.32.55.55,0,0,1-.19.34c-.11,0,0-.35,0-.4s-.07-.14-.15-.18-.15,0-.25,0a.15.15,0,0,0-.07.18.45.45,0,0,1,.07.32c-.05.12-.28.17-.28-.2,0-.16.06-.33.15-.35s0-.41.08-.68.07-.39.3-.39c.07,0,.17.1.26.1s0-.34,0-.35.13-.27.22-.29.1.13.13.19a1.88,1.88,0,0,1,0,.58s0,.11.06.11.24-.09.14.1-.09.11-.09.17,0,.15.09.11.11-.18.17-.2.21,0,.21.08,0,.17-.11.17-.23,0-.25,0S372.51,122.91,372.45,122.91Zm-.09.79c.07,0,.28.08.1.2a.94.94,0,0,0-.33.38s-.18,0-.18-.11S372.29,123.71,372.36,123.7Zm-.72-.56c.18,0,.19.13.18.21s0,.16-.11.16-.13-.08-.14-.16S371.57,123.13,371.64,123.14Zm.06.6c.13,0,.42,0,.35,0a1.07,1.07,0,0,0-.3.25c0,.06,0,.22-.05.27s-.18,0-.32,0S371.61,123.75,371.7,123.74Zm1.28-.37c0,.08-.17.06-.2,0s-.1-.18.08-.19S373,123.3,373,123.37Zm.07-.23c0-.07-.27-.21-.36,0a.47.47,0,0,0,0,.29c0,.06.17.14.19.25s-.22,0-.27-.07a1,1,0,0,1,0-.21.7.7,0,0,1,0-.45.27.27,0,0,1,.25-.13.35.35,0,0,1,.27.15.4.4,0,0,1,0,.32s.05.16.05.22-.1.09-.12.1a.09.09,0,0,1-.09-.12c0-.05,0-.13.06-.18A.31.31,0,0,0,373.05,123.14Zm2-.33a.63.63,0,0,1,0,.77,8.13,8.13,0,0,1-1.42,0c-.17,0,0-.27-.08-.41s-.23-.29-.16-.36a.43.43,0,0,0,0-.55c-.09-.09,0-.66,0-.74a1.28,1.28,0,0,0,0-.66,3.63,3.63,0,0,1,.26-2c.16-.29-.24-2.68,0-3,.06-.06,0-.26.1-.28s.2.16.31.07a.46.46,0,0,1,.39-.09c.14,0,.21.16.28.18s.19-.15.24-.07.07,2.21.05,2.31a9.35,9.35,0,0,0,.41,1.88,1,1,0,0,1,0,.59,1.88,1.88,0,0,0,0,.33,1.6,1.6,0,0,1-.08.62c-.07.14-.17.45-.3.69A.81.81,0,0,0,375.09,122.81Zm3,.62c0-.09,0-.14.12-.16s.18.15.11.21S378.05,123.53,378.06,123.43Zm-.17.45a.66.66,0,0,1,.33.05,1.39,1.39,0,0,1,.37.46c0,.14-.23.1-.31.09s0-.29-.3-.47C377.93,124,377.8,123.89,377.89,123.88Zm-1.77,0a.53.53,0,0,1,.32.09c.27.21.18.34.11.27a.78.78,0,0,0-.48-.25C376,124,376,123.89,376.12,123.89Zm-.07-.75a.18.18,0,0,1,.15.23c-.05.11-.07.14-.15,0S375.89,123.14,376.05,123.14Zm1.1.28s-.14,0-.18-.13,0-.19.08-.19a.14.14,0,0,1,.15.12C377.19,123.29,377.19,123.41,377.15,123.42Zm-1.22,0c.06.15-.07.26-.17.2a1,1,0,0,1,0-.77.15.15,0,0,0-.05-.27c-.07,0-.07-.36.08-.36s.26.49.28.3A2.54,2.54,0,0,0,376,122c-.06-.2-.06-.47,0-.46s.09-.35,0-.37-.06-.71,0-.75.07-.51.16-.51.14.55.11.68,0,.13.08.27,0,.31,0,.41,0,.37,0,.63-.18.2-.05.55a1.49,1.49,0,0,0,.09.3c.05.08.13,0,.15-.14a1.21,1.21,0,0,1,.17-.35s.16,0,.21.06a.21.21,0,0,1,0,.28c0,.08-.12.13-.19.23s.21,0,.38,0a.3.3,0,0,1,.24.21,1.12,1.12,0,0,1,0,.24,1.14,1.14,0,0,1-.12.36.13.13,0,0,1-.2,0c0-.1.15-.24.14-.4a.18.18,0,0,0-.09-.18.34.34,0,0,0-.31,0,.18.18,0,0,0,0,.24.39.39,0,0,1,.15.21c0,.16-.09.17-.25.14s-.12-.24-.11-.47-.15-.14-.25-.34-.16,0-.06.08a.52.52,0,0,1,.11.38.24.24,0,0,1-.18.25s0-.17,0-.33-.18-.23-.25-.16S375.92,123.4,375.93,123.45Zm.87.67c-.15-.11-.32-.28-.24-.29a.52.52,0,0,1,.28,0,.89.89,0,0,1,.3.28c0,.08.19.35.09.35s-.35,0-.38-.09S376.86,124.16,376.8,124.12Zm.65.07c0-.06-.36-.32-.29-.32s.31-.05.5.14a1,1,0,0,1,.23.4c0,.09-.05.09-.18.09s-.27,0-.24-.08A.37.37,0,0,0,377.45,124.19Zm.1-2.49c.08-.06.1.12.15.17s.21.21.17.23a.36.36,0,0,1-.25-.07C377.53,122,377.5,121.74,377.55,121.7Zm-.69-3a7.82,7.82,0,0,0,.46,1.61c.08.21.05.64.1.83s-.13.16-.14.32-.06.5.07.59.43.15.51.4a.43.43,0,0,1-.06.32.5.5,0,0,0,0,.32c.06.11.08,0,.15-.13s.27,0,.32.12a1.5,1.5,0,0,1,.09.46c0,.12-.08.11-.13.08s.07-.34,0-.44a.19.19,0,0,0-.23,0c-.13.07.15.42,0,.45s-.13.06-.19,0,0-.26-.05-.29-.14-.06-.17.13-.05.06-.05-.14.12-.35,0-.5a.76.76,0,0,1-.21-.31c-.06-.15.06-.28-.22-.32-.09,0-.4-.09-.36-.25a.27.27,0,0,0-.08-.34c-.09-.09.11-.37,0-.55a2.31,2.31,0,0,1-.36-1.17c0-.68-.07-1.54-.07-1.54a5.68,5.68,0,0,0-.21,1.1,10,10,0,0,0-.3,1.8,1.26,1.26,0,0,1,0,.33,2.8,2.8,0,0,1-.18.45,1.07,1.07,0,0,0-.05.6c.05.07-.19.11-.2-.12a1.26,1.26,0,0,1,.13-.59c0-.08.17-.21.19-.29a.75.75,0,0,0-.13-.43.86.86,0,0,1,0-.55c.12-.57.43-2.5.48-2.66s0-2.34,0-2.61-.27-.78-.07-.81c.46-.06.45-.1.54-.18s.42-.52.55-.52.42.09.4.18c-.06.42.34.75.12,1.62a13.85,13.85,0,0,1-.36,1.62C377,118,376.79,118.35,376.86,118.73Zm1.49-10.19c-.34,0-.05,0,0-.18s-.06-.1-.16-.23-.13-.41.16-.42.33.15.4.4A.36.36,0,0,1,378.35,108.54Zm.25,1c-.14,0-.09-.12-.12-.2s-.17-.12-.2-.2a.2.2,0,0,1,.07-.22.33.33,0,0,1,.35,0,.36.36,0,0,1,.2.37C378.89,109.34,378.75,109.53,378.6,109.53Zm-.39,1.25a.3.3,0,0,1,.32.14c.16.25.14.5,0,.55s-.18-.06-.16-.26A.54.54,0,0,0,378.21,110.78Zm.57-.24c-.06-.31-.18,0-.25-.35s-.29-.12-.08-.36c.08-.08.3,0,.4.18a1.25,1.25,0,0,1,0,1.09C378.64,111.45,378.84,110.85,378.78,110.54Zm-1.55-5.67c.25-.21.11-.82,0-1s.19,0,.33,0,0-.15-.22-.24-.1-.12,0-.18.27,0,.53.3.07.54-.05.75-.1.37-.33.38-.25.25-.33.38a.38.38,0,0,1-.41.22c-.13,0-.12-.12-.08-.15s.12,0,.14,0,0-.19,0-.29a3.3,3.3,0,0,0-.26-.39.25.25,0,0,1,0-.32c.11-.08.24.33.35.29s-.21-.45-.07-.56.13.35.15.34,0-.59.1-.51a1,1,0,0,1,.18.51C377.26,104.68,377.2,104.89,377.23,104.87Zm-1.78-4.51c.09-.09.31-.06.31.18s0,.47-.28.61S375,101,375,101a1,1,0,0,0,.36-.15C375.54,100.74,375.34,100.48,375.45,100.36Zm-2.64.46c.17.13,0,.2.24.41a1,1,0,0,0,.56.24.94.94,0,0,1-.53.07.87.87,0,0,1-.57-.46C372.43,100.92,372.66,100.7,372.81,100.82Zm.1,1.51a1.28,1.28,0,0,1-.61-.19c-.07,0,0-.14.15-.11a2.07,2.07,0,0,0,.59.09,1.83,1.83,0,0,0,.89-.23c.19-.08.28-.12.3-.26s-.06-.12-.24.05a2,2,0,0,1-1.16.21c-.3,0-.38-.18-.55-.4s-.08-.25.05-.25.22.35.4.42a1.44,1.44,0,0,0,.85.08c.19,0,.37-.12.4-.23a.16.16,0,0,0-.08-.18c-.33-.16-.37,0-.58-.17s-.12-.28-.25-.62a.24.24,0,0,1,.14-.33c.08,0,.15,0,.16.21s-.07.39.05.58.27,0,.56.19a1.32,1.32,0,0,0,.51.16c.17,0,.21-.17.4-.19s.14.1.34.15a.54.54,0,0,0,.54-.14c.14-.12.19-.08.24-.23s0-.16,0-.36.44,0,.25.56a.78.78,0,0,1-.45.44,1.2,1.2,0,0,1-.94-.18c-.28-.17-.07.13.22.23.58.19.71.11.87,0s.3-.36.51-.42.17.16,0,.37a.75.75,0,0,1-.65.37,1.64,1.64,0,0,1-.69-.09,2,2,0,0,1-.62-.37c-.14-.1-.07.07,0,.16a1.27,1.27,0,0,0,.8.42,1.82,1.82,0,0,0,1,0c.39-.14.28-.4.57-.58.1-.07.18.07.24.16a.38.38,0,0,1,0,.36c-.07.09-.16,0-.13-.08s-.15-.17-.2,0a1.19,1.19,0,0,1-1.29.65,1.34,1.34,0,0,1-1-.45c-.12-.13-.12-.34-.24-.34s0,.07-.14.25a2.53,2.53,0,0,1-.5.45c-.18.13-.32.06-.7.27-.17.09-.48.07-.46-.1s.32-.11.46-.18S373,102.34,372.91,102.33Zm-.65,2a.47.47,0,0,1-.06.39c-.13.15-.45.12-.49.31s0,.2-.07.31a.35.35,0,0,1-.22.1c-.13,0-.2-.08-.25-.26s-.08-.51-.24-.61a2.54,2.54,0,0,1-.57-.71c0-.11,0-.12.06-.11a3.35,3.35,0,0,1,.52.41c.14.13.14-.52.44-.42s.1.39.16.62c.13.51.09-.16.25-.2s.15.26.13.39S372.19,104.26,372.26,104.34Zm-1-1.51c0-.2-.05-.4.1-.38s.16.14.08.37a1,1,0,0,0-.07.38c0,.34-.17.57-.47.55s-.14-.11-.33-.29-.3-.19-.37-.34a.7.7,0,0,1,0-.48c0-.16.26,0,.49-.13s.16-.25.28-.25.17.29.19.44a2.78,2.78,0,0,1,0,.31S371.27,102.94,371.26,102.83Zm-3.33-.31c.07-.07.1.27.24.29a.49.49,0,0,1,.36.16c.07.1.07.2.21.28s.39.21.42.38-.15.35-.28.47-.07-.21-.3-.35-.65-.16-.76-.38A.78.78,0,0,1,367.93,102.52Zm-1.47,3.06c-.38-.32-.45-.5-.45-.73s.12-.3.25-.23.33.34.45.4,0,.28.07.32.06,0,.09-.07,0-.13.05-.2,0,0,.06,0a.21.21,0,0,0,0-.19c-.05-.12-.12,0-.36-.43a1.19,1.19,0,0,0-.35-.3.37.37,0,0,1-.15-.27c-.05-.12-.28-.37-.18-.44s.24.21.4.27.19,0,.32,0,0,.3.22.47.31.18.36.29,0,.1,0,.15a.66.66,0,0,1,0,.61c-.16.25-.51.24-.43.29s.34,0,.47.3a.64.64,0,0,1-.23.82c-.24.12-.6,0-.52-.07a.76.76,0,0,0,.28-.46C366.82,105.94,366.75,105.83,366.46,105.58Zm2,.16c-.1-.17-.72-.12-1-.55-.1-.17,0-.31,0-.49s-.21-.29-.21-.44.25-.31.25-.31a.09.09,0,0,0,0,.06c-.09-.09,0-.44.09-.47s.25.15.46.35.29,0,.34.14,0,.13.21.22.28,0,.38,0,.27.26.22.59c0,.14-.07.21-.27.32s-.29-.13-.28-.26a.42.42,0,0,0-.25-.34c-.12,0-.35,0-.55-.07s-.1-.45-.25-.5a.75.75,0,0,1,0,.33.78.78,0,0,0,.34.61c.27.13.52.16.72.26a.5.5,0,0,1,.27.67.45.45,0,0,1-.56.2C368.29,106.05,368.56,105.92,368.46,105.74Zm.3,6.55c0-.12.05-.34,0-.38s-.19-.24-.07-.29.1,0,.23.12a.74.74,0,0,1,.09.65C368.92,112.49,368.74,112.41,368.76,112.29Zm0-2.43a.14.14,0,0,1,.12.15c0,.09,0,.19-.05.22s-.1-.08-.14-.08S368.56,109.87,368.75,109.86Zm-.9,1.42a.11.11,0,0,1,0-.19.29.29,0,0,1,.22,0c.15,0,.18.1.32.08s.21-.25.32-.33.27.1.28.34-.05.21-.24.22c0,0-.05-.11-.14-.09s.05.26-.1.46-.18.32-.22.16.06-.28-.08-.43S368,111.35,367.85,111.28Zm.36-1A1.53,1.53,0,0,1,368,110a.24.24,0,0,1,.13-.28c.11,0,.17.15.22.3s.23.24.23.37a.43.43,0,0,1-.3.44.74.74,0,0,1-.62-.09c-.11-.12,0-.21,0-.22s.2.18.36.21.11-.07.19-.14A.19.19,0,0,0,368.21,110.24Zm-.13,3.75c-.1.11-.25.09-.4.07s.15,0,.24-.47C368,113.4,368.29,113.77,368.08,114Zm.06-1.12c-.11.29-.32.29-.43.47s.19.2-.2.4c-.13.06-.28,0-.17-.09a.37.37,0,0,0-.1-.53c-.12-.09-.16-.37,0-.38s.25.32.41.31.27-.22.26-.36-.15-.17-.25-.29-.08-.21-.17-.27c-.24-.15-.15-.28,0-.27s.4.31.51.39A.48.48,0,0,1,368.14,112.87Zm.65.48a.62.62,0,0,1-.37.18c-.28,0-.08-.12.05-.33s-.13-.55.07-.62.29.12.41.24,0,.23-.11.3S368.85,113.29,368.79,113.35Zm.33-5.15a.66.66,0,0,0-.18.55c0,.19,0,.53-.12.61s0,.34-.11.43-.36-.07-.33-.18.21-.16.23-.32-.14-.3-.31-.52.14-.28.3-.28.33,0,.26-.14-.41-.44-.47-.75.25-.25.31-.26,0,.34.14.35.08.06.18-.1-.22-.08-.18-.4,0-.59,0-.71.17-.33.26-.32,0,.34.06.47.24.26.28.34a.25.25,0,0,1-.08.36c-.13.09,0,.16-.19.3S369.26,108.07,369.12,108.2Zm1,12.48a1.73,1.73,0,0,1,.13-.67c.05-.13.06-.27.14-.46s-.11-1.34.12-1.27,0,.67,0,.75a1.91,1.91,0,0,0,0,.53,1.94,1.94,0,0,0,.22,1.09c.05.07,0,.28,0,.51,0,0-.13.15-.21.28s-.08.24-.13.28-.34-.08-.46,0-.21.15-.23,0,.07-.16.17-.32a1.53,1.53,0,0,0,.11-.29A.86.86,0,0,0,370.11,120.68Zm-2.24,3.3a.44.44,0,0,1,.37-.17c.15,0,.1.11,0,.2a.55.55,0,0,0-.22.44s-.37.09-.36,0A.76.76,0,0,1,367.87,124Zm-.85,0a.85.85,0,0,0-.17.44c0,.12-.17.1-.26.11s-.07-.2,0-.34.11-.23.22-.25S367.09,123.88,367,124Zm.1.12a.65.65,0,0,1,.55-.2c.1,0,.07.11-.07.14a.29.29,0,0,0-.22.26c0,.11.08.23-.06.23h-.21C367,124.5,367,124.21,367.12,124.07Zm3,1.12v.12h.15c-.17.12-.35.26-.36.33h-.12v.12h.12a.67.67,0,0,1-.2.41l0,0h-.17v.12h.12a.43.43,0,0,0,.06.27h-.12v.13h.18s0,0,0,.08c0,.18.08.43-.15.44s-.55-.16-.93-.24v-.1h-.18V127h-.08v-.07h-.19V127l-.12,0h-.06v-.1h-.18v0c-.16-.17-.15-.65-.32-.85a2.6,2.6,0,0,1-.36-1.07h.15v-.12h-.17v-.08a12.73,12.73,0,0,1,3.38-.18c.18.13.1.31,0,.44a1.64,1.64,0,0,1-.25.2v-.1Zm4.32,5.7a3.46,3.46,0,1,1,3.47-3.5A3.48,3.48,0,0,1,374.45,130.89Zm0,.63c-.05-.06-.05-.31,0-.31s.32,0,.37-.06.16.33,0,.39S374.55,131.6,374.48,131.52Zm-.21.19a3.76,3.76,0,0,1,.48,0s-.06.27-.13.28a1.78,1.78,0,0,1-.48,0S374.2,131.72,374.27,131.71Zm0-.17c0,.09-.42.06-.49,0s-.21-.39-.12-.37a3.71,3.71,0,0,0,.55.06C374.31,131.24,374.27,131.46,374.29,131.54Zm-.63.19a1.27,1.27,0,0,1,.52,0s-.09.27-.21.28-.46,0-.46,0A.29.29,0,0,1,373.66,131.73Zm-.41-.15c-.09,0-.19-.26-.17-.33a.34.34,0,0,1,.1-.18,1.64,1.64,0,0,0,.38.06c.12,0-.07.11-.06.15l.09.26C373.63,131.63,373.34,131.61,373.25,131.58Zm-.31.29c0-.06,0-.16.17-.16s.34,0,.34,0a.25.25,0,0,1-.26.23C373,132,372.84,132,372.94,131.87Zm-.33-.62c0-.07.29-.29.29-.29l.21.08s-.23.12-.1.32-.16.17-.26.18S372.58,131.32,372.61,131.25Zm-2.09-2.05h0a.46.46,0,0,0-.31-.11c-.1,0-.2-.09-.28-.22H370v-.15h-.13c-.16-.34-.24-.8-.12-.82a3.3,3.3,0,0,1,.81,0s0,.07.06.15h-.17v.15h.19v0a1.87,1.87,0,0,0,.28.91l.07.11h-.15v.14H371v-.08a12,12,0,0,0,.87,1.28c.12.08,0,.11,0,.11a2.82,2.82,0,0,1-.65,0c-.05,0,0-.11-.07-.28h.16v-.15h-.19v.08l0-.08c-.16-.29-.37-.54-.4-.63a.5.5,0,0,0-.07-.17h.08v-.15Zm-.79,1.45c0-.07.2-.22.24-.28a.66.66,0,0,0-.06-.39c-.05-.07-.21-.36-.31-.38s-.23-.11-.29-.13,0-.08,0-.08a.72.72,0,0,1,.2.05,2.38,2.38,0,0,1,.43.24,3.17,3.17,0,0,1,.33.46c.06.18-.09.27-.1.4s0,.16-.15.17S369.7,130.72,369.73,130.65Zm-3.81-.46-.06-.09H366V130h-.19V130a.13.13,0,0,0-.08,0c-.1,0,0-.39,0-.47h0s0,0,0,0a1.26,1.26,0,0,0,.89-.49c.08-.15.46,0,.73.18h-.06v.15h.19v-.06h0c.24.19,1.12-.05,1.31.21l0,0h0v.15H369v-.06c.27.12.67.15.74.47s-.16.46-.25.47-2.9,0-3,0-.34,0-.46-.21l0-.06h.07v-.14Zm4.55,1.21a.33.33,0,0,1-.33,0c-.14-.1-.2-.35-.14-.4a1.18,1.18,0,0,1,.48-.21c.13,0,.23.06.22.08s-.28.13-.34.22S370.55,131.35,370.47,131.4Zm.6-.07c.07,0,0,.14-.11.15s-.42-.38-.31-.46a2.52,2.52,0,0,1,.77-.29s.18.11.15.13l-.48.26A.14.14,0,0,0,371.07,131.33Zm.73.19a.7.7,0,0,1-.35,0c-.17-.06-.27-.31-.2-.35a4,4,0,0,1,.92-.39l.16.08c.08,0-.51.23-.59.36S371.83,131.47,371.8,131.52Zm.65-.06s-.28.1-.34.08-.21-.29-.13-.34.39-.31.48-.31a2.17,2.17,0,0,0,.25.05c.07,0-.29.1-.33.2A.51.51,0,0,0,372.45,131.46Zm3.09-.16c0-.06-.23-.23-.17-.24a.85.85,0,0,0,.24-.08c.05,0,.26.25.31.29s.05.21,0,.25-.43.07-.37,0A.15.15,0,0,0,375.54,131.3Zm.55-.1c-.08-.08-.27-.21-.2-.23s.15-.07.19-.05.44.34.44.44,0,.2-.17.21-.27-.06-.27-.11S376.17,131.28,376.09,131.2Zm2.32.26c0-.06,0-.13,0-.19s-.2-.26-.11-.27a.24.24,0,0,1,.2.08c.06.07.23.29.21.4s0,.09-.16.09S378.38,131.58,378.41,131.46Zm-.19.36s.14,0,.23,0,.07.07.08.12-.11.12-.2.12S378.2,131.88,378.22,131.82Zm-.84,0c0-.08.14-.06.24-.06s.06.09.07.14-.1.11-.19.11S377.36,131.87,377.38,131.82Zm-.17-.6c-.07-.07-.21-.18-.13-.2a.58.58,0,0,1,.32,0,.51.51,0,0,1,.26.26s0,.27-.16.28-.37,0-.32-.09S377.27,131.29,377.21,131.22Zm.63,0c-.1-.1-.26-.22-.18-.24s.12,0,.26,0,.33.21.3.33,0,.2-.15.19-.33,0-.26-.09S377.93,131.33,377.84,131.24Zm.74-3.68a1.09,1.09,0,0,1,0,.18v0h-.14v.12h.14a1.48,1.48,0,0,0,0,.21h-.15v.12h.17a1.53,1.53,0,0,0,.26.63h-.06V129H379a.56.56,0,0,1,.13.31l-.19.45v0h-.18v.12h.15l-.1.26h-.14v.13h.1a.51.51,0,0,0,0,.09c0,.15-.37,0-.39.19s.08.29,0,.29-2.13,0-2.13,0a2.4,2.4,0,0,0,.5-.23v.07h.18v-.12h-.11l.1-.08a10.1,10.1,0,0,0,1-1.08h.09v-.12h0a.41.41,0,0,1,.05-.09,1.85,1.85,0,0,0,.09-.23V129h.18v-.12H378c0-.08.06-.18.09-.28h.12v-.13h-.08a7.12,7.12,0,0,0,.21-1.39c0-.06.14.09.19.38h-.13v.12Zm0-2.22a1.24,1.24,0,0,0,0,.22h-.1v.17h.09c0,.26,0,.54,0,.54s-.22.19-.3.19-.11-.4-.26-.7v0H378v-.17h-.13c0-.06-.07-.12-.1-.19h.08v-.16h-.17l-.13-.23h0v-.16h-.12a.68.68,0,0,0-.12-.12h1.21l0,.11h-.09V125h.13a1.36,1.36,0,0,1,0,.2h-.15v.16Zm.71-1c0,.1-.09.1-.19.1s-.25,0-.25-.13-.27-.3-.27-.45.13,0,.24,0,.14.09.17.13S379.32,124.3,379.32,124.38Zm.27-.78c0,.08-.24.12-.3,0s.08-.19,0-.36-.16-.39-.11-.4A1,1,0,0,1,379.59,123.6Zm0,1.39a.19.19,0,0,1-.17.14c-.11,0-.18-.13-.18-.2a.15.15,0,0,1,.17-.18A.18.18,0,0,1,379.56,125Zm.48-.63s.06.24,0,.24h-.23c-.09,0-.05-.26-.24-.4s-.29-.28-.22-.28a3,3,0,0,0,.32,0S380,124.15,380,124.36Zm.57.24c-.12,0-.33.07-.34-.16s-.24-.31-.24-.43.21-.07.34,0S380.75,124.59,380.61,124.6Zm.74.08c-.15,0-.31,0-.38-.08s-.19-.34-.24-.41-.07-.17,0-.17.24.1.31.16S381.43,124.67,381.35,124.68Zm.88,1,0,.86H382v.17h.18v.21H382v.16h.16v.17s-.84,0-.83-.09v-.08h.1v-.16h-.1a1.62,1.62,0,0,0,0-.21h.09v-.17h-.11a.33.33,0,0,0,0-.15h.14v-.17h-.18v0c-.1-.17-.27-.16-.44-.25l-.18-.09h.07v-.17h-.18v.12l-.2-.09-.06-.3h.13v-.17h-.16v0a1.73,1.73,0,0,0-.11-.42.94.94,0,0,1,.59,0h-.14V125h.18v-.15l.2.07h-.06v.17h.18V125a5.41,5.41,0,0,1,.68.35h-.13v.17h.18v-.13C382.07,125.53,382.23,125.65,382.23,125.65Zm.09-1.43c.14.06.25.38.18.45s-.24.1-.23-.14-.11-.19-.2-.25-.12-.14,0-.15S382.23,124.18,382.32,124.22Zm.34-.47c0,.06-.12.23-.18.23s-.07-.22-.06-.3,0-.16.12-.15S382.67,123.68,382.66,123.75Zm.06.13c-.09.19-.05-.08-.05-.16a.59.59,0,0,0-.25-.39c-.09-.06-.06.06-.09.1s-.1-.15-.1-.19,0-.07.11,0a.86.86,0,0,1,.26.2A.48.48,0,0,1,382.72,123.88Zm0,.53c-.05,0-.1-.09,0-.11a.21.21,0,0,1,.15,0c.14.07.31.42.05.4C382.83,124.72,382.91,124.49,382.74,124.41Zm-.21,6.19-.35.05h0s0,0,0,0,0-.21.06-.26.16-.35.17-.38-.14-.12-.14-.21a1.59,1.59,0,0,1,.14-.36l.29.31c.05,0,.11.27,0,.26s-.14.37-.17.39S382.6,130.58,382.53,130.6Zm-1.11-6.85c.08,0,.19,0,.17.13s-.07.14-.17.09S381.31,123.78,381.42,123.75Zm.25.36c.14,0,.32.32.27.46s-.15.22-.24.13,0-.31-.15-.36-.25-.08-.29-.23S381.54,124.06,381.67,124.11Zm-3-2.39c.06,0,.46-.08.43,0a.67.67,0,0,1-.59.21C378.43,121.91,378.56,121.77,378.64,121.72Zm-.1-1.47c.06,0,.25.61.3.78s.1.49.11.55-.34-.17-.31-.3C378.75,120.8,378.42,120.31,378.54,120.25Zm-.24-8.17c0-.06-.19-.15-.13-.25s.23,0,.31.09.16.41,0,.51-.22.09-.17-.07S378.34,112.14,378.3,112.08Zm.78,1.7c-.11,0-.25-.12-.27-.23a.22.22,0,0,1,.13-.21c.13,0,.14.18.22.22S379.16,113.76,379.08,113.78Zm0-1.13c0,.22-.07.54-.18.48s-.23.3-.35.29-.15-.22-.12-.35.39-.45.43-.52,0-.29-.07-.39.29-.45.35-.46.24.43.16.55A.76.76,0,0,0,379.1,112.65Zm.42.68c0,.17.13.2.14.25s0,.15-.3-.13c-.1-.08-.14-.23-.05-.47a2.36,2.36,0,0,1,.24-.48c.1-.18.14-.16.14-.16s.17.4-.07.53S379.59,113.12,379.52,113.33Zm.8-.78c.06.07-.26.13-.4-.18s0-.28-.07-.53.45-.69.54-.76.21.29.2.41-.42.47-.45.68A.43.43,0,0,0,380.32,112.55Zm.41.86a.78.78,0,0,1-.35-.79.86.86,0,0,1,.42-.52c.14-.07.07-.27.14-.27s.16.2.11.38-.19.24-.31.51S381,113.55,380.73,113.41Zm.29-2.67a.82.82,0,0,0,.05.53c.06.2,0,.37,0,.23a3,3,0,0,1-.16-.52c0-.14-.26-.19-.2-.39s.19-.36.26-.55a3.19,3.19,0,0,1,.29-.54c.05-.08.22,0,.3.18a.81.81,0,0,1-.14.64C381.26,110.58,381,110.62,381,110.74Zm.47-2c.22,0,.21-.13.22-.24a.73.73,0,0,1,.54-.51.28.28,0,0,1,.26.37c-.11.26-.28.21-.51.47s-.13.32-.18.44-.16.13-.16-.17c0-.11-.32,0-.4,0s-.24-.49-.44-.76-.38-.1-.5-.51.06-.27-.11-.52a1.66,1.66,0,0,1-.26-.48c0-.1-.14-.35.25-.64s.54-.17.59-.1a.49.49,0,0,1,.13.28c0,.18-.35.14-.52.36s-.19.25-.07.31.28-.2.39-.16a.7.7,0,0,0,.55-.15c.17-.1.22-.07.21.11s-.19.37-.43.49a.65.65,0,0,0-.35.69c.08.16.18.19.24,0s0-.37.37-.42.23-.26.38-.26.21.23.13.37-.59.4-.58.72S381.36,108.77,381.49,108.77Zm.34-5.61c.17,0,0-.11.15-.32s.24-.22.4-.19.12.12,0,.34,0,.4-.1.56a1,1,0,0,1-.72.41c-.29,0-.49.14-.53.24s.25.18.35.22,0,.2-.2.22a.47.47,0,0,1-.5-.37,1.35,1.35,0,0,1,.27-.87c.13-.1.24.13.35.17a1,1,0,0,0,.63-.08c.07,0,.1-.16,0-.17s-.34,0-.48-.07a1.73,1.73,0,0,1-.31-.58c0-.11-.07-.29.08-.32a4.3,4.3,0,0,0,.61-.26c.1-.07.24-.33.4-.37s.19,0,.2.2-.06.37-.19.34-.09,0-.22.13-.34.32-.38.48S381.69,103.13,381.83,103.16Zm-3.08-2.11c.08-.17.21-.31.64-.62.15-.12.44-.32.62-.22s.39,0,.5.08.13.15.21-.06,0-.29.25-.59a1.22,1.22,0,0,1,.87-.39c.36,0,.85.14.94.51.05.2-.3.46-.23.46a.47.47,0,0,0,.19-.06.42.42,0,0,0,.15-.12c.06-.09,0-.2.14-.2s.06.16.06.2a.17.17,0,0,1-.09.13c-.08,0-.1.07,0,0s.14-.16.25-.13.07.37,0,.51-.14.41-.41.36-.52-.15-.55.05,0,.31,0,.42-.14.17-.2,0-.08-.14-.09,0,0,.23-.14.3-.71.1-.86.41,0,.44-.1.52a.31.31,0,0,1-.46-.15.87.87,0,0,1,.26-.7c.2-.19.13-.3.31-.48s0-.28-.07-.27,0,.34-.17.3-.34-.3-.24-.36,0-.45-.11-.45,0,.28,0,.49a.87.87,0,0,1-.31.67c-.32.18-.53,0-.69.11s-.2.07-.18.17,0,.22-.07.27-.61-.3-.43-.52c.05-.06.18,0,.28,0s.11-.32.34-.36a1.45,1.45,0,0,0,.7-.22c.17-.2.17-.48.11-.51s0,.21-.15.3-.25,0-.47.09-.6.53-.77.49S378.63,101.28,378.75,101.05Zm5,24.17a3.23,3.23,0,0,1,.35,1.22,12.8,12.8,0,0,1,0,2.21,7.2,7.2,0,0,1-.29,1.36,10.71,10.71,0,0,1-.08-1.76c0-.28,0-1.5-.05-1.89A4.19,4.19,0,0,1,383.72,125.22Zm.68,1.87a6.13,6.13,0,0,1,.07-1.44,7,7,0,0,1,.15,2.39,6.17,6.17,0,0,1-.22,1.17C384.35,129.35,384.4,127.56,384.4,127.09Zm.42,0a.43.43,0,0,1,.23.34.44.44,0,0,1-.21.38A1.9,1.9,0,0,1,384.82,127.06Zm-21.49.79a.13.13,0,0,1-.12-.14.14.14,0,0,1,.12-.15.14.14,0,0,1,.13.15A.13.13,0,0,1,363.33,127.85ZM386.28,103c-.17-.24-.31-.3-.45-.5s0-.26,0-.57c0-.87-.8-1-1.31-1.12s-.54-.05-.58-.2a4,4,0,0,0-.32-.75,2.45,2.45,0,0,0-.82-.74,1.53,1.53,0,0,0-1.1-.24,2.16,2.16,0,0,0-.89.43c-.42.35-.38.59-.59.6a4.12,4.12,0,0,0-1,.2c-.32.1-.37,0-.41-.11s0-.3-.18-.55-.44-.28-.38-.62a1.66,1.66,0,0,0-.08-1c-.11-.22-.22-.13-.22-.36a1.06,1.06,0,0,0-.25-.67,1.18,1.18,0,0,0-1-.21c-.29,0-.34,0-.4-.08a.55.55,0,0,0-.58-.19c-.13,0-.21.19-.39.17s-.13-.21-.41-.16-.23.23-.34.14-.19-.22-.29-.19-.14.19-.25.19-.29-.22-.6-.19a.83.83,0,0,0-.28.09c-.2.07-.08-.21-.5,0-.1,0-.21.38-.31.35a.55.55,0,0,0-.54-.11c-.17.08-.16.17-.42.17a1.26,1.26,0,0,0-.86.06.6.6,0,0,0-.4.65c.08.27.05.72.12.84s.06.34-.16.55-.29.62-.42.78-.32.06-.48,0a1.79,1.79,0,0,0-.74-.27.91.91,0,0,1-.78-.35,1.09,1.09,0,0,0-.75-.39,1.17,1.17,0,0,0-.74.15c-.09.08-.26.31-.41.28a.78.78,0,0,0-.51.11,1.62,1.62,0,0,0-.56.51,2.9,2.9,0,0,0-.29.48,1.86,1.86,0,0,1-.29.35c-.14.09-.49.42-.77.44a1,1,0,0,0-.47.3c-.17.17-.17.56-.22.81s-.38.53-.52.67a1.54,1.54,0,0,0-.42,1c0,.23.09.42.2.47s.19,0,.28.07a.25.25,0,0,1,0,.25s.31.38.44.45.25,0,.29.14a4.89,4.89,0,0,0,.28.52c.11.14.06.17.23.37s.35.33.45.47.19.31.23.35.36.06.62,0a.84.84,0,0,0,.5-.55c0-.16.14-.28.14-.14s.08.46.07.65-.14.17-.23.34,0,.27-.07.42-.51.45-.53,1c0,.12.17.22,0,.38s-.12.32-.13.83c0,.35.13.26.05.38a.81.81,0,0,0,.14.94c.19.21.23.11.13.33s.17.77.34,1,.55.35.55.71.56.67.62.71,0,.52.13.72.54.23.43.51,0,.68,0,1.19.36,1.88.43,2.32-.33.93-.29,1.79-.19,1.58-.42,1.61-.63-.13-.94,0-.37.64-.4.72-.49.23-.6.54a1.23,1.23,0,0,0,.12.82c0,.1-.18.21-.28.26a.69.69,0,0,0-.3.4c0,.1-.17.06-.27.07a.5.5,0,0,0-.32.33,1.81,1.81,0,0,0,0,.38c0,.13-.1.17-.12.25s0,.48-.07.63a7.77,7.77,0,0,0,0,.81,1.21,1.21,0,0,0-.28.29,1,1,0,0,0,0,.74c.08.14.41.11.39.25a5.11,5.11,0,0,0,.13,1.43,7.26,7.26,0,0,1,.42.94c.07.2.27.18.37.29a.56.56,0,0,0,.44.16c.33,0,1,.2,1.28.17s.3,0,.27,0a.82.82,0,0,0-.1,1.11,1.67,1.67,0,0,0,.88.46c.19,0,7.24.19,7.24.19s5.85,0,6.2-.07a1.7,1.7,0,0,0,.85-.23,1.09,1.09,0,0,0,.54-.92c0-.38-.07-.53,0-.55s.57-.15,1-.29a2.23,2.23,0,0,0,1-.73c0-.09.07-.43.28-.48s.08-.29.13-.38.23-.1.23-.36a4.73,4.73,0,0,1,.14-1c0-.12.21-.22.31-.28s.09-.72,0-.78-.35-.15-.39-.46c0-.15,0-.36,0-.53s-.19-.2-.16-.34a.63.63,0,0,0-.13-.43c-.11-.08-.24,0-.26-.12a.53.53,0,0,0-.24-.41c-.1-.06,0-.14-.09-.28s-.61-.29-.39-.63a.68.68,0,0,0-.36-1c-.13-.05,0-.3-.16-.46a1.05,1.05,0,0,0-.85-.43,2.2,2.2,0,0,1-.72,0,1.21,1.21,0,0,1-.3-.8,3.75,3.75,0,0,0-.44-1.28.82.82,0,0,1,.06-.89,4.79,4.79,0,0,0,.33-1.73,7.48,7.48,0,0,1,0-1.81c.49-.1.13-.41.37-.58s-.06-.3.18-.46a.74.74,0,0,0,.37-.49,2.1,2.1,0,0,1,.33-.6c.09-.15,0-.34.05-.39s.59-.46.59-.65-.17-.32,0-.46a1.61,1.61,0,0,0,.42-.75c.06-.35-.31-.16,0-.52a1,1,0,0,0,.23-.94c-.07-.25-.22-.21-.12-.42a.68.68,0,0,0,.06-.39,1.16,1.16,0,0,0-.23-.53c-.19-.23.1-.07.08-.33s-.27-.5-.33-.64-.06-.26-.1-.36a2.3,2.3,0,0,0-.33-.45c-.08-.09-.19-.38.06-.37s.27.39.33.55.29.28.38.33a.63.63,0,0,0,.5-.07c.13-.09.39-.46.51-.57s.35-.24.41-.42a1.07,1.07,0,0,1,.3-.48c.16-.13.46-.3.56-.39a5.22,5.22,0,0,0,.5-.47,1.72,1.72,0,0,0,.43-.75C386.74,103.54,386.5,103.28,386.28,103Z"/></clipPath><clipPath id="clip-path-277" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M367.61,104h-.05a.67.67,0,0,0,.25,0A.66.66,0,0,0,367.61,104Z"/></clipPath><clipPath id="clip-path-279" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M367.6,104l-.06,0Z"/></clipPath><clipPath id="clip-path-281" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M372.18,101.43c-.08,0-.17-.18-.38-.38C371.8,101.05,372.06,101.41,372.18,101.43Z"/></clipPath><clipPath id="clip-path-283" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M374.26,136.5h.07a1.14,1.14,0,0,1,.41.07v.32a1.41,1.41,0,0,1-.28.18,1.53,1.53,0,0,1-.31.08l-.15,0c-.18,0-.27-.08-.27-.22A.49.49,0,0,1,374.26,136.5Zm6-.73H381v.76a.46.46,0,0,1-.25.4.87.87,0,0,1-.48.14A.61.61,0,0,1,380,137c-.11-.06-.17-.13-.17-.21a.07.07,0,0,1,.06-.07l.18,0c.17-.07.26-.16.26-.27l0-.18-.05-.23a1.11,1.11,0,0,1,0-.23Zm-8.55,0h.92v.94h-.92Zm-2.32,0h.79v.76a.46.46,0,0,1-.25.4.87.87,0,0,1-.48.14.61.61,0,0,1-.28-.07c-.11-.06-.17-.13-.17-.21a.07.07,0,0,1,.06-.07l.18,0c.17-.07.26-.16.26-.27l0-.18-.05-.23A1.11,1.11,0,0,1,369.36,135.77Zm-3.87,0h1v.79a1,1,0,0,1-.54.11h-.29a.26.26,0,0,1-.18,0Zm11-.32v.32h2.22v.62l-1.21,0h-.07l-.05,0v0l0,0a1.28,1.28,0,0,1,.41.55c0,.22-.1.32-.31.32a.4.4,0,0,1-.24-.07l-.21-.19a1.12,1.12,0,0,1-.2-.33l-.1-.22a.16.16,0,0,0-.13-.11s-.06,0-.06.09v0l.11.26a1.68,1.68,0,0,0,.23.4,1.71,1.71,0,0,0,.47.45.87.87,0,0,0,.4.09.34.34,0,0,0,.34-.37.59.59,0,0,0-.07-.31l-.12-.23v0s0,0,.08,0l.15,0h.56v1.07a.16.16,0,0,0,.08.13,2.07,2.07,0,0,0,.29.22s0,0,0-.1v-2.28H380a.43.43,0,0,1,.06.24.29.29,0,0,1-.13.28.68.68,0,0,1-.33.07h-.15a.07.07,0,0,0-.06.07,1,1,0,0,0,.14.23l.13.2a1,1,0,0,0,.82.54.66.66,0,0,0,.41-.11l.05,0s0,0,0,.06v.43a.46.46,0,0,0,.07.1l.22.22s.08.06.1.06,0,0,0-.05v-2.33h1.9v.59h-.87a.64.64,0,0,0-.39.14.51.51,0,0,0-.21.41.9.9,0,0,0,.19.56l.27.35a1.13,1.13,0,0,0,.32.28.25.25,0,0,0,.14.07s.05,0,.05,0a.17.17,0,0,0,0-.1,1,1,0,0,0-.21-.21l-.18-.15a.56.56,0,0,1-.21-.46c0-.29.18-.46.52-.5h.61v1.08a.2.2,0,0,0,.06.14l.13.1.18.14s0,0,0-.14v-2.25H384v-.32h-7.47Zm-12,0v.32h.68v.51a.26.26,0,0,1,0,.11c0,.07-.08.1-.12.1l-.13-.05a.25.25,0,0,0-.15-.05c-.09,0-.14.07-.14.22a1.17,1.17,0,0,0,.35.7l.31.39a4.57,4.57,0,0,0,.38.37.24.24,0,0,0,.18.08s.06,0,.06-.05a.53.53,0,0,0-.23-.32l-.24-.19c-.15-.13-.21-.23-.21-.3v-.07l0-.08.14-.23a.77.77,0,0,0,.07-.16h.1l.09.06a1.14,1.14,0,0,0,.16.14,1.31,1.31,0,0,0,.28,0h.16a1,1,0,0,0,.28,0v.65a.49.49,0,0,0,.11.33l.1.09c.06.07.1.1.13.1s0,0,0,0,0,0,0-.06v-2.27h2.29a.43.43,0,0,1,.06.24.29.29,0,0,1-.13.28.68.68,0,0,1-.33.07h-.94a.7.7,0,0,0-.39.13.51.51,0,0,0-.21.41.88.88,0,0,0,.19.55l.26.34a1.28,1.28,0,0,0,.32.28.25.25,0,0,0,.14.07,0,0,0,0,0,.05,0,.17.17,0,0,0,0-.1.8.8,0,0,0-.21-.2l-.17-.15a.54.54,0,0,1-.21-.45c0-.3.17-.46.51-.5h.63l.12.18a1,1,0,0,0,.82.54.68.68,0,0,0,.41-.11l.05,0s0,0,0,.06v.43a.46.46,0,0,0,.07.1l.22.22.09.06s0,0,0-.05v-2.33h.77v.91l-.06,0h-.14c-.12,0-.18.06-.18.17a.41.41,0,0,0,.18.3l.19.21a.34.34,0,0,0,.23.13.23.23,0,0,0,.11,0s.06,0,.06-.09a.17.17,0,0,0,0-.07v-.15s0-.07.07-.1h.83v.72a.54.54,0,0,0,.16.22c.09.1.15.15.19.14s.05,0,0-.12v-2.26h1.76v.71l-.33-.2a.54.54,0,0,0-.28-.08,1.3,1.3,0,0,0-.31,0,.43.43,0,0,0-.38.46.91.91,0,0,0,.24.55.7.7,0,0,0,.54.26,1,1,0,0,0,.4-.09l.05,0,0,0h0v.19a.53.53,0,0,0,.14.44.5.5,0,0,0,.18.15s0,0,0-.1v-2.28h.31v-.32h-11Zm17.46-1.18c-.1,0-.15,0-.14.06a.17.17,0,0,0,.05.11l.07.1c.1.14.19.2.25.2h.12l.09,0h.09l.12,0a.54.54,0,0,1,.18.14l.29.37c.06.07.11.11.15.11s0,0,0,0a.39.39,0,0,0-.1-.19l-.34-.4A1.11,1.11,0,0,0,381.92,134.27Zm-10.68,0c-.1,0-.15,0-.14.06a.25.25,0,0,0,0,.11l.07.1c.1.14.19.2.25.2h.12l.09,0h.09l.12,0a.54.54,0,0,1,.18.14l.29.37c.06.07.11.11.15.11s0,0,0,0a.32.32,0,0,0-.1-.19l-.34-.4A1.11,1.11,0,0,0,371.24,134.27Z"/></clipPath><clipPath id="clip-path-286" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="421.74" y="96.72" width="5.11" height="5.08"/></clipPath><clipPath id="clip-path-288" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="421.71" y="96.28" width="6" height="6"/></clipPath><clipPath id="clip-path-289" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M424.29,96.72a2.54,2.54,0,1,1-2.55,2.54,2.55,2.55,0,0,1,2.55-2.54"/></clipPath><clipPath id="clip-path-291" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M431.79,98.34a1.21,1.21,0,0,0-1.21,1.2v9.17l-.05,0-.74.43c-.49.3-1,.61-1.44,1a10.91,10.91,0,0,0-1.37,1.16,10.63,10.63,0,0,0-1.13,1.38c-.12.19-.24.37-.35.56v-7.62a1.21,1.21,0,0,0-2.42,0v7.62c-.12-.19-.23-.37-.36-.56a10.56,10.56,0,0,0-1.12-1.38,12.55,12.55,0,0,0-1.37-1.16c-.47-.35-1-.66-1.45-1-.24-.15-.49-.29-.74-.43l-.05,0V99.55a1.21,1.21,0,1,0-2.41,0v9.88a1.2,1.2,0,0,0,.73,1.11l.68.31.69.36c.45.24.89.5,1.31.77a7.6,7.6,0,0,1,2.09,1.93,11.17,11.17,0,0,1,1.44,2.54,9.25,9.25,0,0,1,.41,1.36,6.78,6.78,0,0,1,.15,1.27v0a1.21,1.21,0,0,0,2.42,0V119a6.78,6.78,0,0,1,.14-1.19,8.22,8.22,0,0,1,.42-1.36,10.81,10.81,0,0,1,1.44-2.54,7.76,7.76,0,0,1,2.08-1.93c.42-.27.86-.53,1.32-.77.22-.12.45-.24.69-.35s.47-.23.68-.32a1.22,1.22,0,0,0,.73-1.11V99.54a1.21,1.21,0,0,0-1.21-1.2Z"/></clipPath><clipPath id="clip-path-293" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="410.94" y="108.83" width="11.71" height="15.16"/></clipPath><clipPath id="clip-path-295" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="410.71" y="108.28" width="13" height="16"/></clipPath><clipPath id="clip-path-296" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M418,117a18.81,18.81,0,0,0-4.63-2.39V110a1.21,1.21,0,0,0-2.42,0v5.45a1.2,1.2,0,0,0,.85,1.16,18.35,18.35,0,0,1,4.75,2.31l0,0s2.86,2.06,3.76,4.28a1.21,1.21,0,0,0,2.24-.9c-1.13-2.79-4.27-5.1-4.58-5.32"/></clipPath><clipPath id="clip-path-297" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="410.71" y="108.28" width="12" height="16"/></clipPath><clipPath id="clip-path-298" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M411,138.16v-5h1.82a2.51,2.51,0,0,1,1.85.58,2.75,2.75,0,0,1,.58,1.92,2.64,2.64,0,0,1-.63,2,2.23,2.23,0,0,1-1.69.53Zm2-.79a1.07,1.07,0,0,0,.78-.22,2,2,0,0,0,.42-1.49,2.05,2.05,0,0,0-.4-1.47,1,1,0,0,0-.8-.25H412v3.43Z"/></clipPath><clipPath id="clip-path-300" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="410.94" y="96.72" width="26.36" height="41.55"/></clipPath><clipPath id="clip-path-302" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="415.71" y="132.28" width="2" height="6"/></clipPath><clipPath id="clip-path-303" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="416.22" y="133.15" width="1.03" height="5.01"/></clipPath><clipPath id="clip-path-304" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="410.71" y="96.28" width="27" height="43"/></clipPath><clipPath id="clip-path-307" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="417.71" y="132.28" width="5" height="6"/></clipPath><clipPath id="clip-path-308" transform="translate(-356.73 -91.29)"><polygon class="cls-1" points="420.91 135.51 422.63 138.16 421.47 138.16 420.05 136 419.47 136 419.47 138.16 418.45 138.16 418.45 133.15 419.47 133.15 419.47 135.21 420.03 135.21 421.39 133.15 422.47 133.15 420.91 135.51"/></clipPath><clipPath id="clip-path-312" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="422.71" y="132.28" width="5" height="6"/></clipPath><clipPath id="clip-path-313" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M425.84,136.73c0-.59-.38-.65-1.1-.68-1-.05-1.75-.31-1.75-1.48s.85-1.54,2.12-1.54a5.59,5.59,0,0,1,1.35.19V134a6,6,0,0,0-1.33-.15c-.74,0-1.09.22-1.09.64,0,.59.39.61,1.1.64,1,0,1.75.32,1.75,1.54s-.9,1.63-2.22,1.63a6.13,6.13,0,0,1-1.58-.22v-.81a7.33,7.33,0,0,0,1.56.19c.9,0,1.19-.29,1.19-.71"/></clipPath><clipPath id="clip-path-317" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="427.71" y="132.28" width="5" height="6"/></clipPath><clipPath id="clip-path-318" transform="translate(-356.73 -91.29)"><polygon class="cls-1" points="427.75 138.16 427.75 133.15 428.78 133.15 428.78 135.21 430.88 135.21 430.88 133.15 431.91 133.15 431.91 138.16 430.88 138.16 430.88 136 428.78 136 428.78 138.16 427.75 138.16"/></clipPath><clipPath id="clip-path-322" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="431.71" y="132.28" width="6" height="6"/></clipPath><clipPath id="clip-path-323" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M435.84,137h-1.92l-.38,1.16h-1l1.82-5h1.17l1.82,5h-1.08Zm-.26-.77-.35-1c-.14-.43-.24-.8-.33-1.11h0c-.09.31-.2.68-.34,1.11l-.35,1Z"/></clipPath><clipPath id="clip-path-327" transform="translate(-356.73 -91.29)"><rect class="cls-1" x="422.71" y="108.28" width="15" height="20"/></clipPath><clipPath id="clip-path-328" transform="translate(-356.73 -91.29)"><path class="cls-1" d="M436.1,108.83a1.2,1.2,0,0,0-1.21,1.2v4.61a18.81,18.81,0,0,0-4.63,2.39h0a14.57,14.57,0,0,0-1.9,1.61,27.62,27.62,0,0,0-5.18,7.68,1.21,1.21,0,0,0,2.22,1,25.63,25.63,0,0,1,4.66-6.93,14,14,0,0,1,1.62-1.37l0,0a18.19,18.19,0,0,1,4.74-2.31,1.19,1.19,0,0,0,.85-1.16V110a1.2,1.2,0,0,0-1.21-1.2Z"/></clipPath></defs><title>diksha and gov logo</title><g class="cls-2"><g class="cls-3"><rect x="11.92" y="30.39" width="11.51" height="11.51"/></g></g><g class="cls-4"><g class="cls-3"><rect x="9.43" y="27.94" width="16.5" height="16.42"/></g></g><g class="cls-5"><g class="cls-3"><rect x="13.62" y="2.81" width="11.37" height="10.66"/></g></g><g class="cls-6"><g class="cls-3"><rect x="10.1" y="2.72" width="11.62" height="10.66"/></g></g><g class="cls-7"><g class="cls-3"><rect x="12.14" y="6.7" width="10.44" height="10.46"/></g></g><g class="cls-8"><g class="cls-3"><rect x="11.39" y="7.3" width="10.38" height="10.6"/></g></g><g class="cls-9"><g class="cls-3"><rect x="13.67" y="7.11" width="10.4" height="10.82"/></g></g><g class="cls-10"><g class="cls-3"><rect x="19.13" y="33.12" width="10.38" height="10.38"/></g></g><g class="cls-11"><g class="cls-3"><rect x="19.04" y="33.51" width="10.38" height="10.38"/></g></g><g class="cls-12"><g class="cls-3"><rect x="19" y="33.9" width="10.38" height="10.38"/></g></g><g class="cls-13"><g class="cls-3"><rect x="18.85" y="29" width="10.38" height="10.38"/></g></g><g class="cls-14"><g class="cls-3"><rect x="19.13" y="29" width="10.38" height="10.38"/></g></g><g class="cls-15"><g class="cls-3"><rect x="19.17" y="29.44" width="10.38" height="10.38"/></g></g><g class="cls-16"><g class="cls-3"><rect x="18.58" y="28.61" width="10.38" height="10.38"/></g></g><g class="cls-17"><g class="cls-3"><rect x="19.49" y="29.47" width="10.38" height="10.38"/></g></g><g class="cls-18"><g class="cls-3"><rect x="19.96" y="30.54" width="10.38" height="10.38"/></g></g><g class="cls-19"><g class="cls-3"><rect x="20.29" y="29.86" width="10.38" height="10.38"/></g></g><g class="cls-20"><g class="cls-3"><rect x="19.96" y="30.22" width="10.38" height="10.38"/></g></g><g class="cls-21"><g class="cls-3"><rect x="20.29" y="29.53" width="10.38" height="10.38"/></g></g><g class="cls-22"><g class="cls-3"><rect x="19.91" y="29.5" width="10.38" height="10.38"/></g></g><g class="cls-23"><g class="cls-3"><rect x="19.49" y="29.05" width="10.38" height="10.38"/></g></g><g class="cls-24"><g class="cls-3"><rect x="19.96" y="29.9" width="10.38" height="10.38"/></g></g><g class="cls-25"><g class="cls-3"><rect x="15.55" y="33.84" width="10.38" height="10.38"/></g></g><g class="cls-26"><g class="cls-3"><rect x="15.59" y="34.2" width="10.38" height="10.38"/></g></g><g class="cls-27"><g class="cls-3"><rect x="15.92" y="33.84" width="10.38" height="10.38"/></g></g><g class="cls-28"><g class="cls-3"><rect x="15.22" y="34.23" width="10.38" height="10.38"/></g></g><g class="cls-29"><g class="cls-3"><rect x="15.91" y="34.2" width="10.38" height="10.38"/></g></g><g class="cls-30"><g class="cls-3"><rect x="16.28" y="34.2" width="10.38" height="10.38"/></g></g><g class="cls-31"><g class="cls-3"><rect x="16.54" y="33.78" width="10.38" height="10.38"/></g></g><g class="cls-32"><g class="cls-3"><rect x="16.28" y="32.95" width="10.38" height="10.38"/></g></g><g class="cls-33"><g class="cls-3"><rect x="15.92" y="33.33" width="10.38" height="10.38"/></g></g><g class="cls-34"><g class="cls-3"><rect x="16.28" y="33.33" width="10.38" height="10.38"/></g></g><g class="cls-35"><g class="cls-3"><rect x="16.23" y="33.78" width="10.38" height="10.38"/></g></g><g class="cls-36"><g class="cls-3"><rect x="16.7" y="32.1" width="10.38" height="10.38"/></g></g><g class="cls-37"><g class="cls-3"><rect x="16.97" y="32.95" width="10.38" height="10.38"/></g></g><g class="cls-38"><g class="cls-3"><rect x="16.58" y="33.34" width="10.38" height="10.38"/></g></g><g class="cls-39"><g class="cls-3"><rect x="16.63" y="32.95" width="10.38" height="10.38"/></g></g><g class="cls-40"><g class="cls-3"><rect x="16.65" y="32.57" width="10.38" height="10.38"/></g></g><g class="cls-41"><g class="cls-3"><rect x="16.36" y="28.92" width="10.38" height="10.38"/></g></g><g class="cls-42"><g class="cls-3"><rect x="16.45" y="29.72" width="10.38" height="10.38"/></g></g><g class="cls-43"><g class="cls-3"><rect x="16.36" y="28.53" width="10.38" height="10.38"/></g></g><g class="cls-44"><g class="cls-3"><rect x="16.03" y="28.53" width="10.38" height="10.38"/></g></g><g class="cls-45"><g class="cls-3"><rect x="16.4" y="29.27" width="10.38" height="10.38"/></g></g><g class="cls-46"><g class="cls-3"><rect x="7.46" y="30.59" width="10.38" height="10.38"/></g></g><g class="cls-47"><g class="cls-3"><rect x="7.46" y="30.32" width="10.38" height="10.38"/></g></g><g class="cls-48"><g class="cls-3"><rect x="7.79" y="29.35" width="10.38" height="10.38"/></g></g><g class="cls-49"><g class="cls-3"><rect x="7.74" y="28.9" width="10.38" height="10.38"/></g></g><g class="cls-50"><g class="cls-3"><rect x="7.16" y="29.35" width="10.38" height="10.38"/></g></g><g class="cls-51"><g class="cls-3"><rect x="7.74" y="28.52" width="10.38" height="10.38"/></g></g><g class="cls-52"><g class="cls-3"><rect x="8.3" y="28.52" width="10.38" height="10.38"/></g></g><g class="cls-53"><g class="cls-3"><rect x="7.16" y="29.91" width="10.38" height="10.38"/></g></g><g class="cls-54"><g class="cls-3"><rect x="7.82" y="30.61" width="10.38" height="10.38"/></g></g><g class="cls-55"><g class="cls-3"><rect x="7.46" y="28.52" width="10.38" height="10.38"/></g></g><g class="cls-56"><g class="cls-3"><rect x="8.69" y="28.5" width="10.38" height="10.38"/></g></g><g class="cls-57"><g class="cls-3"><rect x="8" y="28.52" width="10.38" height="10.38"/></g></g><g class="cls-58"><g class="cls-3"><rect x="8" y="28.9" width="10.38" height="10.38"/></g></g><g class="cls-59"><g class="cls-3"><rect x="7.16" y="30.31" width="10.38" height="10.38"/></g></g><g class="cls-60"><g class="cls-3"><rect x="6.15" y="29.39" width="10.38" height="10.38"/></g></g><g class="cls-61"><g class="cls-3"><rect x="6.19" y="30.32" width="10.38" height="10.38"/></g></g><g class="cls-62"><g class="cls-3"><rect x="7.46" y="28.9" width="10.38" height="10.38"/></g></g><g class="cls-63"><g class="cls-3"><rect x="6.46" y="28.93" width="10.38" height="10.38"/></g></g><g class="cls-64"><g class="cls-3"><rect x="6.46" y="29.91" width="10.38" height="10.38"/></g></g><g class="cls-65"><g class="cls-3"><rect x="6.46" y="29.39" width="10.38" height="10.38"/></g></g><g class="cls-66"><g class="cls-3"><rect x="6.12" y="28.62" width="10.38" height="10.38"/></g></g><g class="cls-67"><g class="cls-3"><rect x="5.79" y="29.39" width="10.38" height="10.38"/></g></g><g class="cls-68"><g class="cls-3"><rect x="5.79" y="28.93" width="10.38" height="10.38"/></g></g><g class="cls-69"><g class="cls-3"><rect x="5.79" y="28.62" width="10.38" height="10.38"/></g></g><g class="cls-70"><g class="cls-3"><rect x="6.11" y="29.91" width="10.38" height="10.38"/></g></g><g class="cls-71"><g class="cls-3"><rect x="6.15" y="28.93" width="10.38" height="10.38"/></g></g><g class="cls-72"><g class="cls-3"><rect x="7.16" y="28.54" width="10.38" height="10.38"/></g></g><g class="cls-73"><g class="cls-3"><rect x="7.15" y="28.93" width="10.38" height="10.38"/></g></g><g class="cls-74"><g class="cls-3"><rect x="7.18" y="30.61" width="10.38" height="10.38"/></g></g><g class="cls-75"><g class="cls-3"><rect x="7.46" y="29.37" width="10.38" height="10.38"/></g></g><g class="cls-76"><g class="cls-3"><rect x="7.45" y="29.91" width="10.38" height="10.38"/></g></g><g class="cls-77"><g class="cls-3"><rect x="6.77" y="30.32" width="10.38" height="10.38"/></g></g><g class="cls-78"><g class="cls-3"><rect x="6.51" y="30.32" width="10.38" height="10.38"/></g></g><g class="cls-79"><g class="cls-3"><rect x="6.75" y="28.56" width="10.38" height="10.38"/></g></g><g class="cls-80"><g class="cls-3"><rect x="6.77" y="29.91" width="10.38" height="10.38"/></g></g><g class="cls-81"><g class="cls-3"><rect x="6.46" y="28.62" width="10.38" height="10.38"/></g></g><g class="cls-82"><g class="cls-3"><rect x="6.77" y="29.37" width="10.38" height="10.38"/></g></g><g class="cls-83"><g class="cls-3"><rect x="6.77" y="28.93" width="10.38" height="10.38"/></g></g><g class="cls-84"><g class="cls-3"><rect x="5.2" y="32.93" width="10.38" height="10.38"/></g></g><g class="cls-85"><g class="cls-3"><rect x="5.53" y="33.31" width="10.38" height="10.38"/></g></g><g class="cls-86"><g class="cls-3"><rect x="4.55" y="33.66" width="10.38" height="10.38"/></g></g><g class="cls-87"><g class="cls-3"><rect x="4.55" y="33.28" width="10.38" height="10.38"/></g></g><g class="cls-88"><g class="cls-3"><rect x="4.2" y="33.26" width="10.38" height="10.38"/></g></g><g class="cls-89"><g class="cls-3"><rect x="4.55" y="34.06" width="10.38" height="10.38"/></g></g><g class="cls-90"><g class="cls-3"><rect x="7.09" y="34.13" width="10.38" height="10.38"/></g></g><g class="cls-91"><g class="cls-3"><rect x="6.48" y="34.13" width="10.38" height="10.38"/></g></g><g class="cls-92"><g class="cls-3"><rect x="6.75" y="34.11" width="10.38" height="10.38"/></g></g><g class="cls-93"><g class="cls-3"><rect x="6.75" y="33.34" width="10.38" height="10.38"/></g></g><g class="cls-94"><g class="cls-3"><rect x="6.48" y="33.75" width="10.38" height="10.38"/></g></g><g class="cls-95"><g class="cls-3"><rect x="6.44" y="33.36" width="10.38" height="10.38"/></g></g><g class="cls-96"><g class="cls-3"><rect x="6.15" y="33.75" width="10.38" height="10.38"/></g></g><g class="cls-97"><g class="cls-3"><rect x="6.75" y="33.73" width="10.38" height="10.38"/></g></g><g class="cls-98"><g class="cls-3"><rect x="4.86" y="32.93" width="10.38" height="10.38"/></g></g><g class="cls-99"><g class="cls-3"><rect x="7.45" y="34.11" width="10.38" height="10.38"/></g></g><g class="cls-100"><g class="cls-3"><rect x="6.15" y="34.13" width="10.38" height="10.38"/></g></g><g class="cls-101"><g class="cls-3"><rect x="7.09" y="33.75" width="10.38" height="10.38"/></g></g><g class="cls-102"><g class="cls-3"><rect x="7.45" y="33.75" width="10.38" height="10.38"/></g></g><g class="cls-103"><g class="cls-3"><rect x="5.24" y="33.28" width="10.38" height="10.38"/></g></g><g class="cls-104"><g class="cls-3"><rect x="5.24" y="34.11" width="10.38" height="10.38"/></g></g><g class="cls-105"><g class="cls-3"><rect x="4.95" y="34.11" width="10.38" height="10.38"/></g></g><g class="cls-106"><g class="cls-3"><rect x="5.2" y="33.73" width="10.38" height="10.38"/></g></g><g class="cls-107"><g class="cls-3"><rect x="4.86" y="33.28" width="10.38" height="10.38"/></g></g><g class="cls-108"><g class="cls-3"><rect x="4.91" y="33.68" width="10.38" height="10.38"/></g></g><g class="cls-109"><g class="cls-3"><rect x="5.55" y="34.11" width="10.38" height="10.38"/></g></g><g class="cls-110"><g class="cls-3"><rect x="5.86" y="33.73" width="10.38" height="10.38"/></g></g><g class="cls-111"><g class="cls-3"><rect x="5.53" y="33.75" width="10.38" height="10.38"/></g></g><g class="cls-112"><g class="cls-3"><rect x="5.86" y="33.31" width="10.38" height="10.38"/></g></g><g class="cls-113"><g class="cls-3"><rect x="6.11" y="33.36" width="10.38" height="10.38"/></g></g><g class="cls-114"><g class="cls-3"><rect x="5.86" y="34.11" width="10.38" height="10.38"/></g></g><g class="cls-115"><g class="cls-3"><rect x="9.18" y="33.31" width="10.38" height="10.38"/></g></g><g class="cls-116"><g class="cls-3"><rect x="8.36" y="32.02" width="10.38" height="10.38"/></g></g><g class="cls-117"><g class="cls-3"><rect x="8" y="31.72" width="10.38" height="10.38"/></g></g><g class="cls-118"><g class="cls-3"><rect x="8.06" y="32.1" width="10.38" height="10.38"/></g></g><g class="cls-119"><g class="cls-3"><rect x="8.42" y="32.49" width="10.38" height="10.38"/></g></g><g class="cls-120"><g class="cls-3"><rect x="8.69" y="32.02" width="10.38" height="10.38"/></g></g><g class="cls-121"><g class="cls-3"><rect x="8.36" y="31.72" width="10.38" height="10.38"/></g></g><g class="cls-122"><g class="cls-3"><rect x="8.79" y="32.41" width="10.38" height="10.38"/></g></g><g class="cls-123"><g class="cls-3"><rect x="4.81" y="29.88" width="10.38" height="10.47"/></g></g><g class="cls-124"><g class="cls-3"><rect x="5.3" y="30.77" width="10.38" height="10.53"/></g></g><g class="cls-125"><g class="cls-3"><rect x="13.24" y="1.61" width="10.08" height="10.01"/></g></g><g class="cls-126"><g class="cls-3"><rect x="12.55" y="1.56" width="10.2" height="10"/></g></g><g class="cls-127"><g class="cls-3"><rect x="4.48" y="29.27" width="10.38" height="10.49"/></g></g><g class="cls-128"><g class="cls-3"><rect x="4.3" y="28.99" width="10.38" height="10.38"/></g></g><g class="cls-129"><g class="cls-3"><rect x="10.24" y="4.95" width="10.04" height="10.01"/></g></g><g class="cls-130"><g class="cls-3"><rect x="4.65" y="29.58" width="10.38" height="10.42"/></g></g><g class="cls-131"><g class="cls-3"><rect x="4.11" y="28.83" width="10.38" height="10.38"/></g></g><g class="cls-132"><g class="cls-3"><rect x="4.88" y="30.18" width="10.38" height="10.57"/></g></g><g class="cls-133"><g class="cls-3"><rect x="5.05" y="30.55" width="10.38" height="10.49"/></g></g><g class="cls-134"><g class="cls-3"><rect x="3.96" y="28.72" width="10.38" height="10.38"/></g></g><g class="cls-135"><g class="cls-3"><rect x="5.65" y="31.08" width="10.38" height="10.38"/></g></g><g class="cls-136"><g class="cls-3"><rect x="10.26" y="4.84" width="10.38" height="10.38"/></g></g><g class="cls-137"><g class="cls-3"><rect x="18.76" y="30.45" width="10.38" height="10.38"/></g></g><g class="cls-138"><g class="cls-3"><rect x="17.27" y="29.29" width="10.72" height="10.7"/></g></g><g class="cls-139"><g class="cls-3"><rect x="5.87" y="7.74" width="10.04" height="10.01"/></g></g><g class="cls-140"><g class="cls-3"><rect width="34.94" height="46.85"/></g></g><g class="cls-141"><g class="cls-3"><rect x="5.82" y="7.74" width="10.26" height="10.02"/></g></g><g class="cls-142"><g class="cls-3"><rect x="5.81" y="7.73" width="10.06" height="10.01"/></g></g><g class="cls-143"><g class="cls-3"><rect x="10.07" y="4.76" width="10.38" height="10.38"/></g></g><g class="cls-144"><g class="cls-3"><rect x="2.73" y="37.98" width="29.49" height="13.89"/></g></g><g class="cls-3"><line class="cls-145" x1="42.09" y1="6.5" x2="42.09" y2="46.65"/></g><g class="cls-146"><g class="cls-3"><g class="cls-147"><g class="cls-148"><g class="cls-149"><g class="cls-148"><rect class="cls-150" x="60" y="0.43" width="15.11" height="15.08"/></g></g></g></g></g></g><g class="cls-151"><g class="cls-3"><rect class="cls-152" x="53.84" y="2.05" width="27.42" height="31.97"/></g></g><g class="cls-153"><g class="cls-3"><g class="cls-147"><g class="cls-154"><g class="cls-155"><g class="cls-156"><rect class="cls-157" x="49.21" y="12.54" width="21.71" height="25.16"/></g></g></g></g></g></g><g class="cls-158"><g class="cls-3"><rect class="cls-159" x="49.28" y="36.86" width="14.25" height="15.01"/></g></g><g class="cls-160"><g class="cls-3"><g class="cls-147"><g class="cls-161"><g class="cls-162"><g class="cls-163"><rect class="cls-159" x="54.48" y="36.86" width="11.03" height="15.01"/></g></g></g></g></g></g><g class="cls-160"><g class="cls-3"><g class="cls-147"><g class="cls-164"><g class="cls-165"><g class="cls-163"><rect class="cls-159" x="56.71" y="36.86" width="14.18" height="15.01"/></g></g></g></g></g></g><g class="cls-160"><g class="cls-3"><g class="cls-147"><g class="cls-166"><g class="cls-167"><g class="cls-163"><rect class="cls-159" x="61.25" y="36.74" width="13.9" height="15.24"/></g></g></g></g></g></g><g class="cls-160"><g class="cls-3"><g class="cls-147"><g class="cls-168"><g class="cls-169"><g class="cls-163"><rect class="cls-159" x="66.02" y="36.86" width="14.15" height="15.01"/></g></g></g></g></g></g><g class="cls-160"><g class="cls-3"><g class="cls-147"><g class="cls-170"><g class="cls-171"><g class="cls-163"><rect class="cls-159" x="70.77" y="36.86" width="14.8" height="15.01"/></g></g></g></g></g></g><g class="cls-160"><g class="cls-3"><g class="cls-147"><g class="cls-172"><g class="cls-173"><g class="cls-163"><rect class="cls-157" x="61.35" y="12.54" width="24.23" height="29.18"/></g></g></g></g></g></g></svg> \ No newline at end of file diff --git a/ansible/artifacts/sunbird/login/resources/img/favicon.ico b/ansible/artifacts/sunbird/login/resources/img/favicon.ico index 4b2d8aa6de5db3be532e3eff383f7149da6a7e66..4efa5f58112409a2caeaab80c6852655a5a413e0 100644 Binary files a/ansible/artifacts/sunbird/login/resources/img/favicon.ico and b/ansible/artifacts/sunbird/login/resources/img/favicon.ico differ diff --git a/ansible/artifacts/sunbird/login/resources/img/google.png b/ansible/artifacts/sunbird/login/resources/img/google.png new file mode 100644 index 0000000000000000000000000000000000000000..c19eaff0f653f5a0589e4c50777dcca604c92eeb Binary files /dev/null and b/ansible/artifacts/sunbird/login/resources/img/google.png differ diff --git a/ansible/artifacts/sunbird/login/resources/img/logo.png b/ansible/artifacts/sunbird/login/resources/img/logo.png index e5e61876e4bf4424342c1f98e8118bbb11fca0d1..a0d1b6a47e3eea95e1f12e7a315b929984477a88 100644 Binary files a/ansible/artifacts/sunbird/login/resources/img/logo.png and b/ansible/artifacts/sunbird/login/resources/img/logo.png differ diff --git a/ansible/artifacts/sunbird/login/resources/js/login.js b/ansible/artifacts/sunbird/login/resources/js/login.js new file mode 100644 index 0000000000000000000000000000000000000000..a4a1a0ff8dd0cad31a8facae745554d2cb773157 --- /dev/null +++ b/ansible/artifacts/sunbird/login/resources/js/login.js @@ -0,0 +1,171 @@ +function getQueryStringValue (key) { + return decodeURIComponent(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + encodeURIComponent(key).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1")); +} + +window.onload = function(){ + + addVersionToURL(); + var error_message = (new URLSearchParams(window.location.search)).get('error_message'); + var success_message = (new URLSearchParams(window.location.search)).get('success_message'); + + if(error_message){ + var error_msg = document.getElementById('error-msg'); + error_msg.className = error_msg.className.replace("hide",""); + error_msg.innerHTML = error_message; + }else if(success_message){ + var success_msg = document.getElementById("success-msg"); + success_msg.className = success_msg.className.replace("hide",""); + success_msg.innerHTML = success_message; + } +} + +var storeLocation = function(){ + sessionStorage.setItem('url', window.location.href); +} + +var addVersionToURL = function (){ + var version = getQueryStringValue("version"); + + if (version == 1 || version == 2){ + + var selfSingUp = document.getElementById("selfSingUp"); + + if(selfSingUp) { + selfSingUp.className = selfSingUp.className.replace(/\bhide\b/g, ""); + } + + var stateButton = document.getElementById("stateButton"); + + if (version == 2 && stateButton) { + stateButton.className = stateButton.className.replace(/\bhide\b/g, ""); + } + + var versionLink = document.getElementById("versionLink"); + + if(versionLink){ + versionLink.href = versionLink.href + '&version=' + version ; + } + } + +} +var makeDivUnclickable = function() { + var containerElement = document.getElementById('kc-form'); + var overlayEle = document.getElementById('kc-form-wrapper'); + overlayEle.style.display = 'block'; + containerElement.setAttribute('class', 'unClickable'); +}; + +var inputBoxFocusIn = function(currentElement){ + if(currentElement.id !== 'totp'){ + var placeholderElement = document.querySelector("label[id='"+currentElement.id+"LabelPlaceholder']"); + var labelElement = document.querySelector("label[id='"+currentElement.id+"Label']"); + placeholderElement.className = placeholderElement.className.replace("hide", ""); + addClass(labelElement,"hide"); + } +}; +var inputBoxFocusOut = function(currentElement){ + if(currentElement.id !== 'totp'){ + var placeholderElement = document.querySelector("label[id='"+currentElement.id+"LabelPlaceholder']"); + var labelElement = document.querySelector("label[id='"+currentElement.id+"Label']"); + labelElement.className = labelElement.className.replace("hide", ""); + addClass(placeholderElement,"hide"); + } +}; + +function addClass(element,classname) +{ + var arr; + arr = element.className.split(" "); + if (arr.indexOf(classname) == -1) { + element.className += " " + classname; + } +} +const redirect = (redirectUrlPath) => { + const curUrlObj = window.location; + var redirect_uri = (new URLSearchParams(curUrlObj.search)).get('redirect_uri'); + var client_id = (new URLSearchParams(curUrlObj.search)).get('client_id'); + const sessionUrl = sessionStorage.getItem('url'); + if (redirect_uri) { + const updatedQuery = curUrlObj.search + '&error_callback=' + curUrlObj.href.split('?')[0]; + const redirect_uriLocation = new URL(redirect_uri); + sessionStorage.setItem('url', window.location.href); + + if(client_id === 'android'){ + window.location.href = curUrlObj.protocol + '//' + curUrlObj.host + redirectUrlPath + updatedQuery; + } + else + { + window.location.href = redirect_uriLocation.protocol + '//' + redirect_uriLocation.host + redirectUrlPath + updatedQuery; + } + } else if (sessionUrl) { + const sessionUrlObj = new URL(sessionUrl); + const updatedQuery = sessionUrlObj.search + '&error_callback=' + sessionUrlObj.href.split('?')[0]; + redirect_uri = (new URLSearchParams(sessionUrlObj.search)).get('redirect_uri'); + client_id = (new URLSearchParams(sessionUrlObj.search)).get('client_id'); + + if (redirect_uri) { + const redirect_uriLocation = new URL(redirect_uri); + if(client_id === 'android'){ + window.location.href = sessionUrlObj.protocol + '//' + sessionUrlObj.host + redirectUrlPath + updatedQuery; + } + else{ + window.location.href = redirect_uriLocation.protocol + '//' + redirect_uriLocation.host + + redirectUrlPath + updatedQuery; + } + } else { + redirectToLib(); + } + } else { + redirectToLib(); + } +}; +const redirectToLib = () => { + window.location.href = window.location.protocol + '//' + window.location.host + '/resource'; +}; + +const viewPassword = function(previewButton){ + console.log('Show Password'); + + var newPassword = document.getElementById("password-new"); + if (newPassword.type === "password") { + newPassword.type = "text"; + addClass(previewButton,"slash"); + } else { + newPassword.type = "password"; + previewButton.className = previewButton.className.replace("slash",""); + } +} +const handleSsoEvent = () => { + const ssoPath = '/sign-in/sso/select-org'; + const curUrlObj = window.location; + let redirect_uri = (new URLSearchParams(curUrlObj.search)).get('redirect_uri'); + let client_id = (new URLSearchParams(curUrlObj.search)).get('client_id'); + const sessionUrl = sessionStorage.getItem('url'); + if (redirect_uri) { + const redirect_uriLocation = new URL(redirect_uri); + sessionStorage.setItem('url', window.location.href); + if (client_id === 'android') { + const ssoUrl = curUrlObj.protocol + '//' + curUrlObj.host + ssoPath; + window.location.href = redirect_uri + '?ssoUrl=' + ssoUrl; + } else { + window.location.href = redirect_uriLocation.protocol + '//' + redirect_uriLocation.host + ssoPath; + } + } else if (sessionUrl) { + const sessionUrlObj = new URL(sessionUrl); + redirect_uri = (new URLSearchParams(sessionUrlObj.search)).get('redirect_uri'); + client_id = (new URLSearchParams(sessionUrlObj.search)).get('client_id'); + if (redirect_uri) { + const redirect_uriLocation = new URL(redirect_uri); + if (client_id === 'android') { + const ssoUrl = sessionUrlObj.protocol + '//' + sessionUrlObj.host + ssoPath; + window.location.href = redirect_uri + '?ssoUrl=' + ssoUrl; + } else { + window.location.href = redirect_uriLocation.protocol + '//' + redirect_uriLocation.host + ssoPath; + } + } else { + redirectToLib(); + } + } else { + redirectToLib(); + } +}; diff --git a/ansible/artifacts/sunbird/login/resources/login-reset-password.ftl b/ansible/artifacts/sunbird/login/resources/login-reset-password.ftl deleted file mode 100644 index 5232e86d998aca6f3c93e7a65fa1e62b46b2ccea..0000000000000000000000000000000000000000 --- a/ansible/artifacts/sunbird/login/resources/login-reset-password.ftl +++ /dev/null @@ -1,43 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayInfo=true; section> - <#if section = "title"> - ${msg("emailForgotTitle")} - <#elseif section = "header"> - ${msg("emailForgotTitle")} - <#elseif section = "form"> - <div class="page-login"> - <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> - <div class="ui centered grid container"> - <div class="ten wide column signInGridAlign"> - <div class="ui fluid card"> - <div class="ui basic segment"> - <h2 class="ui header">${msg("emailForgotTitle")}</h2> - </div> - <div class="content signin-contentPadding"> - <form id="kc-reset-password-form" class="ui form pre-signin" action="${url.loginAction}" method="post"> - <div class="field"> - <label for="username"><#if !realm.loginWithEmailAllowed>${msg("username")}<#elseif !realm.registrationEmailAsUsername>${msg("usernameOrEmail")}<#else>${msg("email")}</#if></label> - <input type="text" id="username" name="username" autofocus/> - </div> - - <div class="ui grid margin-top2em"> - <div id="kc-form-options"> - <div class="${properties.kcFormOptionsWrapperClass!}"> - <span><a href="${url.loginUrl}">${msg("backToLogin")}</a></span> - </div> - </div> - - <div id="kc-form-buttons"> - <button class="ui primary right floated button buttonResizeClass" type="submit">${msg("doSubmit")}</button> - </div> - </div> - </form> - </div> - </div> - </div> - </div> - </div> - <#elseif section = "info" > - ${msg("emailInstruction")} - </#if> -</@layout.registrationLayout> \ No newline at end of file diff --git a/ansible/artifacts/sunbird/login/resources/login-update-password.ftl b/ansible/artifacts/sunbird/login/resources/login-update-password.ftl deleted file mode 100644 index bb2fee49c443c90b82d4c319b78c8fc6111e7aa7..0000000000000000000000000000000000000000 --- a/ansible/artifacts/sunbird/login/resources/login-update-password.ftl +++ /dev/null @@ -1,48 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayInfo=true; section> - <#if section = "title"> - ${msg("updatePasswordTitle")} - <#elseif section = "header"> - ${msg("updatePasswordTitle")} - <#elseif section = "form"> - <div class="page-login"> - <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> - <div class="ui centered grid container"> - <div class="ten wide column signInGridAlign"> - <div class="ui fluid card"> - <div class="ui basic segment"> - <h2 class="ui header">${msg("updatePasswordTitle")}</h2> - </div> - <div class="content signin-contentPadding"> - <form id="kc-passwd-update-form" class="ui form pre-signin" action="${url.loginAction}" method="post"> - <input type="text" readonly value="this is not a login form" style="display: none;"> - <input type="password" readonly value="this is not a login form" style="display: none;"> - - <div class="field"> - <label for="password-new">${msg("passwordNew")}</label> - <input type="password" id="password-new" name="password-new" autofocus autocomplete="off" /> - </div> - - <div class="field"> - <label for="password-confirm" >${msg("passwordConfirm")}</label> - <input type="password" id="password-confirm" name="password-confirm" autocomplete="off" /> - </div> - - <div class="ui grid margin-top2em"> - <div id="kc-form-options" class="${properties.kcFormOptionsClass!}"> - <div class="${properties.kcFormOptionsWrapperClass!}"> - </div> - </div> - - <div id="kc-form-buttons" class="${properties.kcFormButtonsClass!}"> - <button class="ui primary right floated button buttonResizeClass" type="submit">${msg("doSubmit")}</button> - </div> - </div> - </form> - </div> - </div> - </div> - </div> - </div> - </#if> -</@layout.registrationLayout> \ No newline at end of file diff --git a/ansible/artifacts/sunbird/login/resources/login.ftl b/ansible/artifacts/sunbird/login/resources/login.ftl deleted file mode 100644 index 9115c346f3af1292ed096383fd03ee022974cf99..0000000000000000000000000000000000000000 --- a/ansible/artifacts/sunbird/login/resources/login.ftl +++ /dev/null @@ -1,72 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayInfo=social.displayInfo; section> - <#if section = "title"> - ${msg("loginTitle",(realm.displayName!''))} - <#elseif section = "header"> - ${msg("loginTitleHtml",(realm.displayNameHtml!''))} - <#elseif section = "form"> - <#if realm.password> - <div class="page-login"> - <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> - <div class="ui centered grid container"> - <div class="ten wide column signInGridAlign"> - <div class="ui fluid card"> - <div class="ui centered medium image signInLogo margin-top3em"> - <img src="/auth/resources/3.2.0.final/login/sunrise/img/logo.png"> - </div> - <div class="ui basic segment"> - <h2 class="ui header">${msg("loginTitle",(realm.displayName!''))}</h2> - </div> - <div class="content signin-contentPadding"> - <form id="kc-form-login" class="ui form pre-signin" method="POST" action="${url.loginAction}"> - <div class="field"> - <label for="username"><#if !realm.loginWithEmailAllowed>${msg("username")}<#elseif !realm.registrationEmailAsUsername>${msg("usernameOrEmail")}<#else>${msg("email")}</#if></label> - <#if usernameEditDisabled??> - <input id="username" name="username" value="${(login.username!'')?html}" type="text" disabled /> - <#else> - <input id="username" name="username" value="${(login.username!'')?html}" type="text" autofocus autocomplete="off" /> - </#if> - </div> - <div class="field"> - <label for="password">${msg("password")}</label> - <input id="password" name="password" type="password" autocomplete="off" /> - </div> - <div class="ui grid margin-top2em"> - <div class="six wide column"> - <div class="forgot-passwordText"> - <#if realm.resetPasswordAllowed> - <span><a href="${url.loginResetCredentialsUrl}">${msg("doForgotPassword")}</a></span> - </#if> - </div> - </div> - <div class="six wide column"> - <button class="ui primary right floated button buttonResizeClass" name="login" id="kc-login" type="submit">${msg("doLogIn")}</button> - </div> - </div> - </form> - </div> - <div> - </div> - </div> - </div> - </div> - </div> - </#if> - <#elseif section = "info" > - <#if realm.password && realm.registrationAllowed && !usernameEditDisabled??> - <div id="kc-registration"> - <span>${msg("noAccount")} <a href="${url.registrationUrl}">${msg("doRegister")}</a></span> - </div> - </#if> - - <#if realm.password && social.providers??> - <div id="kc-social-providers"> - <ul> - <#list social.providers as p> - <li><a href="${p.loginUrl}" id="zocial-${p.alias}" class="zocial ${p.providerId}"> <span class="text">${p.displayName}</span></a></li> - </#list> - </ul> - </div> - </#if> - </#if> -</@layout.registrationLayout> \ No newline at end of file diff --git a/ansible/artifacts/sunbird/login/template.ftl b/ansible/artifacts/sunbird/login/template.ftl new file mode 100644 index 0000000000000000000000000000000000000000..23e7579f510312b0b17b1aa8154621f68dbd18c2 --- /dev/null +++ b/ansible/artifacts/sunbird/login/template.ftl @@ -0,0 +1,114 @@ +<#macro registrationLayout bodyClass="" displayInfo=false displayMessage=true> +<!DOCTYPE html> +<html class="${properties.kcHtmlClass!}"> +<head> + <meta charset="utf-8"> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <meta name="robots" content="noindex, nofollow"> + <meta http-equiv="cache-control" content="max-age=0" /> + <meta http-equiv="cache-control" content="no-cache" /> + <meta http-equiv="Cache-Control" content="no-store" /> + <meta http-equiv="pragma" content="no-cache" /> + <meta name="last-modified" content="2019-01-17 15:30:17 +0530"> + <meta http-equiv="Expires" content="600" /> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <#if properties.meta?has_content> + <#list properties.meta?split(' ') as meta> + <meta name="${meta?split('==')[0]}" content="${meta?split('==')[1]}"/> + </#list> + </#if> + <title><#nested "title"></title> + <link rel="icon" href="${url.resourcesPath}/img/favicon.ico" /> + <#if properties.styles?has_content> + <#list properties.styles?split(' ') as style> + <link href="${url.resourcesPath}/${style}" rel="stylesheet" /> + </#list> + </#if> + <#if properties.scripts?has_content> + <#list properties.scripts?split(' ') as script> + <script src="${url.resourcesPath}/${script}" type="text/javascript"></script> + </#list> + </#if> + <#if scripts??> + <#list scripts as script> + <script src="${script}" type="text/javascript"></script> + </#list> + </#if> +</head> + +<body class="${properties.kcBodyClass!}"> + <div id="kc-logo"><a href="${properties.kcLogoLink!'#'}"><div id="kc-logo-wrapper"></div></a></div> + + <div id="kc-container" class="${properties.kcContainerClass!}"> + <div id="kc-container-wrapper" class="${properties.kcContainerWrapperClass!}"> + + <div id="kc-header" class="${properties.kcHeaderClass!}"> + <div id="kc-header-wrapper" class="${properties.kcHeaderWrapperClass!}"><#nested "header"></div> + </div> + + <#if realm.internationalizationEnabled> + <div id="kc-locale" class="${properties.kcLocaleClass!}"> + <div id="kc-locale-wrapper" class="${properties.kcLocaleWrapperClass!}"> + <div class="kc-dropdown" id="kc-locale-dropdown"> + <a href="#" id="kc-current-locale-link">${locale.current}</a> + <ul> + <#list locale.supported as l> + <li class="kc-dropdown-item"><a href="${l.url}">${l.label}</a></li> + </#list> + </ul> + </div> + </div> + </div> + </#if> + + <div id="kc-content" class="${properties.kcContentClass!}"> + <div id="kc-content-wrapper" class="${properties.kcContentWrapperClass!}"> + <#if displayMessage && message?has_content> + <!--div class="${properties.kcFeedbackAreaClass!}"> + <div class="alert alert-${message.type}"> + <#if message.type = 'success'><span class="${properties.kcFeedbackSuccessIcon!}"></span></#if> + <#if message.type = 'warning'><span class="${properties.kcFeedbackWarningIcon!}"></span></#if> + <#if message.type = 'error'><span class="${properties.kcFeedbackErrorIcon!}"></span></#if> + <#if message.type = 'info'><span class="${properties.kcFeedbackInfoIcon!}"></span></#if> + <span class="kc-feedback-text">${message.summary}</span> + </div> + </div--> + </#if> + + <div id="kc-form" class="${properties.kcFormAreaClass!}"> + <div id="kc-form-wrapper" class="${properties.kcFormAreaWrapperClass!}"> + <#nested "form"> + </div> + </div> + <script type="text/javascript"> + var sessionTenant = sessionStorage.getItem("rootTenantLogo"); + + if(sessionTenant){ + var imgSrc = "${url.resourcesPath}/img/tenants/"+sessionTenant+".png"; + }else{ + var imgSrc = "${url.resourcesPath}/img/diksha_gov_logo.svg"; + } + + var logoImg = document.querySelector(".ui.header img"); + if(logoImg){ + logoImg.setAttribute('class','logo-image'); + logoImg.setAttribute('alt',sessionTenant); + logoImg.src = imgSrc; + logoImg.addEventListener("error", ()=>{ logoImg.onerror=null;logoImg.src='${url.resourcesPath}/img/diksha_gov_logo.svg'}); + } + + </script> + <#if displayInfo> + <div id="kc-info" class="${properties.kcInfoAreaClass!}"> + <div id="kc-info-wrapper" class="${properties.kcInfoAreaWrapperClass!}"> + <#nested "info"> + </div> + </div> + </#if> + </div> + </div> + </div> + </div> +</body> +</html> +</#macro> diff --git a/ansible/artifacts/sunbird/login/resources/theme.properties b/ansible/artifacts/sunbird/login/theme.properties similarity index 84% rename from ansible/artifacts/sunbird/login/resources/theme.properties rename to ansible/artifacts/sunbird/login/theme.properties index d5c984f74fedd5a423dc107989c87e6a69cf3c07..20358b79fa42a87b768a3b64d5f4717a2d1b93f9 100644 --- a/ansible/artifacts/sunbird/login/resources/theme.properties +++ b/ansible/artifacts/sunbird/login/theme.properties @@ -16,6 +16,6 @@ # parent=base -styles=css/semantic.min.css css/login.css - -kcFeedbackAreaClass=ui info message \ No newline at end of file +styles=css/semantic.min.css?v=1.14.b css/login.css?v=1.14.b +scripts=js/login.js?v=1.14.b +kcFeedbackAreaClass=ui info message diff --git a/ansible/inventory/env/group_vars/all.yml b/ansible/inventory/env/group_vars/all.yml index 2c75fd7e057cb1de3fa330d20c32e97e9a35f912..38768a632203a194a2003e1ed716bfdfe5ec11de 100644 --- a/ansible/inventory/env/group_vars/all.yml +++ b/ansible/inventory/env/group_vars/all.yml @@ -19,9 +19,13 @@ sunbird_app_name: "{{env}}" azure_account_key: "{{core_vault_sunbird_azure_storage_key}}" # Keycloak -keycloak_api_management_user_password: "{{core_vault_keycloak_api_management_user_password}}" keycloak_api_management_user_first_name: "admin" keycloak_api_management_user_last_name: "admin" +keycloak_api_management_user_email: "{{keycloak_api_management_user_email}}" +keycloak_api_management_username: "{{core_vault_sunbird_sso_username}}" +keycloak_api_management_user_password: "{{core_vault_sunbird_sso_password}}" +keycloak_management_user: "admin" +keycloak_management_password: "{{core_vault_keycloak_password}}" ## Learner service sunbird_url_shortner_access_token: "{{vault_core_url_shortner_access_token}}" @@ -32,7 +36,7 @@ sunbird_keycloak_required_action_link_expiration_seconds: 2592000 sunbird_es_port: 9300 mail_server_port: 587 upstream_url: "{{azure_account_name}}.blob.core.windows.net/{{sunbird_content_azure_storage_container}}" -## Mailing list +## Mailing list # !! Override for specific alert groups; Default will be alerts_mailing_list monitor_alerts_slack_channel: app_alerts_mailing_list: "" @@ -46,7 +50,7 @@ sunbird_user_profile_field_default_visibility: private # Player sunbird_external_content_whitelisted_domains: "" -sunbird_portal_user_upload_ref_link: http://www.sunbird.org/features-documentation/register_user +sunbird_portal_user_upload_ref_link: http://www.sunbird.org/features-documentation/register_user # Content content_service_whitelisted_channels: "" @@ -54,7 +58,7 @@ content_service_blacklisted_channels: "" # Badger badger_file_storage: storages.backends.azure_storage.AzureStorage -badger_admin_email: +badger_admin_email: ## Below passwords are used by DB install scripts when creating databases. Please use strong passwords. sunbird_pg_user: "{{core_vault_postgres_username}}" diff --git a/ansible/roles/sunbird-auth-deploy/defaults/main.yml b/ansible/roles/sunbird-auth-deploy/defaults/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..b6860444969337ae9d79a0393f5f5ede3b91e1db --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/defaults/main.yml @@ -0,0 +1,86 @@ +--- +sunbird_auth_version: 1.0v +keycloak_pkg_src: https://downloads.jboss.org/keycloak/3.2.0.Final/keycloak-3.2.0.Final.tar.gz +postgresql_driver_src: https://jdbc.postgresql.org/download/postgresql-9.4.1212.jar +keycloak_pkg_file: "keycloak-3.2.0.Final.tar.gz" +keycloak_sms_provider_build: "keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar" +keycloak_subsystem: ' + <subsystem xmlns="urn:jboss:domain:keycloak-server:1.1"> + <web-context>auth</web-context> + </subsystem>' +keycloak_cache_container: ' + <cache-container name="keycloak" jndi-name="infinispan/Keycloak"> + <local-cache name="realms"/> + <local-cache name="users"/> + <local-cache name="sessions"/> + <local-cache name="offlineSessions"/> + <local-cache name="loginFailures"/> + </cache-container>' +keycloak_default_ds: ' + <datasource jndi-name="java:jboss/datasources/KeycloakDS" + pool-name="KeycloakDS" enabled="true" use-java-context="true"> + <connection-url> + jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE + </connection-url> + <driver>h2</driver> + <security> + <user-name>sa</user-name> + <password>sa</password> + </security> + </datasource>' + +keycloak_ds_driver_path: "/opt/keycloak/modules/system/layers/keycloak/org/postgresql/main" +wildfly_dir: /opt/keycloak +keycloak_download_dir: /opt +keycloak_download_url: https://downloads.jboss.org/keycloak/3.2.0.Final/keycloak-3.2.0.Final.tar.gz +wildfly_user: keycloak +wildfly_group: keycloak +wildfly_standalone_config_path: /opt/keycloak/keycloak/standalone/configuration/standalone-ha.xml +keycloak_ext: <extension module="org.keycloak.keycloak-server-subsystem"/> +keycloak_download_file: keycloak-3.2.0.Final.tar.gz + +keycloak_ds_driver_url: https://jdbc.postgresql.org/download/postgresql-9.2.1212.jar +keycloak_ds_driver_name: "postgresql" +keycloak_ds_driver_module: ' + <?xml version="1.0" ?> + <module xmlns="urn:jboss:module:1.1" name="org.postgresql"> + + <resources> + <resource-root path="postgresql-42.1.1.jar"/> + </resources> + + <dependencies> + <module name="javax.api"/> + <module name="javax.transaction.api"/> + </dependencies> + </module>' +keycloak_custom_driver: ' + <driver name="postgresql" module="org.postgresql"> + <xa-datasource-class> + org.postgresql.xa.PGXADataSource + </xa-datasource-class> + <datasource-class>org.postgresql.ds.PGPoolingDataSource</datasource-class> + </driver>' +keycloak_custom_ds: ' + <datasource jta="true" jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-ccm="true"> + <connection-url>jdbc:postgresql://11.0.0.6:5432/keycloak</connection-url> + <driver-class>org.postgresql.Driver</driver-class> + <driver>postgresql</driver> + <security> + <user-name>keycloak</user-name> + <password>KeyCloaK#2</password> + </security> + <validation> + <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/> + <background-validation>true</background-validation> + <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/> + </validation> + </datasource>' + +theme: "sunrise.tar.gz" +dest_theme: "/opt/keycloak/themes/" +theme_file: sunrise +keycloak_home: /opt/keycloak +login_theme: artifacts/sunbird/login +email_theme: artifacts/sunbird/email +tenant_name: sunbird diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/PKG-INFO b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/PKG-INFO new file mode 100644 index 0000000000000000000000000000000000000000..e71b54e3b995b675e7f81b254b207e43d625cd6a --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/PKG-INFO @@ -0,0 +1,19 @@ +Metadata-Version: 1.1 +Name: python-keycloak +Version: 0.12.0 +Summary: python-keycloak is a Python package providing access to the Keycloak API. +Home-page: https://bitbucket.org/agriness/python-keycloak +Author: Marcos Pereira +Author-email: marcospereira.mpj@gmail.com +License: GNU General Public License - V3 +Description-Content-Type: UNKNOWN +Description: UNKNOWN +Keywords: keycloak openid +Platform: UNKNOWN +Classifier: Programming Language :: Python :: 3 +Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3) +Classifier: Development Status :: 3 - Alpha +Classifier: Operating System :: MacOS +Classifier: Operating System :: Unix +Classifier: Operating System :: Microsoft :: Windows +Classifier: Topic :: Utilities diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/README.md b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c6b0940b0800fa091d58eaf2ac1b1103ae460878 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/README.md @@ -0,0 +1,210 @@ +[](http://python-keycloak.readthedocs.io/en/latest/?badge=latest) + +Python Keycloak +==================== + +For review- see https://bitbucket.org/agriness/python-keycloak + +**python-keycloak** is a Python package providing access to the Keycloak API. + +## Installation + +### Via Pypi Package: + +``` $ pip install python-keycloak ``` + +### Manually + +``` $ python setup.py install ``` + +## Dependencies + +python-keycloak depends on: + +* Python 3 +* [requests](http://docs.python-requests.org/en/master/) +* [python-jose](http://python-jose.readthedocs.io/en/latest/) + +### Tests Dependencies + +* unittest +* [httmock](https://github.com/patrys/httmock) + +## Bug reports + +Please report bugs and feature requests at +https://bitbucket.org/agriness/python-keycloak/issues + +## Documentation + +The documentation for python-keycloak is available on [readthedocs](http://python-keycloak.readthedocs.io). + +## Contributors + +* [Agriness Team](http://www.agriness.com/pt/) +* [Marcos Pereira](marcospereira.mpj@gmail.com) +* [Martin Devlin](martin.devlin@pearson.com) +* [Shon T. Urbas](shon.urbas@gmail.com>) + +## Usage + +```python +from keycloak import KeycloakOpenID + +# Configure client +keycloak_openid = KeycloakOpenID(server_url="http://localhost:8080/auth/", + client_id="example_client", + realm_name="example_realm", + client_secret_key="secret") + +# Get WellKnow +config_well_know = keycloak_openid.well_know() + +# Get Token +token = keycloak_openid.token("user", "password") + +# Get Userinfo +userinfo = keycloak_openid.userinfo(token['access_token']) + +# Refresh token +token = keycloak_openid.refresh_token(token['refresh_token']) + +# Logout +keycloak_openid.logout(token['refresh_token']) + +# Get Certs +certs = keycloak_openid.certs() + +# Get RPT (Entitlement) +token = keycloak_openid.token("user", "password") +rpt = keycloak_openid.entitlement(token['access_token'], "resource_id") + +# Instropect RPT +token_rpt_info = keycloak_openid.introspect(keycloak_openid.introspect(token['access_token'], rpt=rpt['rpt'], + token_type_hint="requesting_party_token")) + +# Introspect Token +token_info = keycloak_openid.introspect(token['access_token'])) + +# Decode Token +KEYCLOAK_PUBLIC_KEY = "secret" +options = {"verify_signature": True, "verify_aud": True, "exp": True} +token_info = keycloak_openid.decode_token(token['access_token'], key=KEYCLOAK_PUBLIC_KEY, options=options) + +# Get permissions by token +token = keycloak_openid.token("user", "password") +keycloak_openid.load_authorization_config("example-authz-config.json") +policies = keycloak_openid.get_policies(token['access_token'], method_token_info='decode', key=KEYCLOAK_PUBLIC_KEY) +permissions = keycloak_openid.get_permissions(token['access_token'], method_token_info='introspect') + +# KEYCLOAK ADMIN + +from keycloak import KeycloakAdmin + +keycloak_admin = KeycloakAdmin(server_url="http://localhost:8080/auth/", + username='example-admin', + password='secret', + realm_name="example_realm", + verify=True) + +# Add user +new_user = keycloak_admin.create_user({"email": "example@example.com", + "username": "example@example.com", + "enabled": True, + "firstName": "Example", + "lastName": "Example", + "realmRoles": ["user_default", ], + "attributes": {"example": "1,2,3,3,"}}) + + +# Add user and set password +new_user = keycloak_admin.create_user({"email": "example@example.com", + "username": "example@example.com", + "enabled": True, + "firstName": "Example", + "lastName": "Example", + "credentials": [{"value": "secret","type": "password",}], + "realmRoles": ["user_default", ], + "attributes": {"example": "1,2,3,3,"}}) + +# User counter +count_users = keycloak_admin.users_count() + +# Get users Returns a list of users, filtered according to query parameters +users = keycloak_admin.get_users({}) + +# Get user ID from name +user-id-keycloak = keycloak_admin.get_user_id("example@example.com") + +# Get User +user = keycloak_admin.get_user("user-id-keycloak") + +# Update User +response = keycloak_admin.update_user(user_id="user-id-keycloak", + payload={'firstName': 'Example Update'}) + +# Update User Password +response = set_user_password(user_id="user-id-keycloak", password="secret", temporary=True) + +# Delete User +response = keycloak_admin.delete_user(user_id="user-id-keycloak") + +# Get consents granted by the user +consents = keycloak_admin.consents_user(user_id="user-id-keycloak") + +# Send User Action +response = keycloak_admin.send_update_account(user_id="user-id-keycloak", + payload=json.dumps(['UPDATE_PASSWORD'])) + +# Send Verify Email +response = keycloak_admin.send_verify_email(user_id="user-id-keycloak") + +# Get sessions associated with the user +sessions = keycloak_admin.get_sessions(user_id="user-id-keycloak") + +# Get themes, social providers, auth providers, and event listeners available on this server +server_info = keycloak_admin.get_server_info() + +# Get clients belonging to the realm Returns a list of clients belonging to the realm +clients = keycloak_admin.get_clients() + +# Get client - id (not client-id) from client by name +client_id=keycloak_admin.get_client_id("my-client") + +# Get representation of the client - id of client (not client-id) +client = keycloak_admin.get_client(client_id="client_id") + +# Get all roles for the realm or client +realm_roles = keycloak_admin.get_realm_roles() + +# Get all roles for the client +client_roles = keycloak_admin.get_client_roles(client_id="client_id") + +# Get client role +role = keycloak_admin.get_client_role(client_id="client_id", role_name="role_name") + +# Warning: Deprecated +# Get client role id from name +role_id = keycloak_admin.get_client_role_id(client_id="client_id", role_name="test") + +# Create client role +keycloak_admin.create_client_role(client_id, "test") + +# Assign client role to user. Note that BOTH role_name and role_id appear to be required. +keycloak_admin.assign_client_role(client_id="client_id", user_id="user_id", role_id="role_id", role_name="test") + +# Create new group +group = keycloak_admin.create_group(name="Example Group") + +# Get all groups +groups = keycloak_admin.get_groups() + +# Get group +group = keycloak_admin.get_group(group_id='group_id') + +# Get group by name +group = keycloak_admin.get_group_by_name(name_or_path='group_id', search_in_subgroups=True) + +# Function to trigger user sync from provider +sync_users(storage_id="storage_di", action="action") +``` diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak-realm.json b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak-realm.json new file mode 100644 index 0000000000000000000000000000000000000000..72416d4de45c06a24bbff5b0e5b29a49116c59f8 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak-realm.json @@ -0,0 +1,1999 @@ +{ + "id": "sunbird", + "realm": "sunbird", + "notBefore": 0, + "revokeRefreshToken": false, + "accessTokenLifespan": 21600, + "accessTokenLifespanForImplicitFlow": 7200, + "ssoSessionIdleTimeout": 1800, + "ssoSessionMaxLifespan": 21600, + "offlineSessionIdleTimeout": 43200, + "accessCodeLifespan": 60, + "accessCodeLifespanUserAction": 300, + "accessCodeLifespanLogin": 1800, + "actionTokenGeneratedByAdminLifespan": 43200, + "actionTokenGeneratedByUserLifespan": 300, + "enabled": true, + "sslRequired": "external", + "registrationAllowed": false, + "registrationEmailAsUsername": false, + "rememberMe": true, + "verifyEmail": false, + "loginWithEmailAllowed": true, + "duplicateEmailsAllowed": false, + "resetPasswordAllowed": true, + "editUsernameAllowed": false, + "bruteForceProtected": false, + "permanentLockout": false, + "maxFailureWaitSeconds": 900, + "minimumQuickLoginWaitSeconds": 60, + "waitIncrementSeconds": 60, + "quickLoginCheckMilliSeconds": 1000, + "maxDeltaTimeSeconds": 43200, + "failureFactor": 30, + "roles": { + "realm": [ + { + "id": "7b955d7f-0a1e-4935-8391-642886d34612", + "name": "offline_access", + "description": "${role_offline-access}", + "scopeParamRequired": true, + "composite": false, + "clientRole": false, + "containerId": "sunbird" + }, + { + "id": "96adf368-c8e2-4b39-b2a5-2559573edb63", + "name": "uma_authorization", + "description": "${role_uma_authorization}", + "scopeParamRequired": false, + "composite": false, + "clientRole": false, + "containerId": "sunbird" + } + ], + "client": { + "realm-management": [ + { + "id": "3f8bf7e5-5d66-4394-8f06-1270529c605f", + "name": "manage-authorization", + "description": "${role_manage-authorization}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "601fa2c9-29d4-49c1-87ac-939a1260f6ce", + "name": "query-realms", + "description": "${role_query-realms}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "9aa1dcd9-cb93-4496-af5f-41b9ecacc1da", + "name": "view-authorization", + "description": "${role_view-authorization}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "98999987-faf5-4c4e-958a-e5463bc4edc6", + "name": "manage-events", + "description": "${role_manage-events}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "f898fca8-5361-49d5-900a-ebf5b775a939", + "name": "impersonation", + "description": "${role_impersonation}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "698dfeb0-b8d2-4240-b8a8-acd4b7a12ad3", + "name": "view-realm", + "description": "${role_view-realm}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "3ff462fc-b33c-431a-b54b-861c3298d910", + "name": "manage-users", + "description": "${role_manage-users}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "be1802b1-558c-404c-bcb9-b9bf77af9788", + "name": "manage-identity-providers", + "description": "${role_manage-identity-providers}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "387b44e4-e901-4431-b9af-6abd9377ed46", + "name": "query-clients", + "description": "${role_query-clients}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "a408b6e8-03c9-46a2-97ba-305d09db0c3c", + "name": "view-events", + "description": "${role_view-events}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "41c2f39a-3008-4f9d-9e1e-a7738c118570", + "name": "query-groups", + "description": "${role_query-groups}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "26d3289b-d2eb-4cf2-a501-f1e3fa07344c", + "name": "manage-clients", + "description": "${role_manage-clients}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "e2077ab0-6efb-450d-9cba-89cacd887b71", + "name": "create-client", + "description": "${role_create-client}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "46019462-3dc8-46a8-9786-ffcbad293f43", + "name": "view-users", + "description": "${role_view-users}", + "scopeParamRequired": false, + "composite": true, + "composites": { + "client": { + "realm-management": [ + "query-groups", + "query-users" + ] + } + }, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "d269f220-e93f-4b43-96a1-9f2c117a2dfb", + "name": "view-clients", + "description": "${role_view-clients}", + "scopeParamRequired": false, + "composite": true, + "composites": { + "client": { + "realm-management": [ + "query-clients" + ] + } + }, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "0c998f1b-7363-47fb-a493-4b6f4aacb0ba", + "name": "realm-admin", + "description": "${role_realm-admin}", + "scopeParamRequired": false, + "composite": true, + "composites": { + "client": { + "realm-management": [ + "manage-authorization", + "query-realms", + "view-authorization", + "manage-events", + "impersonation", + "view-realm", + "manage-users", + "manage-identity-providers", + "query-clients", + "view-events", + "query-groups", + "manage-clients", + "create-client", + "view-users", + "view-clients", + "manage-realm", + "view-identity-providers", + "query-users" + ] + } + }, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "d77bf5a5-5877-450b-b11e-5f874f410e10", + "name": "manage-realm", + "description": "${role_manage-realm}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "d97009ed-d0c7-4afb-b9a3-6ee03ef01a74", + "name": "view-identity-providers", + "description": "${role_view-identity-providers}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "57118202-c5e5-4c49-829b-c2ed796bfdea", + "name": "query-users", + "description": "${role_query-users}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + } + ], + "security-admin-console": [], + "android": [], + "admin-cli": [], + "trampoline": [], + "broker": [ + { + "id": "19ef58ac-2d90-40a4-a158-0e2f8893264a", + "name": "read-token", + "description": "${role_read-token}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "c3950efa-6684-44c2-b50a-c7b3d16df04b" + } + ], + "portal": [], + "account": [ + { + "id": "1fef7ac5-b042-462b-8298-0446044788b3", + "name": "manage-account", + "description": "${role_manage-account}", + "scopeParamRequired": false, + "composite": true, + "composites": { + "client": { + "account": [ + "manage-account-links" + ] + } + }, + "clientRole": true, + "containerId": "c2d24d3f-65ca-46de-9cd8-3eeb71a7f83d" + }, + { + "id": "f8786348-6fa4-4b13-828e-9f080c9c6824", + "name": "manage-account-links", + "description": "${role_manage-account-links}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "c2d24d3f-65ca-46de-9cd8-3eeb71a7f83d" + }, + { + "id": "91c5c738-9c39-4c4d-bae8-75f18fd7c5e4", + "name": "view-profile", + "description": "${role_view-profile}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "c2d24d3f-65ca-46de-9cd8-3eeb71a7f83d" + } + ] + } + }, + "groups": [], + "defaultRoles": [ + "offline_access", + "uma_authorization" + ], + "requiredCredentials": [ + "password" + ], + "passwordPolicy": "hashIterations(20000)", + "otpPolicyType": "totp", + "otpPolicyAlgorithm": "HmacSHA1", + "otpPolicyInitialCounter": 0, + "otpPolicyDigits": 6, + "otpPolicyLookAheadWindow": 1, + "otpPolicyPeriod": 30, + "clientScopeMappings": { + "realm-management": [ + { + "client": "admin-cli", + "roles": [ + "realm-admin" + ] + }, + { + "client": "security-admin-console", + "roles": [ + "realm-admin" + ] + } + ] + }, + "clients": [ + { + "id": "9a901d18-377b-4615-9b89-677b544be3c5", + "clientId": "trampoline", + "rootUrl": "", + "adminUrl": "", + "baseUrl": "/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "redirectUris": [ + ], + "webOrigins": [ + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": false, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "saml.authnstatement": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "saml.onetimeuse.condition": "false" + }, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "12134027-94cc-401c-bbf6-be565078ddfb", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "6a956bf1-6c40-4549-b335-9fe8c788b18f", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "d32ba1d4-3fef-42ff-aa2b-98cb4bfef6f9", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "9e899fc7-1ddd-447d-810c-d91333d6621c", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "74e4d13f-bd02-4f17-bbbc-d4b79bab1971", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "48fe23c2-a6fb-4c5e-8930-28ad1913829a", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + }, + { + "id": "da893beb-6ac7-420d-b51b-f05dadf56bbc", + "clientId": "android", + "rootUrl": "", + "baseUrl": "/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "redirectUris": [ + ], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "saml.authnstatement": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "saml.onetimeuse.condition": "false" + }, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "ff7dac46-16b4-4ab6-a054-dd03d5411fa9", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "32fad9c0-0dfe-45b2-94a1-3e2f74d756ec", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "4fb4d644-c609-4a27-a407-d451bcd83e16", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "84e7c6e5-1afb-44d8-b507-1ed31fa0f351", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "e7ca189f-94de-4996-a192-e93ba960bbba", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "16bedb3b-7571-4106-9a47-66151915ac31", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + }, + { + "id": "8891d8e9-35e6-4a1c-b32b-027be03b0f24", + "clientId": "admin-cli", + "name": "${client_admin-cli}", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": false, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "32d6a3a4-8635-4a36-bd14-8ac5b73a49cc", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "900fa741-d1b2-467e-88a6-b454a9519568", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "8ea14714-d160-49b8-b612-59102d50ef53", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "bd167b99-5d23-49c1-90c7-85c2b088fed7", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "c4fe56a1-8d15-455a-b87b-cf051454b57c", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "26e3bf4c-8f9a-4548-b0db-5bbb7c398991", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + }, + { + "id": "c3950efa-6684-44c2-b50a-c7b3d16df04b", + "clientId": "broker", + "name": "${client_broker}", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "54c3bbc3-850b-4636-82d1-ed4f3a46a00a", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "0f0d9b74-c476-4981-a783-dd4bdbe041ec", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "d6f625cc-eac1-49d0-bea5-17e6f9d3860c", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "bbf35056-9bbe-49a0-aefc-2bde2379ccdc", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "38b04951-1043-4dc6-9504-7b0f31ed71a4", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "88bb836b-7feb-45eb-b004-fb3be8436908", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + }, + { + "id": "b2f45201-1362-4b10-83c3-207d470f44bf", + "clientId": "realm-management", + "name": "${client_realm-management}", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": true, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "71605238-bf41-400e-8c03-a5d78f54b00b", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "a0cb6f3a-30ef-4475-b73f-ca6c2f1f3675", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "3a7708b1-63b9-4116-af7f-969fc1bf61a4", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "c393d7b7-fa22-4e90-9ad7-07d520632c20", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "2d8cbac4-e4dd-4fa6-bf71-98adf826b9dd", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "e77aae69-8ea4-4ee4-bcd6-ba7ef3958c02", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + }, + { + "id": "8c12290d-d62f-48ce-913b-c93bf995ca59", + "clientId": "portal", + "rootUrl": "", + "adminUrl": "/callback", + "baseUrl": "/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "redirectUris": [ + ], + "webOrigins": [ + "" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "saml.authnstatement": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "saml.onetimeuse.condition": "false" + }, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "63071ff2-a5e5-4d38-b534-a9f25a075403", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "9bf9cad5-dbce-41e9-aa36-d84cc5a768a2", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "238e55b7-6545-467e-856b-f95477afe1ff", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "edb1ff4e-b452-46bc-8c3b-d6075f6ee579", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "7a0118e2-57ff-4d23-bf74-cbfe1f545d1d", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "b59a913e-118a-4dc4-a8d7-66c44ced5345", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + }, + { + "id": "79c518d7-b41a-4e6f-be42-4ef365824100", + "clientId": "security-admin-console", + "name": "${client_security-admin-console}", + "baseUrl": "/auth/admin/sunbird/console/index.html", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "redirectUris": [ + "/auth/admin/sunbird/console/*" + ], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "c989a8c8-cb8b-40ff-b4b9-86122bad7aa9", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "b180fb8c-997c-4f6a-b774-af677f903139", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "c373dc9a-49d7-4d28-9b94-06cf20fb1955", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "24c7b1c4-62c2-4d92-ab19-49bfaedcc3d4", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "883a39a7-37b4-46ef-a761-3e51b95ccc35", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "95ed8e44-38cc-4f09-8adc-19c12d5eada0", + "name": "locale", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "consentText": "${locale}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "locale", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "locale", + "jsonType.label": "String" + } + }, + { + "id": "c66c6a41-eb22-443f-8a77-e68d404ad26f", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + }, + { + "id": "c2d24d3f-65ca-46de-9cd8-3eeb71a7f83d", + "clientId": "account", + "name": "${client_account}", + "baseUrl": "/auth/realms/sunbird/account", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "defaultRoles": [ + "manage-account", + "view-profile" + ], + "redirectUris": [ + "/auth/realms/sunbird/account/*" + ], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "a64118ab-33c8-4060-9f3e-3ed817ba8e0d", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "1f4a0c5e-7c8a-4693-8be5-14681b243868", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "8d88a133-a399-4e75-b051-5b0d4ae850ab", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "45593258-916c-4158-8577-d9806c16415a", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "027be48e-b7dc-4c3a-a648-414a466b67dd", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "c93937f9-0446-4be9-8b47-3c6de857497e", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + } + ], + "clientTemplates": [], + "browserSecurityHeaders": { + "xContentTypeOptions": "nosniff", + "xRobotsTag": "none", + "xFrameOptions": "SAMEORIGIN", + "xXSSProtection": "1; mode=block", + "contentSecurityPolicy": "frame-src 'self'" + }, + "smtpServer": { + "password": "", + "starttls": "", + "auth": "true", + "port": "587", + "host": "", + "from": "", + "ssl": "", + "user": "" + }, + "loginTheme": "sunrise", + "eventsEnabled": false, + "eventsListeners": [ + "jboss-logging" + ], + "enabledEventTypes": [], + "adminEventsEnabled": false, + "adminEventsDetailsEnabled": false, + "components": { + "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [ + { + "id": "84078bbb-e005-44c8-9c7d-a1b4821558da", + "name": "Max Clients Limit", + "providerId": "max-clients", + "subType": "anonymous", + "subComponents": {}, + "config": { + "max-clients": [ + "200" + ] + } + }, + { + "id": "346d857e-4385-4f8f-a2fc-072fd11a10ec", + "name": "Allowed Protocol Mapper Types", + "providerId": "allowed-protocol-mappers", + "subType": "authenticated", + "subComponents": {}, + "config": { + "allowed-protocol-mapper-types": [ + "saml-user-attribute-mapper", + "oidc-usermodel-attribute-mapper", + "oidc-usermodel-property-mapper", + "saml-role-list-mapper", + "saml-user-property-mapper", + "oidc-full-name-mapper", + "oidc-address-mapper", + "oidc-sha256-pairwise-sub-mapper" + ], + "consent-required-for-all-mappers": [ + "true" + ] + } + }, + { + "id": "eed64f9f-4b66-45ad-bdb4-4070e3802366", + "name": "Allowed Client Templates", + "providerId": "allowed-client-templates", + "subType": "authenticated", + "subComponents": {}, + "config": {} + }, + { + "id": "17ac4eaa-9139-4b3a-b1db-c82d44c1531d", + "name": "Allowed Client Templates", + "providerId": "allowed-client-templates", + "subType": "anonymous", + "subComponents": {}, + "config": {} + }, + { + "id": "38532936-be91-40e4-b65d-c0abfaf9547c", + "name": "Full Scope Disabled", + "providerId": "scope", + "subType": "anonymous", + "subComponents": {}, + "config": {} + }, + { + "id": "8c1690a2-6eea-4d61-ab66-7a015e3bea3c", + "name": "Allowed Protocol Mapper Types", + "providerId": "allowed-protocol-mappers", + "subType": "anonymous", + "subComponents": {}, + "config": { + "allowed-protocol-mapper-types": [ + "oidc-usermodel-property-mapper", + "saml-user-property-mapper", + "oidc-full-name-mapper", + "oidc-sha256-pairwise-sub-mapper", + "oidc-address-mapper", + "oidc-usermodel-attribute-mapper", + "saml-role-list-mapper", + "saml-user-attribute-mapper" + ], + "consent-required-for-all-mappers": [ + "true" + ] + } + }, + { + "id": "3dcc314c-07f8-484d-9535-29424dbaddfc", + "name": "Trusted Hosts", + "providerId": "trusted-hosts", + "subType": "anonymous", + "subComponents": {}, + "config": { + "host-sending-registration-request-must-match": [ + "true" + ], + "client-uris-must-match": [ + "true" + ] + } + }, + { + "id": "ab52b781-64b9-42a0-99f5-cbeba6710763", + "name": "Consent Required", + "providerId": "consent-required", + "subType": "anonymous", + "subComponents": {}, + "config": {} + } + ], + "org.keycloak.keys.KeyProvider": [ + { + "id": "bd30c46f-9ee3-443d-9faa-6ed8075aac87", + "name": "rsa-generated", + "providerId": "rsa-generated", + "subComponents": {}, + "config": { + "priority": [ + "100" + ] + } + }, + { + "id": "a93cc73f-b070-48cd-bf08-9b290707c2f5", + "name": "hmac-generated", + "providerId": "hmac-generated", + "subComponents": {}, + "config": { + "priority": [ + "100" + ] + } + } + ] + }, + "internationalizationEnabled": true, + "supportedLocales": [ + "de", + "no", + "ru", + "sv", + "pt-BR", + "ja", + "lt", + "en", + "it", + "fr", + "es", + "ca" + ], + "defaultLocale": "en", + "authenticationFlows": [ + { + "id": "6c9d3423-9956-4d08-a124-41cd17aceb5a", + "alias": "Direct Grant 2", + "description": "OpenID Connect Resource Owner Grant", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": false, + "authenticationExecutions": [ + { + "authenticator": "direct-grant-validate-username", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-password", + "requirement": "DISABLED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-otp", + "requirement": "OPTIONAL", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "a7a49eb1-4386-499a-8a8f-13454b428f98", + "alias": "Direct Grant w/o Password", + "description": "Grant user access using only the username and no password.", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": false, + "authenticationExecutions": [] + }, + { + "id": "c7b2f9c2-525b-486a-b2a8-148606caac0e", + "alias": "Handle Existing Account", + "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-confirm-link", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "idp-email-verification", + "requirement": "ALTERNATIVE", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "ALTERNATIVE", + "priority": 30, + "flowAlias": "Verify Existing Account by Re-authentication", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "c4674fef-8631-43c5-8f44-deb8867fa866", + "alias": "Verify Existing Account by Re-authentication", + "description": "Reauthentication of existing account", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-username-password-form", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-otp-form", + "requirement": "OPTIONAL", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "35016b3a-a041-47fd-8a85-a131c6f7b745", + "alias": "browser", + "description": "browser based authentication", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "auth-cookie", + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-spnego", + "requirement": "DISABLED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "identity-provider-redirector", + "requirement": "ALTERNATIVE", + "priority": 25, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "ALTERNATIVE", + "priority": 30, + "flowAlias": "forms", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "8e85927e-349d-4a0a-a7da-efb352ba78ce", + "alias": "clients", + "description": "Base authentication for clients", + "providerId": "client-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "client-secret", + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "client-jwt", + "requirement": "ALTERNATIVE", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "b62ac783-8af6-429e-a8ff-7c8073195675", + "alias": "direct grant", + "description": "OpenID Connect Resource Owner Grant", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "direct-grant-validate-username", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-password", + "requirement": "DISABLED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-otp", + "requirement": "OPTIONAL", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "e16e69c8-a3e8-480c-8201-8474d614e172", + "alias": "docker auth", + "description": "Used by Docker clients to authenticate against the IDP", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "docker-http-basic-authenticator", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "487ab3f9-33bf-49e2-8b03-5c45c85ea8b5", + "alias": "first broker login", + "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticatorConfig": "review profile config", + "authenticator": "idp-review-profile", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorConfig": "create unique user config", + "authenticator": "idp-create-user-if-unique", + "requirement": "ALTERNATIVE", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "ALTERNATIVE", + "priority": 30, + "flowAlias": "Handle Existing Account", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "a6d19ee2-387a-4db8-9ecb-2e9f806a88a1", + "alias": "forms", + "description": "Username, password, otp and other auth forms.", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "auth-username-password-form", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-otp-form", + "requirement": "OPTIONAL", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "43fc7877-ad15-4c93-b327-15d4ca83f3e1", + "alias": "registration", + "description": "registration flow", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "registration-page-form", + "requirement": "REQUIRED", + "priority": 10, + "flowAlias": "registration form", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "8a77377f-60eb-4a23-8bfe-b7c360d7b48f", + "alias": "registration form", + "description": "registration form", + "providerId": "form-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "registration-user-creation", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-profile-action", + "requirement": "REQUIRED", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-password-action", + "requirement": "REQUIRED", + "priority": 50, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-recaptcha-action", + "requirement": "DISABLED", + "priority": 60, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "30bd3dd1-f2f1-4708-a07d-08cf759c7b28", + "alias": "reset credentials", + "description": "Reset credentials for a user if they forgot their password or something", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "reset-credentials-choose-user", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-credential-email", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-password", + "requirement": "REQUIRED", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-otp", + "requirement": "OPTIONAL", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "226a50b1-059a-44ef-8cfe-082dee5d60b9", + "alias": "saml ecp", + "description": "SAML ECP Profile Authentication Flow", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "http-basic-authenticator", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + } + ], + "authenticatorConfig": [ + { + "id": "aec72381-3c1d-4a96-b436-ddb72b3737b9", + "alias": "create unique user config", + "config": { + "require.password.update.after.registration": "false" + } + }, + { + "id": "51f3fa48-bf74-4df9-9724-c0a9d6fe7c80", + "alias": "review profile config", + "config": { + "update.profile.on.first.login": "missing" + } + } + ], + "requiredActions": [ + { + "alias": "CONFIGURE_TOTP", + "name": "Configure OTP", + "providerId": "CONFIGURE_TOTP", + "enabled": true, + "defaultAction": false, + "config": {} + }, + { + "alias": "UPDATE_PASSWORD", + "name": "Update Password", + "providerId": "UPDATE_PASSWORD", + "enabled": true, + "defaultAction": false, + "config": {} + }, + { + "alias": "UPDATE_PROFILE", + "name": "Update Profile", + "providerId": "UPDATE_PROFILE", + "enabled": true, + "defaultAction": false, + "config": {} + }, + { + "alias": "VERIFY_EMAIL", + "name": "Verify Email", + "providerId": "VERIFY_EMAIL", + "enabled": true, + "defaultAction": false, + "config": {} + }, + { + "alias": "terms_and_conditions", + "name": "Terms and Conditions", + "providerId": "terms_and_conditions", + "enabled": true, + "defaultAction": false, + "config": {} + } + ], + "browserFlow": "browser", + "registrationFlow": "registration", + "directGrantFlow": "Direct Grant 2", + "resetCredentialsFlow": "reset credentials", + "clientAuthenticationFlow": "clients", + "dockerAuthenticationFlow": "docker auth", + "attributes": { + "_browser_header.xXSSProtection": "1; mode=block", + "_browser_header.xFrameOptions": "SAMEORIGIN", + "permanentLockout": "false", + "quickLoginCheckMilliSeconds": "1000", + "_browser_header.xRobotsTag": "none", + "maxFailureWaitSeconds": "900", + "minimumQuickLoginWaitSeconds": "60", + "failureFactor": "30", + "actionTokenGeneratedByUserLifespan": "300", + "maxDeltaTimeSeconds": "43200", + "_browser_header.xContentTypeOptions": "nosniff", + "actionTokenGeneratedByAdminLifespan": "43200", + "bruteForceProtected": "false", + "_browser_header.contentSecurityPolicy": "frame-src 'self'", + "waitIncrementSeconds": "60" + }, + "keycloakVersion": "3.2.0.Final" +} diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/__init__.py b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..cf1f9554085a9825863161e3fe0db7e2915675e5 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/__init__.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2017 Marcos Pereira <marcospereira.mpj@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from .keycloak_openid import * +from .keycloak_admin import * diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/authorization/__init__.py b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/authorization/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..4a1d86dbeba8b6911332d783e5aa62d11795ee7f --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/authorization/__init__.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2017 Marcos Pereira <marcospereira.mpj@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import ast +import json + +from .permission import Permission +from .policy import Policy +from .role import Role + + +class Authorization: + """ + Keycloak Authorization (policies, roles, scopes and resources). + + https://keycloak.gitbooks.io/documentation/authorization_services/index.html + + """ + + def __init__(self): + self._policies = {} + + @property + def policies(self): + return self._policies + + @policies.setter + def policies(self, value): + self._policies = value + + def load_config(self, data): + """ + Load policies, roles and permissions (scope/resources). + + :param data: keycloak authorization data (dict) + :return: + """ + for pol in data['policies']: + if pol['type'] == 'role': + policy = Policy(name=pol['name'], + type=pol['type'], + logic=pol['logic'], + decision_strategy=pol['decisionStrategy']) + + config_roles = json.loads(pol['config']['roles']) + for role in config_roles: + policy.add_role(Role(name=role['id'], + required=role['required'])) + + self.policies[policy.name] = policy + + if pol['type'] == 'scope': + permission = Permission(name=pol['name'], + type=pol['type'], + logic=pol['logic'], + decision_strategy=pol['decisionStrategy']) + + permission.scopes = ast.literal_eval(pol['config']['scopes']) + + for policy_name in ast.literal_eval(pol['config']['applyPolicies']): + self.policies[policy_name].add_permission(permission) + + if pol['type'] == 'resource': + permission = Permission(name=pol['name'], + type=pol['type'], + logic=pol['logic'], + decision_strategy=pol['decisionStrategy']) + + permission.resources = ast.literal_eval(pol['config']['resources']) + + for policy_name in ast.literal_eval(pol['config']['applyPolicies']): + self.policies[policy_name].add_permission(permission) + diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/authorization/permission.py b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/authorization/permission.py new file mode 100644 index 0000000000000000000000000000000000000000..94eca779542b9af1639490af19c564db62c07ffd --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/authorization/permission.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2017 Marcos Pereira <marcospereira.mpj@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +class Permission: + """ + Consider this simple and very common permission: + + A permission associates the object being protected with the policies that must be evaluated to determine whether access is granted. + + X CAN DO Y ON RESOURCE Z + + where … + X represents one or more users, roles, or groups, or a combination of them. You can + also use claims and context here. + Y represents an action to be performed, for example, write, view, and so on. + Z represents a protected resource, for example, "/accounts". + + https://keycloak.gitbooks.io/documentation/authorization_services/topics/permission/overview.html + + """ + + def __init__(self, name, type, logic, decision_strategy): + self._name = name + self._type = type + self._logic = logic + self._decision_strategy = decision_strategy + self._resources = [] + self._scopes = [] + + def __repr__(self): + return "<Permission: %s (%s)>" % (self.name, self.type) + + def __str__(self): + return "Permission: %s (%s)" % (self.name, self.type) + + @property + def name(self): + return self._name + + @name.setter + def name(self, value): + self._name = value + + @property + def type(self): + return self._type + + @type.setter + def type(self, value): + self._type = value + + @property + def logic(self): + return self._logic + + @logic.setter + def logic(self, value): + self._logic = value + + @property + def decision_strategy(self): + return self._decision_strategy + + @decision_strategy.setter + def decision_strategy(self, value): + self._decision_strategy = value + + @property + def resources(self): + return self._resources + + @resources.setter + def resources(self, value): + self._resources = value + + @property + def scopes(self): + return self._scopes + + @scopes.setter + def scopes(self, value): + self._scopes = value + diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/authorization/policy.py b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/authorization/policy.py new file mode 100644 index 0000000000000000000000000000000000000000..66512bac3a5a0a7efe77f7118f09910535992335 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/authorization/policy.py @@ -0,0 +1,107 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2017 Marcos Pereira <marcospereira.mpj@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from ..exceptions import KeycloakAuthorizationConfigError + + +class Policy: + """ + A policy defines the conditions that must be satisfied to grant access to an object. + Unlike permissions, you do not specify the object being protected but rather the conditions + that must be satisfied for access to a given object (for example, resource, scope, or both). + Policies are strongly related to the different access control mechanisms (ACMs) that you can use to + protect your resources. With policies, you can implement strategies for attribute-based access control + (ABAC), role-based access control (RBAC), context-based access control, or any combination of these. + + https://keycloak.gitbooks.io/documentation/authorization_services/topics/policy/overview.html + + """ + + def __init__(self, name, type, logic, decision_strategy): + self._name = name + self._type = type + self._logic = logic + self._decision_strategy = decision_strategy + self._roles = [] + self._permissions = [] + + def __repr__(self): + return "<Policy: %s (%s)>" % (self.name, self.type) + + def __str__(self): + return "Policy: %s (%s)" % (self.name, self.type) + + @property + def name(self): + return self._name + + @name.setter + def name(self, value): + self._name = value + + @property + def type(self): + return self._type + + @type.setter + def type(self, value): + self._type = value + + @property + def logic(self): + return self._logic + + @logic.setter + def logic(self, value): + self._logic = value + + @property + def decision_strategy(self): + return self._decision_strategy + + @decision_strategy.setter + def decision_strategy(self, value): + self._decision_strategy = value + + @property + def roles(self): + return self._roles + + @property + def permissions(self): + return self._permissions + + def add_role(self, role): + """ + Add keycloak role in policy. + + :param role: keycloak role. + :return: + """ + if self.type != 'role': + raise KeycloakAuthorizationConfigError( + "Can't add role. Policy type is different of role") + self._roles.append(role) + + def add_permission(self, permission): + """ + Add keycloak permission in policy. + + :param permission: keycloak permission. + :return: + """ + self._permissions.append(permission) diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/authorization/role.py b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/authorization/role.py new file mode 100644 index 0000000000000000000000000000000000000000..8d398b09ee0565f2b89e2e899a02c9ec01609cf7 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/authorization/role.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2017 Marcos Pereira <marcospereira.mpj@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +class Role: + """ + Roles identify a type or category of user. Admin, user, + manager, and employee are all typical roles that may exist in an organization. + + https://keycloak.gitbooks.io/documentation/server_admin/topics/roles.html + + """ + + def __init__(self, name, required=False): + self.name = name + self.required = required + + @property + def get_name(self): + return self.name + + def __eq__(self, other): + if isinstance(other, str): + return self.name == other + return NotImplemented diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/connection.py b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/connection.py new file mode 100644 index 0000000000000000000000000000000000000000..503b688a7f11435ece97aee23b0769c651602584 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/connection.py @@ -0,0 +1,199 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2017 Marcos Pereira <marcospereira.mpj@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +try: + from urllib.parse import urljoin +except ImportError: + from urlparse import urljoin + +from .exceptions import * +import requests + + +class ConnectionManager(object): + """ Represents a simple server connection. + Args: + base_url (str): The server URL. + headers (dict): The header parameters of the requests to the server. + timeout (int): Timeout to use for requests to the server. + verify (bool): Verify server SSL. + """ + + def __init__(self, base_url, headers={}, timeout=60, verify=True): + self._base_url = base_url + self._headers = headers + self._timeout = timeout + self._verify = verify + + @property + def base_url(self): + """ Return base url in use for requests to the server. """ + return self._base_url + + @base_url.setter + def base_url(self, value): + """ """ + self._base_url = value + + @property + def timeout(self): + """ Return timeout in use for request to the server. """ + return self._timeout + + @timeout.setter + def timeout(self, value): + """ """ + self._timeout = value + + @property + def verify(self): + """ Return verify in use for request to the server. """ + return self._verify + + @verify.setter + def verify(self, value): + """ """ + self._verify = value + + @property + def headers(self): + """ Return header request to the server. """ + return self._headers + + @headers.setter + def headers(self, value): + """ """ + self._headers = value + + def param_headers(self, key): + """ Return a specific header parameter. + :arg + key (str): Header parameters key. + :return: + If the header parameters exist, return its value. + """ + return self.headers.get(key) + + def clean_headers(self): + """ Clear header parameters. """ + self.headers = {} + + def exist_param_headers(self, key): + """ Check if the parameter exists in the header. + :arg + key (str): Header parameters key. + :return: + If the header parameters exist, return True. + """ + return self.param_headers(key) is not None + + def add_param_headers(self, key, value): + """ Add a single parameter inside the header. + :arg + key (str): Header parameters key. + value (str): Value to be added. + """ + self.headers[key] = value + + def del_param_headers(self, key): + """ Remove a specific parameter. + :arg + key (str): Key of the header parameters. + """ + self.headers.pop(key, None) + + def raw_get(self, path, **kwargs): + """ Submit get request to the path. + :arg + path (str): Path for request. + :return + Response the request. + :exception + HttpError: Can't connect to server. + """ + + try: + return requests.get(urljoin(self.base_url, path), + params=kwargs, + headers=self.headers, + timeout=self.timeout, + verify=self.verify) + except Exception as e: + raise KeycloakConnectionError( + "Can't connect to server (%s)" % e) + + def raw_post(self, path, data, **kwargs): + """ Submit post request to the path. + :arg + path (str): Path for request. + data (dict): Payload for request. + :return + Response the request. + :exception + HttpError: Can't connect to server. + """ + try: + return requests.post(urljoin(self.base_url, path), + params=kwargs, + data=data, + headers=self.headers, + timeout=self.timeout, + verify=self.verify) + except Exception as e: + raise KeycloakConnectionError( + "Can't connect to server (%s)" % e) + + def raw_put(self, path, data, **kwargs): + """ Submit put request to the path. + :arg + path (str): Path for request. + data (dict): Payload for request. + :return + Response the request. + :exception + HttpError: Can't connect to server. + """ + try: + return requests.put(urljoin(self.base_url, path), + params=kwargs, + data=data, + headers=self.headers, + timeout=self.timeout, + verify=self.verify) + except Exception as e: + raise KeycloakConnectionError( + "Can't connect to server (%s)" % e) + + def raw_delete(self, path, **kwargs): + """ Submit delete request to the path. + + :arg + path (str): Path for request. + :return + Response the request. + :exception + HttpError: Can't connect to server. + """ + try: + return requests.delete(urljoin(self.base_url, path), + params=kwargs, + headers=self.headers, + timeout=self.timeout, + verify=self.verify) + except Exception as e: + raise KeycloakConnectionError( + "Can't connect to server (%s)" % e) diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/exceptions.py b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/exceptions.py new file mode 100644 index 0000000000000000000000000000000000000000..27d8b14c156086b3de650a4248c4bf09c5cc27c3 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/exceptions.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2017 Marcos Pereira <marcospereira.mpj@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import requests + + +class KeycloakError(Exception): + def __init__(self, error_message="", response_code=None, + response_body=None): + + Exception.__init__(self, error_message) + + self.response_code = response_code + self.response_body = response_body + self.error_message = error_message + + def __str__(self): + if self.response_code is not None: + return "{0}: {1}".format(self.response_code, self.error_message) + else: + return "{0}".format(self.error_message) + + +class KeycloakAuthenticationError(KeycloakError): + pass + + +class KeycloakConnectionError(KeycloakError): + pass + + +class KeycloakOperationError(KeycloakError): + pass + + +class KeycloakGetError(KeycloakOperationError): + pass + + +class KeycloakSecretNotFound(KeycloakOperationError): + pass + + +class KeycloakRPTNotFound(KeycloakOperationError): + pass + + +class KeycloakAuthorizationConfigError(KeycloakOperationError): + pass + + +class KeycloakInvalidTokenError(KeycloakOperationError): + pass + + +def raise_error_from_response(response, error, expected_code=200): + + if expected_code == response.status_code: + if expected_code == requests.codes.no_content: + return {} + try: + return response.json() + except ValueError: + return response.content + + try: + message = response.json()['message'] + except (KeyError, ValueError): + message = response.content + + if isinstance(error, dict): + error = error.get(response.status_code, KeycloakOperationError) + else: + if response.status_code == 401: + error = KeycloakAuthenticationError + + raise error(error_message=message, + response_code=response.status_code, + response_body=response.content) diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/keycloak_admin.py b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/keycloak_admin.py new file mode 100644 index 0000000000000000000000000000000000000000..79f5c2c6d319fb9cfbe40f8e53ab25a01128e2b6 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/keycloak_admin.py @@ -0,0 +1,670 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2017 Marcos Pereira <marcospereira.mpj@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Unless otherwise stated in the comments, "id", in e.g. user_id, refers to the +# internal Keycloak server ID, usually a uuid string +from keycloak.urls_patterns import URL_ADMIN_CLIENT_ROLE +from .urls_patterns import \ + URL_ADMIN_USERS_COUNT, URL_ADMIN_USER, URL_ADMIN_USER_CONSENTS, \ + URL_ADMIN_SEND_UPDATE_ACCOUNT, URL_ADMIN_RESET_PASSWORD, URL_ADMIN_SEND_VERIFY_EMAIL, URL_ADMIN_GET_SESSIONS, \ + URL_ADMIN_SERVER_INFO, URL_ADMIN_CLIENTS, URL_ADMIN_CLIENT, URL_ADMIN_CLIENT_ROLES, URL_ADMIN_REALM_ROLES, \ + URL_ADMIN_GROUP, URL_ADMIN_GROUPS, URL_ADMIN_GROUP_CHILD, URL_ADMIN_USER_GROUP,\ + URL_ADMIN_GROUP_PERMISSIONS, URL_ADMIN_USER_CLIENT_ROLES, URL_ADMIN_USER_STORAGE, URL_ADMIN_REALM + +from .keycloak_openid import KeycloakOpenID + +from .exceptions import raise_error_from_response, KeycloakGetError + +from .urls_patterns import ( + URL_ADMIN_USERS, +) + +from .connection import ConnectionManager +import json + + +class KeycloakAdmin: + + def __init__(self, server_url, username, password, realm_name='master', client_id='admin-cli', verify=True): + """ + + :param server_url: Keycloak server url + :param username: admin username + :param password: admin password + :param realm_name: realm name + :param client_id: client id + :param verify: True if want check connection SSL + """ + self._username = username + self._password = password + self._client_id = client_id + self._realm_name = realm_name + + # Get token Admin + keycloak_openid = KeycloakOpenID(server_url=server_url, client_id=client_id, realm_name=realm_name, + verify=verify) + self._token = keycloak_openid.token(username, password) + + self._connection = ConnectionManager(base_url=server_url, + headers={'Authorization': 'Bearer ' + self.token.get('access_token'), + 'Content-Type': 'application/json'}, + timeout=60, + verify=verify) + + @property + def realm_name(self): + return self._realm_name + + @realm_name.setter + def realm_name(self, value): + self._realm_name = value + + @property + def connection(self): + return self._connection + + @connection.setter + def connection(self, value): + self._connection = value + + @property + def client_id(self): + return self._client_id + + @client_id.setter + def client_id(self, value): + self._client_id = value + + @property + def username(self): + return self._username + + @username.setter + def username(self, value): + self._username = value + + @property + def password(self): + return self._password + + @password.setter + def password(self, value): + self._password = value + + @property + def token(self): + return self._token + + @token.setter + def token(self, value): + self._token = value + + def get_users(self, query=None): + """ + Get users Returns a list of users, filtered according to query parameters + + :return: users list + """ + params_path = {"realm-name": self.realm_name} + data_raw = self.connection.raw_get(URL_ADMIN_USERS.format(**params_path), **query) + return raise_error_from_response(data_raw, KeycloakGetError) + + def create_user(self, payload): + """ + Create a new user Username must be unique + + UserRepresentation + http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_userrepresentation + + :param payload: UserRepresentation + + :return: UserRepresentation + """ + params_path = {"realm-name": self.realm_name} + data_raw = self.connection.raw_post(URL_ADMIN_USERS.format(**params_path), + data=json.dumps(payload)) + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=201) + + def users_count(self): + """ + User counter + + :return: counter + """ + params_path = {"realm-name": self.realm_name} + data_raw = self.connection.raw_get(URL_ADMIN_USERS_COUNT.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError) + + def get_user_id(self, username): + """ + Get internal keycloak user id from username + This is required for further actions against this user. + + UserRepresentation + http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_userrepresentation + + :param username: id in UserRepresentation + + :return: user_id + """ + params_path = {"realm-name": self.realm_name, "username": username} + data_raw = self.connection.raw_get(URL_ADMIN_USERS.format(**params_path)) + data_content = raise_error_from_response(data_raw, KeycloakGetError) + + for user in data_content: + this_use_rname = json.dumps(user["username"]).strip('"') + if this_use_rname == username: + return json.dumps(user["id"]).strip('"') + + return None + + def get_user(self, user_id): + """ + Get representation of the user + + :param user_id: User id + + UserRepresentation: http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_userrepresentation + + :return: UserRepresentation + """ + params_path = {"realm-name": self.realm_name, "id": user_id} + data_raw = self.connection.raw_get(URL_ADMIN_USER.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError) + + def update_user(self, user_id, payload): + """ + Update the user + + :param user_id: User id + :param payload: UserRepresentation + + :return: Http response + """ + params_path = {"realm-name": self.realm_name, "id": user_id} + data_raw = self.connection.raw_put(URL_ADMIN_USER.format(**params_path), + data=json.dumps(payload)) + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=204) + + def delete_user(self, user_id): + """ + Delete the user + + :param user_id: User id + + :return: Http response + """ + params_path = {"realm-name": self.realm_name, "id": user_id} + data_raw = self.connection.raw_delete(URL_ADMIN_USER.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=204) + + def set_user_password(self, user_id, password, temporary=True): + """ + Set up a password for the user. If temporary is True, the user will have to reset + the temporary password next time they log in. + + http://www.keycloak.org/docs-api/3.2/rest-api/#_users_resource + http://www.keycloak.org/docs-api/3.2/rest-api/#_credentialrepresentation + + :param user_id: User id + :param password: New password + :param temporary: True if password is temporary + + :return: + """ + payload = {"type": "password", "temporary": temporary, "value": password} + params_path = {"realm-name": self.realm_name, "id": user_id} + data_raw = self.connection.raw_put(URL_ADMIN_RESET_PASSWORD.format(**params_path), + data=json.dumps(payload)) + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=204) + + def consents_user(self, user_id): + """ + Get consents granted by the user + + :param user_id: User id + + :return: consents + """ + params_path = {"realm-name": self.realm_name, "id": user_id} + data_raw = self.connection.raw_get(URL_ADMIN_USER_CONSENTS.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError) + + def send_update_account(self, user_id, payload, client_id=None, lifespan=None, redirect_uri=None): + """ + Send a update account email to the user An email contains a + link the user can click to perform a set of required actions. + + :param user_id: + :param payload: + :param client_id: + :param lifespan: + :param redirect_uri: + + :return: + """ + params_path = {"realm-name": self.realm_name, "id": user_id} + params_query = {"client_id": client_id, "lifespan": lifespan, "redirect_uri": redirect_uri} + data_raw = self.connection.raw_put(URL_ADMIN_SEND_UPDATE_ACCOUNT.format(**params_path), + data=payload, **params_query) + return raise_error_from_response(data_raw, KeycloakGetError) + + def send_verify_email(self, user_id, client_id=None, redirect_uri=None): + """ + Send a update account email to the user An email contains a + link the user can click to perform a set of required actions. + + :param user_id: User id + :param client_id: Client id + :param redirect_uri: Redirect uri + + :return: + """ + params_path = {"realm-name": self.realm_name, "id": user_id} + params_query = {"client_id": client_id, "redirect_uri": redirect_uri} + data_raw = self.connection.raw_put(URL_ADMIN_SEND_VERIFY_EMAIL.format(**params_path), + data={}, **params_query) + return raise_error_from_response(data_raw, KeycloakGetError) + + def get_sessions(self, user_id): + """ + Get sessions associated with the user + + :param user_id: id of user + + UserSessionRepresentation + http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_usersessionrepresentation + + :return: UserSessionRepresentation + """ + params_path = {"realm-name": self.realm_name, "id": user_id} + data_raw = self.connection.raw_get(URL_ADMIN_GET_SESSIONS.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError) + + def get_server_info(self): + """ + Get themes, social providers, auth providers, and event listeners available on this server + + ServerInfoRepresentation + http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_serverinforepresentation + + :return: ServerInfoRepresentation + """ + data_raw = self.connection.raw_get(URL_ADMIN_SERVER_INFO) + return raise_error_from_response(data_raw, KeycloakGetError) + + def get_groups(self): + """ + Get groups belonging to the realm. Returns a list of groups belonging to the realm + + GroupRepresentation + http://www.keycloak.org/docs-api/3.2/rest-api/#_grouprepresentation + + :return: array GroupRepresentation + """ + params_path = {"realm-name": self.realm_name} + data_raw = self.connection.raw_get(URL_ADMIN_GROUPS.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError) + + def get_group(self, group_id): + """ + Get group by id. Returns full group details + + GroupRepresentation + http://www.keycloak.org/docs-api/3.2/rest-api/#_grouprepresentation + + :return: Keycloak server response (GroupRepresentation) + """ + params_path = {"realm-name": self.realm_name, "id": group_id} + data_raw = self.connection.raw_get(URL_ADMIN_GROUP.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError) + + def get_group_by_name(self, name_or_path, search_in_subgroups=False): + """ + Get group id based on name or path. + A straight name or path match with a top-level group will return first. + Subgroups are traversed, the first to match path (or name with path) is returned. + + GroupRepresentation + http://www.keycloak.org/docs-api/3.2/rest-api/#_grouprepresentation + + :param name: group name + :param path: group path + :param search_in_subgroups: True if want search in the subgroups + :return: Keycloak server response (GroupRepresentation) + """ + + groups = self.get_groups() + + # TODO: Review this code is necessary + for group in groups: + if group['name'] == name_or_path or group['path'] == name_or_path: + return group + elif search_in_subgroups and group["subGroups"]: + for subgroup in group["subGroups"]: + if subgroup['name'] == name_or_path or subgroup['path'] == name_or_path: + return subgroup + + return None + + def create_group(self, name=None, client_roles={}, realm_roles=[], sub_groups=[], path=None, parent=None): + """ + Create a group in the Realm + + GroupRepresentation + http://www.keycloak.org/docs-api/3.2/rest-api/#_grouprepresentation + + :param name: group name + :param client_roles: (Dict) Client roles to include in groupp # Not demonstrated to work + :param realm_roles: (List) Realm roles to include in group # Not demonstrated to work + :param sub_groups: (List) Subgroups to include in groupp # Not demonstrated to work + :param path: group path + :param parent: parent group's id. Required to create a sub-group. + + :return: Keycloak server response (GroupRepresentation) + """ + + data = {"name": name or path, + "path": path, + "clientRoles": client_roles, + "realmRoles": realm_roles, + "subGroups": sub_groups} + + if parent is None: + params_path = {"realm-name": self.realm_name} + data_raw = self.connection.raw_post(URL_ADMIN_GROUPS.format(**params_path), + data=json.dumps(data)) + else: + params_path = {"realm-name": self.realm_name, "id": parent} + data_raw = self.connection.raw_post(URL_ADMIN_GROUP_CHILD.format(**params_path), + data=json.dumps(data)) + + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=201) + + def group_set_permissions(self, group_id, enabled=True): + """ + Enable/Disable permissions for a group. Cannot delete group if disabled + + :param group_id: id of group + :param enabled: boolean + :return: Keycloak server response + """ + + params_path = {"realm-name": self.realm_name, "id": group_id} + data_raw = self.connection.raw_put(URL_ADMIN_GROUP_PERMISSIONS.format(**params_path), + data=json.dumps({"enabled": enabled})) + return raise_error_from_response(data_raw, KeycloakGetError) + + def group_user_add(self, user_id, group_id): + """ + Add user to group (user_id and group_id) + + :param group_id: id of group + :param user_id: id of user + :param group_id: id of group to add to + :return: Keycloak server response + """ + + params_path = {"realm-name": self.realm_name, "id": user_id, "group-id": group_id} + data_raw = self.connection.raw_put(URL_ADMIN_USER_GROUP.format(**params_path), data=None) + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=204) + + def group_user_remove(self, user_id, group_id): + """ + Remove user from group (user_id and group_id) + + :param group_id: id of group + :param user_id: id of user + :param group_id: id of group to add to + :return: Keycloak server response + """ + + params_path = {"realm-name": self.realm_name, "id": user_id, "group-id": group_id} + data_raw = self.connection.raw_delete(URL_ADMIN_USER_GROUP.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=204) + + def delete_group(self, group_id): + """ + Deletes a group in the Realm + + :param group_id: id of group to delete + :return: Keycloak server response + """ + + params_path = {"realm-name": self.realm_name, "id": group_id} + data_raw = self.connection.raw_delete(URL_ADMIN_GROUP.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=204) + + def get_clients(self): + """ + Get clients belonging to the realm Returns a list of clients belonging to the realm + + ClientRepresentation + http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_clientrepresentation + + :return: Keycloak server response (ClientRepresentation) + """ + + params_path = {"realm-name": self.realm_name} + data_raw = self.connection.raw_get(URL_ADMIN_CLIENTS.format(**params_path)) + + return raise_error_from_response(data_raw, KeycloakGetError) + + def get_client(self, client_id): + """ + Get representation of the client + + ClientRepresentation + http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_clientrepresentation + + :param client_id: id of client (not client-id) + :return: Keycloak server response (ClientRepresentation) + """ + + params_path = {"realm-name": self.realm_name, "id": client_id} + data_raw = self.connection.raw_get(URL_ADMIN_CLIENT.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError) + + def get_client_id(self, client_name): + """ + Get internal keycloak client id from client-id. + This is required for further actions against this client. + + :param client_name: name in ClientRepresentation + http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_clientrepresentation + :return: client_id (uuid as string) + """ + + clients = self.get_clients() + + for client in clients: + if client_name == client['name']: + return client["id"] + + return None + + def create_client(self, payload): + """ + Create a client + + ClientRepresentation: http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_clientrepresentation + + :param payload: ClientRepresentation + :return: Keycloak server response (UserRepresentation) + """ + + params_path = {"realm-name": self.realm_name} + data_raw = self.connection.raw_post(URL_ADMIN_CLIENTS.format(**params_path), + data=json.dumps(payload)) + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=201) + + def delete_client(self, client_id): + """ + Get representation of the client + + ClientRepresentation + http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_clientrepresentation + + :param client_id: keycloak client id (not oauth client-id) + :return: Keycloak server response (ClientRepresentation) + """ + + params_path = {"realm-name": self.realm_name, "id": client_id} + data_raw = self.connection.raw_delete(URL_ADMIN_CLIENT.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=204) + + def get_realm_roles(self): + """ + Get all roles for the realm or client + + RoleRepresentation + http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_rolerepresentation + + :return: Keycloak server response (RoleRepresentation) + """ + + params_path = {"realm-name": self.realm_name} + data_raw = self.connection.raw_get(URL_ADMIN_REALM_ROLES.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError) + + def get_client_roles(self, client_id): + """ + Get all roles for the client + + :param client_id: id of client (not client-id) + + RoleRepresentation + http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_rolerepresentation + + :return: Keycloak server response (RoleRepresentation) + """ + + params_path = {"realm-name": self.realm_name, "id": client_id} + data_raw = self.connection.raw_get(URL_ADMIN_CLIENT_ROLES.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError) + + def get_client_role(self, client_id, role_name): + """ + Get client role id by name + This is required for further actions with this role. + + :param client_id: id of client (not client-id) + :param role_name: role’s name (not id!) + + RoleRepresentation + http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_rolerepresentation + + :return: role_id + """ + params_path = {"realm-name": self.realm_name, "id": client_id, "role-name": role_name} + data_raw = self.connection.raw_get(URL_ADMIN_CLIENT_ROLE.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError) + + def get_client_role_id(self, client_id, role_name): + """ + Warning: Deprecated + + Get client role id by name + This is required for further actions with this role. + + :param client_id: id of client (not client-id) + :param role_name: role’s name (not id!) + + RoleRepresentation + http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_rolerepresentation + + :return: role_id + """ + role = self.get_client_role(client_id, role_name) + return role.get("id") + + def create_client_role(self, payload): + """ + Create a client role + + RoleRepresentation + http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_rolerepresentation + + :param payload: id of client (not client-id), role_name: name of role + :return: Keycloak server response (RoleRepresentation) + """ + + params_path = {"realm-name": self.realm_name, "id": self.client_id} + data_raw = self.connection.raw_post(URL_ADMIN_CLIENT_ROLES.format(**params_path), + data=json.dumps(payload)) + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=201) + + def delete_client_role(self, role_name): + """ + Create a client role + + RoleRepresentation + http://www.keycloak.org/docs-api/3.3/rest-api/index.html#_rolerepresentation + + :param role_name: role’s name (not id!) + """ + params_path = {"realm-name": self.realm_name, "id": self.client_id, "role-name": role_name} + data_raw = self.connection.raw_delete(URL_ADMIN_CLIENT_ROLE.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=204) + + def assign_client_role(self, user_id, client_id, roles): + """ + Assign a client role to a user + + :param client_id: id of client (not client-id) + :param user_id: id of user + :param client_id: id of client containing role, + :param roles: roles list or role (use RoleRepresentation) + :return Keycloak server response + """ + + payload = roles if isinstance(roles, list) else [roles] + params_path = {"realm-name": self.realm_name, "id": user_id, "client-id": client_id} + data_raw = self.connection.raw_post(URL_ADMIN_USER_CLIENT_ROLES.format(**params_path), + data=json.dumps(payload)) + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=204) + + def sync_users(self, storage_id, action): + """ + Function to trigger user sync from provider + + :param storage_id: + :param action: + :return: + """ + data = {'action': action} + params_query = {"action": action} + + params_path = {"realm-name": self.realm_name, "id": storage_id} + data_raw = self.connection.raw_post(URL_ADMIN_USER_STORAGE.format(**params_path), + data=json.dumps(data), **params_query) + return raise_error_from_response(data_raw, KeycloakGetError) + + def import_realm(self, payload): + """ + Imports a realm from a full representation of that realm + + Realmrepresentation + http://www.keycloak.org/docs-api/2.5/rest-api/index.html#_import_a_realm + + :param payload: Realmrepresentation + + :return: Realmrepresentation + """ + data_raw = self.connection.raw_post(URL_ADMIN_REALM, + data = json.dumps(payload)) + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=201) \ No newline at end of file diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/keycloak_main.py b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/keycloak_main.py new file mode 100644 index 0000000000000000000000000000000000000000..bb859c405d33a4b344be3a38c2e14f42784ca1fd --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/keycloak_main.py @@ -0,0 +1,87 @@ +import json + +from keycloak import KeycloakOpenID +from keycloak import KeycloakAdmin +import urllib2, argparse, json + +# Import realm +def keycloak_import_realm(keycloak_realm_file): + data = json.load(open(keycloak_realm_file)) + realm_import = keycloak_admin.import_realm(data) + +# Add user and set password +def keycloak_create_user(email, username, firstName, lastName, password): + new_user = keycloak_admin.create_user({"email": email, + "username": username, + "emailVerified": True, + "enabled": True, + "firstName": firstName, + "lastName": lastName, + "credentials": [{"value": "12345","type": password}], + "realmRoles": ["user_default"]}) + +# Create the user and assign the role to access the user management API +def update_user_roles(config): + realm_json = json.load(open(config['keycloak_realm_json_file_path'])) + + # Get the id of realm-management + for client in realm_json['clients']: + if config['clientId'] == client['clientId']: + client_id = client["id"] + break + + user = keycloak_admin.get_users({"username":config['keycloak_api_management_username']}) + user_id = user[0]['id'] + + # Read the role from file + with open(config['keycloak_user_manager_roles_json_file_path'], 'r') as data_file: + json_data = data_file.read() + + roles = json.loads(json_data) + + # Get only client roles + clientRoles = roles[config['clientId']] + + keycloak_admin.assign_client_role(user_id, client_id, clientRoles) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Configure keycloak user apis') + parser.add_argument('keycloak_bootstrap_config', help='configuration json file that is needed for keycloak bootstrap') + args = parser.parse_args() + + with open(args.keycloak_bootstrap_config) as keycloak_bootstrap_config: + config = json.load(keycloak_bootstrap_config) + + try: + # Get access token + keycloak_admin = KeycloakAdmin(server_url=config['keycloak_auth_server_url'], + username=config['keycloak_management_user'], + password=config['keycloak_management_password'], + realm_name="master", + client_id='admin-cli', + verify=False) + # Import realm + keycloak_import_realm(config['keycloak_realm_json_file_path']) + + # Set realm name to sunbird + keycloak_admin.realm_name = config['keycloak_realm'] + + # Add user for user api + keycloak_create_user(email=config['keycloak_api_management_user_email'], + username=config['keycloak_api_management_username'], + firstName=config['keycloak_api_management_user_first_name'], + lastName=config['keycloak_api_management_user_last_name'], + password=config['keycloak_api_management_user_password']) + + # Update user roles for access user management API's + config['clientId'] = "realm-management" + update_user_roles(config) + + # Update user roles for SSO + config['clientId'] = "admin-cli" + update_user_roles(config) + + except urllib2.HTTPError as e: + error_message = e.read() + print error_message + raise diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/keycloak_openid.py b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/keycloak_openid.py new file mode 100644 index 0000000000000000000000000000000000000000..f1dcde44e32b46848ed5dcc0a1de8a4220e24854 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/keycloak_openid.py @@ -0,0 +1,390 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2017 Marcos Pereira <marcospereira.mpj@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from .authorization import Authorization +from .exceptions import raise_error_from_response, KeycloakGetError, \ + KeycloakRPTNotFound, KeycloakAuthorizationConfigError, KeycloakInvalidTokenError +from .urls_patterns import ( + URL_TOKEN, + URL_USERINFO, + URL_WELL_KNOWN, + URL_LOGOUT, + URL_CERTS, + URL_ENTITLEMENT, + URL_INTROSPECT +) +from .connection import ConnectionManager +from jose import jwt +import json + + +class KeycloakOpenID: + + def __init__(self, server_url, realm_name, client_id, client_secret_key=None, verify=True): + """ + + :param server_url: Keycloak server url + :param client_id: client id + :param realm_name: realm name + :param client_secret_key: client secret key + :param verify: True if want check connection SSL + """ + self._client_id = client_id + self._client_secret_key = client_secret_key + self._realm_name = realm_name + self._connection = ConnectionManager(base_url=server_url, + headers={}, + timeout=60, + verify=verify) + + self._authorization = Authorization() + + @property + def client_id(self): + return self._client_id + + @client_id.setter + def client_id(self, value): + self._client_id = value + + @property + def client_secret_key(self): + return self._client_secret_key + + @client_secret_key.setter + def client_secret_key(self, value): + self._client_secret_key = value + + @property + def realm_name(self): + return self._realm_name + + @realm_name.setter + def realm_name(self, value): + self._realm_name = value + + @property + def connection(self): + return self._connection + + @connection.setter + def connection(self, value): + self._connection = value + + @property + def authorization(self): + return self._authorization + + @authorization.setter + def authorization(self, value): + self._authorization = value + + def _add_secret_key(self, payload): + """ + Add secret key if exist. + + :param payload: + :return: + """ + if self.client_secret_key: + payload.update({"client_secret": self.client_secret_key}) + + return payload + + def _build_name_role(self, role): + """ + + :param role: + :return: + """ + return self.client_id + "/" + role + + def _token_info(self, token, method_token_info, **kwargs): + """ + + :param token: + :param method_token_info: + :param kwargs: + :return: + """ + if method_token_info == 'introspect': + token_info = self.introspect(token) + else: + token_info = self.decode_token(token, **kwargs) + + return token_info + + def well_know(self): + """ The most important endpoint to understand is the well-known configuration + endpoint. It lists endpoints and other configuration options relevant to + the OpenID Connect implementation in Keycloak. + + :return It lists endpoints and other configuration options relevant. + """ + + params_path = {"realm-name": self.realm_name} + data_raw = self.connection.raw_get(URL_WELL_KNOWN.format(**params_path)) + + return raise_error_from_response(data_raw, KeycloakGetError) + + def auth_url(self, redirect_uri): + """ + + http://openid.net/specs/openid-connect-core-1_0.html#AuthorizationEndpoint + + :return: + """ + return NotImplemented + + def token(self, username, password, grant_type=["password"]): + """ + The token endpoint is used to obtain tokens. Tokens can either be obtained by + exchanging an authorization code or by supplying credentials directly depending on + what flow is used. The token endpoint is also used to obtain new access tokens + when they expire. + + http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint + + :param username: + :param password: + :param grant_type: + :return: + """ + params_path = {"realm-name": self.realm_name} + payload = {"username": username, "password": password, + "client_id": self.client_id, "grant_type": grant_type} + + payload = self._add_secret_key(payload) + data_raw = self.connection.raw_post(URL_TOKEN.format(**params_path), + data=payload) + return raise_error_from_response(data_raw, KeycloakGetError) + + def refresh_token(self, refresh_token, grant_type=["refresh_token"]): + """ + The token endpoint is used to obtain tokens. Tokens can either be obtained by + exchanging an authorization code or by supplying credentials directly depending on + what flow is used. The token endpoint is also used to obtain new access tokens + when they expire. + + http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint + + :param refresh_token: + :param grant_type: + :return: + """ + params_path = {"realm-name": self.realm_name} + payload = {"client_id": self.client_id, "grant_type": grant_type, "refresh_token": refresh_token} + payload = self._add_secret_key(payload) + data_raw = self.connection.raw_post(URL_TOKEN.format(**params_path), + data=payload) + return raise_error_from_response(data_raw, KeycloakGetError) + + def userinfo(self, token): + """ + The userinfo endpoint returns standard claims about the authenticated user, + and is protected by a bearer token. + + http://openid.net/specs/openid-connect-core-1_0.html#UserInfo + + :param token: + :return: + """ + + self.connection.add_param_headers("Authorization", "Bearer " + token) + params_path = {"realm-name": self.realm_name} + + data_raw = self.connection.raw_get(URL_USERINFO.format(**params_path)) + + return raise_error_from_response(data_raw, KeycloakGetError) + + def logout(self, refresh_token): + """ + The logout endpoint logs out the authenticated user. + :param refresh_token: + :return: + """ + params_path = {"realm-name": self.realm_name} + payload = {"client_id": self.client_id, "refresh_token": refresh_token} + + payload = self._add_secret_key(payload) + data_raw = self.connection.raw_post(URL_LOGOUT.format(**params_path), + data=payload) + + return raise_error_from_response(data_raw, KeycloakGetError, expected_code=204) + + def certs(self): + """ + The certificate endpoint returns the public keys enabled by the realm, encoded as a + JSON Web Key (JWK). Depending on the realm settings there can be one or more keys enabled + for verifying tokens. + + https://tools.ietf.org/html/rfc7517 + + :return: + """ + params_path = {"realm-name": self.realm_name} + data_raw = self.connection.raw_get(URL_CERTS.format(**params_path)) + return raise_error_from_response(data_raw, KeycloakGetError) + + def entitlement(self, token, resource_server_id): + """ + Client applications can use a specific endpoint to obtain a special security token + called a requesting party token (RPT). This token consists of all the entitlements + (or permissions) for a user as a result of the evaluation of the permissions and authorization + policies associated with the resources being requested. With an RPT, client applications can + gain access to protected resources at the resource server. + + :return: + """ + self.connection.add_param_headers("Authorization", "Bearer " + token) + params_path = {"realm-name": self.realm_name, "resource-server-id": resource_server_id} + data_raw = self.connection.raw_get(URL_ENTITLEMENT.format(**params_path)) + + return raise_error_from_response(data_raw, KeycloakGetError) + + def introspect(self, token, rpt=None, token_type_hint=None): + """ + The introspection endpoint is used to retrieve the active state of a token. It is can only be + invoked by confidential clients. + + https://tools.ietf.org/html/rfc7662 + + :param token: + :param rpt: + :param token_type_hint: + + :return: + """ + params_path = {"realm-name": self.realm_name} + + payload = {"client_id": self.client_id, "token": token} + + if token_type_hint == 'requesting_party_token': + if rpt: + payload.update({"token": rpt, "token_type_hint": token_type_hint}) + self.connection.add_param_headers("Authorization", "Bearer " + token) + else: + raise KeycloakRPTNotFound("Can't found RPT.") + + payload = self._add_secret_key(payload) + + data_raw = self.connection.raw_post(URL_INTROSPECT.format(**params_path), + data=payload) + + return raise_error_from_response(data_raw, KeycloakGetError) + + def decode_token(self, token, key, algorithms=['RS256'], **kwargs): + """ + A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data + structure that represents a cryptographic key. This specification + also defines a JWK Set JSON data structure that represents a set of + JWKs. Cryptographic algorithms and identifiers for use with this + specification are described in the separate JSON Web Algorithms (JWA) + specification and IANA registries established by that specification. + + https://tools.ietf.org/html/rfc7517 + + :param token: + :param key: + :param algorithms: + :return: + """ + + return jwt.decode(token, key, algorithms=algorithms, + audience=self.client_id, **kwargs) + + def load_authorization_config(self, path): + """ + Load Keycloak settings (authorization) + + :param path: settings file (json) + :return: + """ + authorization_file = open(path, 'r') + authorization_json = json.loads(authorization_file.read()) + self.authorization.load_config(authorization_json) + authorization_file.close() + + def get_policies(self, token, method_token_info='introspect', **kwargs): + """ + Get policies by user token + + :param token: user token + :return: policies list + """ + + if not self.authorization.policies: + raise KeycloakAuthorizationConfigError( + "Keycloak settings not found. Load Authorization Keycloak settings." + ) + + token_info = self._token_info(token, method_token_info, **kwargs) + + if method_token_info == 'introspect' and not token_info['active']: + raise KeycloakInvalidTokenError( + "Token expired or invalid." + ) + + user_resources = token_info['resource_access'].get(self.client_id) + + if not user_resources: + return None + + policies = [] + + for policy_name, policy in self.authorization.policies.items(): + for role in user_resources['roles']: + if self._build_name_role(role) in policy.roles: + policies.append(policy) + + return list(set(policies)) + + def get_permissions(self, token, method_token_info='introspect', **kwargs): + """ + Get permission by user token + + :param token: user token + :param method_token_info: Decode token method + :param kwargs: parameters for decode + :return: permissions list + """ + + if not self.authorization.policies: + raise KeycloakAuthorizationConfigError( + "Keycloak settings not found. Load Authorization Keycloak settings." + ) + + token_info = self._token_info(token, method_token_info, **kwargs) + + if method_token_info == 'introspect' and not token_info['active']: + raise KeycloakInvalidTokenError( + "Token expired or invalid." + ) + + user_resources = token_info['resource_access'].get(self.client_id) + + if not user_resources: + return None + + permissions = [] + + for policy_name, policy in self.authorization.policies.items(): + for role in user_resources['roles']: + if self._build_name_role(role) in policy.roles: + permissions += policy.permissions + + return list(set(permissions)) diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/python_keycloak.egg-info/PKG-INFO b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/python_keycloak.egg-info/PKG-INFO new file mode 100644 index 0000000000000000000000000000000000000000..e98a1ee3c0a656997e8a87a4d92881f1c17cd0f3 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/python_keycloak.egg-info/PKG-INFO @@ -0,0 +1,18 @@ +Metadata-Version: 1.1 +Name: python-keycloak +Version: 0.12.0 +Summary: python-keycloak is a Python package providing access to the Keycloak API. +Home-page: https://bitbucket.org/agriness/python-keycloak +Author: Marcos Pereira +Author-email: marcospereira.mpj@gmail.com +License: GNU General Public License - V3 +Description: UNKNOWN +Keywords: keycloak openid +Platform: UNKNOWN +Classifier: Programming Language :: Python :: 3 +Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3) +Classifier: Development Status :: 3 - Alpha +Classifier: Operating System :: MacOS +Classifier: Operating System :: Unix +Classifier: Operating System :: Microsoft :: Windows +Classifier: Topic :: Utilities diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/python_keycloak.egg-info/SOURCES.txt b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/python_keycloak.egg-info/SOURCES.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/python_keycloak.egg-info/dependency_links.txt b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/python_keycloak.egg-info/dependency_links.txt new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/python_keycloak.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/python_keycloak.egg-info/requires.txt b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/python_keycloak.egg-info/requires.txt new file mode 100644 index 0000000000000000000000000000000000000000..d6eafdf65702ff256e75b81a0f7fbdbcc975e899 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/python_keycloak.egg-info/requires.txt @@ -0,0 +1,3 @@ +requests==2.18.4 +httmock==1.2.5 +python-jose==1.4.0 diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/python_keycloak.egg-info/top_level.txt b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/python_keycloak.egg-info/top_level.txt new file mode 100644 index 0000000000000000000000000000000000000000..26c07c1da4a50b7acffbd55aa039a9d4e0d27494 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/python_keycloak.egg-info/top_level.txt @@ -0,0 +1 @@ +keycloak diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/tests/__init__.py b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/tests/test_connection.py b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/tests/test_connection.py new file mode 100644 index 0000000000000000000000000000000000000000..97ec1792dfa5312c4b6c5d2fa4563e7577a3037a --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/tests/test_connection.py @@ -0,0 +1,148 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2017 Marcos Pereira <marcospereira.mpj@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from httmock import urlmatch, response, HTTMock, all_requests + +from ..connection import ConnectionManager + + +try: + import unittest +except ImportError: + import unittest2 as unittest + + +class TestConnection(unittest.TestCase): + + def setUp(self): + self._conn = ConnectionManager( + base_url="http://localhost:8080/", + headers={}, + timeout=60) + + @all_requests + def response_content_success(self, url, request): + headers = {'content-type': 'application/json'} + content = b'response_ok' + return response(200, content, headers, None, 5, request) + + def test_raw_get(self): + with HTTMock(self.response_content_success): + resp = self._conn.raw_get("/known_path") + self.assertEqual(resp.content, b'response_ok') + self.assertEqual(resp.status_code, 200) + + def test_raw_post(self): + + @urlmatch(path="/known_path", method="post") + def response_post_success(url, request): + headers = {'content-type': 'application/json'} + content = 'response'.encode("utf-8") + return response(201, content, headers, None, 5, request) + + with HTTMock(response_post_success): + resp = self._conn.raw_post("/known_path", + {'field': 'value'}) + self.assertEqual(resp.content, b'response') + self.assertEqual(resp.status_code, 201) + + def test_raw_put(self): + @urlmatch(netloc="localhost", path="/known_path", method="put") + def response_put_success(url, request): + headers = {'content-type': 'application/json'} + content = 'response'.encode("utf-8") + return response(200, content, headers, None, 5, request) + + with HTTMock(response_put_success): + resp = self._conn.raw_put("/known_path", + {'field': 'value'}) + self.assertEqual(resp.content, b'response') + self.assertEqual(resp.status_code, 200) + + def test_raw_get_fail(self): + + @urlmatch(netloc="localhost", path="/known_path", method="get") + def response_get_fail(url, request): + headers = {'content-type': 'application/json'} + content = "404 page not found".encode("utf-8") + return response(404, content, headers, None, 5, request) + + with HTTMock(response_get_fail): + resp = self._conn.raw_get("/known_path") + + self.assertEqual(resp.content, b"404 page not found") + self.assertEqual(resp.status_code, 404) + + def test_raw_post_fail(self): + + @urlmatch(netloc="localhost", path="/known_path", method="post") + def response_post_fail(url, request): + headers = {'content-type': 'application/json'} + content = str(["Start can't be blank"]).encode("utf-8") + return response(404, content, headers, None, 5, request) + + with HTTMock(response_post_fail): + resp = self._conn.raw_post("/known_path", + {'field': 'value'}) + self.assertEqual(resp.content, str(["Start can't be blank"]).encode("utf-8")) + self.assertEqual(resp.status_code, 404) + + def test_raw_put_fail(self): + + @urlmatch(netloc="localhost", path="/known_path", method="put") + def response_put_fail(url, request): + headers = {'content-type': 'application/json'} + content = str(["Start can't be blank"]).encode("utf-8") + return response(404, content, headers, None, 5, request) + + with HTTMock(response_put_fail): + resp = self._conn.raw_put("/known_path", + {'field': 'value'}) + self.assertEqual(resp.content, str(["Start can't be blank"]).encode("utf-8")) + self.assertEqual(resp.status_code, 404) + + def test_add_param_headers(self): + self._conn.add_param_headers("test", "value") + self.assertEqual(self._conn.headers, + {"test": "value"}) + + def test_del_param_headers(self): + self._conn.add_param_headers("test", "value") + self._conn.del_param_headers("test") + self.assertEqual(self._conn.headers, {}) + + def test_clean_param_headers(self): + self._conn.add_param_headers("test", "value") + self.assertEqual(self._conn.headers, + {"test": "value"}) + self._conn.clean_headers() + self.assertEqual(self._conn.headers, {}) + + def test_exist_param_headers(self): + self._conn.add_param_headers("test", "value") + self.assertTrue(self._conn.exist_param_headers("test")) + self.assertFalse(self._conn.exist_param_headers("test_no")) + + def test_get_param_headers(self): + self._conn.add_param_headers("test", "value") + self.assertTrue(self._conn.exist_param_headers("test")) + self.assertFalse(self._conn.exist_param_headers("test_no")) + + def test_get_headers(self): + self._conn.add_param_headers("test", "value") + self.assertEqual(self._conn.headers, + {"test": "value"}) diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/urls_patterns.py b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/urls_patterns.py new file mode 100644 index 0000000000000000000000000000000000000000..b57212950b4b22de76174803be0969ca78e79ba1 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/keycloak/urls_patterns.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2017 Marcos Pereira <marcospereira.mpj@gmail.com> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# OPENID URLS +URL_WELL_KNOWN = "realms/{realm-name}/.well-known/openid-configuration" +URL_TOKEN = "realms/{realm-name}/protocol/openid-connect/token" +URL_USERINFO = "realms/{realm-name}/protocol/openid-connect/userinfo" +URL_LOGOUT = "realms/{realm-name}/protocol/openid-connect/logout" +URL_CERTS = "realms/{realm-name}/protocol/openid-connect/certs" +URL_INTROSPECT = "realms/{realm-name}/protocol/openid-connect/token/introspect" +URL_ENTITLEMENT = "realms/{realm-name}/authz/entitlement/{resource-server-id}" + +# ADMIN URLS +URL_ADMIN_USERS = "admin/realms/{realm-name}/users" +URL_ADMIN_USERS_COUNT = "admin/realms/{realm-name}/users/count" +URL_ADMIN_USER = "admin/realms/{realm-name}/users/{id}" +URL_ADMIN_USER_CONSENTS = "admin/realms/{realm-name}/users/{id}/consents" +URL_ADMIN_SEND_UPDATE_ACCOUNT = "admin/realms/{realm-name}/users/{id}/execute-actions-email" +URL_ADMIN_SEND_VERIFY_EMAIL = "admin/realms/{realm-name}/users/{id}/send-verify-email" +URL_ADMIN_RESET_PASSWORD = "admin/realms/{realm-name}/users/{id}/reset-password" +URL_ADMIN_GET_SESSIONS = "admin/realms/{realm-name}/users/{id}/sessions" +URL_ADMIN_USER_CLIENT_ROLES = "admin/realms/{realm-name}/users/{id}/role-mappings/clients/{client-id}" +URL_ADMIN_USER_GROUP = "admin/realms/{realm-name}/users/{id}/groups/{group-id}" + +URL_ADMIN_SERVER_INFO = "admin/serverinfo" + +URL_ADMIN_GROUPS = "admin/realms/{realm-name}/groups" +URL_ADMIN_GROUP = "admin/realms/{realm-name}/groups/{id}" +URL_ADMIN_GROUP_CHILD = "admin/realms/{realm-name}/groups/{id}/children" +URL_ADMIN_GROUP_PERMISSIONS = "admin/realms/{realm-name}/groups/{id}/management/permissions" + +URL_ADMIN_CLIENTS = "admin/realms/{realm-name}/clients" +URL_ADMIN_CLIENT = "admin/realms/{realm-name}/clients/{id}" +URL_ADMIN_CLIENT_ROLES = "admin/realms/{realm-name}/clients/{id}/roles" +URL_ADMIN_CLIENT_ROLE = "admin/realms/{realm-name}/clients/{id}/roles/{role-name}" + +URL_ADMIN_REALM_ROLES = "admin/realms/{realm-name}/roles" + +URL_ADMIN_USER_STORAGE = "admin/realms/{realm-name}/user-storage/{id}/sync" +URL_ADMIN_REALM = "admin/realms" diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/PKG-INFO b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/PKG-INFO new file mode 100644 index 0000000000000000000000000000000000000000..e98a1ee3c0a656997e8a87a4d92881f1c17cd0f3 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/PKG-INFO @@ -0,0 +1,18 @@ +Metadata-Version: 1.1 +Name: python-keycloak +Version: 0.12.0 +Summary: python-keycloak is a Python package providing access to the Keycloak API. +Home-page: https://bitbucket.org/agriness/python-keycloak +Author: Marcos Pereira +Author-email: marcospereira.mpj@gmail.com +License: GNU General Public License - V3 +Description: UNKNOWN +Keywords: keycloak openid +Platform: UNKNOWN +Classifier: Programming Language :: Python :: 3 +Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3) +Classifier: Development Status :: 3 - Alpha +Classifier: Operating System :: MacOS +Classifier: Operating System :: Unix +Classifier: Operating System :: Microsoft :: Windows +Classifier: Topic :: Utilities diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/SOURCES.txt b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/SOURCES.txt new file mode 100644 index 0000000000000000000000000000000000000000..d948eb4a5dda2a22eed24092694088fc94a8fa4a --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/SOURCES.txt @@ -0,0 +1,21 @@ +README.md +setup.cfg +setup.py +keycloak/__init__.py +keycloak/connection.py +keycloak/exceptions.py +keycloak/keycloak_admin.py +keycloak/keycloak_main.py +keycloak/keycloak_openid.py +keycloak/urls_patterns.py +keycloak/authorization/__init__.py +keycloak/authorization/permission.py +keycloak/authorization/policy.py +keycloak/authorization/role.py +keycloak/tests/__init__.py +keycloak/tests/test_connection.py +python_keycloak.egg-info/PKG-INFO +python_keycloak.egg-info/SOURCES.txt +python_keycloak.egg-info/dependency_links.txt +python_keycloak.egg-info/requires.txt +python_keycloak.egg-info/top_level.txt \ No newline at end of file diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/dependency_links.txt b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/dependency_links.txt new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/requires.txt b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/requires.txt new file mode 100644 index 0000000000000000000000000000000000000000..d6eafdf65702ff256e75b81a0f7fbdbcc975e899 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/requires.txt @@ -0,0 +1,3 @@ +requests==2.18.4 +httmock==1.2.5 +python-jose==1.4.0 diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/top_level.txt b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/top_level.txt new file mode 100644 index 0000000000000000000000000000000000000000..26c07c1da4a50b7acffbd55aa039a9d4e0d27494 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/python_keycloak.egg-info/top_level.txt @@ -0,0 +1 @@ +keycloak diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/roles.json b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/roles.json new file mode 100644 index 0000000000000000000000000000000000000000..cc5e0b3241aa0a05e6e8f7edddbc6cca22304d81 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/roles.json @@ -0,0 +1,41 @@ +{ + "realm-management" : [ + { + "id": "3ff462fc-b33c-431a-b54b-861c3298d910", + "name": "manage-users", + "description": "${role_manage-users}", + "scopeParamRequired": false, + "composite": false,"clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "57118202-c5e5-4c49-829b-c2ed796bfdea", + "name": "query-users", + "description": "${role_query-users}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id":"46019462-3dc8-46a8-9786-ffcbad293f43", + "name":"view-users", + "description":"${role_view-users}", + "scopeParamRequired":false, + "composite":true, + "clientRole":true, + "containerId":"b2f45201-1362-4b10-83c3-207d470f44bf" + } + ], + "admin-cli": [ + { + "id":"30ab6b4f-b17c-4fff-a5fa-1181686bb409", + "name":"admin", + "description":"admin role", + "scopeParamRequired":false, + "composite":true, + "clientRole":true, + "containerId":"8891d8e9-35e6-4a1c-b32b-027be03b0f24" + } + ] +} diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/setup.cfg b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/setup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..9f88734b50dc5105d44ecd76494e065e8437e14f --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/setup.cfg @@ -0,0 +1,7 @@ +[metadata] +description-file = README.md + +[egg_info] +tag_build = +tag_date = 0 + diff --git a/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/setup.py b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..bf6a505f0a0816299d694a5e6db9ecca8421b449 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/files/python-keycloak-0.12.0/setup.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- + +from setuptools import setup + +setup( + name='python-keycloak', + version='0.12.0', + url='https://bitbucket.org/agriness/python-keycloak', + license='GNU General Public License - V3', + author='Marcos Pereira', + author_email='marcospereira.mpj@gmail.com', + keywords='keycloak openid', + description=u'python-keycloak is a Python package providing access to the Keycloak API.', + packages=['keycloak', 'keycloak.authorization', 'keycloak.tests'], + install_requires=['requests==2.18.4', 'httmock==1.2.5', 'python-jose==1.4.0'], + classifiers=[ + 'Programming Language :: Python :: 3', + 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', + 'Development Status :: 3 - Alpha', + 'Operating System :: MacOS', + 'Operating System :: Unix', + 'Operating System :: Microsoft :: Windows', + 'Topic :: Utilities' + ] +) diff --git a/ansible/roles/sunbird-auth-deploy/tasks/bootstrap.yml b/ansible/roles/sunbird-auth-deploy/tasks/bootstrap.yml new file mode 100644 index 0000000000000000000000000000000000000000..9389b39bdbced0ff49b6158f21185fc1b8b30883 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/tasks/bootstrap.yml @@ -0,0 +1,77 @@ +- name: start service + become: yes + command: /etc/init.d/keycloak start + poll: 5 + async: 5 + ignore_errors: yes + +- name: Create admin user + become_user: "{{ wildfly_user }}" + command: "{{ wildfly_dir }}/bin/add-user-keycloak.sh -r master -u {{ keycloak_management_user }} -p {{ keycloak_management_password }}" + when: keycloak_management_user is defined and + keycloak_management_password is defined + ignore_errors: yes + +- name: status service + become: yes + command: /etc/init.d/keycloak status + register: keycloak + poll: 5 + async: 10 + +- name: stop service + become: yes + command: /etc/init.d/keycloak stop && Pkill keycloak + when: "keycloak.stdout.find('running') != -1" + poll: 5 + async: 10 + ignore_errors: yes + +- name: start service + become: yes + command: /etc/init.d/keycloak start + poll: 5 + async: 5 + +- name: Waiting Until Keycloak is fully functional + wait_for: + host: "{{ inventory_hostname }}" + port: 8080 + delay: 5 + +- name: Install dependencies for keycloak + apt: + name: "{{item}}" + update_cache: yes + with_items: + - python-pip + - python-setuptools + +- name: Copying python libraries + copy: src={{ role_path }}/files/python-keycloak-0.12.0 dest=/tmp/ + +- name: Initialize python library to run keycloak bootstrap script + shell: cd /tmp/python-keycloak-0.12.0 && python setup.py install + +- name: Save keycalok vars to json + template: src="keycloak-bootstrap.conf.j2" dest="/tmp/keycloak-bootstrap.conf.json" mode="0644" + +- name: Copy realm json file to tmp location + template: src="keycloak-realm.j2" dest="/tmp/keycloak-realm.json" mode="0644" + +- name: Copy user manager roles file to tmp location + copy: src="files/python-keycloak-0.12.0/roles.json" dest="/tmp/roles.json" mode="0644" + +- name: Pausing for 100 seconds sometime for keycloak to run completely + pause: + seconds: 10 + +- name: Copy the keycloak bootstrap script + copy: src={{ role_path }}/files/python-keycloak-0.12.0/keycloak dest=/tmp + +- name: Run the keycloak bootstrap script + shell: cd /tmp/keycloak/ && python keycloak_main.py /tmp/keycloak-bootstrap.conf.json + register: out + until: '"404" not in out.stderr' + retries: 2 + delay: 10 diff --git a/ansible/roles/sunbird-auth-deploy/tasks/deploy.yml b/ansible/roles/sunbird-auth-deploy/tasks/deploy.yml new file mode 100644 index 0000000000000000000000000000000000000000..de5127b5b6cd47abfa7347d488945e0b1e3d56d7 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/tasks/deploy.yml @@ -0,0 +1,109 @@ +- name: Create required directories + file: + path: "{{ item.dest }}" + mode: "{{item.mode}}" + state: directory + with_items: + - { dest: '{{keycloak_home}}/providers', mode: '0755'} + - { dest: '{{keycloak_home}}/modules/system/layers/keycloak/org/postgresql/main', mode: '0755'} + - { dest: '{{keycloak_home}}/themes/{{tenant_name}}/login/messages', mode: '0755'} + - { dest: '{{keycloak_home}}/themes/{{tenant_name}}/login/resources/css/fonts/notosans', mode: '0755'} + - { dest: '{{keycloak_home}}/themes/{{tenant_name}}/login/resources/css/themes/default/assets/fonts', mode: '0755'} + - { dest: '{{keycloak_home}}/themes/{{tenant_name}}/login/resources/img', mode: '0755'} + - { dest: '{{keycloak_home}}/themes/{{tenant_name}}/login/resources/js', mode: '0755'} + - { dest: '{{keycloak_home}}/themes/{{tenant_name}}/email/html', mode: '0755'} + - { dest: '{{keycloak_home}}/themes/{{tenant_name}}/email/messages', mode: '0755'} + - { dest: '{{keycloak_home}}/themes/{{tenant_name}}/email/text', mode: '0755'} + +- name: Copy login theme + copy: src="{{login_theme}}/" dest="{{keycloak_home}}/themes/{{tenant_name}}/login/" force="yes" + +- name: Copy Custom Validation theme html to login theme + copy: src="../../sunbird-auth/keycloak/sms-provider/templates/" dest="{{keycloak_home}}/themes/{{tenant_name}}/login/" force="yes" + +- name: Copy email theme + copy: src="{{email_theme}}/" dest="{{keycloak_home}}/themes/{{tenant_name}}/email/" force="yes" + +- name: Create directory for sunbird auth package config + file: + path: sunbird_auth_{{sunbird_auth_version}}.config + state: directory + mode: 0755 + +- name: Keycloak configuration XML file + template: + src: "roles/sunbird-auth-deploy/templates/standalone-ha.xml" + dest: "sunbird_auth_{{sunbird_auth_version}}.config/standalone-ha.xml" + mode: 0750 + +- name: Postgresql Configuration- module.xml + template: + src: "roles/sunbird-auth-deploy/templates/module.xml.j2" + dest: "sunbird_auth_{{sunbird_auth_version}}.config/module.xml" + mode: 0750 + +- name: SMS provider configuration file + template: + src: "roles/sunbird-auth-deploy/templates/Msg91Creds.json.j2" + dest: "sunbird_auth_{{sunbird_auth_version}}.config/Msg91Creds.json" + mode: 0755 + when: "{{ msg_91_required|default(false) }}" + ignore_errors: yes + +- name: status service + become: yes + command: /etc/init.d/keycloak status + register: keycloak + poll: 5 + async: 10 + +- name: stop service + become: yes + command: /etc/init.d/keycloak stop && Pkill keycloak + when: "keycloak.stdout.find('running') != -1" + poll: 5 + async: 10 + ignore_errors: yes + +- name: Keycloak configuration XML file + copy: + src: "sunbird_auth_{{sunbird_auth_version}}.config/standalone-ha.xml" + dest: "{{keycloak_home}}/standalone/configuration/standalone-ha.xml" + mode: 0750 + owner: "{{wildfly_user}}" + group: "{{wildfly_group}}" + remote_src: yes + +- name: Postgresql Configuration- module.xml + copy: + src: "sunbird_auth_{{sunbird_auth_version}}.config/module.xml" + dest: "{{keycloak_home}}/modules/system/layers/keycloak/org/postgresql/main/module.xml" + mode: 0750 + owner: "{{wildfly_user}}" + group: "{{wildfly_group}}" + remote_src: yes + +- name: Create a directory for SMS provider configuration + file: + path: "{{keycloak_home}}/bin/sms-provider" + state: directory + mode: 0755 + when: "{{ msg_91_required|default(false) }}" + ignore_errors: yes + +- name: SMS provider configuration file + copy: + src: "sunbird_auth_{{sunbird_auth_version}}.config/Msg91Creds.json" + dest: "{{keycloak_home}}/bin/sms-provider/Msg91Creds.json" + owner: "{{wildfly_user}}" + group: "{{wildfly_group}}" + mode: 0755 + remote_src: yes + when: "{{ msg_91_required|default(false) }}" + ignore_errors: yes + +- name: start service + become: yes + command: /etc/init.d/keycloak start + poll: 5 + async: 5 diff --git a/ansible/roles/sunbird-auth-deploy/tasks/main.yml b/ansible/roles/sunbird-auth-deploy/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..3c5bbefeb390b51ad834672ff328e1abcf960c7a --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/tasks/main.yml @@ -0,0 +1,7 @@ +- include: deploy.yml + tags: + - deploy + +- include: bootstrap.yml + tags: + - bootstrap diff --git a/ansible/roles/sunbird-auth-deploy/templates/Msg91Creds.json.j2 b/ansible/roles/sunbird-auth-deploy/templates/Msg91Creds.json.j2 new file mode 100644 index 0000000000000000000000000000000000000000..d584b8be72a8f9e28aac9fd2e5b561411b3b7998 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/templates/Msg91Creds.json.j2 @@ -0,0 +1,7 @@ +{ + "auth_key": "{{vault_auth_key}}", + "sender": "{{vault_sender}}", + "country": "{{vault_country}}", + "route": "{{vault_route}}", + "sms_method_type": "{{vault_sms_method_type}}" +} diff --git a/ansible/roles/sunbird-auth-deploy/templates/keycloak-bootstrap.conf.j2 b/ansible/roles/sunbird-auth-deploy/templates/keycloak-bootstrap.conf.j2 new file mode 100644 index 0000000000000000000000000000000000000000..32b567707b26463c5e1d1d791a26033049a39772 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/templates/keycloak-bootstrap.conf.j2 @@ -0,0 +1,13 @@ +{ + "keycloak_auth_server_url": "{{ keycloak_auth_server_url }}/", + "keycloak_management_user": "{{ keycloak_management_user }}", + "keycloak_management_password": "{{ keycloak_management_password }}", + "keycloak_realm": "{{ keycloak_realm }}", + "keycloak_realm_json_file_path": "/tmp/keycloak-realm.json", + "keycloak_user_manager_roles_json_file_path": "/tmp/roles.json", + "keycloak_api_management_username": "{{ keycloak_api_management_username }}", + "keycloak_api_management_user_email": "{{ keycloak_api_management_user_email }}", + "keycloak_api_management_user_first_name": "{{ keycloak_api_management_user_first_name }}", + "keycloak_api_management_user_last_name": "{{ keycloak_api_management_user_last_name }}", + "keycloak_api_management_user_password": "{{ keycloak_api_management_user_password }}" +} diff --git a/ansible/roles/sunbird-auth-deploy/templates/keycloak-realm.j2 b/ansible/roles/sunbird-auth-deploy/templates/keycloak-realm.j2 new file mode 100644 index 0000000000000000000000000000000000000000..a8d199ed53f632b0e6f1f9c4b97104a2fa49f156 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/templates/keycloak-realm.j2 @@ -0,0 +1,2388 @@ +{ + "id": "sunbird", + "realm": "sunbird", + "notBefore": 1548955037, + "revokeRefreshToken": false, + "accessTokenLifespan": 86400, + "accessTokenLifespanForImplicitFlow": 5184000, + "ssoSessionIdleTimeout": 86400, + "ssoSessionMaxLifespan": 86400, + "offlineSessionIdleTimeout": 15552000, + "accessCodeLifespan": 60, + "accessCodeLifespanUserAction": 300, + "accessCodeLifespanLogin": 43200, + "actionTokenGeneratedByAdminLifespan": 43200, + "actionTokenGeneratedByUserLifespan": 300, + "enabled": true, + "sslRequired": {{ '"none"' if proto=='http' else '"external"' }}, + "registrationAllowed": true, + "registrationEmailAsUsername": false, + "rememberMe": true, + "verifyEmail": false, + "loginWithEmailAllowed": true, + "duplicateEmailsAllowed": false, + "resetPasswordAllowed": true, + "editUsernameAllowed": false, + "bruteForceProtected": true, + "permanentLockout": false, + "maxFailureWaitSeconds": 900, + "minimumQuickLoginWaitSeconds": 60, + "waitIncrementSeconds": 60, + "quickLoginCheckMilliSeconds": 1000, + "maxDeltaTimeSeconds": 43200, + "failureFactor": 30, + "roles": { + "realm": [ + { + "id": "7b955d7f-0a1e-4935-8391-642886d34612", + "name": "offline_access", + "description": "${role_offline-access}", + "scopeParamRequired": true, + "composite": false, + "clientRole": false, + "containerId": "sunbird" + }, + { + "id": "d6e505fe-c3c5-4689-946e-7f69d3f64c6c", + "name": "admin", + "description": "role_admin", + "scopeParamRequired": false, + "composite": true, + "composites": { + "realm": [ + "offline_access", + "uma_authorization" + ] + }, + "clientRole": false, + "containerId": "sunbird" + }, + { + "id": "96adf368-c8e2-4b39-b2a5-2559573edb63", + "name": "uma_authorization", + "description": "${role_uma_authorization}", + "scopeParamRequired": false, + "composite": false, + "clientRole": false, + "containerId": "sunbird" + } + ], + "client": { + "realm-management": [ + { + "id": "3f8bf7e5-5d66-4394-8f06-1270529c605f", + "name": "manage-authorization", + "description": "${role_manage-authorization}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "601fa2c9-29d4-49c1-87ac-939a1260f6ce", + "name": "query-realms", + "description": "${role_query-realms}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "9aa1dcd9-cb93-4496-af5f-41b9ecacc1da", + "name": "view-authorization", + "description": "${role_view-authorization}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "98999987-faf5-4c4e-958a-e5463bc4edc6", + "name": "manage-events", + "description": "${role_manage-events}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "f898fca8-5361-49d5-900a-ebf5b775a939", + "name": "impersonation", + "description": "${role_impersonation}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "698dfeb0-b8d2-4240-b8a8-acd4b7a12ad3", + "name": "view-realm", + "description": "${role_view-realm}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "3ff462fc-b33c-431a-b54b-861c3298d910", + "name": "manage-users", + "description": "${role_manage-users}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "be1802b1-558c-404c-bcb9-b9bf77af9788", + "name": "manage-identity-providers", + "description": "${role_manage-identity-providers}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "387b44e4-e901-4431-b9af-6abd9377ed46", + "name": "query-clients", + "description": "${role_query-clients}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "a408b6e8-03c9-46a2-97ba-305d09db0c3c", + "name": "view-events", + "description": "${role_view-events}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "41c2f39a-3008-4f9d-9e1e-a7738c118570", + "name": "query-groups", + "description": "${role_query-groups}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "26d3289b-d2eb-4cf2-a501-f1e3fa07344c", + "name": "manage-clients", + "description": "${role_manage-clients}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "e2077ab0-6efb-450d-9cba-89cacd887b71", + "name": "create-client", + "description": "${role_create-client}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "46019462-3dc8-46a8-9786-ffcbad293f43", + "name": "view-users", + "description": "${role_view-users}", + "scopeParamRequired": false, + "composite": true, + "composites": { + "client": { + "realm-management": [ + "query-groups", + "query-users" + ] + } + }, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "d269f220-e93f-4b43-96a1-9f2c117a2dfb", + "name": "view-clients", + "description": "${role_view-clients}", + "scopeParamRequired": false, + "composite": true, + "composites": { + "client": { + "realm-management": [ + "query-clients" + ] + } + }, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "0c998f1b-7363-47fb-a493-4b6f4aacb0ba", + "name": "realm-admin", + "description": "${role_realm-admin}", + "scopeParamRequired": false, + "composite": true, + "composites": { + "client": { + "realm-management": [ + "manage-authorization", + "query-realms", + "view-authorization", + "manage-events", + "impersonation", + "view-realm", + "manage-users", + "manage-identity-providers", + "query-clients", + "view-events", + "query-groups", + "manage-clients", + "create-client", + "view-users", + "view-clients", + "manage-realm", + "view-identity-providers", + "query-users" + ] + } + }, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "d77bf5a5-5877-450b-b11e-5f874f410e10", + "name": "manage-realm", + "description": "${role_manage-realm}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "d97009ed-d0c7-4afb-b9a3-6ee03ef01a74", + "name": "view-identity-providers", + "description": "${role_view-identity-providers}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + }, + { + "id": "57118202-c5e5-4c49-829b-c2ed796bfdea", + "name": "query-users", + "description": "${role_query-users}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "b2f45201-1362-4b10-83c3-207d470f44bf" + } + ], + "security-admin-console": [], + "android": [], + "admin-cli": [ + { + "id": "30ab6b4f-b17c-4fff-a5fa-1181686bb409", + "name": "admin", + "description": "admin role", + "scopeParamRequired": false, + "composite": true, + "composites": { + "realm": [ + "offline_access", + "admin", + "uma_authorization" + ] + }, + "clientRole": true, + "containerId": "8891d8e9-35e6-4a1c-b32b-027be03b0f24" + } + ], + "trampoline": [], + "broker": [ + { + "id": "19ef58ac-2d90-40a4-a158-0e2f8893264a", + "name": "read-token", + "description": "${role_read-token}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "c3950efa-6684-44c2-b50a-c7b3d16df04b" + } + ], + "portal": [], + "account": [ + { + "id": "1fef7ac5-b042-462b-8298-0446044788b3", + "name": "manage-account", + "description": "${role_manage-account}", + "scopeParamRequired": false, + "composite": true, + "composites": { + "client": { + "account": [ + "manage-account-links" + ] + } + }, + "clientRole": true, + "containerId": "c2d24d3f-65ca-46de-9cd8-3eeb71a7f83d" + }, + { + "id": "f8786348-6fa4-4b13-828e-9f080c9c6824", + "name": "manage-account-links", + "description": "${role_manage-account-links}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "c2d24d3f-65ca-46de-9cd8-3eeb71a7f83d" + }, + { + "id": "91c5c738-9c39-4c4d-bae8-75f18fd7c5e4", + "name": "view-profile", + "description": "${role_view-profile}", + "scopeParamRequired": false, + "composite": false, + "clientRole": true, + "containerId": "c2d24d3f-65ca-46de-9cd8-3eeb71a7f83d" + } + ], + "google-auth": [] + } + }, + "groups": [], + "defaultRoles": [ + "offline_access", + "uma_authorization" + ], + "requiredCredentials": [ + "password" + ], + "passwordPolicy": "hashIterations(20000)", + "otpPolicyType": "totp", + "otpPolicyAlgorithm": "HmacSHA1", + "otpPolicyInitialCounter": 0, + "otpPolicyDigits": 6, + "otpPolicyLookAheadWindow": 1, + "otpPolicyPeriod": 120, + "clientScopeMappings": { + "realm-management": [ + { + "client": "admin-cli", + "roles": [ + "realm-admin" + ] + }, + { + "client": "security-admin-console", + "roles": [ + "realm-admin" + ] + } + ] + }, + "clients": [ + { + "id": "9a901d18-377b-4615-9b89-677b544be3c5", + "clientId": "trampoline", + "rootUrl": "{{proto}}://{{proxy_server_name}}", + "adminUrl": "", + "baseUrl": "/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "{{sunbird_trampoline_secret}}", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": false, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "saml.authnstatement": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "saml.onetimeuse.condition": "false" + }, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "12134027-94cc-401c-bbf6-be565078ddfb", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "6a956bf1-6c40-4549-b335-9fe8c788b18f", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "d32ba1d4-3fef-42ff-aa2b-98cb4bfef6f9", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "9e899fc7-1ddd-447d-810c-d91333d6621c", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "74e4d13f-bd02-4f17-bbbc-d4b79bab1971", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "48fe23c2-a6fb-4c5e-8930-28ad1913829a", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + }, + { + "id": "da893beb-6ac7-420d-b51b-f05dadf56bbc", + "clientId": "android", + "rootUrl": "{{proto}}://{{proxy_server_name}}", + "baseUrl": "/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "redirectUris": ["{{proto}}://{{proxy_server_name}}/oauth2callback"], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "saml.authnstatement": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "saml.onetimeuse.condition": "false" + }, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "ff7dac46-16b4-4ab6-a054-dd03d5411fa9", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "32fad9c0-0dfe-45b2-94a1-3e2f74d756ec", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "4fb4d644-c609-4a27-a407-d451bcd83e16", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "84e7c6e5-1afb-44d8-b507-1ed31fa0f351", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "e7ca189f-94de-4996-a192-e93ba960bbba", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "16bedb3b-7571-4106-9a47-66151915ac31", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + }, + { + "id": "647aa742-d849-41d2-b174-c06b59e6d5b6", + "clientId": "google-auth", + "rootUrl": "{{proto}}://{{proxy_server_name}}", + "adminUrl": "", + "baseUrl": "/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "redirectUris": ["{{proto}}://{{proxy_server_name}}/private/*"], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": false, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "saml.authnstatement": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "saml.onetimeuse.condition": "false" + }, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "4b3632c9-8055-4f9f-9702-3c975d93bf8d", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "bdb4cdf5-0ee5-475b-bb47-25a5f90f1305", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "702df96e-686f-4b68-bafd-1cb820fff7fb", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "03617f2e-6b45-4844-a81c-0df09ea89988", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "b38527eb-dbed-4868-8075-69038ee3072a", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "93b57ddf-9f32-4c0e-95eb-258ad19693db", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + }, + { + "id": "8891d8e9-35e6-4a1c-b32b-027be03b0f24", + "clientId": "admin-cli", + "name": "${client_admin-cli}", + "rootUrl": "{{proto}}://{{proxy_server_name}}", + "adminUrl": "{{proto}}://{{proxy_server_name}}/*", + "baseUrl": "/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "redirectUris": [ + "{{proto}}://{{proxy_server_name}}/*", + "{{proto}}://{{proxy_server_name}}/" + ], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": false, + "implicitFlowEnabled": true, + "directAccessGrantsEnabled": true, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "saml.authnstatement": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "saml.onetimeuse.condition": "false" + }, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "32d6a3a4-8635-4a36-bd14-8ac5b73a49cc", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "900fa741-d1b2-467e-88a6-b454a9519568", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "8ea14714-d160-49b8-b612-59102d50ef53", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "bd167b99-5d23-49c1-90c7-85c2b088fed7", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "c4fe56a1-8d15-455a-b87b-cf051454b57c", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "26e3bf4c-8f9a-4548-b0db-5bbb7c398991", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + }, + { + "id": "c3950efa-6684-44c2-b50a-c7b3d16df04b", + "clientId": "broker", + "name": "${client_broker}", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "54c3bbc3-850b-4636-82d1-ed4f3a46a00a", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "0f0d9b74-c476-4981-a783-dd4bdbe041ec", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "d6f625cc-eac1-49d0-bea5-17e6f9d3860c", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "bbf35056-9bbe-49a0-aefc-2bde2379ccdc", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "38b04951-1043-4dc6-9504-7b0f31ed71a4", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "88bb836b-7feb-45eb-b004-fb3be8436908", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + }, + { + "id": "b2f45201-1362-4b10-83c3-207d470f44bf", + "clientId": "realm-management", + "name": "${client_realm-management}", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "redirectUris": [], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": true, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "authorizationServicesEnabled": true, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "71605238-bf41-400e-8c03-a5d78f54b00b", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "a0cb6f3a-30ef-4475-b73f-ca6c2f1f3675", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "3a7708b1-63b9-4116-af7f-969fc1bf61a4", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "c393d7b7-fa22-4e90-9ad7-07d520632c20", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "e77aae69-8ea4-4ee4-bcd6-ba7ef3958c02", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "2d8cbac4-e4dd-4fa6-bf71-98adf826b9dd", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false, + "authorizationSettings": { + "allowRemoteResourceManagement": false, + "policyEnforcementMode": "ENFORCING", + "resources": [ + { + "name": "role.resource.30ab6b4f-b17c-4fff-a5fa-1181686bb409", + "type": "Role", + "scopes": [ + { + "name": "map-role-composite" + }, + { + "name": "map-role-client-scope" + }, + { + "name": "map-role" + } + ], + "typedScopes": [] + }, + { + "name": "role.resource.d6e505fe-c3c5-4689-946e-7f69d3f64c6c", + "type": "Role", + "scopes": [ + { + "name": "map-role-composite" + }, + { + "name": "map-role-client-scope" + }, + { + "name": "map-role" + } + ], + "typedScopes": [] + } + ], + "policies": [ + { + "name": "map-role-composite.permission.30ab6b4f-b17c-4fff-a5fa-1181686bb409", + "type": "scope", + "logic": "POSITIVE", + "decisionStrategy": "AFFIRMATIVE", + "config": { + "resources": "[\"role.resource.30ab6b4f-b17c-4fff-a5fa-1181686bb409\"]", + "scopes": "[\"map-role-composite\"]" + } + }, + { + "name": "map-role-client-scope.permission.30ab6b4f-b17c-4fff-a5fa-1181686bb409", + "type": "scope", + "logic": "POSITIVE", + "decisionStrategy": "AFFIRMATIVE", + "config": { + "resources": "[\"role.resource.30ab6b4f-b17c-4fff-a5fa-1181686bb409\"]", + "scopes": "[\"map-role-client-scope\"]" + } + }, + { + "name": "map-role.permission.30ab6b4f-b17c-4fff-a5fa-1181686bb409", + "type": "scope", + "logic": "POSITIVE", + "decisionStrategy": "AFFIRMATIVE", + "config": { + "resources": "[\"role.resource.30ab6b4f-b17c-4fff-a5fa-1181686bb409\"]", + "scopes": "[\"map-role\"]" + } + }, + { + "name": "map-role-composite.permission.d6e505fe-c3c5-4689-946e-7f69d3f64c6c", + "type": "scope", + "logic": "POSITIVE", + "decisionStrategy": "AFFIRMATIVE", + "config": { + "resources": "[\"role.resource.d6e505fe-c3c5-4689-946e-7f69d3f64c6c\"]", + "scopes": "[\"map-role-composite\"]" + } + }, + { + "name": "map-role-client-scope.permission.d6e505fe-c3c5-4689-946e-7f69d3f64c6c", + "type": "scope", + "logic": "POSITIVE", + "decisionStrategy": "AFFIRMATIVE", + "config": { + "resources": "[\"role.resource.d6e505fe-c3c5-4689-946e-7f69d3f64c6c\"]", + "scopes": "[\"map-role-client-scope\"]" + } + }, + { + "name": "map-role.permission.d6e505fe-c3c5-4689-946e-7f69d3f64c6c", + "type": "scope", + "logic": "POSITIVE", + "decisionStrategy": "AFFIRMATIVE", + "config": { + "resources": "[\"role.resource.d6e505fe-c3c5-4689-946e-7f69d3f64c6c\"]", + "scopes": "[\"map-role\"]" + } + } + ], + "scopes": [ + { + "name": "map-role-composite" + }, + { + "name": "map-role-client-scope" + }, + { + "name": "map-role" + } + ] + } + }, + { + "id": "8c12290d-d62f-48ce-913b-c93bf995ca59", + "clientId": "portal", + "rootUrl": "{{proto}}://{{proxy_server_name}}", + "adminUrl": "/callback", + "baseUrl": "/", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "redirectUris": ["{{proto}}://{{proxy_server_name}}/private/*", "{{proto}}://{{proxy_server_name}}/","{{proto}}://{{proxy_server_name}}/*"], + "webOrigins": [ + "" + ], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": { + "saml.assertion.signature": "false", + "saml.force.post.binding": "false", + "saml.multivalued.roles": "false", + "saml.encrypt": "false", + "saml_force_name_id_format": "false", + "saml.client.signature": "false", + "saml.authnstatement": "false", + "saml.server.signature": "false", + "saml.server.signature.keyinfo.ext": "false", + "saml.onetimeuse.condition": "false" + }, + "fullScopeAllowed": true, + "nodeReRegistrationTimeout": -1, + "protocolMappers": [ + { + "id": "63071ff2-a5e5-4d38-b534-a9f25a075403", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "9bf9cad5-dbce-41e9-aa36-d84cc5a768a2", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "238e55b7-6545-467e-856b-f95477afe1ff", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "edb1ff4e-b452-46bc-8c3b-d6075f6ee579", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "7a0118e2-57ff-4d23-bf74-cbfe1f545d1d", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "b59a913e-118a-4dc4-a8d7-66c44ced5345", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + }, + { + "id": "79c518d7-b41a-4e6f-be42-4ef365824100", + "clientId": "security-admin-console", + "name": "${client_security-admin-console}", + "baseUrl": "/auth/admin/sunbird/console/index.html", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "redirectUris": [ + "/auth/admin/sunbird/console/*" + ], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": true, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "c989a8c8-cb8b-40ff-b4b9-86122bad7aa9", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "b180fb8c-997c-4f6a-b774-af677f903139", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "c373dc9a-49d7-4d28-9b94-06cf20fb1955", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "24c7b1c4-62c2-4d92-ab19-49bfaedcc3d4", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "883a39a7-37b4-46ef-a761-3e51b95ccc35", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + }, + { + "id": "95ed8e44-38cc-4f09-8adc-19c12d5eada0", + "name": "locale", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-attribute-mapper", + "consentRequired": false, + "consentText": "${locale}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "locale", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "locale", + "jsonType.label": "String" + } + }, + { + "id": "c66c6a41-eb22-443f-8a77-e68d404ad26f", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + }, + { + "id": "c2d24d3f-65ca-46de-9cd8-3eeb71a7f83d", + "clientId": "account", + "name": "${client_account}", + "baseUrl": "/auth/realms/sunbird/account", + "surrogateAuthRequired": false, + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "", + "defaultRoles": [ + "manage-account", + "view-profile" + ], + "redirectUris": [ + "/auth/realms/sunbird/account/*" + ], + "webOrigins": [], + "notBefore": 0, + "bearerOnly": false, + "consentRequired": false, + "standardFlowEnabled": true, + "implicitFlowEnabled": false, + "directAccessGrantsEnabled": false, + "serviceAccountsEnabled": false, + "publicClient": false, + "frontchannelLogout": false, + "protocol": "openid-connect", + "attributes": {}, + "fullScopeAllowed": false, + "nodeReRegistrationTimeout": 0, + "protocolMappers": [ + { + "id": "a64118ab-33c8-4060-9f3e-3ed817ba8e0d", + "name": "role list", + "protocol": "saml", + "protocolMapper": "saml-role-list-mapper", + "consentRequired": false, + "config": { + "single": "false", + "attribute.nameformat": "Basic", + "attribute.name": "Role" + } + }, + { + "id": "1f4a0c5e-7c8a-4693-8be5-14681b243868", + "name": "username", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${username}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "username", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "preferred_username", + "jsonType.label": "String" + } + }, + { + "id": "8d88a133-a399-4e75-b051-5b0d4ae850ab", + "name": "full name", + "protocol": "openid-connect", + "protocolMapper": "oidc-full-name-mapper", + "consentRequired": true, + "consentText": "${fullName}", + "config": { + "id.token.claim": "true", + "access.token.claim": "true", + "userinfo.token.claim": "true" + } + }, + { + "id": "45593258-916c-4158-8577-d9806c16415a", + "name": "email", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${email}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "email", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "email", + "jsonType.label": "String" + } + }, + { + "id": "027be48e-b7dc-4c3a-a648-414a466b67dd", + "name": "family name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${familyName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "lastName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "family_name", + "jsonType.label": "String" + } + }, + { + "id": "c93937f9-0446-4be9-8b47-3c6de857497e", + "name": "given name", + "protocol": "openid-connect", + "protocolMapper": "oidc-usermodel-property-mapper", + "consentRequired": true, + "consentText": "${givenName}", + "config": { + "userinfo.token.claim": "true", + "user.attribute": "firstName", + "id.token.claim": "true", + "access.token.claim": "true", + "claim.name": "given_name", + "jsonType.label": "String" + } + } + ], + "useTemplateConfig": false, + "useTemplateScope": false, + "useTemplateMappers": false + } + ], + "clientTemplates": [], + "browserSecurityHeaders": { + "xContentTypeOptions": "nosniff", + "xRobotsTag": "none", + "xFrameOptions": "SAMEORIGIN", + "xXSSProtection": "1; mode=block", + "contentSecurityPolicy": "frame-src 'self'" + }, + "smtpServer": { + "password": "", + "starttls": "", + "auth": "true", + "port": "587", + "host": "", + "from": "", + "ssl": "", + "user": "" + }, + "loginTheme": "sunbird", + "accountTheme": "keycloak", + "adminTheme": "keycloak", + "emailTheme": "keycloak", + "eventsEnabled": false, + "eventsListeners": [ + "jboss-logging" + ], + "enabledEventTypes": [], + "adminEventsEnabled": false, + "adminEventsDetailsEnabled": false, + "components": { + "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [ + { + "id": "84078bbb-e005-44c8-9c7d-a1b4821558da", + "name": "Max Clients Limit", + "providerId": "max-clients", + "subType": "anonymous", + "subComponents": {}, + "config": { + "max-clients": [ + "200" + ] + } + }, + { + "id": "346d857e-4385-4f8f-a2fc-072fd11a10ec", + "name": "Allowed Protocol Mapper Types", + "providerId": "allowed-protocol-mappers", + "subType": "authenticated", + "subComponents": {}, + "config": { + "allowed-protocol-mapper-types": [ + "oidc-full-name-mapper", + "oidc-address-mapper", + "saml-user-property-mapper", + "oidc-usermodel-property-mapper", + "saml-user-attribute-mapper", + "oidc-sha256-pairwise-sub-mapper", + "saml-role-list-mapper", + "oidc-usermodel-attribute-mapper" + ], + "consent-required-for-all-mappers": [ + "true" + ] + } + }, + { + "id": "eed64f9f-4b66-45ad-bdb4-4070e3802366", + "name": "Allowed Client Templates", + "providerId": "allowed-client-templates", + "subType": "authenticated", + "subComponents": {}, + "config": {} + }, + { + "id": "17ac4eaa-9139-4b3a-b1db-c82d44c1531d", + "name": "Allowed Client Templates", + "providerId": "allowed-client-templates", + "subType": "anonymous", + "subComponents": {}, + "config": {} + }, + { + "id": "38532936-be91-40e4-b65d-c0abfaf9547c", + "name": "Full Scope Disabled", + "providerId": "scope", + "subType": "anonymous", + "subComponents": {}, + "config": {} + }, + { + "id": "8c1690a2-6eea-4d61-ab66-7a015e3bea3c", + "name": "Allowed Protocol Mapper Types", + "providerId": "allowed-protocol-mappers", + "subType": "anonymous", + "subComponents": {}, + "config": { + "allowed-protocol-mapper-types": [ + "saml-role-list-mapper", + "oidc-usermodel-attribute-mapper", + "oidc-full-name-mapper", + "oidc-usermodel-property-mapper", + "oidc-address-mapper", + "saml-user-property-mapper", + "saml-user-attribute-mapper", + "oidc-sha256-pairwise-sub-mapper" + ], + "consent-required-for-all-mappers": [ + "true" + ] + } + }, + { + "id": "3dcc314c-07f8-484d-9535-29424dbaddfc", + "name": "Trusted Hosts", + "providerId": "trusted-hosts", + "subType": "anonymous", + "subComponents": {}, + "config": { + "host-sending-registration-request-must-match": [ + "true" + ], + "client-uris-must-match": [ + "true" + ] + } + }, + { + "id": "ab52b781-64b9-42a0-99f5-cbeba6710763", + "name": "Consent Required", + "providerId": "consent-required", + "subType": "anonymous", + "subComponents": {}, + "config": {} + } + ], + "org.keycloak.keys.KeyProvider": [ + { + "id": "bd30c46f-9ee3-443d-9faa-6ed8075aac87", + "name": "rsa-generated", + "providerId": "rsa-generated", + "subComponents": {}, + "config": { + "priority": [ + "100" + ] + } + }, + { + "id": "a93cc73f-b070-48cd-bf08-9b290707c2f5", + "name": "hmac-generated", + "providerId": "hmac-generated", + "subComponents": {}, + "config": { + "priority": [ + "100" + ] + } + } + ] + }, + "internationalizationEnabled": false, + "supportedLocales": [], + "defaultLocale": "en", + "authenticationFlows": [ + { + "id": "976a6147-7a63-48cd-ab6d-ac3a2f0ffa42", + "alias": "Direct Grant 2", + "description": "OpenID Connect Resource Owner Grant", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": false, + "authenticationExecutions": [ + { + "authenticator": "direct-grant-validate-username", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-password", + "requirement": "DISABLED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-otp", + "requirement": "OPTIONAL", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "fe01a5ba-9b8b-4211-8a71-273800b0309d", + "alias": "Direct Grant w/o Password", + "description": "Grant user access using only the username and no password.", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": false, + "authenticationExecutions": [] + }, + { + "id": "797d8e90-1fb5-48bc-b6f0-e44766721af0", + "alias": "Handle Existing Account", + "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-confirm-link", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "idp-email-verification", + "requirement": "ALTERNATIVE", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "ALTERNATIVE", + "priority": 30, + "flowAlias": "Verify Existing Account by Re-authentication", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "5f70fc7a-42b6-41cd-aaf9-a3837fc05f43", + "alias": "Phone number login", + "description": "browser based authentication", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": false, + "authenticationExecutions": [ + { + "authenticator": "auth-cookie", + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-spnego", + "requirement": "DISABLED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "identity-provider-redirector", + "requirement": "ALTERNATIVE", + "priority": 25, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "ALTERNATIVE", + "priority": 30, + "flowAlias": "Phone number login forms", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "b886ae3f-e90a-4309-bb05-5367c3ec977b", + "alias": "Phone number login forms", + "description": "Username, password, otp and other auth forms.", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": false, + "authenticationExecutions": [ + { + "authenticator": "auth-phone-password-form", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-otp-form", + "requirement": "DISABLED", + "priority": 21, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "8dc1276b-946b-4c49-97d2-ade016fd9df8", + "alias": "Reset Credentials Via SMS OTP", + "description": "Reset credentials for a user if they forgot their password or something", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": false, + "authenticationExecutions": [ + { + "authenticator": "reset-credentials-choose-user", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorConfig": "Reset Credentials Via SMS OTP", + "authenticator": "sms-authentication", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-password", + "requirement": "REQUIRED", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-otp", + "requirement": "OPTIONAL", + "priority": 41, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "14838047-af17-4104-a714-bf51bd0aa699", + "alias": "Verify Existing Account by Re-authentication", + "description": "Reauthentication of existing account", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "idp-username-password-form", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-otp-form", + "requirement": "OPTIONAL", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "7ab0a65d-641e-4ba0-8793-35e363ba8362", + "alias": "browser", + "description": "browser based authentication", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "auth-cookie", + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-spnego", + "requirement": "DISABLED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "identity-provider-redirector", + "requirement": "ALTERNATIVE", + "priority": 25, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "ALTERNATIVE", + "priority": 30, + "flowAlias": "forms", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "b2aedbfb-9432-4f47-8114-c6031c884b5f", + "alias": "clients", + "description": "Base authentication for clients", + "providerId": "client-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "client-secret", + "requirement": "ALTERNATIVE", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "client-jwt", + "requirement": "ALTERNATIVE", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "78809b88-19c3-4351-ac1a-e1c43dd71143", + "alias": "direct grant", + "description": "OpenID Connect Resource Owner Grant", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "direct-grant-validate-username", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-password", + "requirement": "DISABLED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "direct-grant-validate-otp", + "requirement": "OPTIONAL", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "025a77cf-895a-4622-95a0-fdd9912aeb9a", + "alias": "docker auth", + "description": "Used by Docker clients to authenticate against the IDP", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "docker-http-basic-authenticator", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "1ea8d8e5-7997-43d0-9ce4-0ec187d9c5be", + "alias": "first broker login", + "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticatorConfig": "review profile config", + "authenticator": "idp-review-profile", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticatorConfig": "create unique user config", + "authenticator": "idp-create-user-if-unique", + "requirement": "ALTERNATIVE", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "requirement": "ALTERNATIVE", + "priority": 30, + "flowAlias": "Handle Existing Account", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "5ae10869-08a5-489b-97c6-b6f65a40de21", + "alias": "forms", + "description": "Username, password, otp and other auth forms.", + "providerId": "basic-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "auth-username-password-form", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "auth-otp-form", + "requirement": "OPTIONAL", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "1be582c9-b469-4092-82d4-365fb6d02963", + "alias": "registration", + "description": "registration flow", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "registration-page-form", + "requirement": "REQUIRED", + "priority": 10, + "flowAlias": "registration form", + "userSetupAllowed": false, + "autheticatorFlow": true + } + ] + }, + { + "id": "e71bd4ef-a33e-4a75-a8fc-8cfaf6a1119b", + "alias": "registration form", + "description": "registration form", + "providerId": "form-flow", + "topLevel": false, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "registration-user-creation", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-profile-action", + "requirement": "REQUIRED", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-password-action", + "requirement": "REQUIRED", + "priority": 50, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "registration-recaptcha-action", + "requirement": "DISABLED", + "priority": 60, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "6c4e8128-0eb4-4303-bbec-3e5baec31022", + "alias": "reset credentials", + "description": "Reset credentials for a user if they forgot their password or something", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "reset-credentials-choose-user", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-credential-email", + "requirement": "REQUIRED", + "priority": 20, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-password", + "requirement": "REQUIRED", + "priority": 30, + "userSetupAllowed": false, + "autheticatorFlow": false + }, + { + "authenticator": "reset-otp", + "requirement": "OPTIONAL", + "priority": 40, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + }, + { + "id": "ec7bae86-99e4-403a-a041-1039bacba45e", + "alias": "saml ecp", + "description": "SAML ECP Profile Authentication Flow", + "providerId": "basic-flow", + "topLevel": true, + "builtIn": true, + "authenticationExecutions": [ + { + "authenticator": "http-basic-authenticator", + "requirement": "REQUIRED", + "priority": 10, + "userSetupAllowed": false, + "autheticatorFlow": false + } + ] + } + ], + "authenticatorConfig": [ + { + "id": "7d7aa155-54cd-4b62-bc7f-558ce934e0a5", + "alias": "Reset Credentials Via SMS OTP", + "config": { + "sms-auth.code.length": "6", + "sms-auth.msg.text": "Reset your password on PREPROD with the OTP %sms-code%. The OTP is valid for 5 minutes.", + "sms-auth.code.ttl": "300" + } + }, + { + "id": "cc029554-f8bc-49c2-81cc-f0f7141bf178", + "alias": "create unique user config", + "config": { + "require.password.update.after.registration": "false" + } + }, + { + "id": "6a2402e1-b718-43a0-9b65-2a7b62d3b935", + "alias": "review profile config", + "config": { + "update.profile.on.first.login": "missing" + } + } + ], + "requiredActions": [ + { + "alias": "CONFIGURE_TOTP", + "name": "Configure OTP", + "providerId": "CONFIGURE_TOTP", + "enabled": true, + "defaultAction": false, + "config": {} + }, + { + "alias": "UPDATE_PASSWORD", + "name": "Update Password", + "providerId": "UPDATE_PASSWORD", + "enabled": true, + "defaultAction": false, + "config": {} + }, + { + "alias": "UPDATE_PROFILE", + "name": "Update Profile", + "providerId": "UPDATE_PROFILE", + "enabled": true, + "defaultAction": false, + "config": {} + }, + { + "alias": "VERIFY_EMAIL", + "name": "Verify Email", + "providerId": "VERIFY_EMAIL", + "enabled": true, + "defaultAction": false, + "config": {} + }, + { + "alias": "terms_and_conditions", + "name": "Terms and Conditions", + "providerId": "terms_and_conditions", + "enabled": true, + "defaultAction": false, + "config": {} + } + ], + "browserFlow": "Phone number login", + "registrationFlow": "registration", + "directGrantFlow": "Direct Grant 2", + "resetCredentialsFlow": "Reset Credentials Via SMS OTP", + "clientAuthenticationFlow": "clients", + "dockerAuthenticationFlow": "docker auth", + "attributes": { + "_browser_header.xXSSProtection": "1; mode=block", + "_browser_header.xFrameOptions": "SAMEORIGIN", + "quickLoginCheckMilliSeconds": "1000", + "permanentLockout": "false", + "_browser_header.xRobotsTag": "none", + "maxFailureWaitSeconds": "900", + "minimumQuickLoginWaitSeconds": "60", + "failureFactor": "30", + "actionTokenGeneratedByUserLifespan": "300", + "maxDeltaTimeSeconds": "43200", + "_browser_header.xContentTypeOptions": "nosniff", + "actionTokenGeneratedByAdminLifespan": "43200", + "bruteForceProtected": "true", + "_browser_header.contentSecurityPolicy": "frame-src 'self'", + "waitIncrementSeconds": "60" + }, + "keycloakVersion": "3.2.0.Final" +} \ No newline at end of file diff --git a/ansible/roles/sunbird-auth-deploy/templates/module.xml.j2 b/ansible/roles/sunbird-auth-deploy/templates/module.xml.j2 new file mode 100644 index 0000000000000000000000000000000000000000..bcfe36a40660252723eb6ce3ca98e01307a26fbc --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/templates/module.xml.j2 @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module xmlns="urn:jboss:module:1.1" name="org.postgresql"> + <resources> + <resource-root path="postgresql-9.4.1212.jar"/> + </resources> + <dependencies> + <module name="javax.api"/> + <module name="javax.transaction.api"/> + </dependencies> +</module> diff --git a/ansible/roles/sunbird-auth-deploy/templates/standalone-ha.xml b/ansible/roles/sunbird-auth-deploy/templates/standalone-ha.xml new file mode 100644 index 0000000000000000000000000000000000000000..c774e2c0f434fe50d46522de1af21d927c8714c2 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/templates/standalone-ha.xml @@ -0,0 +1,571 @@ +<?xml version='1.0' encoding='UTF-8'?> + +<server xmlns="urn:jboss:domain:4.0"> + <extensions> + <extension module="org.jboss.as.clustering.infinispan"/> + <extension module="org.jboss.as.clustering.jgroups"/> + <extension module="org.jboss.as.connector"/> + <extension module="org.jboss.as.deployment-scanner"/> + <extension module="org.jboss.as.ee"/> + <extension module="org.jboss.as.ejb3"/> + <extension module="org.jboss.as.jaxrs"/> + <extension module="org.jboss.as.jdr"/> + <extension module="org.jboss.as.jmx"/> + <extension module="org.jboss.as.jpa"/> + <extension module="org.jboss.as.jsf"/> + <extension module="org.jboss.as.logging"/> + <extension module="org.jboss.as.mail"/> + <extension module="org.jboss.as.modcluster"/> + <extension module="org.jboss.as.naming"/> + <extension module="org.jboss.as.remoting"/> + <extension module="org.jboss.as.security"/> + <extension module="org.jboss.as.transactions"/> + <extension module="org.keycloak.keycloak-server-subsystem"/> + <extension module="org.wildfly.extension.bean-validation"/> + <extension module="org.wildfly.extension.io"/> + <extension module="org.wildfly.extension.request-controller"/> + <extension module="org.wildfly.extension.security.manager"/> + <extension module="org.wildfly.extension.undertow"/> + </extensions> + <management> + <security-realms> + <security-realm name="ManagementRealm"> + <authentication> + <local default-user="$local" skip-group-loading="true"/> + <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/> + </authentication> + <authorization map-groups-to-roles="false"> + <properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/> + </authorization> + </security-realm> + <security-realm name="ApplicationRealm"> + <authentication> + <local default-user="$local" allowed-users="*" skip-group-loading="true"/> + <properties path="application-users.properties" relative-to="jboss.server.config.dir"/> + </authentication> + <authorization> + <properties path="application-roles.properties" relative-to="jboss.server.config.dir"/> + </authorization> + </security-realm> + </security-realms> + <audit-log> + <formatters> + <json-formatter name="json-formatter"/> + </formatters> + <handlers> + <file-handler name="file" formatter="json-formatter" relative-to="jboss.server.data.dir" path="audit-log.log"/> + </handlers> + <logger log-boot="true" log-read-only="false" enabled="false"> + <handlers> + <handler name="file"/> + </handlers> + </logger> + </audit-log> + <management-interfaces> + <http-interface security-realm="ManagementRealm" http-upgrade-enabled="true"> + <socket-binding http="management-http"/> + </http-interface> + </management-interfaces> + <access-control provider="simple"> + <role-mapping> + <role name="SuperUser"> + <include> + <user name="$local"/> + </include> + </role> + </role-mapping> + </access-control> + </management> + <profile> + <subsystem xmlns="urn:jboss:domain:logging:3.0"> + <console-handler name="CONSOLE"> + <level name="INFO"/> + <formatter> + <named-formatter name="COLOR-PATTERN"/> + </formatter> + </console-handler> + <periodic-rotating-file-handler name="FILE" autoflush="true"> + <formatter> + <named-formatter name="PATTERN"/> + </formatter> + <file relative-to="jboss.server.log.dir" path="server.log"/> + <suffix value=".yyyy-MM-dd"/> + <append value="true"/> + </periodic-rotating-file-handler> + <syslog-handler name="SYSLOG" enabled="true"> + <app-name value="keycloak"/> + <facility value="local-use-7"/> + <formatter> + <syslog-format syslog-type="RFC5424"/> + </formatter> + <hostname value="${jboss.host.name}"/> + <level name="INFO"/> + <server-address value="0.0.0.0"/> + <port value="514"/> + </syslog-handler> + <logger category="com.arjuna"> + <level name="WARN"/> + </logger> + <logger category="org.jboss.as.config"> + <level name="DEBUG"/> + </logger> + <logger category="sun.rmi"> + <level name="WARN"/> + </logger> + <root-logger> + <level name="INFO"/> + <handlers> + <handler name="CONSOLE"/> + <handler name="FILE"/> + <handler name="SYSLOG"/> + </handlers> + </root-logger> + <formatter name="PATTERN"> + <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/> + </formatter> + <formatter name="COLOR-PATTERN"> + <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/> + </formatter> + </subsystem> + <subsystem xmlns="urn:jboss:domain:bean-validation:1.0"/> + <subsystem xmlns="urn:jboss:domain:datasources:4.0"> + <datasources> + <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true"> + <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url> + <driver>h2</driver> + <security> + <user-name>sa</user-name> + <password>sa</password> + </security> + </datasource> + <datasource jndi-name="java:jboss/datasources/KeycloakOrigDS" pool-name="KeycloakOrigDS" enabled="false" use-java-context="true"> + <connection-url>jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE</connection-url> + <driver>h2</driver> + <security> + <user-name>sa</user-name> + <password>sa</password> + </security> + </datasource> + <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true"> + <!-- Require both connection-url and connection-property[name="url"] + This is because of a Wildfly issue. Since the postgres driver is using a + datasource-class the connection parameters have to be set via + <connection-property>. However, deleting <connection-url> causes a Wildfly + configuration parsing error + + See this issue for detail: https://issues.jboss.org/browse/WFLY-6157 + It is fixed for Wildfly 11.0.0.Alpha1 + --> + <connection-url>jdbc:postgresql://thisnotwork:5432/keycloak</connection-url> + <connection-property name="url">jdbc:postgresql://{{keycloak_postgres_host}}:5432/{{ keycloak_postgres_database }}?sslmode=require</connection-property> + <driver>postgresql</driver> + <pool> + <max-pool-size>20</max-pool-size> + </pool> + <security> + <user-name>{{ keycloak_postgres_user }}</user-name> + <password>{{ keycloak_postgres_password }}</password> + </security> + <validation> + <background-validation>true</background-validation> + <background-validation-millis>10000</background-validation-millis> + <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/> + <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/> + </validation> + </datasource> + <drivers> + <driver name="h2" module="com.h2database.h2"> + <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> + </driver> + <driver name="postgresql" module="org.postgresql"> + <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> + <datasource-class>org.postgresql.ds.PGPoolingDataSource</datasource-class> + </driver> + </drivers> + </datasources> + </subsystem> + <subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0"> + <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" runtime-failure-causes-rollback="${jboss.deployment.scanner.rollback.on.failure:false}"/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:ee:4.0"> + <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement> + <concurrent> + <context-services> + <context-service name="default" jndi-name="java:jboss/ee/concurrency/context/default" use-transaction-setup-provider="true"/> + </context-services> + <managed-thread-factories> + <managed-thread-factory name="default" jndi-name="java:jboss/ee/concurrency/factory/default" context-service="default"/> + </managed-thread-factories> + <managed-executor-services> + <managed-executor-service name="default" jndi-name="java:jboss/ee/concurrency/executor/default" context-service="default" hung-task-threshold="60000" keepalive-time="5000"/> + </managed-executor-services> + <managed-scheduled-executor-services> + <managed-scheduled-executor-service name="default" jndi-name="java:jboss/ee/concurrency/scheduler/default" context-service="default" hung-task-threshold="60000" keepalive-time="3000"/> + </managed-scheduled-executor-services> + </concurrent> + <default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:ejb3:4.0"> + <session-bean> + <stateless> + <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/> + </stateless> + <stateful default-access-timeout="5000" cache-ref="distributable" passivation-disabled-cache-ref="simple"/> + <singleton default-access-timeout="5000"/> + </session-bean> + <pools> + <bean-instance-pools> + <!-- Automatically configure pools. Alternatively, max-pool-size can be set to a specific value --> + <strict-max-pool name="slsb-strict-max-pool" derive-size="from-worker-pools" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/> + <strict-max-pool name="mdb-strict-max-pool" derive-size="from-cpu-count" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/> + </bean-instance-pools> + </pools> + <caches> + <cache name="simple"/> + <cache name="distributable" passivation-store-ref="infinispan" aliases="passivating clustered"/> + </caches> + <passivation-stores> + <passivation-store name="infinispan" cache-container="ejb" max-size="10000"/> + </passivation-stores> + <async thread-pool-name="default"/> + <timer-service thread-pool-name="default" default-data-store="default-file-store"> + <data-stores> + <file-data-store name="default-file-store" path="timer-service-data" relative-to="jboss.server.data.dir"/> + </data-stores> + </timer-service> + <remote connector-ref="http-remoting-connector" thread-pool-name="default"/> + <thread-pools> + <thread-pool name="default"> + <max-threads count="10"/> + <keepalive-time time="100" unit="milliseconds"/> + </thread-pool> + </thread-pools> + <default-security-domain value="other"/> + <default-missing-method-permissions-deny-access value="true"/> + <log-system-exceptions value="true"/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:io:1.1"> + <worker name="default"/> + <buffer-pool name="default"/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:infinispan:4.0"> + <cache-container name="keycloak" jndi-name="infinispan/Keycloak"> + <transport lock-timeout="60000"/> + <local-cache name="realms"> + <eviction max-entries="10000" strategy="LRU"/> + </local-cache> + <local-cache name="users"> + <eviction max-entries="10000" strategy="LRU"/> + </local-cache> + <distributed-cache name="sessions" mode="SYNC" owners="1"/> + <distributed-cache name="authenticationSessions" mode="SYNC" owners="1"/> + <distributed-cache name="offlineSessions" mode="SYNC" owners="1"/> + <distributed-cache name="loginFailures" mode="SYNC" owners="1"/> + <local-cache name="authorization"> + <eviction max-entries="10000" strategy="LRU"/> + </local-cache> + <replicated-cache name="work" mode="SYNC"/> + <local-cache name="keys"> + <eviction max-entries="1000" strategy="LRU"/> + <expiration max-idle="3600000"/> + </local-cache> + <distributed-cache name="actionTokens" mode="SYNC" owners="2"> + <eviction max-entries="-1" strategy="NONE"/> + <expiration max-idle="-1" interval="300000"/> + </distributed-cache> + </cache-container> + <cache-container name="server" aliases="singleton cluster" default-cache="default" module="org.wildfly.clustering.server"> + <transport lock-timeout="60000"/> + <replicated-cache name="default" mode="SYNC"> + <transaction mode="BATCH"/> + </replicated-cache> + </cache-container> + <cache-container name="web" default-cache="dist" module="org.wildfly.clustering.web.infinispan"> + <transport lock-timeout="60000"/> + <distributed-cache name="dist" mode="ASYNC" l1-lifespan="0" owners="2"> + <locking isolation="REPEATABLE_READ"/> + <transaction mode="BATCH"/> + <file-store/> + </distributed-cache> + </cache-container> + <cache-container name="ejb" aliases="sfsb" default-cache="dist" module="org.wildfly.clustering.ejb.infinispan"> + <transport lock-timeout="60000"/> + <distributed-cache name="dist" mode="ASYNC" l1-lifespan="0" owners="2"> + <locking isolation="REPEATABLE_READ"/> + <transaction mode="BATCH"/> + <file-store/> + </distributed-cache> + </cache-container> + <cache-container name="hibernate" default-cache="local-query" module="org.hibernate.infinispan"> + <transport lock-timeout="60000"/> + <local-cache name="local-query"> + <eviction strategy="LRU" max-entries="10000"/> + <expiration max-idle="100000"/> + </local-cache> + <invalidation-cache name="entity" mode="SYNC"> + <transaction mode="NON_XA"/> + <eviction strategy="LRU" max-entries="10000"/> + <expiration max-idle="100000"/> + </invalidation-cache> + <replicated-cache name="timestamps" mode="ASYNC"/> + </cache-container> + </subsystem> + <subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/> + <subsystem xmlns="urn:jboss:domain:jca:4.0"> + <archive-validation enabled="true" fail-on-error="true" fail-on-warn="false"/> + <bean-validation enabled="true"/> + <default-workmanager> + <short-running-threads> + <core-threads count="50"/> + <queue-length count="50"/> + <max-threads count="50"/> + <keepalive-time time="10" unit="seconds"/> + </short-running-threads> + <long-running-threads> + <core-threads count="50"/> + <queue-length count="50"/> + <max-threads count="50"/> + <keepalive-time time="10" unit="seconds"/> + </long-running-threads> + </default-workmanager> + <cached-connection-manager/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:jdr:1.0"/> + <subsystem xmlns="urn:jboss:domain:jgroups:4.0"> + <channels default="ee"> + <channel name="ee" stack="tcp"/> + </channels> + <stacks default="tcp"> + <stack name="udp"> + <transport type="UDP" socket-binding="jgroups-udp"/> + <protocol type="PING"/> + <protocol type="MERGE3"/> + <protocol type="FD_SOCK" socket-binding="jgroups-udp-fd"/> + <protocol type="FD_ALL"/> + <protocol type="VERIFY_SUSPECT"/> + <protocol type="pbcast.NAKACK2"/> + <protocol type="UNICAST3"/> + <protocol type="pbcast.STABLE"/> + <protocol type="pbcast.GMS"/> + <protocol type="UFC"/> + <protocol type="MFC"/> + <protocol type="FRAG2"/> + </stack> + <stack name="tcp"> + <transport type="TCP" socket-binding="jgroups-tcp"/> + <protocol type="TCPPING"> + <property name="initial_hosts">{{groups['keycloak']|join('[7600],')}}[7600] + </property> + <property name="port_range">10</property> + <property name="timeout">3000</property> + <property name="num_initial_members">2</property> + </protocol> +<!-- <protocol type="MPING" socket-binding="jgroups-mping"/> --> + <protocol type="MERGE3"/> + <protocol type="FD_SOCK" socket-binding="jgroups-tcp-fd"/> + <protocol type="FD"/> + <protocol type="VERIFY_SUSPECT"/> + <protocol type="pbcast.NAKACK2"/> + <protocol type="UNICAST3"/> + <protocol type="pbcast.STABLE"/> + <protocol type="pbcast.GMS"/> + <protocol type="MFC"/> + <protocol type="FRAG2"/> + </stack> + </stacks> + </subsystem> + <subsystem xmlns="urn:jboss:domain:jmx:1.3"> + <expose-resolved-model/> + <expose-expression-model/> + <remoting-connector/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:jpa:1.1"> + <jpa default-datasource="" default-extended-persistence-inheritance="DEEP"/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:jsf:1.0"/> + <subsystem xmlns="urn:jboss:domain:mail:2.0"> + <mail-session name="default" jndi-name="java:jboss/mail/Default"> + <smtp-server outbound-socket-binding-ref="mail-smtp"/> + </mail-session> + </subsystem> + <subsystem xmlns="urn:jboss:domain:modcluster:2.0"> + <mod-cluster-config advertise-socket="modcluster" connector="ajp"> + <dynamic-load-provider> + <load-metric type="cpu"/> + </dynamic-load-provider> + </mod-cluster-config> + </subsystem> + <subsystem xmlns="urn:jboss:domain:naming:2.0"> + <remote-naming/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:remoting:3.0"> + <endpoint/> + <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:request-controller:1.0"/> + <subsystem xmlns="urn:jboss:domain:security-manager:1.0"> + <deployment-permissions> + <maximum-set> + <permission class="java.security.AllPermission"/> + </maximum-set> + </deployment-permissions> + </subsystem> + <subsystem xmlns="urn:jboss:domain:security:1.2"> + <security-domains> + <security-domain name="other" cache-type="default"> + <authentication> + <login-module code="Remoting" flag="optional"> + <module-option name="password-stacking" value="useFirstPass"/> + </login-module> + <login-module code="RealmDirect" flag="required"> + <module-option name="password-stacking" value="useFirstPass"/> + </login-module> + </authentication> + </security-domain> + <security-domain name="jboss-web-policy" cache-type="default"> + <authorization> + <policy-module code="Delegating" flag="required"/> + </authorization> + </security-domain> + <security-domain name="jboss-ejb-policy" cache-type="default"> + <authorization> + <policy-module code="Delegating" flag="required"/> + </authorization> + </security-domain> + <security-domain name="jaspitest" cache-type="default"> + <authentication-jaspi> + <login-module-stack name="dummy"> + <login-module code="Dummy" flag="optional"/> + </login-module-stack> + <auth-module code="Dummy"/> + </authentication-jaspi> + </security-domain> + </security-domains> + </subsystem> + <subsystem xmlns="urn:jboss:domain:transactions:3.0"> + <core-environment> + <process-id> + <uuid/> + </process-id> + </core-environment> + <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:undertow:3.0"> + <buffer-cache name="default"/> + <server name="default-server"> + <ajp-listener name="ajp" socket-binding="ajp"/> + <http-listener name="default" socket-binding="http" redirect-socket="https" proxy-address-forwarding="true"/> + <host name="default-host" alias="localhost"> + <location name="/" handler="welcome-content"/> + <filter-ref name="server-header"/> + <filter-ref name="x-powered-by-header"/> + </host> + </server> + <servlet-container name="default"> + <jsp-config/> + <websockets/> + </servlet-container> + <handlers> + <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/> + </handlers> + <filters> + <response-header name="server-header" header-name="Server" header-value="WildFly/10"/> + <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/> + </filters> + </subsystem> + <subsystem xmlns="urn:jboss:domain:keycloak-server:1.1"> + <web-context>auth</web-context> + <providers> + <provider>classpath:${jboss.home.dir}/providers/*</provider> + </providers> + <master-realm-name>master</master-realm-name> + <scheduled-task-interval>900</scheduled-task-interval> + <theme> + <staticMaxAge>2592000</staticMaxAge> + <cacheThemes>true</cacheThemes> + <cacheTemplates>true</cacheTemplates> + <dir>${jboss.home.dir}/themes</dir> + </theme> + <spi name="eventsStore"> + <provider name="jpa" enabled="true"> + <properties> + <property name="exclude-events" value="["REFRESH_TOKEN"]"/> + </properties> + </provider> + </spi> + <spi name="userCache"> + <provider name="default" enabled="true"/> + </spi> + <spi name="userSessionPersister"> + <default-provider>jpa</default-provider> + </spi> + <spi name="timer"> + <default-provider>basic</default-provider> + </spi> + <spi name="connectionsHttpClient"> + <provider name="default" enabled="true"/> + </spi> + <spi name="connectionsJpa"> + <provider name="default" enabled="true"> + <properties> + <property name="dataSource" value="java:jboss/datasources/KeycloakDS"/> + <property name="initializeEmpty" value="true"/> + <property name="migrationStrategy" value="update"/> + <property name="migrationExport" value="${jboss.home.dir}/keycloak-database-update.sql"/> + </properties> + </provider> + </spi> + <spi name="realmCache"> + <provider name="default" enabled="true"/> + </spi> + <spi name="connectionsInfinispan"> + <default-provider>default</default-provider> + <provider name="default" enabled="true"> + <properties> + <property name="cacheContainer" value="java:comp/env/infinispan/Keycloak"/> + </properties> + </provider> + </spi> + <spi name="jta-lookup"> + <default-provider>${keycloak.jta.lookup.provider:jboss}</default-provider> + <provider name="jboss" enabled="true"/> + </spi> + <spi name="publicKeyStorage"> + <provider name="infinispan" enabled="true"> + <properties> + <property name="minTimeBetweenRequests" value="10"/> + </properties> + </provider> + </spi> + </subsystem> + </profile> + <interfaces> + <interface name="management"> + <inet-address value="${jboss.bind.address.management:127.0.0.1}"/> + </interface> + <interface name="public"> + <inet-address value="${jboss.bind.address:127.0.0.1}"/> + </interface> + <interface name="private"> + <inet-address value="${jboss.bind.address.private:127.0.0.1}"/> + </interface> + </interfaces> + <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> + <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/> + <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/> + <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/> + <socket-binding name="http" port="${jboss.http.port:8080}"/> + <socket-binding name="https" port="${jboss.https.port:8443}"/> + <socket-binding name="jgroups-mping" interface="private" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/> + <socket-binding name="jgroups-tcp" interface="private" port="7600"/> + <socket-binding name="jgroups-tcp-fd" interface="private" port="57600"/> + <socket-binding name="jgroups-udp" interface="private" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/> + <socket-binding name="jgroups-udp-fd" interface="private" port="54200"/> + <socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/> + <socket-binding name="txn-recovery-environment" port="4712"/> + <socket-binding name="txn-status-manager" port="4713"/> + <outbound-socket-binding name="mail-smtp"> + <remote-destination host="localhost" port="25"/> + </outbound-socket-binding> + </socket-binding-group> +</server> diff --git a/ansible/roles/sunbird-auth-deploy/templates/standalone.xml b/ansible/roles/sunbird-auth-deploy/templates/standalone.xml new file mode 100644 index 0000000000000000000000000000000000000000..c1959c7f25e3e99771d14fd8f2ed27fd8ff65626 --- /dev/null +++ b/ansible/roles/sunbird-auth-deploy/templates/standalone.xml @@ -0,0 +1,471 @@ +<?xml version='1.0' encoding='UTF-8'?> + +<server xmlns="urn:jboss:domain:4.0"> + <extensions> + <extension module="org.jboss.as.clustering.infinispan"/> + <extension module="org.jboss.as.connector"/> + <extension module="org.jboss.as.deployment-scanner"/> + <extension module="org.jboss.as.ee"/> + <extension module="org.jboss.as.ejb3"/> + <extension module="org.jboss.as.jaxrs"/> + <extension module="org.jboss.as.jdr"/> + <extension module="org.jboss.as.jmx"/> + <extension module="org.jboss.as.jpa"/> + <extension module="org.jboss.as.jsf"/> + <extension module="org.jboss.as.logging"/> + <extension module="org.jboss.as.mail"/> + <extension module="org.jboss.as.naming"/> + <extension module="org.jboss.as.remoting"/> + <extension module="org.jboss.as.security"/> + <extension module="org.jboss.as.transactions"/> + <extension module="org.keycloak.keycloak-server-subsystem"/> + <extension module="org.wildfly.extension.bean-validation"/> + <extension module="org.wildfly.extension.io"/> + <extension module="org.wildfly.extension.request-controller"/> + <extension module="org.wildfly.extension.security.manager"/> + <extension module="org.wildfly.extension.undertow"/> + </extensions> + <management> + <security-realms> + <security-realm name="ManagementRealm"> + <authentication> + <local default-user="$local" skip-group-loading="true"/> + <properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/> + </authentication> + <authorization map-groups-to-roles="false"> + <properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/> + </authorization> + </security-realm> + <security-realm name="ApplicationRealm"> + <authentication> + <local default-user="$local" allowed-users="*" skip-group-loading="true"/> + <properties path="application-users.properties" relative-to="jboss.server.config.dir"/> + </authentication> + <authorization> + <properties path="application-roles.properties" relative-to="jboss.server.config.dir"/> + </authorization> + </security-realm> + </security-realms> + <audit-log> + <formatters> + <json-formatter name="json-formatter"/> + </formatters> + <handlers> + <file-handler name="file" formatter="json-formatter" relative-to="jboss.server.data.dir" path="audit-log.log"/> + </handlers> + <logger log-boot="true" log-read-only="false" enabled="false"> + <handlers> + <handler name="file"/> + </handlers> + </logger> + </audit-log> + <management-interfaces> + <http-interface security-realm="ManagementRealm" http-upgrade-enabled="true"> + <socket-binding http="management-http"/> + </http-interface> + </management-interfaces> + <access-control provider="simple"> + <role-mapping> + <role name="SuperUser"> + <include> + <user name="$local"/> + </include> + </role> + </role-mapping> + </access-control> + </management> + <profile> + <subsystem xmlns="urn:jboss:domain:logging:3.0"> + <console-handler name="CONSOLE"> + <level name="INFO"/> + <formatter> + <named-formatter name="COLOR-PATTERN"/> + </formatter> + </console-handler> + <periodic-rotating-file-handler name="FILE" autoflush="true"> + <formatter> + <named-formatter name="PATTERN"/> + </formatter> + <file relative-to="jboss.server.log.dir" path="server.log"/> + <suffix value=".yyyy-MM-dd"/> + <append value="true"/> + </periodic-rotating-file-handler> + <logger category="com.arjuna"> + <level name="WARN"/> + </logger> + <logger category="org.jboss.as.config"> + <level name="DEBUG"/> + </logger> + <logger category="sun.rmi"> + <level name="WARN"/> + </logger> + <root-logger> + <level name="INFO"/> + <handlers> + <handler name="CONSOLE"/> + <handler name="FILE"/> + </handlers> + </root-logger> + <formatter name="PATTERN"> + <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/> + </formatter> + <formatter name="COLOR-PATTERN"> + <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/> + </formatter> + </subsystem> + <subsystem xmlns="urn:jboss:domain:bean-validation:1.0"/> + <subsystem xmlns="urn:jboss:domain:datasources:4.0"> + <datasources> + <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true"> + <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url> + <driver>h2</driver> + <security> + <user-name>sa</user-name> + <password>sa</password> + </security> + </datasource> + <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true"> + <connection-url>jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE</connection-url> + <driver>h2</driver> + <security> + <user-name>sa</user-name> + <password>sa</password> + </security> + </datasource> + <drivers> + <driver name="h2" module="com.h2database.h2"> + <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> + </driver> + </drivers> + </datasources> + </subsystem> + <subsystem xmlns="urn:jboss:domain:deployment-scanner:2.0"> + <deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" runtime-failure-causes-rollback="${jboss.deployment.scanner.rollback.on.failure:false}"/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:ee:4.0"> + <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement> + <concurrent> + <context-services> + <context-service name="default" jndi-name="java:jboss/ee/concurrency/context/default" use-transaction-setup-provider="true"/> + </context-services> + <managed-thread-factories> + <managed-thread-factory name="default" jndi-name="java:jboss/ee/concurrency/factory/default" context-service="default"/> + </managed-thread-factories> + <managed-executor-services> + <managed-executor-service name="default" jndi-name="java:jboss/ee/concurrency/executor/default" context-service="default" hung-task-threshold="60000" keepalive-time="5000"/> + </managed-executor-services> + <managed-scheduled-executor-services> + <managed-scheduled-executor-service name="default" jndi-name="java:jboss/ee/concurrency/scheduler/default" context-service="default" hung-task-threshold="60000" keepalive-time="3000"/> + </managed-scheduled-executor-services> + </concurrent> + <default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:ejb3:4.0"> + <session-bean> + <stateless> + <bean-instance-pool-ref pool-name="slsb-strict-max-pool"/> + </stateless> + <stateful default-access-timeout="5000" cache-ref="simple" passivation-disabled-cache-ref="simple"/> + <singleton default-access-timeout="5000"/> + </session-bean> + <pools> + <bean-instance-pools> + <!-- Automatically configure pools. Alternatively, max-pool-size can be set to a specific value --> + <strict-max-pool name="slsb-strict-max-pool" derive-size="from-worker-pools" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/> + <strict-max-pool name="mdb-strict-max-pool" derive-size="from-cpu-count" instance-acquisition-timeout="5" instance-acquisition-timeout-unit="MINUTES"/> + </bean-instance-pools> + </pools> + <caches> + <cache name="simple"/> + <cache name="distributable" passivation-store-ref="infinispan" aliases="passivating clustered"/> + </caches> + <passivation-stores> + <passivation-store name="infinispan" cache-container="ejb" max-size="10000"/> + </passivation-stores> + <async thread-pool-name="default"/> + <timer-service thread-pool-name="default" default-data-store="default-file-store"> + <data-stores> + <file-data-store name="default-file-store" path="timer-service-data" relative-to="jboss.server.data.dir"/> + </data-stores> + </timer-service> + <remote connector-ref="http-remoting-connector" thread-pool-name="default"/> + <thread-pools> + <thread-pool name="default"> + <max-threads count="10"/> + <keepalive-time time="100" unit="milliseconds"/> + </thread-pool> + </thread-pools> + <default-security-domain value="other"/> + <default-missing-method-permissions-deny-access value="true"/> + <log-system-exceptions value="true"/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:io:1.1"> + <worker name="default"/> + <buffer-pool name="default"/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:infinispan:4.0"> + <cache-container name="keycloak" jndi-name="infinispan/Keycloak"> + <local-cache name="realms"> + <eviction max-entries="10000" strategy="LRU"/> + </local-cache> + <local-cache name="users"> + <eviction max-entries="10000" strategy="LRU"/> + </local-cache> + <local-cache name="sessions"/> + <local-cache name="authenticationSessions"/> + <local-cache name="offlineSessions"/> + <local-cache name="loginFailures"/> + <local-cache name="work"/> + <local-cache name="authorization"> + <eviction max-entries="10000" strategy="LRU"/> + </local-cache> + <local-cache name="keys"> + <eviction max-entries="1000" strategy="LRU"/> + <expiration max-idle="3600000"/> + </local-cache> + <local-cache name="actionTokens"> + <eviction max-entries="-1" strategy="NONE"/> + <expiration max-idle="-1" interval="300000"/> + </local-cache> + </cache-container> + <cache-container name="server" default-cache="default" module="org.wildfly.clustering.server"> + <local-cache name="default"> + <transaction mode="BATCH"/> + </local-cache> + </cache-container> + <cache-container name="web" default-cache="passivation" module="org.wildfly.clustering.web.infinispan"> + <local-cache name="passivation"> + <locking isolation="REPEATABLE_READ"/> + <transaction mode="BATCH"/> + <file-store passivation="true" purge="false"/> + </local-cache> + <local-cache name="persistent"> + <locking isolation="REPEATABLE_READ"/> + <transaction mode="BATCH"/> + <file-store passivation="false" purge="false"/> + </local-cache> + </cache-container> + <cache-container name="ejb" aliases="sfsb" default-cache="passivation" module="org.wildfly.clustering.ejb.infinispan"> + <local-cache name="passivation"> + <locking isolation="REPEATABLE_READ"/> + <transaction mode="BATCH"/> + <file-store passivation="true" purge="false"/> + </local-cache> + <local-cache name="persistent"> + <locking isolation="REPEATABLE_READ"/> + <transaction mode="BATCH"/> + <file-store passivation="false" purge="false"/> + </local-cache> + </cache-container> + <cache-container name="hibernate" default-cache="local-query" module="org.hibernate.infinispan"> + <local-cache name="entity"> + <transaction mode="NON_XA"/> + <eviction strategy="LRU" max-entries="10000"/> + <expiration max-idle="100000"/> + </local-cache> + <local-cache name="local-query"> + <eviction strategy="LRU" max-entries="10000"/> + <expiration max-idle="100000"/> + </local-cache> + <local-cache name="timestamps"/> + </cache-container> + </subsystem> + <subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/> + <subsystem xmlns="urn:jboss:domain:jca:4.0"> + <archive-validation enabled="true" fail-on-error="true" fail-on-warn="false"/> + <bean-validation enabled="true"/> + <default-workmanager> + <short-running-threads> + <core-threads count="50"/> + <queue-length count="50"/> + <max-threads count="50"/> + <keepalive-time time="10" unit="seconds"/> + </short-running-threads> + <long-running-threads> + <core-threads count="50"/> + <queue-length count="50"/> + <max-threads count="50"/> + <keepalive-time time="10" unit="seconds"/> + </long-running-threads> + </default-workmanager> + <cached-connection-manager/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:jdr:1.0"/> + <subsystem xmlns="urn:jboss:domain:jmx:1.3"> + <expose-resolved-model/> + <expose-expression-model/> + <remoting-connector/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:jpa:1.1"> + <jpa default-datasource="" default-extended-persistence-inheritance="DEEP"/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:jsf:1.0"/> + <subsystem xmlns="urn:jboss:domain:mail:2.0"> + <mail-session name="default" jndi-name="java:jboss/mail/Default"> + <smtp-server outbound-socket-binding-ref="mail-smtp"/> + </mail-session> + </subsystem> + <subsystem xmlns="urn:jboss:domain:naming:2.0"> + <remote-naming/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:remoting:3.0"> + <endpoint/> + <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:request-controller:1.0"/> + <subsystem xmlns="urn:jboss:domain:security-manager:1.0"> + <deployment-permissions> + <maximum-set> + <permission class="java.security.AllPermission"/> + </maximum-set> + </deployment-permissions> + </subsystem> + <subsystem xmlns="urn:jboss:domain:security:1.2"> + <security-domains> + <security-domain name="other" cache-type="default"> + <authentication> + <login-module code="Remoting" flag="optional"> + <module-option name="password-stacking" value="useFirstPass"/> + </login-module> + <login-module code="RealmDirect" flag="required"> + <module-option name="password-stacking" value="useFirstPass"/> + </login-module> + </authentication> + </security-domain> + <security-domain name="jboss-web-policy" cache-type="default"> + <authorization> + <policy-module code="Delegating" flag="required"/> + </authorization> + </security-domain> + <security-domain name="jboss-ejb-policy" cache-type="default"> + <authorization> + <policy-module code="Delegating" flag="required"/> + </authorization> + </security-domain> + <security-domain name="jaspitest" cache-type="default"> + <authentication-jaspi> + <login-module-stack name="dummy"> + <login-module code="Dummy" flag="optional"/> + </login-module-stack> + <auth-module code="Dummy"/> + </authentication-jaspi> + </security-domain> + </security-domains> + </subsystem> + <subsystem xmlns="urn:jboss:domain:transactions:3.0"> + <core-environment> + <process-id> + <uuid/> + </process-id> + </core-environment> + <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/> + </subsystem> + <subsystem xmlns="urn:jboss:domain:undertow:3.0"> + <buffer-cache name="default"/> + <server name="default-server"> + <http-listener name="default" socket-binding="http" redirect-socket="https"/> + <host name="default-host" alias="localhost"> + <location name="/" handler="welcome-content"/> + <filter-ref name="server-header"/> + <filter-ref name="x-powered-by-header"/> + </host> + </server> + <servlet-container name="default"> + <jsp-config/> + <websockets/> + </servlet-container> + <handlers> + <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/> + </handlers> + <filters> + <response-header name="server-header" header-name="Server" header-value="WildFly/10"/> + <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/> + </filters> + </subsystem> + <subsystem xmlns="urn:jboss:domain:keycloak-server:1.1"> + <web-context>auth</web-context> + <providers> + <provider>classpath:${jboss.home.dir}/providers/*</provider> + </providers> + <master-realm-name>master</master-realm-name> + <scheduled-task-interval>900</scheduled-task-interval> + <theme> + <staticMaxAge>2592000</staticMaxAge> + <cacheThemes>true</cacheThemes> + <cacheTemplates>true</cacheTemplates> + <dir>${jboss.home.dir}/themes</dir> + </theme> + <spi name="eventsStore"> + <provider name="jpa" enabled="true"> + <properties> + <property name="exclude-events" value="["REFRESH_TOKEN"]"/> + </properties> + </provider> + </spi> + <spi name="userCache"> + <provider name="default" enabled="true"/> + </spi> + <spi name="userSessionPersister"> + <default-provider>jpa</default-provider> + </spi> + <spi name="timer"> + <default-provider>basic</default-provider> + </spi> + <spi name="connectionsHttpClient"> + <provider name="default" enabled="true"/> + </spi> + <spi name="connectionsJpa"> + <provider name="default" enabled="true"> + <properties> + <property name="dataSource" value="java:jboss/datasources/KeycloakDS"/> + <property name="initializeEmpty" value="true"/> + <property name="migrationStrategy" value="update"/> + <property name="migrationExport" value="${jboss.home.dir}/keycloak-database-update.sql"/> + </properties> + </provider> + </spi> + <spi name="realmCache"> + <provider name="default" enabled="true"/> + </spi> + <spi name="connectionsInfinispan"> + <default-provider>default</default-provider> + <provider name="default" enabled="true"> + <properties> + <property name="cacheContainer" value="java:comp/env/infinispan/Keycloak"/> + </properties> + </provider> + </spi> + <spi name="jta-lookup"> + <default-provider>${keycloak.jta.lookup.provider:jboss}</default-provider> + <provider name="jboss" enabled="true"/> + </spi> + <spi name="publicKeyStorage"> + <provider name="infinispan" enabled="true"> + <properties> + <property name="minTimeBetweenRequests" value="10"/> + </properties> + </provider> + </spi> + </subsystem> + </profile> + <interfaces> + <interface name="management"> + <inet-address value="${jboss.bind.address.management:127.0.0.1}"/> + </interface> + <interface name="public"> + <inet-address value="${jboss.bind.address:127.0.0.1}"/> + </interface> + </interfaces> + <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> + <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/> + <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/> + <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/> + <socket-binding name="http" port="${jboss.http.port:8080}"/> + <socket-binding name="https" port="${jboss.https.port:8443}"/> + <socket-binding name="txn-recovery-environment" port="4712"/> + <socket-binding name="txn-status-manager" port="4713"/> + <outbound-socket-binding name="mail-smtp"> + <remote-destination host="localhost" port="25"/> + </outbound-socket-binding> + </socket-binding-group> +</server> diff --git a/ansible/roles/sunbird-auth-provision/defaults/main.yml b/ansible/roles/sunbird-auth-provision/defaults/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..f43f6e1b42203f81ca9edbb30876ba4d76ef2c50 --- /dev/null +++ b/ansible/roles/sunbird-auth-provision/defaults/main.yml @@ -0,0 +1,10 @@ +--- +sunbird_auth_version: 1.0v +keycloak_pkg_src: https://downloads.jboss.org/keycloak/3.2.0.Final/keycloak-3.2.0.Final.tar.gz +postgresql_driver_src: https://jdbc.postgresql.org/download/postgresql-9.4.1212.jar +keycloak_pkg_file: "keycloak-3.2.0.Final.tar.gz" +keycloak_sms_provider_build: "keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar" +wildfly_group: keycloak +wildfly_user: keycloak +wildfly_dir: /opt/keycloak +keycloak_home: /opt/keycloak diff --git a/ansible/roles/sunbird-auth-provision/tasks/install-keycloak.yml b/ansible/roles/sunbird-auth-provision/tasks/install-keycloak.yml new file mode 100644 index 0000000000000000000000000000000000000000..9dd5e22540816ca41c7a6251fb5f00d6e260d147 --- /dev/null +++ b/ansible/roles/sunbird-auth-provision/tasks/install-keycloak.yml @@ -0,0 +1,51 @@ +- stat: + path: /etc/init.d/keycloak + register: keycloak_service + +- name: status service + become: yes + command: /etc/init.d/keycloak status + register: keycloak + poll: 5 + async: 10 + when: keycloak_service.stat.islnk is defined + +- name: stop service + become: yes + command: /etc/init.d/keycloak stop && Pkill keycloak + when: "keycloak.stdout.find('running') != -1" + poll: 5 + async: 10 + ignore_errors: yes + when: keycloak_service.stat.islnk is defined + +- name: remove sunbird auth package + become: yes + file: path="{{keycloak_home}}" state=absent + ignore_errors: yes + +- name: change build script permissions + become: yes + file: path=/opt owner={{wildfly_user}} group={{wildfly_group}} mode=0755 recurse=yes + +- name: Paste sunbird auth package on server + copy: src="sunbird_auth_{{sunbird_auth_version}}.zip" dest="/opt/" force=no owner={{wildfly_user}} group={{wildfly_group}} + +- name: extarct the folder + unarchive: src="/opt/sunbird_auth_{{sunbird_auth_version}}.zip" dest=/opt/ copy=no owner={{wildfly_user}} group={{wildfly_group}} + +- name: move the folder name + command: mv sunbird_auth_{{sunbird_auth_version}} keycloak + args: + chdir: /opt + +- name: remove the sunbird_auth_{{sunbird_auth_version}} + become: yes + file: path=/opt/sunbird_auth_{{sunbird_auth_version}} state=absent + +- name: start service + become: yes + command: /etc/init.d/keycloak start + poll: 5 + async: 5 + when: keycloak_service.stat.islnk is defined diff --git a/ansible/roles/sunbird-auth-provision/tasks/main.yml b/ansible/roles/sunbird-auth-provision/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..be0290407ad13585913c5fa3be948f12b38825d7 --- /dev/null +++ b/ansible/roles/sunbird-auth-provision/tasks/main.yml @@ -0,0 +1,3 @@ +- include: prerequisite.yml + +- include: install-keycloak.yml diff --git a/ansible/roles/sunbird-auth-provision/tasks/prerequisite.yml b/ansible/roles/sunbird-auth-provision/tasks/prerequisite.yml new file mode 100644 index 0000000000000000000000000000000000000000..235cd386f124704fb98c5dca0157535db04b7a90 --- /dev/null +++ b/ansible/roles/sunbird-auth-provision/tasks/prerequisite.yml @@ -0,0 +1,11 @@ +--- +- name: Add group + group: name="{{ wildfly_group }}" state=present + become: true + +- name: Create user + user: name="{{ wildfly_user }}" group="{{ wildfly_group }}" shell=/bin/bash createhome=yes update_password=always + become: true + +- name: Copy service file to init.d + template: src=roles/sunbird-auth-provision/templates/keycloak-service.j2 dest=/etc/init.d/keycloak mode=0755 diff --git a/ansible/roles/sunbird-auth-provision/templates/keycloak-service.j2 b/ansible/roles/sunbird-auth-provision/templates/keycloak-service.j2 new file mode 100644 index 0000000000000000000000000000000000000000..f3549f89b2f57ff6b58e0311702e9bedff0a9793 --- /dev/null +++ b/ansible/roles/sunbird-auth-provision/templates/keycloak-service.j2 @@ -0,0 +1,117 @@ +#!/bin/bash +keycloakuser=keycloak +keycloakpath=/opt/keycloak/bin + +# Normal output log +LOGOUT=/var/log/keycloak.out.log +# Error output log +LOGERR=/var/log/keycloak.err.log + +## script start here + + +function echo_failure() { echo -en "\n[FAILED]"; } +function echo_success() { echo -en "\n[OK]"; } +[ -f /etc/rc.d/init.d/functions ] && source /etc/rc.d/init.d/functions + +FINDPID="pgrep -u $keycloakuser -n -f standalone.sh"; +function _is_running() { + $FINDPID 1>/dev/null + return $? +} + +function stop_keycloak() { + _is_running + if [ $? -ne 0 ]; then + echo -n "$0 is not running, cannot stop." + echo_failure + echo + return 1 + else + echo -n "Stopping $0..." + + $FINDPID | xargs ps h -o pid --ppid | xargs kill + sleep 1 + _is_running + if [ $? -eq 0 ]; then + echo_failure + echo + return 1 + else + echo_success + echo + return 0 + fi + fi + +} + +function status() { + _is_running + if [ $? -eq 0 ]; then + echo -n "$0 is running." + echo_success + echo + return 0 + else + echo -n "$0 does not run." + # echo_failure + # echo + # return 1 + fi +} + +function start_keycloak() { + _is_running + if [ $? -eq 0 ]; then + echo -n "$0 already running." + echo_failure + echo + return 1 + else + echo -n "Starting $0..." + # Make sure log files exist and are writable by $PDIUSER first + touch $LOGOUT $LOGERR + chown $keycloakuser:$keycloakuser $LOGOUT $LOGERR + su - $keycloakuser -c "cd $keycloakpath && (nohup sh ./standalone.sh -b 0.0.0.0 -bprivate=$(hostname -i) --server-config standalone-ha.xml 0<&- 1>>$LOGOUT 2>>$LOGERR &)" + sleep 1 + _is_running + if [ $? -eq 0 ]; then + echo_success + echo + return 0 + else + echo_failure + echo + return 1 + fi + fi +} + +case "$1" in + start) + start_keycloak + exit $? + ;; + stop) + stop_keycloak + exit $? + ;; + reload|force-reload|restart|force-restart) + stop_keycloak + if [ $? -eq 0 ]; then + start_keycloak + exit $? + else + exit 1 + fi + ;; + status) + status + exit $? + ;; + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 2 +esac +exit 0 \ No newline at end of file diff --git a/ansible/sunbird-auth-deploy.yml b/ansible/sunbird-auth-deploy.yml new file mode 100644 index 0000000000000000000000000000000000000000..67f9eff57b886cf827c3b5a0850d19b26788ac80 --- /dev/null +++ b/ansible/sunbird-auth-deploy.yml @@ -0,0 +1,8 @@ +--- +- hosts: all + become: true + vars_files: + - ['{{inventory_dir}}/secrets.yml', 'secrets/{{env}}.yml'] + + roles: + - sunbird-auth-deploy diff --git a/ansible/sunbird-auth-provision.yml b/ansible/sunbird-auth-provision.yml new file mode 100644 index 0000000000000000000000000000000000000000..3142f079d5779c354dd66fbcf0056917b1c7030a --- /dev/null +++ b/ansible/sunbird-auth-provision.yml @@ -0,0 +1,9 @@ +--- +- hosts: all + become: true + vars_files: + - ['{{inventory_dir}}/secrets.yml', 'secrets/{{env}}.yml'] + + roles: + - sunbird-auth-provision +