Commit 67867f9a by Petrisor Munteanu

Initial commit with old app

parent 2f0d59c6
vendor
uploads
.gitignore.swp
RewriteEngine On
RewriteBase /public/
RewriteRule ^img/(.*)$ /public/img/$1 [L]
RewriteRule ^css/(.*)$ /public/css/$1 [L]
RewriteRule ^js/(.*)$ /public/js/$1 [L]
RewriteRule ^fonts/(.*)$ /public/fonts/$1 [L]
RewriteRule ^.*$ /public/index.php [NC,L]
Redirect "/oferta-publicitate.html" "/public/oferta-publicitate.html"
Redirect "/termeni-si-conditii.html" "/public/termeni-si-conditii.html"
\ No newline at end of file
{
"name": "slim/slim-skeleton",
"description": "A Slim Framework skeleton application for rapid development",
"keywords": ["microframework","rest","router", "psr7"],
"homepage": "http://github.com/slimphp/Slim-Skeleton",
"license": "MIT",
"authors": [
{
"name": "Josh Lockhart",
"email": "info@joshlockhart.com",
"homepage": "http://www.joshlockhart.com/"
}
],
"require": {
"php": ">=5.5.0",
"slim/slim": "^3.1",
"slim/php-view": "^2.0",
"monolog/monolog": "^1.17",
"slim/flash": "^0.4.0",
"aura/sql": "^3.0",
"aura/sqlquery": "^2.7",
"bryanjhv/slim-session": "~3.0",
"phpmailer/phpmailer": "^6.0"
}
}
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "8373f446c1c68569804a883dabd97105",
"content-hash": "06e9c5f6ed924d62aca09575b8b0bf2d",
"packages": [
{
"name": "aura/sql",
"version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/auraphp/Aura.Sql.git",
"reference": "2be02d5dfd9fdee6df199de1a19572aa490bb744"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/auraphp/Aura.Sql/zipball/2be02d5dfd9fdee6df199de1a19572aa490bb744",
"reference": "2be02d5dfd9fdee6df199de1a19572aa490bb744",
"shasum": ""
},
"require": {
"php": ">=5.6.0",
"psr/log": "^1.0"
},
"require-dev": {
"pds/skeleton": "~1.0",
"phpunit/phpunit": "~5.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Aura\\Sql\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Aura.Sql Contributors",
"homepage": "https://github.com/auraphp/Aura.Sql/contributors"
}
],
"description": "A PDO extension that provides lazy connections, array quoting, query profiling, value binding, and convenience methods for common fetch styles. Because it extends PDO, existing code that uses PDO can use this without any changes to the existing code.",
"homepage": "https://github.com/auraphp/Aura.Sql",
"keywords": [
"mysql",
"pdo",
"pgsql",
"postgres",
"postgresql",
"sql server",
"sqlite",
"sqlserver",
"sqlsrv"
],
"time": "2018-06-11 12:57:42"
},
{
"name": "aura/sqlquery",
"version": "2.7.1",
"source": {
"type": "git",
"url": "https://github.com/auraphp/Aura.SqlQuery.git",
"reference": "dd81b57aeb43628180a9c70a4df58d872024d7f2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/auraphp/Aura.SqlQuery/zipball/dd81b57aeb43628180a9c70a4df58d872024d7f2",
"reference": "dd81b57aeb43628180a9c70a4df58d872024d7f2",
"shasum": ""
},
"require": {
"php": ">=5.3.9"
},
"suggest": {
"aura/sql": "Provides an extension to the native PDO along with a profiler and connection locator. Use version 2.*."
},
"type": "library",
"extra": {
"aura": {
"type": "library"
}
},
"autoload": {
"psr-4": {
"Aura\\SqlQuery\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-2-Clause"
],
"authors": [
{
"name": "Aura.SqlQuery Contributors",
"homepage": "https://github.com/auraphp/Aura.SqlQuery/contributors"
}
],
"description": "Object-oriented query builders for MySQL, Postgres, SQLite, and SQLServer; can be used with any database connection library.",
"homepage": "https://github.com/auraphp/Aura.SqlQuery",
"keywords": [
"database",
"db",
"delete",
"dml",
"insert",
"mysql",
"pdo",
"pgsql",
"postgres",
"postgresql",
"query",
"select",
"sql",
"sql server",
"sqlite",
"sqlserver",
"update"
],
"time": "2016-10-03 20:34:56"
},
{
"name": "bryanjhv/slim-session",
"version": "3.6.1",
"source": {
"type": "git",
"url": "https://github.com/bryanjhv/slim-session.git",
"reference": "0205470a35c716823ededae04d84a7f27fba400a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/bryanjhv/slim-session/zipball/0205470a35c716823ededae04d84a7f27fba400a",
"reference": "0205470a35c716823ededae04d84a7f27fba400a",
"shasum": ""
},
"require": {
"php": ">=5.5",
"slim/slim": "^3.0"
},
"require-dev": {
"phpunit/phpunit": "^7.0"
},
"type": "library",
"autoload": {
"psr-4": {
"": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Bryan Horna",
"email": "bryanjhv@gmail.com",
"homepage": "https://bryanjhv.github.io",
"role": "developer"
}
],
"description": "Session middleware and helper for Slim framework 3.",
"homepage": "https://github.com/bryanjhv/slim-session",
"keywords": [
"helper",
"middleware",
"session",
"slim"
],
"time": "2018-07-22 23:41:31"
},
{
"name": "container-interop/container-interop",
"version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/container-interop/container-interop.git",
"reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e",
"reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e",
"shasum": ""
},
"type": "library",
"autoload": {
"psr-4": {
"Interop\\Container\\": "src/Interop/Container/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
"time": "2014-12-30 15:22:37"
},
{
"name": "monolog/monolog",
"version": "1.17.2",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
"reference": "bee7f0dc9c3e0b69a6039697533dca1e845c8c24"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/bee7f0dc9c3e0b69a6039697533dca1e845c8c24",
"reference": "bee7f0dc9c3e0b69a6039697533dca1e845c8c24",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"psr/log": "~1.0"
},
"provide": {
"psr/log-implementation": "1.0.0"
},
"require-dev": {
"aws/aws-sdk-php": "^2.4.9",
"doctrine/couchdb": "~1.0@dev",
"graylog2/gelf-php": "~1.0",
"jakub-onderka/php-parallel-lint": "0.9",
"php-console/php-console": "^3.1.3",
"phpunit/phpunit": "~4.5",
"phpunit/phpunit-mock-objects": "2.3.0",
"raven/raven": "^0.13",
"ruflin/elastica": ">=0.90 <3.0",
"swiftmailer/swiftmailer": "~5.3",
"videlalvaro/php-amqplib": "~2.4"
},
"suggest": {
"aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
"doctrine/couchdb": "Allow sending log messages to a CouchDB server",
"ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
"ext-mongo": "Allow sending log messages to a MongoDB server",
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
"php-console/php-console": "Allow sending log messages to Google Chrome",
"raven/raven": "Allow sending log messages to a Sentry server",
"rollbar/rollbar": "Allow sending log messages to Rollbar",
"ruflin/elastica": "Allow sending log messages to an Elastic Search server",
"videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.16.x-dev"
}
},
"autoload": {
"psr-4": {
"Monolog\\": "src/Monolog"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
}
],
"description": "Sends your logs to files, sockets, inboxes, databases and various web services",
"homepage": "http://github.com/Seldaek/monolog",
"keywords": [
"log",
"logging",
"psr-3"
],
"time": "2015-10-14 12:51:02"
},
{
"name": "nikic/fast-route",
"version": "v0.6.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/FastRoute.git",
"reference": "31fa86924556b80735f98b294a7ffdfb26789f22"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/FastRoute/zipball/31fa86924556b80735f98b294a7ffdfb26789f22",
"reference": "31fa86924556b80735f98b294a7ffdfb26789f22",
"shasum": ""
},
"require": {
"php": ">=5.4.0"
},
"type": "library",
"autoload": {
"psr-4": {
"FastRoute\\": "src/"
},
"files": [
"src/functions.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Nikita Popov",
"email": "nikic@php.net"
}
],
"description": "Fast request router for PHP",
"keywords": [
"router",
"routing"
],
"time": "2015-06-18 19:15:47"
},
{
"name": "phpmailer/phpmailer",
"version": "v6.0.5",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "cb3ea134d4d3729e7857737d5f320cce9caf4d32"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/cb3ea134d4d3729e7857737d5f320cce9caf4d32",
"reference": "cb3ea134d4d3729e7857737d5f320cce9caf4d32",
"shasum": ""
},
"require": {
"ext-ctype": "*",
"ext-filter": "*",
"php": ">=5.5.0"
},
"require-dev": {
"doctrine/annotations": "1.2.*",
"friendsofphp/php-cs-fixer": "^2.2",
"phpdocumentor/phpdocumentor": "2.*",
"phpunit/phpunit": "^4.8 || ^5.7",
"zendframework/zend-eventmanager": "3.0.*",
"zendframework/zend-i18n": "2.7.3",
"zendframework/zend-serializer": "2.7.*"
},
"suggest": {
"ext-mbstring": "Needed to send email in multibyte encoding charset",
"hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication",
"league/oauth2-google": "Needed for Google XOAUTH2 authentication",
"psr/log": "For optional PSR-3 debug logging",
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
},
"type": "library",
"autoload": {
"psr-4": {
"PHPMailer\\PHPMailer\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-2.1"
],
"authors": [
{
"name": "Jim Jagielski",
"email": "jimjag@gmail.com"
},
{
"name": "Marcus Bointon",
"email": "phpmailer@synchromedia.co.uk"
},
{
"name": "Andy Prevost",
"email": "codeworxtech@users.sourceforge.net"
},
{
"name": "Brent R. Matzelle"
}
],
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
"time": "2018-03-27 13:49:45"
},
{
"name": "pimple/pimple",
"version": "v3.0.2",
"source": {
"type": "git",
"url": "https://github.com/silexphp/Pimple.git",
"reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/silexphp/Pimple/zipball/a30f7d6e57565a2e1a316e1baf2a483f788b258a",
"reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0.x-dev"
}
},
"autoload": {
"psr-0": {
"Pimple": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Pimple, a simple Dependency Injection Container",
"homepage": "http://pimple.sensiolabs.org",
"keywords": [
"container",
"dependency injection"
],
"time": "2015-09-11 15:10:35"
},
{
"name": "psr/http-message",
"version": "1.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
"reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
"reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for HTTP messages",
"keywords": [
"http",
"http-message",
"psr",
"psr-7",
"request",
"response"
],
"time": "2015-05-04 20:22:00"
},
{
"name": "psr/log",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "fe0936ee26643249e916849d48e3a51d5f5e278b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b",
"reference": "fe0936ee26643249e916849d48e3a51d5f5e278b",
"shasum": ""
},
"type": "library",
"autoload": {
"psr-0": {
"Psr\\Log\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for logging libraries",
"keywords": [
"log",
"psr",
"psr-3"
],
"time": "2012-12-21 11:40:51"
},
{
"name": "slim/flash",
"version": "0.4.0",
"source": {
"type": "git",
"url": "https://github.com/slimphp/Slim-Flash.git",
"reference": "9aaff5fded3b54f4e519ec3d4ac74d3d1f2cbbbc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/slimphp/Slim-Flash/zipball/9aaff5fded3b54f4e519ec3d4ac74d3d1f2cbbbc",
"reference": "9aaff5fded3b54f4e519ec3d4ac74d3d1f2cbbbc",
"shasum": ""
},
"require": {
"php": ">=5.5.0"
},
"require-dev": {
"phpunit/phpunit": "^4.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Slim\\Flash\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Josh Lockhart",
"email": "hello@joshlockhart.com",
"homepage": "http://joshlockhart.com"
}
],
"description": "Slim Framework Flash message service provider",
"homepage": "http://slimframework.com",
"keywords": [
"flash",
"framework",
"message",
"provider",
"slim"
],
"time": "2017-10-22 10:35:05"
},
{
"name": "slim/php-view",
"version": "2.0.6",
"source": {
"type": "git",
"url": "https://github.com/slimphp/PHP-View.git",
"reference": "a4dcd7e64b56b0c1875a8cd48daf065e6066c7f9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/slimphp/PHP-View/zipball/a4dcd7e64b56b0c1875a8cd48daf065e6066c7f9",
"reference": "a4dcd7e64b56b0c1875a8cd48daf065e6066c7f9",
"shasum": ""
},
"require": {
"psr/http-message": "^1.0"
},
"require-dev": {
"phpunit/phpunit": "^4.0",
"slim/slim": "^3.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Slim\\Views\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Glenn Eggleton",
"email": "geggleto@gmail.com"
}
],
"description": "Render PHP view scripts into a PSR-7 Response object.",
"keywords": [
"framework",
"php",
"phtml",
"renderer",
"slim",
"template",
"view"
],
"time": "2015-12-08 13:06:39"
},
{
"name": "slim/slim",
"version": "3.1.0",
"source": {
"type": "git",
"url": "https://github.com/slimphp/Slim.git",
"reference": "03b44a4b41896ba42c78bbd5fa172cd79e650496"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/slimphp/Slim/zipball/03b44a4b41896ba42c78bbd5fa172cd79e650496",
"reference": "03b44a4b41896ba42c78bbd5fa172cd79e650496",
"shasum": ""
},
"require": {
"container-interop/container-interop": "^1.1",
"nikic/fast-route": "^0.6",
"php": ">=5.5.0",
"pimple/pimple": "^3.0",
"psr/http-message": "^1.0"
},
"require-dev": {
"phpunit/phpunit": "^4.0",
"squizlabs/php_codesniffer": "^2.5"
},
"type": "library",
"autoload": {
"psr-4": {
"Slim\\": "Slim"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Rob Allen",
"email": "rob@akrabat.com",
"homepage": "http://akrabat.com"
},
{
"name": "Josh Lockhart",
"email": "hello@joshlockhart.com",
"homepage": "https://joshlockhart.com"
},
{
"name": "Gabriel Manricks",
"email": "gmanricks@me.com",
"homepage": "http://gabrielmanricks.com"
},
{
"name": "Andrew Smith",
"email": "a.smith@silentworks.co.uk",
"homepage": "http://silentworks.co.uk"
}
],
"description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
"homepage": "http://slimframework.com",
"keywords": [
"api",
"framework",
"micro",
"router"
],
"time": "2016-01-08 15:37:50"
}
],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=5.5.0"
},
"platform-dev": []
}
<?php
function appConfig() {
return [
'displayErrorDetails' => true,
'logger' => [
'name' => 'slim-app',
'path' => __DIR__ . '/../logs/app.log',
],
'upload' => [
'path' => __DIR__ . '/uploads',
],
'db' => [
'host' => '',
'port' => '',
'dbname' => '',
'user' => '',
'password' => '',
],
'api' => [
'address' => 'address',
'port' => 'port',
'email' => 'username',
'password' => 'password',
'cookieFile' => 'cookie file location',
'certificate' => ''
],
'payments' => [
'name' => 'Romania Libera',
'email' => 'email',
'terminal' => 'terminal id',
'merchant' => 'merchant id',
'url' => 'url',
'backref' => 'callback endpoint',
'desc' => 'Anunt Romania Libera',
'currency' => 'RON'
],
'admin' => [
'email' => ''
],
'smtp' => [
"host" => "",
"username" => "",
"password" => "",
"secure" => "",
"port" => "",
]
];
}
#!/usr/bin/env bash
function info() {
echo -e "\033[00;34mi\033[0m $1"
}
function success() {
echo -e "\r\033[00;32m✓\033[0m $1"
}
function fail() {
echo -e "\033[00;31m!\033[0m $1"
exit 1
}
check() {
if [[ $? != 0 ]]; then
fail "$1"
exit 1
fi
}
info "Pulling latest project version"
git pull --quiet origin master
check "Could not pull latest project version"
info "Creating dist archive"
tar zcf dist.tar.gz src vendor public templates config_sample.php
check "Could not create dist archive"
info "Copying dist archive"
scp -q ./dist.tar.gz app@rlcms:~
check "Could not copy dist archive"
info "Replacing old dist"
ssh app@rlcms "cd /home/app &&
mkdir -p rlads &&
rm -rf rlads/src rlads/vendor rlads/public rlads/templates &&
tar zxf ./dist.tar.gz -C rlads &&
rm ./dist.tar.gz"
check "Could not replace old dist"
info "Deleting dist archive"
rm ./dist.tar.gz
check "Could not delete dist archive"
success "Project successfully deployed"
<?php
function appConfig() {
return [
'displayErrorDetails' => true,
'logger' => [
'name' => 'slim-app',
'path' => __DIR__ . '/../logs/app.log',
],
'upload' => [
'path' => __DIR__ . '/uploads',
],
'db' => [
'host' => 'localhost',
'port' => '3306',
'dbname' => 'devel_13',
'user' => 'devel',
'password' => 'devel',
],
'api' => [
'address' => 'http://46.102.175.8',
'port' => '8080',
'email' => 'admin@rl.ro',
'password' => 'admin',
'cookieFile' => '/tmp/rofusion.txt',
'certificate' => ''
],
'payments' => [
'name' => 'Ro fusion',
'url' => 'http://sandboxsecure.mobilpay.ro',
'signature' => 'LTS9-WTDL-P1EF-QKNF-11VL',
'redirectUrl' => 'http://public13.webas.ro/finalizare',
'backref' => 'http://public13.webas.ro/confirm-payment',
'desc' => 'Anunturi',
'currency' => 'RON',
'publicCertificate' => __DIR__ . '/sandbox.LTS9-WTDL-P1EF-QKNF-11VL.public.cer',
'privateCertificate' => __DIR__ . '/sandbox.LTS9-WTDL-P1EF-QKNF-11VLprivate.key'
],
'admin' => [
'email' => 'cc2@activemall.ro'
],
'smtp' => [
"host" => "smtp.gmail.com",
"username" => "mp941027@gmail.com",
"password" => "Mandagas1",
"secure" => "tls",
"port" => 587,
],
'jenuPublication' => 20
];
}
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=RO, ST=Bucharest, L=Bucharest, O=N E T O P I A , OU=N E T O P I A Development Team, CN=mobilpay.ro/emailAddress=support@mobilpay.ro
Validity
Not Before: Oct 5 10:02:44 2018 GMT
Not After : Oct 5 10:02:44 2019 GMT
Subject: C=RO, ST=Bucharest, L=Bucharest, O=N E T O P I A , OU=N E T O P I A Development Team, CN=mobilpay.ro/emailAddress=support@mobilpay.ro
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
00:bc:21:d3:f3:61:12:96:45:b8:ab:e0:85:9f:4d:
ef:90:97:6d:ad:39:31:63:42:87:8d:b6:91:c7:c5:
29:ba:8f:e5:85:62:09:40:60:dc:c7:39:65:87:75:
7b:45:e2:f5:48:b5:40:8d:99:fe:3b:ef:72:1a:c3:
64:64:30:8d:aa:c0:a6:bd:d2:f5:ba:30:1c:49:19:
1f:cd:59:a2:53:a8:3c:70:59:6d:8a:40:db:c0:48:
c8:76:11:71:a4:d7:8c:bb:62:04:6b:e3:a7:0b:b3:
96:39:97:78:1a:15:2e:29:c8:68:4d:08:52:93:1e:
9f:d3:0b:58:6d:9f:18:c7:5d
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
3D:C9:70:A1:30:6C:73:53:34:1F:96:69:17:4F:5A:32:20:1A:1E:B5
X509v3 Authority Key Identifier:
keyid:3D:C9:70:A1:30:6C:73:53:34:1F:96:69:17:4F:5A:32:20:1A:1E:B5
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: md5WithRSAEncryption
57:70:7d:ea:79:f3:b6:a0:23:0c:19:f2:47:91:cd:da:af:07:
2f:c6:b2:05:25:c6:72:b3:99:8f:75:dd:22:6c:50:35:68:17:
1f:65:57:97:00:34:a2:72:50:e4:0c:33:d6:5d:1a:e0:5d:1b:
d7:4c:7f:2b:3e:b7:8a:a2:b7:b7:69:ca:08:69:f2:43:3b:25:
2c:47:85:72:ae:0d:9c:aa:1d:f7:6b:a8:73:7f:a1:c0:23:fb:
2c:32:98:e3:31:18:a1:dc:33:b1:4d:2b:f4:91:ca:97:1a:4a:
38:af:cd:ec:fd:a2:cc:e8:86:83:8d:6e:75:9c:4b:99:b7:89:
6b:e9
-----BEGIN CERTIFICATE-----
MIIDKjCCApOgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsTELMAkGA1UEBhMCUk8x
EjAQBgNVBAgMCUJ1Y2hhcmVzdDESMBAGA1UEBwwJQnVjaGFyZXN0MRcwFQYDVQQK
DA5OIEUgVCBPIFAgSSBBIDEnMCUGA1UECwweTiBFIFQgTyBQIEkgQSBEZXZlbG9w
bWVudCBUZWFtMRQwEgYDVQQDDAttb2JpbHBheS5ybzEiMCAGCSqGSIb3DQEJARYT
c3VwcG9ydEBtb2JpbHBheS5ybzAeFw0xODEwMDUxMDAyNDRaFw0xOTEwMDUxMDAy
NDRaMIGxMQswCQYDVQQGEwJSTzESMBAGA1UECAwJQnVjaGFyZXN0MRIwEAYDVQQH
DAlCdWNoYXJlc3QxFzAVBgNVBAoMDk4gRSBUIE8gUCBJIEEgMScwJQYDVQQLDB5O
IEUgVCBPIFAgSSBBIERldmVsb3BtZW50IFRlYW0xFDASBgNVBAMMC21vYmlscGF5
LnJvMSIwIAYJKoZIhvcNAQkBFhNzdXBwb3J0QG1vYmlscGF5LnJvMIGfMA0GCSqG
SIb3DQEBAQUAA4GNADCBiQKBgQC8IdPzYRKWRbir4IWfTe+Ql22tOTFjQoeNtpHH
xSm6j+WFYglAYNzHOWWHdXtF4vVItUCNmf4773Iaw2RkMI2qwKa90vW6MBxJGR/N
WaJTqDxwWW2KQNvASMh2EXGk14y7YgRr46cLs5Y5l3gaFS4pyGhNCFKTHp/TC1ht
nxjHXQIDAQABo1AwTjAdBgNVHQ4EFgQUPclwoTBsc1M0H5ZpF09aMiAaHrUwHwYD
VR0jBBgwFoAUPclwoTBsc1M0H5ZpF09aMiAaHrUwDAYDVR0TBAUwAwEB/zANBgkq
hkiG9w0BAQQFAAOBgQBXcH3qefO2oCMMGfJHkc3arwcvxrIFJcZys5mPdd0ibFA1
aBcfZVeXADSiclDkDDPWXRrgXRvXTH8rPreKore3acoIafJDOyUsR4Vyrg2cqh33
a6hzf6HAI/ssMpjjMRih3DOxTSv0kcqXGko4r83s/aLM6IaDjW51nEuZt4lr6Q==
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKGFbvcd1ARUGJAf
THNsXq4kRCNBO2nAfAU44CgOddx6mv5xiM0QEUBuQttXSNAfqtWhMPhxI7pxXse3
cirrxDj3ElscaE84RNyWCukKQzgm/YF4Nmtv1vWFoQiumw8ZGeELxI4g/gJ1jbzZ
um2FMSFF05X44QQIoCboZDDsNFhfAgMBAAECgYEAgIF1qHv9y7fQlxGftJE6vtex
sk7a4yc2RL1cceIXWWPeXqObkHLBFv7iiDnof1VCiJanLHJvV42NN942oflT8i6a
nJrOlkfsj/uaECmno0ts1y6jW47ADwEnIgXJkyVzwBFyEuzXBMy3uO1re4+8TCZO
t5qjBPAaDliyI4+PuNkCQQDUR46eSNPLL1s53qtuLB2VollsAeDoqjW2jE5po04r
Af5ErPUrDjGUeWoTO/TwnGQnmBJEgD4+Zt7smunUs14bAkEAwsmk2+dHlhiVjZgi
RgcpensXanwa2ZoPuqBPtBAgQ0c5Jjka1Y1gfvrQXxAcA/q1zzSgYr2FKD7qV0C0
2d7DDQJAaKyQSsSmiv5jAXonFkBypiJT7cpPWOr1aXpt//EizlpBQyP2ELEDCa+E
+s8JzMuRJ2T5PQXvq12Wdx08SEHaGQJBAJFpLqTq9snZ+GsHky5r0k8Y7NYVZ4Xi
OLO9UUK+dxdCaCtcneel7s9cNYmB4SgnVOomA0Uy7eCpdw9Dwr6SSVECQER19A5o
xujEPcz1VJss7jDJYJ1jPh9JiIacLdpUOSDt2dHrnsff3JK0po7CfMwOdHrYmDTE
RboQ82fWLVmrGyA=
-----END PRIVATE KEY-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=RO, ST=Bucharest, L=Bucharest, O=N E T O P I A , OU=N E T O P I A Development Team, CN=mobilpay.ro/emailAddress=support@mobilpay.ro
Validity
Not Before: Oct 5 10:02:44 2018 GMT
Not After : Oct 5 10:02:44 2019 GMT
Subject: C=RO, ST=Bucharest, L=Bucharest, O=N E T O P I A , OU=N E T O P I A Development Team, CN=mobilpay.ro/emailAddress=support@mobilpay.ro
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (1024 bit)
Modulus:
00:bc:21:d3:f3:61:12:96:45:b8:ab:e0:85:9f:4d:
ef:90:97:6d:ad:39:31:63:42:87:8d:b6:91:c7:c5:
29:ba:8f:e5:85:62:09:40:60:dc:c7:39:65:87:75:
7b:45:e2:f5:48:b5:40:8d:99:fe:3b:ef:72:1a:c3:
64:64:30:8d:aa:c0:a6:bd:d2:f5:ba:30:1c:49:19:
1f:cd:59:a2:53:a8:3c:70:59:6d:8a:40:db:c0:48:
c8:76:11:71:a4:d7:8c:bb:62:04:6b:e3:a7:0b:b3:
96:39:97:78:1a:15:2e:29:c8:68:4d:08:52:93:1e:
9f:d3:0b:58:6d:9f:18:c7:5d
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
3D:C9:70:A1:30:6C:73:53:34:1F:96:69:17:4F:5A:32:20:1A:1E:B5
X509v3 Authority Key Identifier:
keyid:3D:C9:70:A1:30:6C:73:53:34:1F:96:69:17:4F:5A:32:20:1A:1E:B5
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: md5WithRSAEncryption
57:70:7d:ea:79:f3:b6:a0:23:0c:19:f2:47:91:cd:da:af:07:
2f:c6:b2:05:25:c6:72:b3:99:8f:75:dd:22:6c:50:35:68:17:
1f:65:57:97:00:34:a2:72:50:e4:0c:33:d6:5d:1a:e0:5d:1b:
d7:4c:7f:2b:3e:b7:8a:a2:b7:b7:69:ca:08:69:f2:43:3b:25:
2c:47:85:72:ae:0d:9c:aa:1d:f7:6b:a8:73:7f:a1:c0:23:fb:
2c:32:98:e3:31:18:a1:dc:33:b1:4d:2b:f4:91:ca:97:1a:4a:
38:af:cd:ec:fd:a2:cc:e8:86:83:8d:6e:75:9c:4b:99:b7:89:
6b:e9
-----BEGIN CERTIFICATE-----
MIIDKjCCApOgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsTELMAkGA1UEBhMCUk8x
EjAQBgNVBAgMCUJ1Y2hhcmVzdDESMBAGA1UEBwwJQnVjaGFyZXN0MRcwFQYDVQQK
DA5OIEUgVCBPIFAgSSBBIDEnMCUGA1UECwweTiBFIFQgTyBQIEkgQSBEZXZlbG9w
bWVudCBUZWFtMRQwEgYDVQQDDAttb2JpbHBheS5ybzEiMCAGCSqGSIb3DQEJARYT
c3VwcG9ydEBtb2JpbHBheS5ybzAeFw0xODEwMDUxMDAyNDRaFw0xOTEwMDUxMDAy
NDRaMIGxMQswCQYDVQQGEwJSTzESMBAGA1UECAwJQnVjaGFyZXN0MRIwEAYDVQQH
DAlCdWNoYXJlc3QxFzAVBgNVBAoMDk4gRSBUIE8gUCBJIEEgMScwJQYDVQQLDB5O
IEUgVCBPIFAgSSBBIERldmVsb3BtZW50IFRlYW0xFDASBgNVBAMMC21vYmlscGF5
LnJvMSIwIAYJKoZIhvcNAQkBFhNzdXBwb3J0QG1vYmlscGF5LnJvMIGfMA0GCSqG
SIb3DQEBAQUAA4GNADCBiQKBgQC8IdPzYRKWRbir4IWfTe+Ql22tOTFjQoeNtpHH
xSm6j+WFYglAYNzHOWWHdXtF4vVItUCNmf4773Iaw2RkMI2qwKa90vW6MBxJGR/N
WaJTqDxwWW2KQNvASMh2EXGk14y7YgRr46cLs5Y5l3gaFS4pyGhNCFKTHp/TC1ht
nxjHXQIDAQABo1AwTjAdBgNVHQ4EFgQUPclwoTBsc1M0H5ZpF09aMiAaHrUwHwYD
VR0jBBgwFoAUPclwoTBsc1M0H5ZpF09aMiAaHrUwDAYDVR0TBAUwAwEB/zANBgkq
hkiG9w0BAQQFAAOBgQBXcH3qefO2oCMMGfJHkc3arwcvxrIFJcZys5mPdd0ibFA1
aBcfZVeXADSiclDkDDPWXRrgXRvXTH8rPreKore3acoIafJDOyUsR4Vyrg2cqh33
a6hzf6HAI/ssMpjjMRih3DOxTSv0kcqXGko4r83s/aLM6IaDjW51nEuZt4lr6Q==
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAPWF5TRG+VH3kcWa
cheCdCB/EwUZYFELepVGldTsDIt/w7h9Bi/55+Eq0HjBp9zqMrz90jZh67akEQKb
x1ilA87XkrBKXTvGzyszglz6UbfLhuLg1UfmjJst9cOtwPOAdL30wNewKHv2uJio
wqqolt+OImKm0MO0/+MM/z8n4szPAgMBAAECgYEA8JL6O3cv5TkIBO+Iy7BvyUe6
g0ySK9drjclUFwYUZLwUMzmOToQ4yVECZNCcgsKYZMbwq4jXRmcMo9mwQxOt3Zvc
ukwcwbnhDbUY2pgEr+SMasYzEErg+pJLhLkWCs8tJL+YppV30+i9JT9LelekBwY3
bQmWdbaLv56P+5w7QIECQQD7SmicemdHGwmhEz13nbOynmP0h5nXY3yFYYkKmUSn
R6VpunCD9G3thIBJfFVyg4EDHqOQIMekypTcd8XRAmHJAkEA+h/Q4Hia8EXJA6hf
ATkaasI6R79ZriOUpa82wo7W2jqSGQ1UtujY3n7TuNuE0GjISgYwbhcowabJKEVJ
5gvF1wJAVjYM9cI4tHheMVi8edEs2Vbly/rJmM+U5N21emFi4FEAOumvuFWfcSFI
Me3qEsNy+3MDgmr8k1i9AXZF85LxoQJBALRifaFlWVgu++lHZDzdkc+sg5t6xJJx
1qIm2rc1jH2WAAdRNeczxjOwA8Etj3s+FjRMgmDjEuGWBzyju8fMdcECQQCj/DtM
+b7wtPqMtet6cbf8Mc45vJnvmIpviG/BMYi8dlQFty1gzw/dyn4CLNM47umAVxTR
9JSX2ToP3Qt102qK
-----END PRIVATE KEY-----
\ No newline at end of file
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
/** Base container **/
.kalendae {
display: inline-block;
zoom: 1;
*display:inline;
padding: 0px;
margin: 0px;
font-size: 12px;
font-family: 'Helvetica Neue', 'Helvetica';
cursor: default;
position: relative;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.kalendae * {
-moz-box-sizing: border-box;
box-sizing: border-box;
}
/** Popup Container for Kalendae.Input **/
.kalendae.k-floating {
position: absolute;
top: 0;
left: 0;
z-index: 100000;
margin: 0;
box-shadow: 0 1px 3px rgba(0,0,0,0.75);
}
/** Kalendae.Input's popup close button **/
.kalendae .k-btn-close {
position: absolute;
top: -8px;
right: -8px;
width: 20px;
height: 20px;
background: white;
border: 2px solid #ccc;
color: #999;
line-height: 17px;
text-align: center;
font-size: 13px;
border-radius: 10px;
box-shadow: 0 1px 3px rgba(0,0,0,0.75);
cursor: pointer;
text-decoration: none;
}
.kalendae .k-btn-close:after {
content: "\2716";
}
.kalendae .k-btn-close:hover {
color: #7EA0E2;
background: white;
border-color: #7EA0E2;
}
/** Month Container **/
.kalendae .k-calendar {
display: inline-block;
zoom: 1;
*display:inline;
width: 33.3%;
padding: 1%;
vertical-align: top;
border: 1px solid #ddd;
background: #f1f1f1;
}
/** Month Separator **/
.kalendae .k-separator {
display: inline-block;
zoom: 1;
*display:inline;
width: 2px;
vertical-align: top;
background: #ddd;
height: 155px;
margin: 0px 10px;
}
/** Month Title Row **/
.kalendae .k-title {
text-align: center;
white-space: nowrap;
position: relative;
height: 18px;
}
.kalendae .k-caption {
font-size: 12px;
line-height: 18px;
}
/** Month and Year Buttons **/
.kalendae .k-btn-previous-month, .kalendae .k-btn-next-month, .kalendae .k-btn-previous-year, .kalendae .k-btn-next-year {
width: 16px;
height: 23px;
cursor: pointer;
position: absolute;
top: -3px;
color: #777;
font-size: 32px;
line-height: 18px;
font-weight: bold;
font-family: arial;
text-decoration: none;
}
.kalendae .k-btn-previous-year {
left: 0;
}
.kalendae .k-btn-previous-month {
left: 16px;
}
.kalendae .k-btn-next-month {
right: 16px;
}
.kalendae .k-btn-next-year {
right: 0;
}
.kalendae .k-btn-previous-month:after {
content: "\2039";
}
.kalendae .k-btn-next-month:after {
content: "\203A";
}
.kalendae .k-btn-previous-year:after {
content: "\00AB";
}
.kalendae .k-btn-next-year:after {
content: "\00BB";
}
.kalendae .k-btn-previous-month:hover, .kalendae .k-btn-next-month:hover {
color: #7EA0E2;
}
.kalendae .k-btn-previous-year:hover, .kalendae .k-btn-next-year:hover {
color: #6FDF81;
}
/** Remove extra buttons when calendar shows multiple months **/
.kalendae .k-first-month .k-btn-next-month, .kalendae .k-middle-month .k-btn-next-month, .kalendae .k-middle-month .k-btn-previous-month, .kalendae .k-last-month .k-btn-previous-month, .kalendae .k-first-month .k-btn-next-year, .kalendae .k-middle-month .k-btn-next-year, .kalendae .k-middle-month .k-btn-previous-year, .kalendae .k-last-month .k-btn-previous-year {
display: none;
}
/** Disable year nav option **/
.kalendae .k-title.k-disable-year-nav .k-btn-next-year, .kalendae .k-title.k-disable-year-nav .k-btn-previous-year {
display: none;
}
.kalendae .k-title.k-disable-year-nav .k-btn-next-month {
right: 0;
}
.kalendae .k-title.k-disable-year-nav .k-btn-previous-month {
left: 0;
}
/** Force specific width for month container contents **/
.kalendae .k-title, .kalendae .k-header, .kalendae .k-days {
width: 100%;
display: block;
overflow: hidden;
}
/** Hide unusable buttons **/
.kalendae.k-disable-next-month-btn .k-btn-next-month, .kalendae.k-disable-previous-month-btn .k-btn-previous-month, .kalendae.k-disable-next-year-btn .k-btn-next-year, .kalendae.k-disable-previous-year-btn .k-btn-previous-year {
display: none;
}
/** Week columns and day cells **/
.kalendae .k-header span, .kalendae .k-days span {
float: left;
margin: 1px 1px 2px 1px;
}
.kalendae .k-header span {
text-align: right;
font-weight: bold;
width: 12.5%;
padding: 5px 5px 0 0;
color: #666;
}
.kalendae .k-header.k-active span {
cursor: pointer;
border-radius: 3px;
}
.kalendae .k-days span {
text-align: right;
width: 12.5%;
height: 1.6em;
line-height: 1.2em;
padding: 2px 2px 2px 2px;
border: 1px solid transparent;
color: #999;
}
/** Today **/
.kalendae .k-today {
text-decoration: underline;
}
/** Days inside of the month view **/
.kalendae .k-days span.k-in-month.k-active {
border-color: #ddd;
background-color: #fff;
color: #333;
}
/** Days outside of the month view (before the first day of the month, after the last day of the month) **/
.kalendae .k-days span.k-out-of-month {
color: #ddd;
}
/** Selectable **/
.kalendae .k-days span.k-active {
cursor: pointer;
}
/** Selected day, when outside the selectable area **/
.kalendae .k-days span.k-selected {
background: #880E4F;
color: #A6016A;
}
/** Selected day, when inside the selectable area **/
.kalendae .k-days span.k-selected.k-active, .kalendae .k-header.k-active span.k-selected {
background: #A6016A;
color: white;
}
/** Days between the start and end points on a range, outside of the selectable area **/
.kalendae .k-days span.k-range {
background: none;
border-color: #6DD4FE;
}
/** Days between the start and end points on a range, inside of the selectable area **/
.kalendae .k-days span.k-range.k-in-month {
background: #C4D4F1;
border-color: #19AEFE;
color: #333;
}
/** Selectable day, hovered **/
.kalendae .k-days span.k-active:hover, .kalendae .k-days span.k-active.k-day-hover-active {
background: #A6016A;
border-color: #A6016A;
color: #fff;
}
/** Selectable week, hovered **/
.kalendae .k-week:hover span.k-active {
border-color: #666;
}
.k-out-of-month {
background: none !important;
border:none !important;
color: #999 !important;
}
.k-selected.k-out-of-month {
color: #A6016A !important;
}
.clearfix:after {
visibility: hidden;
display: block;
font-size: 0;
content: " ";
clear: both;
height: 0;
}
/*-------------------------------------IE8 ONLY CODE BELOW THIS LINE--------------------------------------------*/
.kalendae.ie8.k-floating {
border: 1px solid #ccc;
}
.kalendae.ie8 .k-btn-close {
width: 20px;
height: 20px;
border: none;
background: url('close.png') no-repeat top left;
}
.kalendae.ie8 .k-btn-close:after {
display: none;
}
.kalendae.ie8 .k-btn-previous-month, .kalendae.ie8 .k-btn-next-month, .kalendae.ie8 .k-btn-previous-year, .kalendae.ie8 .k-btn-next-year {
width: 16px;
height: 16px;
cursor: pointer;
background: #777 url('arrows.png') no-repeat center left;
position: absolute;
top: 0;
}
.kalendae.ie8 .k-btn-next-month, .kalendae.ie8 .k-btn-next-year {
background-position: center right;
}
.kalendae.ie8 .k-btn-previous-month:hover, .kalendae.ie8 .k-btn-next-month:hover {
background-color: #7EA0E2;
}
.kalendae.ie8 .k-btn-previous-year, .kalendae.ie8 .k-btn-next-year {
background-color: #333;
}
.kalendae.ie8 .k-btn-previous-year:hover, .kalendae.ie8 .k-btn-next-year:hover {
background-color: #6FDF81;
}
.kalendae.ie8 .k-btn-previous-month:after, .kalendae.ie8 .k-btn-next-month:after, .kalendae.ie8 .k-btn-previous-year:after, .kalendae.ie8 .k-btn-next-year:after {
display: none;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
.default_color{background-color: #9D0566 !important}
.default_color_text{color: #9D0566 !important}
.brand-logo {
font-size: 1.7rem !important;
font-weight: 900;
letter-spacing: -1px;
line-height: 20px;
padding: 15px 0 7px 0 !important;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
text-transform: uppercase;
}
.brand-logo small {
letter-spacing: 2px;
}
a.dropdown-button small {
display: block;
position: absolute;
top: 38px;
line-height: 20px;
font-weight: 400;
letter-spacing: 1px;
}
.brand-logo small {
font-weight: 300;
}
html {
font-size: 14px;
}
body {
background: #fafafa;
}
h1, h2, h3, h4, h5 {
margin: 5px 0;
}
h1 {
font-weight: 700;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
font-size: 2rem;
}
h2 {
font-size: 1.5rem !important;
font-weight: 700;
margin: 10px 0 20px 0;
}
.parallax-container h2 {
font-size: 1.10rem !important;
font-weight: 500;
}
h3 {
font-size: 1.15rem !important;
font-weight: 400;
}
h4 {
font-size: 1rem !important;
font-weight: 200;
}
h5 {
font-size: 1rem !important;
}
.clr {
clear: both;
}
a.tooltipped:hover {
color:#A6016A;
text-decoration: underline;
}
.fw700 {
font-weight: 700;
}
.fw500 {
font-weight: 500;
}
.f16 {
font-size: 16px !important;
}
.p10 {
padding: 10px !important;
word-wrap: break-word;
}
.card {
margin-top: 0;
transition: all 0.1s ease 0s;
}
h2.card-panel {
margin-top: 0;
}
.card.cyan h3 {
font-size: 1.5rem !important;
font-weight: 600;
margin-bottom: 20px;
}
.collection {
margin: 0;
}
.collection .collection-item.active {
background-color: #0097a7;
color: #fff;
}
.pin-top {
position: relative;
}
.pin-bottom {
position: relative;
}
.pinned {
position: fixed !important;
}
#mo3 .row .col.m8 {
float: right;
}
.pinfo {
color: #fff;
padding: 25px 0;
position: sticky;
z-index: 1001;
}
.pinfo h2 {
font-weight: 300;
color: #eee;
}
.parallax {
background: rgb(136, 14, 79);
background: -moz-linear-gradient(0deg, rgb(136, 14, 79) -100%, rgb(0, 150, 167) 100%);
background: -webkit-linear-gradient(0deg, rgb(136, 14, 79) -100%, rgb(0, 150, 167) 100%);
background: -o-linear-gradient(0deg, rgb(136, 14, 79) -100%, rgb(0, 150, 167) 100%);
background: -ms-linear-gradient(0deg, rgb(136, 14, 79) -100%, rgb(0, 150, 167) 100%);
background: linear-gradient(0deg, rgb(136, 14, 79) -100%, rgb(0, 150, 167) 100%);
}
.parallax-container {
height: 180px;
}
.btn {
padding: 5px 1rem;
height: auto;
line-height: initial;
}
#mo .collection a.collection-item {
color: #fff;
}
#mo .collection .collection-item {
background-color: transparent;
padding: 12px 15px;
}
#mo .btn {
text-transform: none;
display: inherit;
}
#mo .collection {
border: none;
}
#mo .collection a.collection-item:hover:not(.active) {
background-color: rgba(0,0,0,0.3);
}
.collapsible-header {
padding: 1rem;
}
.collapsible-header:hover {
background: #A6016A;
color: #fff;
}
.collection a.collection-item {
color: #880E4F;
border-bottom: 1px solid #f1f1f1;
padding: 5px 20px;
}
.collection-item h3 {
font-weight: 300;
}
.collection-item h2 {
margin: 5px 0 0 0;
}
.collapsible-header.active {
background: #a6016a;
color: #fff;
}
.collapsible-header h2 {
font-size: 1.20rem !important;
margin: 0;
}
.dropdown-content li {
min-height: inherit;
}
.dropdown-content li > a, .dropdown-content li > span {
font-size: 13px;
font-weight: 400;
padding: 10px;
line-height: 16px;
color: #A6016A;
}
.dropdown-content li {
min-width: inherit;
}
#mo3 .collection-item.active h2 {
font-size: 2rem !important;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
}
.m8 .collection .collection-item {
/*border-bottom: none;*/
}
.collection a.collection-item:hover:not(.active) {
background-color: #0097a7;
color: #fff;
text-decoration: none;
}
.card .card-content {
background: none;
padding: 0;
min-height: 175px;
}
.card .card-title {
padding: 5px 20px;
margin: 0;
color: #fff;
}
.card .card-title h3 {
font-weight: 700;
color: #fff;
}
nav ul a {
font-size: 1.2rem;
font-weight: 900;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
padding: 0 5px 0 15px;
}
nav ul a.mactive {
background: #0096A7;
color: #fff;
}
nav ul a:hover {
background-color: rgba(100, 100, 100, 0.1);
}
.card.default_color .card-content {
min-height: 230px;
}
.white {
color: #fff;
}
.collapsible {
box-shadow: none;
}
.material-icons {
font-size: 16px !important;
}
.card-image img {
max-width: 100%;
-moz-transition: all 0.3s;
-webkit-transition: all 0.3s;
transition: all 0.3s;
}
.card-image:hover img {
-moz-transform: scale(1.1) rotate(-2deg);
-webkit-transform: scale(1.1) rotate(-2deg);
transform: scale(1.15) rotate(-2deg);
}
.cyan.darken-3:hover {
background-color: #A6016A !important;
}
.btn-large {
animation: pulse 3s infinite;
padding: 0 15px;
}
.caption.left-align.container {
left: 10% !important;
right: 0% !important;
width: 100%;
}
.caption.right-align.container {
left: 0% !important;
right: 10% !important;
width: 100%;
}
@keyframes pulse {
0% {
background-color: #2BBAAC;
}
50% {
background-color: #0095A6;
}
100% {
background-color: #2BBAAC;
}
}
.brand-logo img {
margin: 7px;
margin-right: 10px;
height: 50px;
width: 50px;
float: left;
}
footer * {
font-family: "Roboto",sans-serif;
font-weight: 300;
}
footer h3 {
font-weight: 400;
}
footer p {
font-weight: 300;
}
footer a {
color: #fff;
}
footer a:hover {
text-decoration: underline;
}
nav .button-collapse {
margin-left: -12px;
}
.button-collapse .material-icons {
font-size: 2.7rem !important;
}
.z-depth-1, nav, .card-panel, .card, .toast, .btn, .btn-large, .btn-floating, .dropdown-content, .collapsible, .side-nav {
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1), 0 1px 5px 0 rgba(0, 0, 0, 0.1);
}
@media only screen and (min-width: 1024px) {
.container {
width: 90%;
}
}
@media only screen and (min-width: 1200px) {
.container {
width: 90%;
}
}
@media only screen and (max-width: 768px) {
.brand-logo {
font-size: 1.25rem !important;
left: 150px !important;
padding-top: 10px !important;
transform: translateX(-110px) !important;
}
.parallax-container {
height: auto;
}
.parallax {
position: relative;
}
}
\ No newline at end of file
.default_color {
background-color: #a41216 !important;
}
.default_color_text {
color: #a41216 !important;
}
.brand-logo {
color: #fff;
font-size: 1.4rem !important;
font-weight: 900;
line-height: 30px;
margin-top: 3px;
}
.brand-logo img {
height: 60px;
}
.brand-logo small {
font-size: 13px;
left: 0;
line-height: 15px;
position: absolute;
top: 39px;
font-weight: 400;
}
nav ul a {
color: #FFF;
display: block;
font-weight: 600;
padding: 0px 15px;
}
/*****************/
a:hover {
text-decoration: none;
}
h1 {
font-size: 2rem;
margin-top: 0;
}
h2 {
font-size: 1.2rem;
margin: 10px 0;
}
h5 {
font-size: 1.15rem;
margin: 5px 0;
}
nav .button-collapse {
background: #a41216;
margin-left: -20px;
text-align: center;
width: 50px;
}
.side-nav .userView, h2.card-panel {
margin: 0;
}
.side-nav .userView {
padding: 16px;
}
#intro h1, #intro h2 {
color: #fff;
}
.card .card-content {
padding: 5px 10px;
font-size: 13px;
line-height: 16px;
border-top: 1px solid rgba(160, 160, 160, 0.2);
background: rgba(0, 0, 0, 0.05);
}
.card .card-title {
font-size: 15px;
font-weight: bold;
line-height: 18px !important;
overflow: hidden;
display: block;
margin-top: 0px;
}
.card .card-action {
padding: 5px;
}
.card .card-action label {
font-size: 13px;
padding-left: 25px;
}
.card:hover label {
color: #26a69a;
font-weight: 400;
}
.secondary-content {
color: #ff5252;
}
.collection {
margin-top: 20px;
margin-bottom: 20px;
min-height: 127px;
border: 0;
}
.collection .collection-item.text-anunt {
overflow-y: auto;
max-height: 300px;
}
.collection .collection-item.avatar .secondary-content {
right: 0px;
top: 0px;
}
.collection .collection-item.avatar .title {
font-size: 15px;
font-weight: 600;
}
.collection .collection-item.avatar p {
font-size: 15px;
margin-bottom: 5px;
}
.collection.with-header .collection-header {
background-color: #a41216;
color: #fff;
}
.collection.with-header .collection-header h5 {
margin: 0;
font-size: 1.5rem;
}
.side-nav a {
height: 2.5em !important;
line-height: 2.5em !important;
color: #111;
}
.total-item {
font-size: 14px;
margin-bottom: 3px;
padding-bottom: 3px;
}
.total-item span {
color: #fff;
font-size: 14px;
font-weight: 500;
text-align: right;
float: right;
}
.subtotal-item {
font-size: 12px;
line-height: 15px;
}
.subtotal-item span {
font-size: 12px;
font-weight: 500;
text-align: right;
float: right;
}
*::-moz-placeholder {
color: #333;
}
.collapsible {
margin-top: 0;
}
.collapsible-body {
padding: 20px;
}
.collapsible-body .col {
margin: 10px 0;
}
.side-nav-top {
padding: 10px 15px;
background-color: #a41216 !important;
font-size: 1.5rem;
margin:0 !important;
}
.side-nav-top .material-icons {
float: left;
height: 24px !important;
line-height: 24px !important;
margin-right: 10px;
}
.card {
margin: 0;
}
.card-location, .card-time {
font-size: 12px;
color: #999;
}
.card-location .material-icons, .card-time .material-icons {
font-size: 14px;
vertical-align: sub;
}
.card .card-image {
overflow: hidden;
background-position: center center;
background-size: cover;
min-height: 150px;
}
.select-wrapper {
background: #fff;
}
.select-wrapper input.select-dropdown {
font-weight: 500;
margin: 0;
text-indent: 15px;
border: 1px solid #9e9e9e;
}
.select-wrapper span.caret {
right: 10px;
}
footer.page-footer {
margin-top: 0;
font-weight: 300;
font-size: 0.9rem;
}
footer a:hover {
font-weight: 500;
}
label {
color: #444;
}
input {
height: 2.5rem !important;
line-height: 2rem !important;
margin-bottom: 10px !important;
}
.card-select label {
background-color: #506874;
color: #fff !important;
font-size: 0.9rem;
font-weight: 400;
padding: 13px 15px 13px 15px;
margin-bottom: 10px;
border-radius: 2px;
width: 100% !important;
display: block;
}
label.active {
background-color: #506874;
color: #fff !important;
font-size: 0.8rem;
font-weight: 400;
padding: 2px 10px;
margin-bottom: 10px;
border-radius: 0px;
width: auto !important;
}
.input-field textarea + label, .select-wrapper + label {
left: 0 !important;
}
.collapsible.popout > li {
padding: 20px;
}
.collapsible-header.active {
background: #eee;
font-weight: 800;
color: inherit;
}
textarea.materialize-textarea {
min-height: 5rem;
}
blockquote {
font-size: 13px;
padding-left: 1rem;
margin-top: 0;
border-left: 5px solid #a41216;
}
span.step {
background-color: #506874;
color: #fff;
font-size: 0.8rem;
font-weight: 500;
padding: 5px 10px;
margin-right: 10px;
border-radius: 3px;
}
.active span.step {
background-color: #a41216;
}
.dropdown-content li {
min-height: inherit;
}
.dropdown-content li > a, .dropdown-content li > span {
font-size: 14px;
line-height: 16px;
padding: 10px 15px;
color: #a41216;
}
.options-list .options-header {
font-weight: 500;
padding-bottom: 10px;
}
[type="checkbox"] + label {
display: inherit;
line-height: 18px;
padding-left: 30px;
height: 20px;
overflow: hidden;
}
.form-error {
color: #ff0000;
font-size: 13px;
display: block;
margin-bottom: 20px;
}
.words-counter {
float: left;
height: 12px;
font-size: 12px;
color: #ff0000;
}
.btn-large {
/*animation: pulse 20s infinite;*/
line-height: 40px;
height: 40px;
}
@keyframes pulse {
0% {
background-color: #0095A6;
}
50% {
background-color: #ad1457;
}
100% {
background-color: #0095A6;
}
}
.btnmo {
margin-right: 0 !important;
}
.parallax-container {
height: 150px;
color: #fff;
}
.parallax h1 {
font-size: 1.5rem !important;
margin: 0;
margin-top: 30px;
margin-bottom: 5px;
}
.parallax h2 {
font-size: 1.35rem !important;
margin: 0;
margin-bottom: 5px;
}
.parallax h3 {
font-size: 1.15rem !important;
margin: 0;
margin-bottom: 5px;
}
.btn-full {
width: 100%;
}
.card-select h3 {
font-size: 25px;
font-weight: 900;
margin: 10px 0;
color: #a41216;
text-transform: uppercase;
}
.card-select-publicatie {
padding: 0 20px;
margin-bottom: 15px;
border: 1px solid #ccc;
}
#detalii_anunt .col {
margin: 0;
}
.detalii_anunt_text {
padding: 20px 0 0 0;
}
#textarea1, .textAd {
background: #fff;
border: 1px solid #506874;
padding: 2%;
width: 96%;
}
input:focus:not([type]):not([readonly]), input[type="text"]:focus:not([readonly]), input[type="password"]:focus:not([readonly]), input[type="email"]:focus:not([readonly]), input[type="url"]:focus:not([readonly]), input[type="time"]:focus:not([readonly]), input[type="date"]:focus:not([readonly]), input[type="datetime"]:focus:not([readonly]), input[type="datetime-local"]:focus:not([readonly]), input[type="tel"]:focus:not([readonly]), input[type="number"]:focus:not([readonly]), input[type="search"]:focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) {
border-bottom: 1px solid #a41216;
box-shadow: 0 1px 0 0 #a41216;
}
input:focus:not([type]):not([readonly]) + label, input[type="text"]:focus:not([readonly]) + label, input[type="password"]:focus:not([readonly]) + label, input[type="email"]:focus:not([readonly]) + label, input[type="url"]:focus:not([readonly]) + label, input[type="time"]:focus:not([readonly]) + label, input[type="date"]:focus:not([readonly]) + label, input[type="datetime"]:focus:not([readonly]) + label, input[type="datetime-local"]:focus:not([readonly]) + label, input[type="tel"]:focus:not([readonly]) + label, input[type="number"]:focus:not([readonly]) + label, input[type="search"]:focus:not([readonly]) + label, textarea.materialize-textarea:focus:not([readonly]) + label {
background-color: #a41216;
}
span.badge.ron:after {
content: " RON";
}
span.badge.ron {
background-color: #26a69a;
border-radius: 2px;
color: #fff;
font-size: 0.8rem;
font-weight: 900;
position: relative;
margin: 0 0 0 10px;
right: auto;
}
.slider .slides {
background-color: #a41216;
}
.slider h1 {
font-size: 3.5rem;
font-weight: 900;
margin: 0 0 5px 0;
}
.slider h2 {
font-size: 1.5rem;
font-weight: 900;
margin: 0 0 5px 0;
}
.slider h3 {
font-size: 1.25rem;
font-weight: 900;
margin: 0 0 5px 0;
}
.slider .material-icons {
vertical-align: sub;
}
.slider a {
color: #fff;
text-decoration: underline;
}
.slider .slides li .caption {
left: 0;
position: relative;
top: -85%;
}
.slider .indicators {
bottom: 45px;
z-index: 2;
}
.slider .indicators .indicator-item.active {
background-color: #a41216;
border: 2px solid #fff;
}
.clr {
clear: both;
}
a.opensearch:before {
content: "";
display: inline-block;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
margin-right: 5px;
}
.btn-delete-image {
position: absolute;
top: 0;
right: 0;
}
.image-preview-container {
border-radius: 0;
}
.image-preview-container .card-content {
background-color: #a41216;
border-radius: 0;
}
.image-preview-container .card-content .card-title {
margin-bottom: 0;
padding: 7px;
}
.image-preview-summary {
background: url('../img/image-placeholder.png');
}
.image-preview-summary img {
border-radius: 0;
}
.jFiler-items-grid .jFiler-item {
width: 100%;
}
.jFiler-items-grid .jFiler-item .jFiler-item-container {
position: relative;
background: #fff;
}
.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-thumb {
position: relative;
width: 100%;
height: auto;
overflow: hidden;
}
.jFiler-items-grid .jFiler-item .jFiler-item-container .jFiler-item-thumb .jFiler-item-thumb-image {
width: 100%;
height: 100%;
text-align: center;
}
.jFiler-item .jFiler-item-container .jFiler-item-thumb img {
max-width: none;
max-height: 100%;
}
.image-preview-finalize {
height: auto;
min-height: 0 !important;
}
.collection.final {
margin-top: 0;
}
.card-final {
margin-top: 15px;
}
.btn-ad-edit {
position: absolute;
right: 5px;
display: inline-block;
top: 13px;
}
.finalize-sidebar.card-content {
font-size: 15px;
}
.finalize-sidebar .collection {
margin: 0;
min-height: auto;
}
.finalize-sidebar .collection .collection-item {
padding: 5px 0;
}
.finalize-sidebar .badge.ron {
margin: 0;
}
.collection .collection-item.avatar.finalize-ad-text {
padding-left: 15px;
}
.character-counter {
top: 0;
right: 0;
position: absolute;
}
.no-publication-message {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
text-align: center;
margin: auto 0;
height: 0px;
}
#total .card.cyan .card-content {
padding: 20px 20px 10px;
}
.justify {
text-align: justify;
}
#mo .card.cyan h3 {
font-size: 1.5rem;
font-weight: 600;
margin: 10px 0;
}
#mo .cyan.darken-3:hover {
background-color: #a41216 !important;
}
#mo .card .card-content {
min-height: 175px;
background: rgba(0, 0, 0, 0.05) none repeat scroll 0 0;
border-top: 1px solid rgba(160, 160, 160, 0.2);
font-size: 13px;
line-height: 16px;
padding: 5px 10px;
margin-bottom: 20px;
}
#mo h2 {
font-size: 2rem;
}
.loginForm {
padding: 50px 0;
}
.cotatii {
padding: 25px 0;
font-size: 12px;
line-height: 15px;
}
.cotatii p {
margin: 0;
}
td, th {
padding: 5px;
}
.btn-small {
height: 26px;
line-height: 26px;
font-size: 12px;
padding: 0 10px;
}
table {
border-collapse: initial !important;
border-spacing: 2px;
}
table.highlight > tbody > tr:hover {
background-color: #fff9c4;
}
#anunt-simplu {
margin-top: 40px;
}
.info-contatie {
padding: 10px 10px 20px 10px;
background: #f1f1f1;
margin-bottom: 20px;
}
.tabs {
height: 32px;
border-bottom: 1px solid #555;
}
.tabs .tab {
height: 32px;
line-height: 32px;
font-weight: bold;
background: #e0f2f1;
margin-right: 10px !important;
}
.tabs .tab a:hover, .tabs .tab a.active {
color: #a41216;
}
.tabs .tab a.active {
border-bottom: 2px solid #a41216;
background: #a41216;
color: #ffffff;
}
.tabs .indicator {
background-color: #a41216;
}
.tabs .tab a {
color: #007c88;
}
#cotatie label.active {
-webkit-transform: translateY(-45%);
transform: translateY(-45%);
}
@media only screen and (min-width: 993px) {
.container {
width: 90%;
}
.row .col.l25 {
left: auto;
margin-left: auto;
right: auto;
width: 20%;
}
}
@media only screen and (max-width: 1024px) {
.slider h1 {
font-size: 2rem;
font-weight: 900;
margin: 0 0 5px 0;
}
.slider h2 {
font-size: 1.25rem;
font-weight: 900;
margin: 0 0 5px 0;
}
.slider h3 {
font-size: 1.05rem;
font-weight: 900;
margin: 0 0 5px 0;
}
}
@media only screen and (max-width: 600px) {
.brand-logo {
line-height: 45px;
}
.brand-logo small {
top: 35px;
}
.brand-logo > img {
height: 45px;
margin-top: 3px;
}
nav .brand-logo {
left: auto;
transform: none;
}
.btnmo {
float: right;
letter-spacing: 0;
line-height: 17px;
margin: 0 !important;
padding: 10px;
text-align: right;
width: 70%;
}
}
/* custom styles */
.card .login-card-content {
padding: 20px;
}
.error {
color: red!important;
}
.mb50 {
margin-bottom: 50px;
}
.mb20{
margin-bottom: 20px!important;
}
.select-ad-type .select-label {
left: auto!important;
}
.pubs.disabled > div{
pointer-events: none;
}
.hidden {
display: none;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Creator: CorelDRAW X7 -->
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="2953px" height="531px" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd"
viewBox="0 0 2953000 531540"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<font id="FontID0" horiz-adv-x="613" font-variant="normal" style="fill-rule:nonzero" font-weight="300">
<font-face
font-family="Roboto Lt">
<font-face-src>
<font-face-name name="Roboto Light"/>
</font-face-src>
</font-face>
<missing-glyph><path d="M0 0z"/></missing-glyph>
<glyph unicode="î" horiz-adv-x="222" d="M140.665 0l-58.667 0 0 528.336 58.667 0 0 -528.336zm107.504 623.164l0 -8.83231 -54.6699 0 -81.6656 82.0048 -81.0006 -82.0048 -53.6656 0 0 10.1691 110.83 108.003 47.8328 0 112.339 -109.34z"/>
<glyph unicode="c" horiz-adv-x="514" d="M270.503 39.0005c37.4974,0 70.4989,11.1668 99.3303,33.334 28.8314,22.001 43.3302,52.8343 43.3302,92.1673l52.1692 0 0.997626 -2.83326c1.33682,-48.8371 -17.9972,-89.6666 -57.6628,-122.668 -39.6656,-32.8352 -85.6694,-49.1696 -138.165,-49.3359 -70.3393,0.166271 -125.002,24.8342 -164.336,74.3364 -39.1668,49.5022 -58.8333,112.831 -58.8333,189.835l0 20.6642c0,76.6642 19.5003,139.834 58.667,189.336 39.0005,49.4955 93.6637,74.3298 163.996,74.3298 56.6718,0 103.833,-17.1658 141.669,-51.3312 37.6637,-34.1654 56.0001,-79.1649 54.6632,-134.832l-0.997626 -2.83326 -52.1692 0c0,42.3326 -13.8271,75.9991 -41.4946,101.332 -27.8338,25.1668 -61.6666,37.83 -101.671,37.83 -55.3283,0 -96.497,-20.3316 -123.499,-60.9948 -26.9958,-40.8361 -40.497,-91.6685 -40.497,-152.836l0 -20.6642c0,-62.172 13.5012,-113.503 40.497,-154 27.0024,-40.5036 68.3374,-60.8352 124.005,-60.8352z"/>
<glyph unicode="t" horiz-adv-x="321" d="M168.499 663.501l0 -135.165 116.17 0 0 -47.8328 -116.17 0 0 -344.334c0,-34.5045 6.16533,-58.9996 18.8352,-73.5051 12.4969,-14.3326 29.1639,-21.6618 50.001,-21.6618 7.16295,0 14,0.498813 20.6642,1.1639 6.66414,0.831355 14.6651,2.33444 23.6703,4.17008l8.83231 -43.3369c-7.83469,-3.99715 -17.505,-7.16295 -29.0043,-9.66367 -11.4993,-2.33444 -22.9986,-3.50499 -34.4979,-3.67126 -36.9986,0.166271 -66.0029,11.8385 -86.6671,35.1696 -20.6642,23.4974 -30.9996,60.6689 -30.9996,111.335l0 344.334 -91.336 0 0 47.8328 91.336 0 0 135.165 59.1659 0z"/>
<glyph unicode="A" horiz-adv-x="613" d="M462.832 198.335l-311.997 0 -71.6694 -198.335 -60.6623 0 261.331 711.001 55.1687 0 259.163 -711.001 -60.496 0 -70.8381 198.335zm-293.329 52.1625l274.327 0 -134.832 377.003 -2.83326 0 -136.661 -377.003z"/>
<glyph unicode="n" horiz-adv-x="556" d="M128.833 528.336l5.50024 -91.8348c17.1658,32.3297 40.1644,57.1639 68.8362,75.0015 28.6651,17.6646 62.6642,26.6632 101.997,26.6632 57.3302,0 101,-17.4984 130.835,-52.5017 29.9953,-34.9967 44.9996,-89.6666 44.9996,-163.83l0 -321.834 -58.667 0 0 321.335c0,60.496 -11.333,103.334 -33.8328,128.335 -22.6661,25.1668 -54.8362,37.6637 -96.5037,37.6637 -41.6675,0 -75.334,-10.3354 -100.833,-30.8333 -25.4993,-20.4979 -43.9953,-47.9991 -55.335,-82.497l0 -374.003 -58.6604 0 0 528.336 51.6637 0z"/>
<glyph unicode="e" horiz-adv-x="514" d="M277.832 -10.3354c-68.3307,0.166271 -123.832,24.3354 -166.497,72.6671 -42.6651,48.3383 -64.001,110.337 -64.001,186.17l0 26.8295c0,76.1654 21.6684,139.003 64.6661,188.505 43.1639,49.4955 96.6633,74.3298 160.498,74.3298 64.1673,0 113.669,-20.6642 148.666,-61.8328 35.0034,-41.1687 52.5017,-96.6633 52.5017,-166.331l0 -45.3388 -367.665 0 0 -16.1615c0,-60.1701 15.1639,-110.171 45.6647,-149.837 30.3345,-39.6656 72.5008,-59.6647 126.166,-59.6647 32.1701,0 61.8328,5.33397 88.8352,16.0019 27.0024,10.495 49.5022,24.8342 67.3331,42.6651l25.0005 -39.9981c-18.5026,-19.5003 -42.8314,-35.8347 -72.9996,-48.6708 -30.1682,-12.8295 -66.1692,-19.1677 -108.169,-19.334zm-5.33397 498.667c-44.9996,0 -81.8319,-16.1615 -110.83,-48.3316 -29.0043,-32.3297 -46.0038,-73.1659 -50.8324,-122.668l1.49644 -2.83326 302.666 0 0 12.171c0,46.8285 -12.1644,85.4965 -36.8323,115.997 -24.5017,30.3345 -59.8309,45.6647 -105.669,45.6647z"/>
<glyph unicode="s" horiz-adv-x="509" d="M393.497 135.331c0,24.668 -10.1625,46.1701 -30.4941,64.6661 -20.3383,18.3364 -57.0043,33.334 -110.005,45.1725 -62.4979,12.9957 -109.001,30.8333 -139.495,53.4993 -30.3345,22.4998 -45.6713,54.1644 -45.6713,94.8276 0,40.5036 16.9995,74.669 50.9986,102.669 34.0057,28 79.1716,42 135.005,42 58.9996,0 105.994,-14.9976 141.164,-44.8333 35.1696,-29.6627 52.0029,-66.3355 50.3335,-109.998l-0.997626 -2.99953 -54.1711 0c0,28.9977 -12.4969,54.1644 -37.3312,75.6666 -25.0005,21.4955 -57.8357,32.3297 -98.9977,32.3297 -42.1663,0 -74.1701,-9.33113 -95.6723,-27.8338 -21.4955,-18.6623 -32.1635,-40.1644 -32.1635,-64.9986 0,-23.9962 9.16485,-44.0019 27.5012,-59.8309 18.496,-15.8356 55.162,-29.6694 110.164,-41.6675 61.8328,-13.6675 108.668,-32.8352 140.333,-57.1639 31.8376,-24.5017 47.6666,-57.3369 47.6666,-98.6718 0,-43.9953 -17.8309,-79.6637 -53.4993,-107.165 -35.6684,-27.5012 -82.6633,-41.1687 -141.33,-41.335 -64.1673,0.166271 -114.501,15.3368 -151.167,46.0038 -36.4998,30.5007 -53.8319,67.0005 -52.0029,109.333l1.00428 2.99953 53.6656 0c2.33444,-38.1692 17.8309,-65.8366 46.6623,-83.0025 28.838,-17.3321 62.8371,-25.9981 101.838,-25.9981 42.3326,0 75.6666,9.4974 100.162,28.3326 24.3354,19.0014 36.4998,41.5012 36.4998,67.9982z"/>
<glyph unicode="b" horiz-adv-x="556" d="M503.003 249.5c0,-79.1649 -18.0038,-142.168 -53.8385,-189.163 -35.6618,-47.0015 -84.9977,-70.5055 -147.828,-70.6718 -38.5017,0.166271 -71.8357,7.83469 -99.8357,23.3378 -28.1663,15.3302 -51.1649,37.4974 -68.6699,66.1625l-9.82994 -79.1649 -45.8309 0 0 761.667 58.6604 0 0 -314.332c17.505,28.8314 40.0048,51.3312 67.3397,67.0005 27.3283,15.829 59.6647,23.83 97.1621,23.83 63.5022,0 113.171,-25.333 148.832,-75.9991 35.8347,-50.6661 53.8385,-118.165 53.8385,-202.332l0 -10.3354zm-59.1725 10.3354c0,67.3331 -12.9957,122.163 -38.9939,164.163 -26.171,42.1663 -64.6727,63.3359 -115.838,63.3359 -40.3307,0 -72.8333,-9.83659 -97.6676,-29.5031 -24.668,-19.8328 -43.1639,-45.1658 -55.5012,-76.4979l0 -241.665c13.0024,-30.667 32.1701,-54.8362 57.8357,-72.5008 25.4993,-17.8309 57.6694,-26.6699 96.3374,-26.6699 51.1649,0 89.4937,18.8352 115.332,56.6718 25.6656,37.83 38.495,88.496 38.495,152.331l0 10.3354z"/>
<glyph unicode="p" horiz-adv-x="556" d="M502.497 249.5c0,-79.1649 -17.9972,-142.168 -53.8319,-189.163 -35.6684,-47.0015 -84.9977,-70.5055 -147.835,-70.6718 -36.8323,0.166271 -69.1621,7.00333 -96.9958,21.0033 -27.8338,14 -50.4998,33.9991 -68.0048,59.6647l0 -273.502 -58.6604 0 0 731.506 44.8333 0 10.8276 -82.5036c17.505,29.3368 40.3373,52.0029 68.3374,68.1644 28,16.0019 60.8352,24.1691 98.6652,24.1691 63.5022,0 113.164,-25.333 148.832,-75.9991 35.8347,-50.6661 53.8319,-118.165 53.8319,-202.332l0 -10.3354zm-58.667 10.3354c0,67.0005 -13.3283,121.664 -39.9981,163.996 -26.6632,42.3326 -65.83,63.5022 -117.168,63.5022 -38.8342,0 -70.4989,-9.33113 -95.0006,-27.8338 -24.6613,-18.5026 -43.1639,-42.6651 -55.8338,-72.3345l0 -255.831c13.6675,-28.6651 33.0015,-51.1649 58.002,-67.6656 25.1668,-16.3345 56.3326,-24.668 93.8367,-24.668 50.9986,0 89.8329,19.334 116.33,57.6694 26.5036,38.495 39.8319,89.3274 39.8319,152.83l0 10.3354z"/>
<glyph unicode="ă" horiz-adv-x="537" d="M411.667 0c-3.66461,18.5026 -6.3316,34.4979 -8.16723,47.8328 -1.66936,13.3349 -2.66699,27.0024 -2.66699,41.0024 -18.1634,-28.6718 -43.6627,-52.3354 -76.6642,-71.0043 -32.8352,-18.6623 -70.4989,-28 -113.171,-28.1663 -51.83,0.166271 -92.001,13.8337 -120.5,41.335 -28.3326,27.5012 -42.6651,64.8324 -42.6651,112 0,47.334 20.6642,85.5032 61.9991,114.833 41.335,29.3368 95.1668,44.0019 161.17,44.0019l129.831 0 0 65.3312c0,37.8366 -11.9981,67.3331 -35.8347,88.8352 -23.9962,21.4955 -57.6628,32.3297 -101.332,32.3297 -39.9981,0 -72.3345,-9.82994 -96.8295,-29.3302 -24.668,-19.5003 -37.0053,-44.1682 -37.0053,-73.6647l-54.1644 0 -0.997626 2.83326c-1.83563,39.6656 15.1639,74.6623 50.9986,104.831 36.001,30.0019 82.9958,45.1658 140.998,45.1658 57.8357,0 104.505,-14.8314 139.668,-44.5008 35.0034,-29.6627 52.668,-72.1682 52.668,-127.497l0 -259.669c0,-18.6689 0.997626,-36.6661 3.1658,-54.3307 2.16817,-17.505 5.66651,-34.8371 10.5017,-52.1692l-61.0015 0zm-194.331 41.5012c44.8333,0 83.8338,10.6679 116.662,31.9972 32.8352,21.3359 55.1687,48.6708 66.8343,82.3374l0 101 -130.33 0c-47.5003,0 -86.6671,-11.333 -117.667,-33.9991 -31.0062,-22.4998 -46.3364,-49.8347 -46.3364,-81.6723 0,-29.9953 9.83659,-54.1644 29.5031,-72.3279 19.6665,-18.1701 46.8285,-27.3349 81.3331,-27.3349zm185.332 707.496l0.997626 -2.99953c1.33682,-36.4998 -10.5017,-65.9963 -35.6684,-88.8286 -25.0005,-22.839 -59.1659,-34.172 -102.496,-34.172 -43.3369,0 -77.5022,11.5059 -102.835,34.3383 -25.1668,22.9986 -36.9986,52.4951 -35.3359,88.6623l1.00428 2.99953 45.8309 0c0,-25.1668 7.33587,-45.3321 22.001,-60.6623 14.6651,-15.1706 37.8366,-22.8323 69.335,-22.8323 30.667,0 53.4993,7.82804 68.6632,23.3311 15.0043,15.6694 22.6661,35.6684 22.6661,60.1635l45.8376 0z"/>
<glyph unicode=" " horiz-adv-x="243" d=""/>
<glyph unicode="u" horiz-adv-x="556" d="M422.834 86.002c-16.8333,-30.9996 -39.6656,-54.8362 -68.1644,-71.3369 -28.3326,-16.667 -62.172,-24.8342 -101.173,-25.0005 -55.6609,0.166271 -99.3303,19.0014 -130.995,56.6718 -31.505,37.83 -47.334,96.3307 -47.334,175.828l0 306.171 58.667 0 0 -307.169c0,-64.4998 11.0005,-110.67 33.0015,-138.67 21.828,-28 52.9939,-42 93.4975,-42 43.8357,0 78.9986,9.83659 105.163,29.5031 26.171,19.8328 44.667,46.6689 55.335,80.8343l0 377.502 58.667 0 0 -528.336 -51.83 0 -4.83516 86.002z"/>
<glyph unicode="P" horiz-adv-x="616" d="M149.498 295.33l0 -295.33 -58.667 0 0 711.001 245.17 0c74.5027,0 132.165,-19.1677 173.002,-57.1706 40.8295,-38.1625 61.334,-88.1635 61.334,-150.329 0,-63.1697 -20.5045,-113.669 -61.334,-151.499 -40.8361,-37.6703 -98.4989,-56.6718 -173.002,-56.6718l-186.503 0zm0 49.8347l186.503 0c58.5008,0 102.503,15.0043 131.833,44.667 29.1639,29.8357 43.8357,67.3331 43.8357,112.665 0,45.505 -14.6717,83.335 -43.8357,113.503 -29.3302,30.1682 -73.3321,45.1658 -131.833,45.1658l-186.503 0 0 -316.001z"/>
<glyph unicode="a" horiz-adv-x="537" d="M411.667 0c-3.66461,18.5026 -6.3316,34.4979 -8.16723,47.8328 -1.66936,13.3349 -2.66699,27.0024 -2.66699,41.0024 -18.1634,-28.6718 -43.6627,-52.3354 -76.6642,-71.0043 -32.8352,-18.6623 -70.4989,-28 -113.171,-28.1663 -51.83,0.166271 -92.001,13.8337 -120.5,41.335 -28.3326,27.5012 -42.6651,64.8324 -42.6651,112 0,47.334 20.6642,85.5032 61.9991,114.833 41.335,29.3368 95.1668,44.0019 161.17,44.0019l129.831 0 0 65.3312c0,37.8366 -11.9981,67.3331 -35.8347,88.8352 -23.9962,21.4955 -57.6628,32.3297 -101.332,32.3297 -39.9981,0 -72.3345,-9.82994 -96.8295,-29.3302 -24.668,-19.5003 -37.0053,-44.1682 -37.0053,-73.6647l-54.1644 0 -0.997626 2.83326c-1.83563,39.6656 15.1639,74.6623 50.9986,104.831 36.001,30.0019 82.9958,45.1658 140.998,45.1658 57.8357,0 104.505,-14.8314 139.668,-44.5008 35.0034,-29.6627 52.668,-72.1682 52.668,-127.497l0 -259.669c0,-18.6689 0.997626,-36.6661 3.1658,-54.3307 2.16817,-17.505 5.66651,-34.8371 10.5017,-52.1692l-61.0015 0zm-194.331 41.5012c44.8333,0 83.8338,10.6679 116.662,31.9972 32.8352,21.3359 55.1687,48.6708 66.8343,82.3374l0 101 -130.33 0c-47.5003,0 -86.6671,-11.333 -117.667,-33.9991 -31.0062,-22.4998 -46.3364,-49.8347 -46.3364,-81.6723 0,-29.9953 9.83659,-54.1644 29.5031,-72.3279 19.6665,-18.1701 46.8285,-27.3349 81.3331,-27.3349z"/>
<glyph unicode="r" horiz-adv-x="341" d="M318.336 478.002l-41.5012 2.99953c-36.8323,0 -67.0005,-10.3354 -90.4979,-30.9996 -23.6703,-20.6708 -40.5036,-49.1696 -50.5065,-85.1706l0 -364.832 -58.6604 0 0 528.336 51.3312 0 7.32922 -87.8376 0 -5.99906c15.1706,32.6689 35.6684,58.002 61.5003,76.3317 25.6722,18.1701 56.3392,27.3349 91.6685,27.3349 7.1696,0 14,-0.665084 20.4979,-1.83563 6.67079,-1.1639 12.0048,-2.32779 16.1682,-3.66461l-7.32922 -54.6632z"/>
<glyph unicode="M" horiz-adv-x="862" d="M432.664 84.9977l2.83326 0 264.67 626.003 71.3302 0 0 -711.001 -58.667 0 0 597.165 -2.83326 0.498813 -255 -597.664 -41.8338 0 -260.833 612.336 -2.83326 -0.505464 0 -611.831 -58.667 0 0 711.001 78.1673 0 263.666 -626.003z"/>
<glyph unicode="l" horiz-adv-x="226" d="M142.501 0l-58.002 0 0 761.667 58.002 0 0 -761.667z"/>
<glyph unicode="i" horiz-adv-x="226" d="M142.501 0l-58.002 0 0 528.336 58.002 0 0 -528.336zm0 679.669l-58.002 0 0 81.9982 58.002 0 0 -81.9982z"/>
</font>
<style type="text/css">
<![CDATA[
@font-face { font-family:"Roboto Lt";font-variant:normal;font-weight:300;src:url("#FontID0") format(svg)}
.fil0 {fill:none}
.fil3 {fill:#E31E24}
.fil1 {fill:#1A1A1A}
.fil2 {fill:#666666}
.fil4 {fill:#E31E24;fill-rule:nonzero}
.fnt0 {font-weight:300;font-size:177602px;font-family:'Roboto Lt'}
]]>
</style>
</defs>
<g id="Layer_x0020_1">
<metadata id="CorelCorpID_0Corel-Layer"/>
<rect class="fil0" width="2953000" height="531540"/>
<g transform="matrix(0.91865 0 0 1 -213709 -35664.7)">
<text x="1476500" y="265770" class="fil1 fnt0">Anunturi Mica Publicitate </text>
</g>
<g transform="matrix(0.91865 0 0 1 -213709 -35664.7)">
<text x="1476500" y="436290" class="fil1 fnt0">în presa scrisă</text>
</g>
<rect class="fil2" x="1081802" y="94832" width="4757" height="341878"/>
<g id="_2461633043920">
<path class="fil3" d="M588248 126866l-179 -97c-6882,-3628 -16437,-12408 -22767,-13824 -5369,-1201 -11313,3948 -14891,7496 -9112,10847 -79172,105956 -79426,106009 -25252,2946 -99641,15369 -114205,12592 -2563,-488 -5130,-1594 -8083,-798 -2122,573 -1600,567 -2486,2351 -2527,5085 -784,13684 3886,16631 12073,7618 82871,-8090 101170,-10883 2334,-469 4966,-1088 7796,-1070 -575,2023 -1388,2819 -2441,4235 -10239,13797 -20216,28577 -29818,42828 -367,460 -23823,32905 -44902,62621 -17209,24260 -32833,46703 -33012,48442 17087,-4696 34268,-17718 50932,-34585 25794,-26108 51856,-59251 72918,-87156 12904,-17096 24330,-31413 32752,-41296 3890,-4561 35831,-1825 41834,-4349 -963,8107 -11686,11139 -8779,27980 1786,10342 6107,21755 18939,18451 15761,-4060 34711,-17912 49445,-25987 3070,4120 1193,15598 8083,23550 4580,5284 10070,6966 17129,4392 12298,-4484 18494,-14651 28129,-19240 3627,-1728 5300,-5058 7780,-7877 1176,-1337 1768,-3560 3265,-4647 913,14695 -1880,64166 -11878,71122 -5929,7118 -13605,8546 -19411,4465 -5059,-3555 -8698,-11294 -8528,-23094 -3365,1090 -6440,2904 -9191,4305 537,11837 3410,21201 7683,28334 9621,16058 26335,20803 39442,16983 7829,-2282 11214,-12989 14959,-19801 5286,-9993 4446,-46434 6150,-61278 1592,-2931 27827,-8724 29739,-8541 2256,4417 -4020,10464 -1235,15357 1106,7491 5371,10710 13410,11134 3701,-3398 28917,-16289 31158,-19949 1852,-3027 -21292,7318 -20325,5727 1148,-1886 125,-2377 1975,-4747 3943,-5056 10794,-15971 18313,-35462 1660,-4303 -1005,-13864 -11891,-14386 -842,-41 -6931,6096 -8813,6773 -7230,4264 -10764,12711 -14843,17568 -1115,1329 -2221,3100 -3358,4464l-33545 16209c749,-7261 3700,-26377 6317,-33512 2854,-7780 6118,-16984 14261,-17933 1650,1810 3553,3132 5567,3996l52 870c174,2076 53,4936 457,6995 562,2871 2710,4505 3841,4344 476,-67 9168,-5183 10110,-6092 599,-2227 1203,-4778 2241,-6431 2262,-3598 3946,-8476 4073,-12919 119,-4257 -2550,-10484 -6350,-11985 -3516,-1390 -1691,-2700 -8829,-3501l-5059 1108c-302,1352 -512,3537 -658,6031 -5864,-4042 -13013,-7504 -20121,-6731 -14609,1590 -17441,8272 -19911,16568 -3954,13287 -3908,28848 -5723,37979 -9506,2114 -19707,7990 -30947,10454 938,-8237 10788,-14051 12133,-18300 563,-1777 996,-3268 676,-5321 -969,-6224 -4219,-11195 -9808,-14318 -6532,-3649 -12037,-4559 -16385,1408 -10063,13808 -10551,13854 -23710,24345 -1614,1288 -2080,1014 -3656,2340 -7175,6043 -26613,17114 -36392,16621 216,-1501 -64,-504 434,-1550l18956 -22426c2782,-4237 8661,-5855 11558,-13774 3129,-8552 -6380,-18339 -13738,-19229 -7237,-875 -8415,3113 -11691,5868 -2138,1796 -7743,7576 -8745,7898l-40757 1408c575,-1997 14902,-20822 17717,-24865 8732,-12539 20765,-26231 28962,-38319 2222,-3277 11423,-10835 15703,-9721 688,178 3057,2847 6284,5229l352 8839c172,3182 52,7561 455,10715 563,4400 2710,6902 3843,6656 475,-103 9167,-7939 10110,-9333 598,-3410 1201,-7320 2241,-9851 2260,-5513 3946,-12984 4071,-19791 121,-6521 -2549,-16062 -6349,-18362 -3515,-2128 -1690,-4134 -8828,-5361l-5059 1697c-251,1713 -437,4300 -578,7304zm277595 99250c-9521,70 -28686,3278 -36713,2115 -4414,-637 -3795,-3062 -10953,-2759l-874 2599c-459,1148 -289,711 -761,1336 -5349,-3663 -13670,-13154 -23092,-3447 -13497,13903 -23736,27790 -21909,47716 735,8018 4452,19895 12540,23445 10678,4690 31639,-18970 38197,-26723 8651,-10233 11171,-19110 12824,-32448 1290,-760 25609,-5001 25941,-5087l-6660 13172c-6440,11256 -9178,27253 -1619,38244 4866,7077 12552,-2453 16828,-5595l23844 -20019c2000,-1795 16142,-12196 18337,-12692 -9406,20408 -22510,28801 -3961,48151 7783,8118 38727,-4157 48425,-6900 5211,-3144 39808,-10027 41786,-11659 1165,-963 -94,-641 1754,-1279 826,-285 2135,-314 3044,-543 2640,-667 25528,-10211 26587,-14199 -17778,2641 -92820,17349 -106972,15052 436,-10349 23989,-27607 21909,-38629 -324,-1721 -5459,-9481 -6535,-10886 -1483,-1936 -10026,-8976 -14017,-7517 -5572,2040 -25620,15245 -30932,20109l-15865 13262c-99,-10373 13780,-19867 4954,-31260 -339,-437 -1310,-1553 -1682,-1943 -4634,-4833 -7750,-957 -12375,5188 -590,783 -1517,2449 -2050,3196zm-51916 38130c4453,-5926 6457,-16987 6558,-22281l-678 -3739c-2479,2071 -14099,15779 -17327,23168 -4590,10502 7081,8664 11447,2852zm-17597 -64614c8190,-10835 -3549,-20733 -11620,-24768 -3562,2610 -16904,21310 -18756,27147 -845,2663 853,5677 2288,6485 9271,5223 21285,135 28088,-8864z"/>
<path class="fil4" d="M140327 367790c4,3545 -3683,9803 -8237,13976 -4553,4173 -8249,4682 -8254,1138l0 -269638c-5,-3544 3683,-9802 8236,-13976 2525,-2312 4785,-3499 6298,-3493l12 -18 87169 0c15550,0 28804,4564 39112,12304 7833,-1293 15879,-1963 24083,-1963 35830,0 68240,14495 91672,37926 23490,23491 38020,56079 38020,92196 0,39124 -17104,75789 -44755,103440 -22653,22655 -52027,37726 -83987,41084l0 37524c6,3545 -3683,9803 -8236,13976 -4554,4172 -8250,4681 -8254,1136l0 -51956c-33843,-677 -64475,-13019 -87132,-33583 -22936,-20816 -37747,-50124 -39521,-84369 -181,-3382 3363,-9618 7914,-13927 2639,-2495 5034,-3797 6619,-3792l8 -13 65278 -139 86 0c12209,0 27997,5272 40696,15984 12766,10766 22496,27111 22542,49282l0 150 0 50569c32996,-238 61956,-12814 82173,-33031 18583,-18584 30078,-45793 30078,-77222 0,-34435 -14068,-65721 -36813,-88465 -21864,-21863 -51692,-35728 -84718,-36832 5629,9904 8669,21652 8669,34297 0,20918 -9827,41058 -25371,56758 -14032,14170 -32211,22930 -50765,22930 -6141,0 -12282,6 -18423,12 -15338,14 -30675,29 -46013,-47 -1428,-5 -2064,-1055 -1944,-2759l-12 12c2682,-38094 20355,-71242 47756,-95723 10858,-9698 23207,-17627 36648,-23503 -5553,-1558 -11573,-2393 -18012,-2393l-72622 0 0 252148zm115411 -235317c-1517,-1532 -3125,-2976 -4825,-4326 -22437,3963 -42011,13233 -57075,26691 -16806,15014 -27993,37458 -30544,65318 14611,63 29223,49 43833,36 6142,-6 12283,-12 18424,-12 14754,0 27596,-5337 36143,-13970 6678,-6744 10900,-17484 10900,-30743 0,-16844 -6051,-32082 -16856,-42994zm-54513 196442c19164,17395 44174,28744 71981,31841l0 -34603 0 -151c-43,-20194 -9159,-35296 -21120,-45383 -12024,-10141 -26839,-15132 -38229,-15132l-86 0 -48522 102c5058,25195 17904,46926 35976,63326z"/>
<path class="fil4" d="M452494 405487l3584 11387 4797 0 -11702 -35110c-212,-790 -897,-1265 -1740,-1265l-4850 0c-844,0 -1530,475 -1740,1265l-11705 35110 4798 0 3585 -11387 14973 0zm-1266 -4007l-12442 0 4587 -14444c316,-949 633,-2004 896,-2953l1477 0c263,949 580,2004 895,2953l4587 14444zm49682 -21456c-5008,0 -9173,210 -12968,475l0 36375c3795,264 7960,475 12968,475 10439,0 14182,-4587 14182,-18663 0,-14075 -3743,-18662 -14182,-18662zm0 33265c-3163,0 -5956,-52 -8330,-105l0 -29048c2479,-53 5115,-105 8330,-105 6959,0 9332,3636 9332,14655 0,11018 -2373,14603 -9332,14603zm70243 -32790l-4797 0 -8540 28783c-422,1318 -792,2689 -1107,4007l-1425 0c-315,-1318 -685,-2635 -1053,-3954l-8593 -28836 -4797 0 11018 35057c210,738 895,1318 1792,1318l4692 0c843,0 1528,-580 1791,-1318l11019 -35057zm49524 32526l-14603 0c-2161,0 -3164,-1054 -3164,-3531l0 -9965 15712 0 0 -3742 -15712 0 0 -7908c0,-2425 1003,-3479 3164,-3479l14603 0 211 -3638c-4851,-316 -10386,-316 -15605,-316 -4271,0 -6959,2425 -7011,6326l0 23828c52,3902 2740,6327 7011,6327 5219,0 10754,0 15605,-317l-211 -3585zm55007 3849l-3533 -11492c-790,-3058 -2688,-4745 -4481,-5220l0 -263c4798,-632 6695,-3480 6695,-9385 0,-8170 -3321,-10490 -11756,-10490 -5851,0 -8593,53 -12547,475l0 36375 4587 0 0 -15235c2003,0 4639,53 8014,53 2425,0 3901,1053 4850,3795l3215 11387 4956 0zm-21035 -19190l0 -13601c2056,0 4744,-52 7854,-52 5378,0 7171,1423 7171,6748 0,5377 -1793,6853 -7171,6905l-7854 0zm74144 -13073l0 -4112 -28099 0 0 4112 11703 0 0 32263 4640 0 0 -32263 11756 0zm32442 32263l0 -36375 -4639 0 0 36375 4639 0zm41247 -37008c-8118,0 -11808,1108 -11808,9595 0,5535 1897,8803 7170,10121l7538 1898c3164,791 4587,1792 4587,6010 0,5009 -1740,5852 -7328,5852 -3005,52 -4955,-53 -11124,-263l-316 3426c4955,896 8910,1002 11281,1002 8489,0 12180,-1530 12180,-9911 0,-5642 -1740,-8857 -7328,-10227l-7382 -1847c-3215,-790 -4585,-1950 -4585,-5956 0,-5377 2055,-5535 7328,-5535 3374,0 7221,105 10279,263l316 -3374c-3638,-791 -7380,-1001 -10808,-1054zm46046 37008l0 -36375 -4640 0 0 36375 4640 0zm59119 -36375l-4587 0 0 26358c0,1845 52,3638 158,5535l-896 0c-791,-1792 -1740,-3795 -2478,-5270l-11915 -25147c-420,-1001 -1001,-1476 -2055,-1476l-4375 0c-1213,0 -1846,632 -1846,1845l0 34530 4639 0 0 -27255c0,-1582 -53,-3215 -211,-4797l845 0c420,1475 1423,3427 2055,4797l12283 25780c423,1000 1002,1475 2057,1475l4533 0c1161,0 1793,-632 1793,-1845l0 -34530zm56060 15341l-4534 0 0 14127c-2530,1847 -5270,3533 -8961,3533 -5852,0 -7855,-3901 -7855,-14603 0,-12705 2688,-14920 10544,-14920 2689,0 6062,106 9382,423l475 -3480c-3110,-791 -6431,-1108 -10121,-1108 -11229,0 -15184,4324 -15184,18769 0,13074 3322,18978 11494,18978 5008,0 8750,-2425 10860,-4534l526 3849 3374 0 0 -21034z"/>
</g>
</g>
</svg>
<?php
date_default_timezone_set('UTC');
if (PHP_SAPI == 'cli-server') {
// To help the built-in PHP dev server, check if the request was actually for
// something which should probably be served as a static file
$file = __DIR__ . $_SERVER['REQUEST_URI'];
if (is_file($file)) {
return false;
}
}
require __DIR__ . '/../vendor/autoload.php';
session_start();
// Instantiate the app
$settings = require __DIR__ . '/../src/settings.php';
$app = new \Slim\App($settings);
require __DIR__ . '/../src/api.php';
require __DIR__ . '/../src/dependencies.php';
require __DIR__ . '/../src/middleware.php';
require __DIR__ . '/../src/routes.php';
// Run app
$app->run();
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){$.formUtils.addValidator({name:"cpf",validatorFunction:function(a){var b=a.replace(/\D/g,""),c=0,d=0,e=0,f=0;if(11!==b.length||"00000000000"===b)return!1;for(i=1;i<=9;i++)c+=parseInt(b.substring(i-1,i))*(11-i);if(e=10*c%11,e>=10&&(e=0),e!==parseInt(b.substring(9,10)))return!1;for(i=1;i<=10;i++)d+=parseInt(b.substring(i-1,i))*(12-i);return f=10*d%11,f>=10&&(f=0),f===parseInt(b.substring(10,11))},errorMessage:"",errorMessageKey:"badBrazilCPFAnswer"}),$.formUtils.addValidator({name:"brphone",validatorFunction:function(a){return!!a.match(/^(\+[\d]{1,3}[\s]{0,1}){0,1}(\(){0,1}(\d){2}(\)){0,1}(\s){0,1}(\d){4,5}([-. ]){0,1}(\d){4}$/g)},errorMessage:"",errorMessageKey:"badBrazilTelephoneAnswer"}),$.formUtils.addValidator({name:"cep",validatorFunction:function(a){return!!a.match(/^(\d){5}([-. ]){0,1}(\d){3}$/g)},errorMessage:"",errorMessageKey:"badBrazilCEPAnswer"})});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.formUtils.addValidator({name:"time",validatorFunction:function(a){if(null===a.match(/^(\d{2}):(\d{2})$/))return!1;var b=parseInt(a.split(":")[0],10),c=parseInt(a.split(":")[1],10);return!(b>23||c>59)},errorMessage:"",errorMessageKey:"badTime"}),a.formUtils.addValidator({name:"birthdate",validatorFunction:function(b,c,d){var e="yyyy-mm-dd";c.valAttr("format")?e=c.valAttr("format"):"undefined"!=typeof d.dateFormat&&(e=d.dateFormat);var f=a.formUtils.parseDate(b,e);if(!f)return!1;var g=new Date,h=g.getFullYear(),i=f[0],j=f[1],k=f[2];if(i===h){var l=g.getMonth()+1;if(j===l){var m=g.getDate();return k<=m}return j<l}return i<h&&i>h-124},errorMessage:"",errorMessageKey:"badDate"})}(a)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";var c="undefined"!=typeof b.FileReader,d=function(b){var c=a.split((b.valAttr("allowing")||"").toLowerCase());return a.inArray("jpg",c)>-1&&a.inArray("jpeg",c)===-1?c.push("jpeg"):a.inArray("jpeg",c)>-1&&a.inArray("jpg",c)===-1&&c.push("jpg"),c},e=function(a,b,c,d){var e=d[b]||"";a.errorMessageKey="",a.errorMessage=e.replace("%s",c)},f=function(c,d,e){var f=new FileReader,g=new Image;f.readAsDataURL(c),f.onload=function(c){g.onload=function(){a(b).trigger("imageValidation",[this]),d(this)},g.onerror=function(){e()},g.src=c.target.result}};a.formUtils.addValidator({name:"mime",validatorFunction:function(b,f,g,h){if(c){var i=!0,j=f.get(0).files||[],k="",l=d(f);return j.length&&(a.each(j,function(b,c){return i=!1,k=c.type||"",a.each(l,function(a,b){if(i=k.indexOf(b)>-1)return!1}),i}),i||(a.formUtils.warn("Trying to upload a file with mime type "+k+" which is not allowed"),e(this,"wrongFileType",l.join(", "),h))),i}return a.formUtils.warn("FileReader not supported by browser, will check file extension"),a.formUtils.validators.validate_extension.validatorFunction(b,f,g,h)},errorMessage:"",errorMessageKey:"wrongFileType"}),a.formUtils.addValidator({name:"extension",validatorFunction:function(b,c,f,g){var h=!0,i=this,j=d(c);return a.each(c.get(0).files||[b],function(b,c){var d="string"==typeof c?c:c.value||c.fileName||c.name,f=d.substr(d.lastIndexOf(".")+1);if(a.inArray(f.toLowerCase(),j)===-1)return h=!1,e(i,"wrongFileType",j.join(", "),g),!1}),h},errorMessage:"",errorMessageKey:"wrongFileType"}),a.formUtils.addValidator({name:"size",validatorFunction:function(b,d,f,g){var h=d.valAttr("max-size");if(!h)return a.formUtils.warn('Input "'+d.attr("name")+'" is missing data-validation-max-size attribute'),!0;if(!c)return!0;var i=a.formUtils.convertSizeNameToBytes(h),j=!0;return a.each(d.get(0).files||[],function(a,b){return j=b.size<=i}),j||e(this,"wrongFileSize",h,g),j},errorMessage:"",errorMessageKey:"wrongFileSize"}),a.formUtils.convertSizeNameToBytes=function(a){return a=a.toUpperCase(),"M"===a.substr(a.length-1,1)?1024*parseInt(a.substr(0,a.length-1),10)*1024:"MB"===a.substr(a.length-2,2)?1024*parseInt(a.substr(0,a.length-2),10)*1024:"KB"===a.substr(a.length-2,2)?1024*parseInt(a.substr(0,a.length-2),10):"B"===a.substr(a.length-1,1)?parseInt(a.substr(0,a.length-1),10):parseInt(a,10)},a.formUtils.checkImageDimension=function(a,b,c){var d=!1,e={width:0,height:0},f=function(a){a=a.replace("min","").replace("max","");var b=a.split("x");e.width=b[0],e.height=b[1]?b[1]:b[0]},g=!1,h=!1,i=b.split("-");return 1===i.length?0===i[0].indexOf("min")?g=i[0]:h=i[0]:(g=i[0],h=i[1]),g&&(f(g),(a.width<e.width||a.height<e.height)&&(d=c.imageTooSmall+" ("+c.min+" "+e.width+"x"+e.height+"px)")),!d&&h&&(f(h),(a.width>e.width||a.height>e.height)&&(d=a.width>e.width?c.imageTooWide+" "+e.width+"px":c.imageTooTall+" "+e.height+"px",d+=" ("+c.max+" "+e.width+"x"+e.height+"px)")),d},a.formUtils.checkImageRatio=function(a,b,c){var d=a.width/a.height,e=function(a){var b=a.replace("max","").replace("min","").split(":");return b[0]/b[1]},f=b.split("-"),g=function(a,b,c){return a>=b&&a<=c};if(1===f.length){if(d!==e(f[0]))return c.imageRatioNotAccepted}else if(2===f.length&&!g(d,e(f[0]),e(f[1])))return c.imageRatioNotAccepted;return!1},a.formUtils.addValidator({name:"dimension",validatorFunction:function(b,d,e,g,h,i){if(c){var j=this,k=a.formUtils.asyncValidation(this.name,d,h);return k.run(i,function(b){var c=d.get(0).files||[];d.attr("data-validation").indexOf("mime")===-1?(alert("You should validate file type being jpg, gif or png on input "+d[0].name),b(!1)):c.length>1?(alert("Validating image dimensions does not support inputs allowing multiple files"),b(!1)):0===c.length?b(!0):f(c[0],function(c){var e=!1;d.valAttr("dimension")&&(e=a.formUtils.checkImageDimension(c,d.valAttr("dimension"),g)),!e&&d.valAttr("ratio")&&(e=a.formUtils.checkImageRatio(c,d.valAttr("ratio"),g)),e?(j.errorMessage=g.wrongFileDim+" "+d.valAttr("has-not-valid-dim"),b(!1)):b(!0)},function(a){throw a})})}return!0},errorMessage:"",errorMessageKey:""}),a(b).one("validatorsLoaded formValidationSetup",function(b,c,d){var e;e=c?c.find('input[type="file"]'):a('input[type="file"]'),a.formUtils.dialogs.removeInputStylingAndMessage(e,d)})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){"use strict";var b="placeholder"in document.createElement("INPUT"),c="options"in document.createElement("DATALIST"),d=!1,e=function(e){e.each(function(){var e=a(this),f=e.find("input,textarea,select"),g=!1;f.each(function(){var b=[],e=a(this),f=e.attr("required"),h={};switch(f&&b.push("required"),(e.attr("type")||"").toLowerCase()){case"time":b.push("time"),a.formUtils.validators.validate_date||d||(d=!0,a.formUtils.loadModules("date"));break;case"url":b.push("url");break;case"email":b.push("email");break;case"date":b.push("date");break;case"number":b.push("number");var i=e.attr("max"),j=e.attr("min"),k=e.attr("step");j||i?(j||(j="0"),i||(i="9007199254740992"),k||(k="1"),h["data-validation-allowing"]="range["+j+";"+i+"]",0!==j.indexOf("-")&&0!==i.indexOf("-")||(h["data-validation-allowing"]+=",negative"),(j.indexOf(".")>-1||i.indexOf(".")>-1||k.indexOf(".")>-1)&&(h["data-validation-allowing"]+=",float")):h["data-validation-allowing"]+=",float,negative"}if(e.attr("pattern")&&(b.push("custom"),h["data-validation-regexp"]=e.attr("pattern")),e.attr("maxlength")&&(b.push("length"),h["data-validation-length"]="max"+e.attr("maxlength")),!c&&e.attr("list")){var l=[],m=a("#"+e.attr("list"));if(m.find("option").each(function(){l.push(a(this).text())}),0===l.length){var n=a.trim(a("#"+e.attr("list")).text()).split("\n");a.each(n,function(b,c){l.push(a.trim(c))})}m.remove(),a.formUtils.suggest(e,l)}if(b.length){f||(h["data-validation-optional"]="true"),g=!0;var o=(e.attr("data-validation")||"")+" "+b.join(" ");e.attr("data-validation",a.trim(o)),a.each(h,function(a,b){e.attr(a,b)})}}),g&&e.trigger("html5ValidationAttrsFound"),b||f.filter("input[placeholder]").each(function(){this.__defaultValue=this.getAttribute("placeholder"),a(this).bind("focus",function(){this.value===this.__defaultValue&&(this.value="",a(this).removeClass("showing-placeholder"))}).bind("blur",function(){""===a.trim(this.value)&&(this.value=this.__defaultValue,a(this).addClass("showing-placeholder"))})})})};a.formUtils.$win.bind("validatorsLoaded formValidationSetup",function(b,c){c||(c=a("form")),e(c)}),a.formUtils.setupValidationUsingHTML5Attr=e}(a,window)});
\ No newline at end of file
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
define(["jquery"], function (a0) {
return (factory(a0));
});
} else if (typeof exports === 'object') {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
module.exports = factory(require("jquery"));
} else {
factory(jQuery);
}
}(this, function (jQuery) {
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
/**
*/
(function ($, undefined) {
var disableFormSubmit = function () {
return false;
},
HaltManager = {
numHalted: 0,
haltValidation: function($form) {
this.numHalted++;
$.formUtils.haltValidation = true;
$form
.unbind('submit', disableFormSubmit)
.bind('submit', disableFormSubmit)
.find('*[type="submit"]')
.addClass('disabled')
.attr('disabled', 'disabled');
},
unHaltValidation: function($form) {
this.numHalted--;
if (this.numHalted === 0) {
$.formUtils.haltValidation = false;
$form
.unbind('submit', disableFormSubmit)
.find('*[type="submit"]')
.removeClass('disabled')
.removeAttr('disabled', 'disabled');
}
}
};
function AsyncValidation($form, $input) {
this.$form = $form;
this.$input = $input;
this.reset();
$input.on('change paste', this.reset.bind(this));
}
AsyncValidation.prototype.reset = function() {
this.haltedFormValidation = false;
this.hasRun = false;
this.isRunning = false;
this.result = undefined;
};
AsyncValidation.prototype.run = function(eventContext, callback) {
if (eventContext === 'keyup') {
return null;
} else if (this.isRunning) {
if (!this.haltedFormValidation && eventContext === 'submit') {
HaltManager.haltValidation();
this.haltedFormValidation = true;
}
return null; // Waiting for result
} else if(this.hasRun) {
//this.$input.one('keyup change paste', this.reset.bind(this));
return this.result;
} else {
if (eventContext === 'submit') {
HaltManager.haltValidation(this.$form);
this.haltedFormValidation = true;
}
this.isRunning = true;
this.$input
.attr('disabled', 'disabled')
.addClass('async-validation');
this.$form.addClass('async-validation');
callback(function(result) {
this.done(result);
}.bind(this));
return null;
}
};
AsyncValidation.prototype.done = function(result) {
this.result = result;
this.hasRun = true;
this.isRunning = false;
this.$input
.removeAttr('disabled')
.removeClass('async-validation');
this.$form.removeClass('async-validation');
if (this.haltedFormValidation) {
HaltManager.unHaltValidation(this.$form);
this.$form.trigger('submit');
} else {
this.$input.trigger('validation.revalidate');
}
};
$.formUtils = $.extend($.formUtils || {}, {
asyncValidation: function(validatorName, $input, $form) {
// Return async validator attached to this input element
// or create a new async validator and attach it to the input
var asyncValidation,
input = $input.get(0);
if (!input.asyncValidators) {
input.asyncValidators = {};
}
if (input.asyncValidators[validatorName]) {
asyncValidation = input.asyncValidators[validatorName];
} else {
asyncValidation = new AsyncValidation($form, $input);
input.asyncValidators[validatorName] = asyncValidation;
}
return asyncValidation;
}
});
})(jQuery);
/**
* Deprecated functions and attributes
* @todo: Remove in release of 3.0
*/
(function ($, undefined) {
'use strict';
/**
* @deprecated
* @param language
* @param conf
*/
$.fn.validateForm = function (language, conf) {
$.formUtils.warn('Use of deprecated function $.validateForm, use $.isValid instead');
return this.isValid(language, conf, true);
};
$(window)
.on('formValidationPluginInit', function(evt, config) {
convertDeprecatedLangCodeToISO6391(config);
addSupportForCustomErrorMessageCallback(config);
addSupportForElementReferenceInPositionParam(config);
})
.on('validatorsLoaded formValidationSetup', function(evt, $form) {
if( !$form ) {
$form = $('form');
}
addSupportForValidationDependingOnCheckedInput($form);
});
function addSupportForCustomErrorMessageCallback(config) {
if (config &&
config.errorMessagePosition === 'custom' &&
typeof config.errorMessageCustom === 'function') {
$.formUtils.warn('Use of deprecated function errorMessageCustom, use config.submitErrorMessageCallback instead');
config.submitErrorMessageCallback = function($form, errorMessages) {
config.errorMessageCustom(
$form,
config.language.errorTitle,
errorMessages,
config
);
};
}
}
function addSupportForElementReferenceInPositionParam(config) {
if (config.errorMessagePosition && typeof config.errorMessagePosition === 'object') {
$.formUtils.warn('Deprecated use of config parameter errorMessagePosition, use config.submitErrorMessageCallback instead');
var $errorMessageContainer = config.errorMessagePosition;
config.errorMessagePosition = 'top';
config.submitErrorMessageCallback = function() {
return $errorMessageContainer;
};
}
}
function addSupportForValidationDependingOnCheckedInput($form) {
var $inputsDependingOnCheckedInputs = $form.find('[data-validation-if-checked]');
if ($inputsDependingOnCheckedInputs.length) {
$.formUtils.warn(
'Detected use of attribute "data-validation-if-checked" which is '+
'deprecated. Use "data-validation-depends-on" provided by module "logic"'
);
}
$inputsDependingOnCheckedInputs
.on('beforeValidation', function() {
var $elem = $(this),
nameOfDependingInput = $elem.valAttr('if-checked');
// Set the boolean telling us that the validation depends
// on another input being checked
var $dependingInput = $('input[name="' + nameOfDependingInput + '"]', $form),
dependingInputIsChecked = $dependingInput.is(':checked'),
valueOfDependingInput = ($.formUtils.getValue($dependingInput) || '').toString(),
requiredValueOfDependingInput = $elem.valAttr('if-checked-value');
if (!dependingInputIsChecked || !(
!requiredValueOfDependingInput ||
requiredValueOfDependingInput === valueOfDependingInput
)) {
$elem.valAttr('skipped', true);
}
});
}
function convertDeprecatedLangCodeToISO6391(config) {
var deprecatedLangCodes = {
se: 'sv',
cz: 'cs',
dk: 'da'
};
if (config.lang in deprecatedLangCodes) {
var newLangCode = deprecatedLangCodes[config.lang];
$.formUtils.warn(
'Deprecated use of lang code "'+config.lang+'" use "'+newLangCode+'" instead'
);
config.lang = newLangCode;
}
}
})(jQuery);
/**
* Utility methods used for displaying error messages (attached to $.formUtils)
*/
(function ($) {
'use strict';
var dialogs = {
resolveErrorMessage: function($elem, validator, validatorName, conf, language) {
var errorMsgAttr = conf.validationErrorMsgAttribute + '-' + validatorName.replace('validate_', ''),
validationErrorMsg = $elem.attr(errorMsgAttr);
if (!validationErrorMsg) {
validationErrorMsg = $elem.attr(conf.validationErrorMsgAttribute);
if (!validationErrorMsg) {
if (typeof validator.errorMessageKey !== 'function') {
validationErrorMsg = language[validator.errorMessageKey];
}
else {
validationErrorMsg = language[validator.errorMessageKey(conf)];
}
if (!validationErrorMsg) {
validationErrorMsg = validator.errorMessage;
}
}
}
return validationErrorMsg;
},
getParentContainer: function ($elem) {
if ($elem.valAttr('error-msg-container')) {
return $($elem.valAttr('error-msg-container'));
} else {
var $parent = $elem.parent();
if (!$parent.hasClass('form-group') && !$parent.closest('form').hasClass('form-horizontal')) {
var $formGroup = $parent.closest('.form-group');
if ($formGroup.length) {
return $formGroup.eq(0);
}
}
return $parent;
}
},
applyInputErrorStyling: function ($input, conf) {
$input
.addClass(conf.errorElementClass)
.removeClass('valid');
this.getParentContainer($input)
.addClass(conf.inputParentClassOnError)
.removeClass(conf.inputParentClassOnSuccess);
if (conf.borderColorOnError !== '') {
$input.css('border-color', conf.borderColorOnError);
}
},
applyInputSuccessStyling: function($input, conf) {
$input.addClass('valid');
this.getParentContainer($input)
.addClass(conf.inputParentClassOnSuccess);
},
removeInputStylingAndMessage: function($input, conf) {
// Reset input css
$input
.removeClass('valid')
.removeClass(conf.errorElementClass)
.css('border-color', '');
var $parentContainer = dialogs.getParentContainer($input);
// Reset parent css
$parentContainer
.removeClass(conf.inputParentClassOnError)
.removeClass(conf.inputParentClassOnSuccess);
// Remove possible error message
if (typeof conf.inlineErrorMessageCallback === 'function') {
var $errorMessage = conf.inlineErrorMessageCallback($input, false, conf);
if ($errorMessage) {
$errorMessage.html('');
}
} else {
$parentContainer
.find('.' + conf.errorMessageClass)
.remove();
}
},
removeAllMessagesAndStyling: function($form, conf) {
// Remove error messages in top of form
if (typeof conf.submitErrorMessageCallback === 'function') {
var $errorMessagesInTopOfForm = conf.submitErrorMessageCallback($form, false, conf);
if ($errorMessagesInTopOfForm) {
$errorMessagesInTopOfForm.html('');
}
} else {
$form.find('.' + conf.errorMessageClass + '.alert').remove();
}
// Remove input css/messages
$form.find('.' + conf.errorElementClass + ',.valid').each(function() {
dialogs.removeInputStylingAndMessage($(this), conf);
});
},
setInlineMessage: function ($input, errorMsg, conf) {
this.applyInputErrorStyling($input, conf);
var custom = document.getElementById($input.attr('name') + '_err_msg'),
$messageContainer = false,
setErrorMessage = function ($elem) {
$.formUtils.$win.trigger('validationErrorDisplay', [$input, $elem]);
$elem.html(errorMsg);
},
addErrorToMessageContainer = function() {
var $found = false;
$messageContainer.find('.' + conf.errorMessageClass).each(function () {
if (this.inputReferer === $input[0]) {
$found = $(this);
return false;
}
});
if ($found) {
if (!errorMsg) {
$found.remove();
} else {
setErrorMessage($found);
}
} else if(errorMsg !== '') {
$message = $('<div class="' + conf.errorMessageClass + ' alert"></div>');
setErrorMessage($message);
$message[0].inputReferer = $input[0];
$messageContainer.prepend($message);
}
},
$message;
if (custom) {
// Todo: remove in 3.0
$.formUtils.warn('Using deprecated element reference ' + custom.id);
$messageContainer = $(custom);
addErrorToMessageContainer();
} else if (typeof conf.inlineErrorMessageCallback === 'function') {
$messageContainer = conf.inlineErrorMessageCallback($input, errorMsg, conf);
if (!$messageContainer) {
// Error display taken care of by inlineErrorMessageCallback
return;
}
addErrorToMessageContainer();
} else {
var $parent = this.getParentContainer($input);
$message = $parent.find('.' + conf.errorMessageClass + '.help-block');
if ($message.length === 0) {
$message = $('<span></span>').addClass('help-block').addClass(conf.errorMessageClass);
$message.appendTo($parent);
}
setErrorMessage($message);
}
},
setMessageInTopOfForm: function ($form, errorMessages, conf, lang) {
var view = '<div class="{errorMessageClass} alert alert-danger">'+
'<strong>{errorTitle}</strong>'+
'<ul>{fields}</ul>'+
'</div>',
$container = false;
if (typeof conf.submitErrorMessageCallback === 'function') {
$container = conf.submitErrorMessageCallback($form, errorMessages, conf);
if (!$container) {
// message display taken care of by callback
return;
}
}
var viewParams = {
errorTitle: lang.errorTitle,
fields: '',
errorMessageClass: conf.errorMessageClass
};
$.each(errorMessages, function (i, msg) {
viewParams.fields += '<li>'+msg+'</li>';
});
$.each(viewParams, function(param, value) {
view = view.replace('{'+param+'}', value);
});
if ($container) {
$container.html(view);
} else {
$form.children().eq(0).before($(view));
}
}
};
$.formUtils = $.extend($.formUtils || {}, {
dialogs: dialogs
});
})(jQuery);
/**
* File declaring all methods if this plugin which is applied to $.fn.
*/
(function($, window, undefined) {
'use strict';
var _helpers = 0;
/**
* Assigns validateInputOnBlur function to elements blur event
*
* @param {Object} language Optional, will override $.formUtils.LANG
* @param {Object} conf Optional, will override the default settings
* @return {jQuery}
*/
$.fn.validateOnBlur = function (language, conf) {
var $form = this,
$elems = this.find('*[data-validation]');
$elems.each(function(){
var $this = $(this);
if ($this.is('[type=radio]')){
var $additionals = $form.find('[type=radio][name="' + $this.attr('name') + '"]');
$additionals.bind('blur.validation', function(){
$this.validateInputOnBlur(language, conf, true, 'blur');
});
if (conf.validateCheckboxRadioOnClick) {
$additionals.bind('click.validation', function () {
$this.validateInputOnBlur(language, conf, true, 'click');
});
}
}
});
$elems.bind('blur.validation', function () {
$(this).validateInputOnBlur(language, conf, true, 'blur');
});
if (conf.validateCheckboxRadioOnClick) {
// bind click event to validate on click for radio & checkboxes for nice UX
this.find('input[type=checkbox][data-validation],input[type=radio][data-validation]')
.bind('click.validation', function () {
$(this).validateInputOnBlur(language, conf, true, 'click');
});
}
return this;
};
/*
* Assigns validateInputOnBlur function to elements custom event
* @param {Object} language Optional, will override $.formUtils.LANG
* @param {Object} settings Optional, will override the default settings
* * @return {jQuery}
*/
$.fn.validateOnEvent = function (language, config) {
var $elements = this[0].nodeName === 'FORM' ? this.find('*[data-validation-event]') : this;
$elements
.each(function () {
var $el = $(this),
etype = $el.valAttr('event');
if (etype) {
$el
.unbind(etype + '.validation')
.bind(etype + '.validation', function (evt) {
if( (evt || {}).keyCode !== 9 ) {
$(this).validateInputOnBlur(language, config, true, etype);
}
});
}
});
return this;
};
/**
* fade in help message when input gains focus
* fade out when input loses focus
* <input data-help="The info that I want to display for the user when input is focused" ... />
*
* @param {String} attrName - Optional, default is data-help
* @return {jQuery}
*/
$.fn.showHelpOnFocus = function (attrName) {
if (!attrName) {
attrName = 'data-validation-help';
}
// Add help text listeners
this.find('textarea,input').each(function () {
var $elem = $(this),
className = 'jquery_form_help_' + (++_helpers),
help = $elem.attr(attrName);
// Reset
$elem
.removeClass('has-help-text')
.unbind('focus.help')
.unbind('blur.help');
if (help) {
$elem
.addClass('has-help-txt')
.bind('focus.help', function () {
var $help = $elem.parent().find('.' + className);
if ($help.length === 0) {
$help = $('<span />')
.addClass(className)
.addClass('help')
.addClass('help-block') // twitter bs
.text(help)
.hide();
$elem.after($help);
}
$help.fadeIn();
})
.bind('blur.help', function () {
$(this)
.parent()
.find('.' + className)
.fadeOut('slow');
});
}
});
return this;
};
/**
* @param {Function} cb
* @param {Object} [conf]
* @param {Object} [lang]
*/
$.fn.validate = function(cb, conf, lang) {
var language = $.extend({}, $.formUtils.LANG, lang || {});
this.each(function() {
var $elem = $(this),
formDefaultConfig = $elem.closest('form').get(0).validationConfig || {};
$elem.one('validation', function(evt, isValid) {
if ( typeof cb === 'function' ) {
cb(isValid, this, evt);
}
});
$elem.validateInputOnBlur(
language,
$.extend({}, formDefaultConfig, conf || {}),
true
);
});
};
/**
* Tells whether or not validation of this input will have to postpone the form submit ()
* @returns {Boolean}
*/
$.fn.willPostponeValidation = function() {
return (this.valAttr('suggestion-nr') ||
this.valAttr('postpone') ||
this.hasClass('hasDatepicker')) &&
!window.postponedValidation;
};
/**
* Validate single input when it loses focus
* shows error message in a span element
* that is appended to the parent element
*
* @param {Object} [language] Optional, will override $.formUtils.LANG
* @param {Object} [conf] Optional, will override the default settings
* @param {Boolean} attachKeyupEvent Optional
* @param {String} eventContext
* @return {jQuery}
*/
$.fn.validateInputOnBlur = function (language, conf, attachKeyupEvent, eventContext) {
$.formUtils.eventType = eventContext;
if ( this.willPostponeValidation() ) {
// This validation has to be postponed
var _self = this,
postponeTime = this.valAttr('postpone') || 200;
window.postponedValidation = function () {
_self.validateInputOnBlur(language, conf, attachKeyupEvent, eventContext);
window.postponedValidation = false;
};
setTimeout(function () {
if (window.postponedValidation) {
window.postponedValidation();
}
}, postponeTime);
return this;
}
language = $.extend({}, $.formUtils.LANG, language || {});
$.formUtils.dialogs.removeInputStylingAndMessage(this, conf);
var $elem = this,
$form = $elem.closest('form'),
result = $.formUtils.validateInput(
$elem,
language,
conf,
$form,
eventContext
);
var reValidate = function() {
$elem.validateInputOnBlur(language, conf, false, 'blur.revalidated');
};
if (eventContext === 'blur') {
$elem
.unbind('validation.revalidate', reValidate)
.one('validation.revalidate', reValidate);
}
if (attachKeyupEvent) {
$elem.removeKeyUpValidation();
}
if (result.shouldChangeDisplay) {
if (result.isValid) {
$.formUtils.dialogs.applyInputSuccessStyling($elem, conf);
} else {
$.formUtils.dialogs.setInlineMessage($elem, result.errorMsg, conf);
}
}
if (!result.isValid && attachKeyupEvent) {
$elem.validateOnKeyUp(language, conf);
}
return this;
};
/**
* Validate element on keyup-event
*/
$.fn.validateOnKeyUp = function(language, conf) {
this.each(function() {
var $input = $(this);
if (!$input.valAttr('has-keyup-event')) {
$input
.valAttr('has-keyup-event', 'true')
.bind('keyup.validation', function (evt) {
if( evt.keyCode !== 9 ) {
$input.validateInputOnBlur(language, conf, false, 'keyup');
}
});
}
});
return this;
};
/**
* Remove validation on keyup
*/
$.fn.removeKeyUpValidation = function() {
this.each(function() {
$(this)
.valAttr('has-keyup-event', false)
.unbind('keyup.validation');
});
return this;
};
/**
* Short hand for fetching/adding/removing element attributes
* prefixed with 'data-validation-'
*
* @param {String} name
* @param {String|Boolean} [val]
* @return {String|undefined|jQuery}
* @protected
*/
$.fn.valAttr = function (name, val) {
if (val === undefined) {
return this.attr('data-validation-' + name);
} else if (val === false || val === null) {
return this.removeAttr('data-validation-' + name);
} else {
name = ((name.length > 0) ? '-' + name : '');
return this.attr('data-validation' + name, val);
}
};
/**
* Function that validates all inputs in active form
*
* @param {Object} [language]
* @param {Object} [conf]
* @param {Boolean} [displayError] Defaults to true
*/
$.fn.isValid = function (language, conf, displayError) {
if ($.formUtils.isLoadingModules) {
var $self = this;
setTimeout(function () {
$self.isValid(language, conf, displayError);
}, 200);
return null;
}
conf = $.extend({}, $.formUtils.defaultConfig(), conf || {});
language = $.extend({}, $.formUtils.LANG, language || {});
displayError = displayError !== false;
if ($.formUtils.errorDisplayPreventedWhenHalted) {
// isValid() was called programmatically with argument displayError set
// to false when the validation was halted by any of the validators
delete $.formUtils.errorDisplayPreventedWhenHalted;
displayError = false;
}
/**
* Adds message to error message stack if not already in the message stack
*
* @param {String} mess
* @para {jQuery} $elem
*/
var addErrorMessage = function (mess, $elem) {
if ($.inArray(mess, errorMessages) < 0) {
errorMessages.push(mess);
}
errorInputs.push($elem);
$elem.attr('current-error', mess);
if (displayError) {
$.formUtils.dialogs.applyInputErrorStyling($elem, conf);
}
},
/** Holds inputs (of type checkox or radio) already validated, to prevent recheck of mulitple checkboxes & radios */
checkedInputs = [],
/** Error messages for this validation */
errorMessages = [],
/** Input elements which value was not valid */
errorInputs = [],
/** Form instance */
$form = this,
/**
* Tells whether or not to validate element with this name and of this type
*
* @param {String} name
* @param {String} type
* @return {Boolean}
*/
ignoreInput = function (name, type) {
if (type === 'submit' || type === 'button' || type === 'reset') {
return true;
}
return $.inArray(name, conf.ignore || []) > -1;
};
// Reset style and remove error class
if (displayError) {
$.formUtils.dialogs.removeAllMessagesAndStyling($form, conf);
}
// Validate element values
$form.find('input,textarea,select').filter(':not([type="submit"],[type="button"])').each(function () {
var $elem = $(this),
elementType = $elem.attr('type'),
isCheckboxOrRadioBtn = elementType === 'radio' || elementType === 'checkbox',
elementName = $elem.attr('name');
if (!ignoreInput(elementName, elementType) && (!isCheckboxOrRadioBtn || $.inArray(elementName, checkedInputs) < 0)) {
if (isCheckboxOrRadioBtn) {
checkedInputs.push(elementName);
}
var result = $.formUtils.validateInput(
$elem,
language,
conf,
$form,
'submit'
);
if (!result.isValid) {
addErrorMessage(result.errorMsg, $elem);
} else if (result.isValid && result.shouldChangeDisplay) {
$elem.valAttr('current-error', false);
$.formUtils.dialogs.applyInputSuccessStyling($elem, conf);
}
}
});
// Run validation callback
if (typeof conf.onValidate === 'function') {
var errors = conf.onValidate($form);
if ($.isArray(errors)) {
$.each(errors, function (i, err) {
addErrorMessage(err.message, err.element);
});
}
else if (errors && errors.element && errors.message) {
addErrorMessage(errors.message, errors.element);
}
}
// Reset form validation flag
$.formUtils.isValidatingEntireForm = false;
// Validation failed
if (errorInputs.length > 0) {
if (displayError) {
if (conf.errorMessagePosition === 'top') {
$.formUtils.dialogs.setMessageInTopOfForm($form, errorMessages, conf, language);
} else {
$.each(errorInputs, function (i, $input) {
$.formUtils.dialogs.setInlineMessage($input, $input.attr('current-error'), conf);
});
}
if (conf.scrollToTopOnError) {
$.formUtils.$win.scrollTop($form.offset().top - 20);
}
}
}
if (!displayError && $.formUtils.haltValidation) {
$.formUtils.errorDisplayPreventedWhenHalted = true;
}
return errorInputs.length === 0 && !$.formUtils.haltValidation;
};
/**
* Plugin for displaying input length restriction
*/
$.fn.restrictLength = function (maxLengthElement) {
new $.formUtils.lengthRestriction(this, maxLengthElement);
return this;
};
/**
* Add suggestion dropdown to inputs having data-suggestions with a comma
* separated string with suggestions
* @param {Array} [settings]
* @returns {jQuery}
*/
$.fn.addSuggestions = function (settings) {
var sugs = false;
this.find('input').each(function () {
var $field = $(this);
sugs = $.split($field.attr('data-suggestions'));
if (sugs.length > 0 && !$field.hasClass('has-suggestions')) {
$.formUtils.suggest($field, sugs, settings);
$field.addClass('has-suggestions');
}
});
return this;
};
})(jQuery, window);
/**
* Utility methods used for handling loading of modules (attached to $.formUtils)
*/
(function($) {
'use strict';
$.formUtils = $.extend($.formUtils || {}, {
/**
* @var {Boolean}
*/
isLoadingModules: false,
/**
* @var {Object}
*/
loadedModules: {},
/**
* @example
* $.formUtils.loadModules('date, security.dev');
*
* Will load the scripts date.js and security.dev.js from the
* directory where this script resides. If you want to load
* the modules from another directory you can use the
* path argument.
*
* The script will be cached by the browser unless the module
* name ends with .dev
*
* @param {String} modules - Comma separated string with module file names (no directory nor file extension)
* @param {String} [path] - Optional, path where the module files is located if their not in the same directory as the core modules
* @param {function} [callback] - Optional, whether or not to fire event 'load' when modules finished loading
*/
loadModules: function (modules, path, callback) {
if ($.formUtils.isLoadingModules) {
setTimeout(function () {
$.formUtils.loadModules(modules, path, callback);
}, 10);
return;
}
var hasLoadedAnyModule = false,
loadModuleScripts = function (modules, path) {
var moduleList = $.split(modules),
numModules = moduleList.length,
moduleLoadedCallback = function () {
numModules--;
if (numModules === 0) {
$.formUtils.isLoadingModules = false;
if (callback && hasLoadedAnyModule) {
if( typeof callback === 'function' ) {
callback();
}
}
}
};
if (numModules > 0) {
$.formUtils.isLoadingModules = true;
}
var cacheSuffix = '?_=' + ( new Date().getTime() ),
appendToElement = document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0];
$.each(moduleList, function (i, modName) {
modName = $.trim(modName);
if (modName.length === 0) {
moduleLoadedCallback();
}
else {
var scriptUrl = path + modName + (modName.slice(-3) === '.js' ? '' : '.js'),
script = document.createElement('SCRIPT');
if (scriptUrl in $.formUtils.loadedModules) {
// already loaded
moduleLoadedCallback();
}
else {
// Remember that this script is loaded
$.formUtils.loadedModules[scriptUrl] = 1;
hasLoadedAnyModule = true;
// Load the script
script.type = 'text/javascript';
script.onload = moduleLoadedCallback;
script.src = scriptUrl + ( scriptUrl.slice(-7) === '.dev.js' ? cacheSuffix : '' );
script.onerror = function() {
$.formUtils.warn('Unable to load form validation module '+scriptUrl);
};
script.onreadystatechange = function () {
// IE 7 fix
if (this.readyState === 'complete' || this.readyState === 'loaded') {
moduleLoadedCallback();
// Handle memory leak in IE
this.onload = null;
this.onreadystatechange = null;
}
};
appendToElement.appendChild(script);
}
}
});
};
if (path) {
loadModuleScripts(modules, path);
} else {
var findScriptPathAndLoadModules = function () {
var foundPath = false;
$('script[src*="form-validator"]').each(function () {
var isScriptFromPluginNodeModulesDirectory = this.src.split('form-validator')[1].split('node_modules').length > 1;
if (!isScriptFromPluginNodeModulesDirectory) {
foundPath = this.src.substr(0, this.src.lastIndexOf('/')) + '/';
if (foundPath === '/') {
foundPath = '';
}
return false;
}
});
if (foundPath !== false) {
loadModuleScripts(modules, foundPath);
return true;
}
return false;
};
if (!findScriptPathAndLoadModules()) {
$(findScriptPathAndLoadModules);
}
}
}
});
})(jQuery);
/**
* Setup function for the plugin
*/
(function ($) {
'use strict';
/**
* A bit smarter split function
* delimiter can be space, comma, dash or pipe
* @param {String} val
* @param {Function|String} [callback]
* @param {Boolean} [allowSpaceAsDelimiter]
* @returns {Array|void}
*/
$.split = function (val, callback, allowSpaceAsDelimiter) {
// default to true
allowSpaceAsDelimiter = allowSpaceAsDelimiter === undefined || allowSpaceAsDelimiter === true;
var pattern = '[,|\-'+(allowSpaceAsDelimiter ? '\\s':'')+']\\s*',
regex = new RegExp(pattern, 'g');
if (typeof callback !== 'function') {
// return array
if (!val) {
return [];
}
var values = [];
$.each(val.split(callback ? callback : regex),
function (i, str) {
str = $.trim(str);
if (str.length) {
values.push(str);
}
}
);
return values;
} else if (val) {
// exec callback func on each
$.each(val.split(regex),
function (i, str) {
str = $.trim(str);
if (str.length) {
return callback(str, i);
}
}
);
}
};
/**
* Short hand function that makes the validation setup require less code
* @param conf
*/
$.validate = function (conf) {
var defaultConf = $.extend($.formUtils.defaultConfig(), {
form: 'form',
validateOnEvent: false,
validateOnBlur: true,
validateCheckboxRadioOnClick: true,
showHelpOnFocus: true,
addSuggestions: true,
modules: '',
onModulesLoaded: null,
language: false,
onSuccess: false,
onError: false,
onElementValidate: false
});
conf = $.extend(defaultConf, conf || {});
$(window).trigger('formValidationPluginInit', [conf]);
if( conf.lang && conf.lang !== 'en' ) {
var langModule = 'lang/'+conf.lang+'.js';
conf.modules += conf.modules.length ? ','+langModule : langModule;
}
// Add validation to forms
$(conf.form).each(function (i, form) {
// Make a reference to the config for this form
form.validationConfig = conf;
// Trigger jQuery event that we're about to setup validation
var $form = $(form);
$form.trigger('formValidationSetup', [$form, conf]);
// Remove classes and event handlers that might have been
// added by a previous call to $.validate
$form.find('.has-help-txt')
.unbind('focus.validation')
.unbind('blur.validation');
$form
.removeClass('has-validation-callback')
.unbind('submit.validation')
.unbind('reset.validation')
.find('input[data-validation],textarea[data-validation]')
.unbind('blur.validation');
// Validate when submitted
$form.bind('submit.validation', function (evt) {
var $form = $(this),
stop = function() {
evt.stopImmediatePropagation();
return false;
};
if ($.formUtils.haltValidation) {
// pressing several times on submit button while validation is halted
return stop();
}
if ($.formUtils.isLoadingModules) {
setTimeout(function () {
$form.trigger('submit.validation');
}, 200);
return stop();
}
var valid = $form.isValid(conf.language, conf);
if ($.formUtils.haltValidation) {
// Validation got halted by one of the validators
return stop();
} else {
if (valid && typeof conf.onSuccess === 'function') {
var callbackResponse = conf.onSuccess($form);
if (callbackResponse === false) {
return stop();
}
} else if (!valid && typeof conf.onError === 'function') {
conf.onError($form);
return stop();
} else {
return valid ? true : stop();
}
}
})
.bind('reset.validation', function () {
$.formUtils.dialogs.removeAllMessagesAndStyling($form, conf);
})
.addClass('has-validation-callback');
if (conf.showHelpOnFocus) {
$form.showHelpOnFocus();
}
if (conf.addSuggestions) {
$form.addSuggestions();
}
if (conf.validateOnBlur) {
$form.validateOnBlur(conf.language, conf);
$form.bind('html5ValidationAttrsFound', function () {
$form.validateOnBlur(conf.language, conf);
});
}
if (conf.validateOnEvent) {
$form.validateOnEvent(conf.language, conf);
}
});
if (conf.modules !== '') {
$.formUtils.loadModules(conf.modules, false, function() {
if (typeof conf.onModulesLoaded === 'function') {
conf.onModulesLoaded();
}
var $form = typeof conf.form === 'string' ? $(conf.form) : conf.form;
$.formUtils.$win.trigger('validatorsLoaded', [$form, conf]);
});
}
};
})(jQuery);
/**
* Utility methods and properties attached to $.formUtils
*/
(function($, window) {
'use strict';
var $win = $(window);
$.formUtils = $.extend($.formUtils || {}, {
$win: $win,
/**
* Default config for $(...).isValid();
*/
defaultConfig: function () {
return {
ignore: [], // Names of inputs not to be validated even though `validationRuleAttribute` containing the validation rules tells us to
errorElementClass: 'error', // Class that will be put on elements which value is invalid
borderColorOnError: '#b94a48', // Border color of elements which value is invalid, empty string to not change border color
errorMessageClass: 'form-error', // class name of div containing error messages when validation fails
validationRuleAttribute: 'data-validation', // name of the attribute holding the validation rules
validationErrorMsgAttribute: 'data-validation-error-msg', // define custom err msg inline with element
errorMessagePosition: 'inline', // Can be either "top" or "inline"
errorMessageTemplate: {
container: '<div class="{errorMessageClass} alert alert-danger">{messages}</div>',
messages: '<strong>{errorTitle}</strong><ul>{fields}</ul>',
field: '<li>{msg}</li>'
},
scrollToTopOnError: true,
dateFormat: 'yyyy-mm-dd',
addValidClassOnAll: false, // whether or not to apply class="valid" even if the input wasn't validated
decimalSeparator: '.',
inputParentClassOnError: 'has-error', // twitter-bootstrap default class name
inputParentClassOnSuccess: 'has-success', // twitter-bootstrap default class name
validateHiddenInputs: false, // whether or not hidden inputs should be validated
inlineErrorMessageCallback: false,
submitErrorMessageCallback: false
};
},
/**
* Available validators
*/
validators: {},
/**
* Events triggered by form validator
*/
_events: {load: [], valid: [], invalid: []},
/**
* Setting this property to true during validation will
* stop further validation from taking place and form will
* not be sent
*/
haltValidation: false,
/**
* Function for adding a validator
* @param {Object} validator
*/
addValidator: function (validator) {
// prefix with "validate_" for backward compatibility reasons
var name = validator.name.indexOf('validate_') === 0 ? validator.name : 'validate_' + validator.name;
if (validator.validateOnKeyUp === undefined) {
validator.validateOnKeyUp = true;
}
this.validators[name] = validator;
},
/**
* Warn user via the console if available
*/
warn: function(msg) {
if( 'console' in window ) {
if( typeof window.console.warn === 'function' ) {
window.console.warn(msg);
} else if( typeof window.console.log === 'function' ) {
window.console.log(msg);
}
} else {
alert(msg);
}
},
/**
* Same as input $.fn.val() but also supporting input of typ radio or checkbox
* @example
*
* $.formUtils.getValue('.myRadioButtons', $('#some-form'));
* $.formUtils.getValue($('#some-form').find('.check-boxes'));
*
* @param query
* @param $parent
* @returns {String|Boolean}
*/
getValue: function(query, $parent) {
var $inputs = $parent ? $parent.find(query) : query;
if ($inputs.length > 0 ) {
var type = $inputs.eq(0).attr('type');
if (type === 'radio' || type === 'checkbox') {
return $inputs.filter(':checked').val() || '';
} else {
return $inputs.val() || '';
}
}
return false;
},
/**
* Validate the value of given element according to the validation rules
* found in the attribute data-validation. Will return an object representing
* a validation result, having the props shouldChangeDisplay, isValid and errorMsg
* @param {jQuery} $elem
* @param {Object} language ($.formUtils.LANG)
* @param {Object} conf
* @param {jQuery} $form
* @param {String} [eventContext]
* @return {Object}
*/
validateInput: function ($elem, language, conf, $form, eventContext) {
conf = conf || $.formUtils.defaultConfig();
language = language || $.formUtils.LANG;
var value = this.getValue($elem);
$elem
.valAttr('skipped', false)
.one('beforeValidation', function() {
// Skip input because its hidden or disabled
// Doing this in a callback makes it possible for others to prevent the default
// behaviour by binding to the same event and call evt.stopImmediatePropagation()
if ($elem.attr('disabled') || (!$elem.is(':visible') && !conf.validateHiddenInputs)) {
$elem.valAttr('skipped', 1);
}
})
.trigger('beforeValidation', [value, conf, language]);
var inputIsOptional = $elem.valAttr('optional') === 'true',
skipBecauseItsEmpty = !value && inputIsOptional,
validationRules = $elem.attr(conf.validationRuleAttribute),
isValid = true,
errorMsg = '',
result = {isValid: true, shouldChangeDisplay:true, errorMsg:''};
// For input type="number", browsers attempt to parse the entered value into a number.
// If the input is not numeric, browsers handle the situation differently:
// Chrome 48 simply disallows non-numeric input; FF 44 clears out the input box on blur;
// Safari 5 parses the entered string to find a leading number.
// If the input fails browser validation, the browser sets the input value equal to an empty string.
// Therefore, we cannot distinguish (apart from hacks) between an empty input type="text" and one with a
// value that can't be parsed by the browser.
if (!validationRules || skipBecauseItsEmpty || $elem.valAttr('skipped')) {
result.shouldChangeDisplay = conf.addValidClassOnAll;
return result;
}
// Filter out specified characters
var ignore = $elem.valAttr('ignore');
if (ignore) {
$.each(ignore.split(''), function(i, character) {
value = value.replace(new RegExp('\\'+character, 'g'), '');
});
}
$.split(validationRules, function (rule) {
if (rule.indexOf('validate_') !== 0) {
rule = 'validate_' + rule;
}
var validator = $.formUtils.validators[rule];
if (validator) {
// special change of element for checkbox_group rule
if (rule === 'validate_checkbox_group') {
// set element to first in group, so error msg attr doesn't need to be set on all elements in group
$elem = $form.find('[name="' + $elem.attr('name') + '"]:eq(0)');
}
if (eventContext !== 'keyup' || validator.validateOnKeyUp) {
// A validator can prevent itself from getting triggered on keyup
isValid = validator.validatorFunction(value, $elem, conf, language, $form, eventContext);
}
if (!isValid) {
if (conf.validateOnBlur) {
$elem.validateOnKeyUp(language, conf);
}
errorMsg = $.formUtils.dialogs.resolveErrorMessage($elem, validator, rule, conf, language);
return false; // break iteration
}
} else {
// todo: Add some validator lookup function and tell immediately which module is missing
throw new Error('Using undefined validator "' + rule +
'". Maybe you have forgotten to load the module that "' + rule +'" belongs to?');
}
});
if (isValid === false) {
$elem.trigger('validation', false);
result.errorMsg = errorMsg;
result.isValid = false;
result.shouldChangeDisplay = true;
} else if (isValid === null) {
// A validatorFunction returning null means that it's not able to validate
// the input at this time. Most probably some async stuff need to gets finished
// first and then the validator will re-trigger the validation.
result.shouldChangeDisplay = false;
} else {
$elem.trigger('validation', true);
result.shouldChangeDisplay = true;
}
// Run element validation callback
if (typeof conf.onElementValidate === 'function' && errorMsg !== null) {
conf.onElementValidate(result.isValid, $elem, $form, errorMsg);
}
$elem.trigger('afterValidation', [result, eventContext]);
return result;
},
/**
* Is it a correct date according to given dateFormat. Will return false if not, otherwise
* an array 0=>year 1=>month 2=>day
*
* @param {String} val
* @param {String} dateFormat
* @param {Boolean} [addMissingLeadingZeros]
* @return {Array}|{Boolean}
*/
parseDate: function (val, dateFormat, addMissingLeadingZeros) {
var divider = dateFormat.replace(/[a-zA-Z]/gi, '').substring(0, 1),
regexp = '^',
formatParts = dateFormat.split(divider || null),
matches, day, month, year;
$.each(formatParts, function (i, part) {
regexp += (i > 0 ? '\\' + divider : '') + '(\\d{' + part.length + '})';
});
regexp += '$';
if (addMissingLeadingZeros) {
var newValueParts = [];
$.each(val.split(divider), function(i, part) {
if(part.length === 1) {
part = '0'+part;
}
newValueParts.push(part);
});
val = newValueParts.join(divider);
}
matches = val.match(new RegExp(regexp));
if (matches === null) {
return false;
}
var findDateUnit = function (unit, formatParts, matches) {
for (var i = 0; i < formatParts.length; i++) {
if (formatParts[i].substring(0, 1) === unit) {
return $.formUtils.parseDateInt(matches[i + 1]);
}
}
return -1;
};
month = findDateUnit('m', formatParts, matches);
day = findDateUnit('d', formatParts, matches);
year = findDateUnit('y', formatParts, matches);
if ((month === 2 && day > 28 && (year % 4 !== 0 || year % 100 === 0 && year % 400 !== 0)) ||
(month === 2 && day > 29 && (year % 4 === 0 || year % 100 !== 0 && year % 400 === 0)) ||
month > 12 || month === 0) {
return false;
}
if ((this.isShortMonth(month) && day > 30) || (!this.isShortMonth(month) && day > 31) || day === 0) {
return false;
}
return [year, month, day];
},
/**
* skum fix. är talet 05 eller lägre ger parseInt rätt int annars får man 0 när man kör parseInt?
*
* @param {String} val
* @return {Number}
*/
parseDateInt: function (val) {
if (val.indexOf('0') === 0) {
val = val.replace('0', '');
}
return parseInt(val, 10);
},
/**
* Has month only 30 days?
*
* @param {Number} m
* @return {Boolean}
*/
isShortMonth: function (m) {
return (m % 2 === 0 && m < 7) || (m % 2 !== 0 && m > 7);
},
/**
* Restrict input length
*
* @param {jQuery} $inputElement Jquery Html object
* @param {jQuery} $maxLengthElement jQuery Html Object
* @return void
*/
lengthRestriction: function ($inputElement, $maxLengthElement) {
// read maxChars from counter display initial text value
var maxChars = parseInt($maxLengthElement.text(), 10),
charsLeft = 0,
// internal function does the counting and sets display value
countCharacters = function () {
var numChars = $inputElement.val().length;
if (numChars > maxChars) {
// get current scroll bar position
var currScrollTopPos = $inputElement.scrollTop();
// trim value to max length
$inputElement.val($inputElement.val().substring(0, maxChars));
$inputElement.scrollTop(currScrollTopPos);
}
charsLeft = maxChars - numChars;
if (charsLeft < 0) {
charsLeft = 0;
}
// set counter text
$maxLengthElement.text(charsLeft);
};
// bind events to this element
// setTimeout is needed, cut or paste fires before val is available
$($inputElement).bind('keydown keyup keypress focus blur', countCharacters)
.bind('cut paste', function () {
setTimeout(countCharacters, 100);
});
// count chars on pageload, if there are prefilled input-values
$(document).bind('ready', countCharacters);
},
/**
* Test numeric against allowed range
*
* @param $value int
* @param $rangeAllowed str; (1-2, min1, max2, 10)
* @return array
*/
numericRangeCheck: function (value, rangeAllowed) {
// split by dash
var range = $.split(rangeAllowed),
// min or max
minmax = parseInt(rangeAllowed.substr(3), 10);
if( range.length === 1 && rangeAllowed.indexOf('min') === -1 && rangeAllowed.indexOf('max') === -1 ) {
range = [rangeAllowed, rangeAllowed]; // only a number, checking agains an exact number of characters
}
// range ?
if (range.length === 2 && (value < parseInt(range[0], 10) || value > parseInt(range[1], 10) )) {
return [ 'out', range[0], range[1] ];
} // value is out of range
else if (rangeAllowed.indexOf('min') === 0 && (value < minmax )) // min
{
return ['min', minmax];
} // value is below min
else if (rangeAllowed.indexOf('max') === 0 && (value > minmax )) // max
{
return ['max', minmax];
} // value is above max
// since no other returns executed, value is in allowed range
return [ 'ok' ];
},
_numSuggestionElements: 0,
_selectedSuggestion: null,
_previousTypedVal: null,
/**
* Utility function that can be used to create plugins that gives
* suggestions when inputs is typed into
* @param {jQuery} $elem
* @param {Array} suggestions
* @param {Object} settings - Optional
* @return {jQuery}
*/
suggest: function ($elem, suggestions, settings) {
var conf = {
css: {
maxHeight: '150px',
background: '#FFF',
lineHeight: '150%',
textDecoration: 'underline',
overflowX: 'hidden',
overflowY: 'auto',
border: '#CCC solid 1px',
borderTop: 'none',
cursor: 'pointer'
},
activeSuggestionCSS: {
background: '#E9E9E9'
}
},
setSuggsetionPosition = function ($suggestionContainer, $input) {
var offset = $input.offset();
$suggestionContainer.css({
width: $input.outerWidth(),
left: offset.left + 'px',
top: (offset.top + $input.outerHeight()) + 'px'
});
};
if (settings) {
$.extend(conf, settings);
}
conf.css.position = 'absolute';
conf.css['z-index'] = 9999;
$elem.attr('autocomplete', 'off');
if (this._numSuggestionElements === 0) {
// Re-position suggestion container if window size changes
$win.bind('resize', function () {
$('.jquery-form-suggestions').each(function () {
var $container = $(this),
suggestID = $container.attr('data-suggest-container');
setSuggsetionPosition($container, $('.suggestions-' + suggestID).eq(0));
});
});
}
this._numSuggestionElements++;
var onSelectSuggestion = function ($el) {
var suggestionId = $el.valAttr('suggestion-nr');
$.formUtils._selectedSuggestion = null;
$.formUtils._previousTypedVal = null;
$('.jquery-form-suggestion-' + suggestionId).fadeOut('fast');
};
$elem
.data('suggestions', suggestions)
.valAttr('suggestion-nr', this._numSuggestionElements)
.unbind('focus.suggest')
.bind('focus.suggest', function () {
$(this).trigger('keyup');
$.formUtils._selectedSuggestion = null;
})
.unbind('keyup.suggest')
.bind('keyup.suggest', function () {
var $input = $(this),
foundSuggestions = [],
val = $.trim($input.val()).toLocaleLowerCase();
if (val === $.formUtils._previousTypedVal) {
return;
}
else {
$.formUtils._previousTypedVal = val;
}
var hasTypedSuggestion = false,
suggestionId = $input.valAttr('suggestion-nr'),
$suggestionContainer = $('.jquery-form-suggestion-' + suggestionId);
$suggestionContainer.scrollTop(0);
// Find the right suggestions
if (val !== '') {
var findPartial = val.length > 2;
$.each($input.data('suggestions'), function (i, suggestion) {
var lowerCaseVal = suggestion.toLocaleLowerCase();
if (lowerCaseVal === val) {
foundSuggestions.push('<strong>' + suggestion + '</strong>');
hasTypedSuggestion = true;
return false;
} else if (lowerCaseVal.indexOf(val) === 0 || (findPartial && lowerCaseVal.indexOf(val) > -1)) {
foundSuggestions.push(suggestion.replace(new RegExp(val, 'gi'), '<strong>$&</strong>'));
}
});
}
// Hide suggestion container
if (hasTypedSuggestion || (foundSuggestions.length === 0 && $suggestionContainer.length > 0)) {
$suggestionContainer.hide();
}
// Create suggestion container if not already exists
else if (foundSuggestions.length > 0 && $suggestionContainer.length === 0) {
$suggestionContainer = $('<div></div>').css(conf.css).appendTo('body');
$elem.addClass('suggestions-' + suggestionId);
$suggestionContainer
.attr('data-suggest-container', suggestionId)
.addClass('jquery-form-suggestions')
.addClass('jquery-form-suggestion-' + suggestionId);
}
// Show hidden container
else if (foundSuggestions.length > 0 && !$suggestionContainer.is(':visible')) {
$suggestionContainer.show();
}
// add suggestions
if (foundSuggestions.length > 0 && val.length !== foundSuggestions[0].length) {
// put container in place every time, just in case
setSuggsetionPosition($suggestionContainer, $input);
// Add suggestions HTML to container
$suggestionContainer.html('');
$.each(foundSuggestions, function (i, text) {
$('<div></div>')
.append(text)
.css({
overflow: 'hidden',
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
padding: '5px'
})
.addClass('form-suggest-element')
.appendTo($suggestionContainer)
.click(function () {
$input.focus();
$input.val($(this).text());
$input.trigger('change');
onSelectSuggestion($input);
});
});
}
})
.unbind('keydown.validation')
.bind('keydown.validation', function (e) {
var code = (e.keyCode ? e.keyCode : e.which),
suggestionId,
$suggestionContainer,
$input = $(this);
if (code === 13 && $.formUtils._selectedSuggestion !== null) {
suggestionId = $input.valAttr('suggestion-nr');
$suggestionContainer = $('.jquery-form-suggestion-' + suggestionId);
if ($suggestionContainer.length > 0) {
var newText = $suggestionContainer.find('div').eq($.formUtils._selectedSuggestion).text();
$input.val(newText);
$input.trigger('change');
onSelectSuggestion($input);
e.preventDefault();
}
}
else {
suggestionId = $input.valAttr('suggestion-nr');
$suggestionContainer = $('.jquery-form-suggestion-' + suggestionId);
var $suggestions = $suggestionContainer.children();
if ($suggestions.length > 0 && $.inArray(code, [38, 40]) > -1) {
if (code === 38) { // key up
if ($.formUtils._selectedSuggestion === null) {
$.formUtils._selectedSuggestion = $suggestions.length - 1;
}
else{
$.formUtils._selectedSuggestion--;
}
if ($.formUtils._selectedSuggestion < 0) {
$.formUtils._selectedSuggestion = $suggestions.length - 1;
}
}
else if (code === 40) { // key down
if ($.formUtils._selectedSuggestion === null) {
$.formUtils._selectedSuggestion = 0;
}
else {
$.formUtils._selectedSuggestion++;
}
if ($.formUtils._selectedSuggestion > ($suggestions.length - 1)) {
$.formUtils._selectedSuggestion = 0;
}
}
// Scroll in suggestion window
var containerInnerHeight = $suggestionContainer.innerHeight(),
containerScrollTop = $suggestionContainer.scrollTop(),
suggestionHeight = $suggestionContainer.children().eq(0).outerHeight(),
activeSuggestionPosY = suggestionHeight * ($.formUtils._selectedSuggestion);
if (activeSuggestionPosY < containerScrollTop || activeSuggestionPosY > (containerScrollTop + containerInnerHeight)) {
$suggestionContainer.scrollTop(activeSuggestionPosY);
}
$suggestions
.removeClass('active-suggestion')
.css('background', 'none')
.eq($.formUtils._selectedSuggestion)
.addClass('active-suggestion')
.css(conf.activeSuggestionCSS);
e.preventDefault();
return false;
}
}
})
.unbind('blur.suggest')
.bind('blur.suggest', function () {
onSelectSuggestion($(this));
});
return $elem;
},
/**
* Error dialogs
*
* @var {Object}
*/
LANG: {
errorTitle: 'Form submission failed!',
requiredField: 'This is a required field',
requiredFields: 'You have not answered all required fields',
badTime: 'You have not given a correct time',
badEmail: 'You have not given a correct e-mail address',
badTelephone: 'You have not given a correct phone number',
badSecurityAnswer: 'You have not given a correct answer to the security question',
badDate: 'You have not given a correct date',
lengthBadStart: 'The input value must be between ',
lengthBadEnd: ' characters',
lengthTooLongStart: 'The input value is longer than ',
lengthTooShortStart: 'The input value is shorter than ',
notConfirmed: 'Input values could not be confirmed',
badDomain: 'Incorrect domain value',
badUrl: 'The input value is not a correct URL',
badCustomVal: 'The input value is incorrect',
andSpaces: ' and spaces ',
badInt: 'The input value was not a correct number',
badSecurityNumber: 'Your social security number was incorrect',
badUKVatAnswer: 'Incorrect UK VAT Number',
badUKNin: 'Incorrect UK NIN',
badUKUtr: 'Incorrect UK UTR Number',
badStrength: 'The password isn\'t strong enough',
badNumberOfSelectedOptionsStart: 'You have to choose at least ',
badNumberOfSelectedOptionsEnd: ' answers',
badAlphaNumeric: 'The input value can only contain alphanumeric characters ',
badAlphaNumericExtra: ' and ',
wrongFileSize: 'The file you are trying to upload is too large (max %s)',
wrongFileType: 'Only files of type %s is allowed',
groupCheckedRangeStart: 'Please choose between ',
groupCheckedTooFewStart: 'Please choose at least ',
groupCheckedTooManyStart: 'Please choose a maximum of ',
groupCheckedEnd: ' item(s)',
badCreditCard: 'The credit card number is not correct',
badCVV: 'The CVV number was not correct',
wrongFileDim : 'Incorrect image dimensions,',
imageTooTall : 'the image can not be taller than',
imageTooWide : 'the image can not be wider than',
imageTooSmall : 'the image was too small',
min : 'min',
max : 'max',
imageRatioNotAccepted : 'Image ratio is not be accepted',
badBrazilTelephoneAnswer: 'The phone number entered is invalid',
badBrazilCEPAnswer: 'The CEP entered is invalid',
badBrazilCPFAnswer: 'The CPF entered is invalid',
badPlPesel: 'The PESEL entered is invalid',
badPlNip: 'The NIP entered is invalid',
badPlRegon: 'The REGON entered is invalid',
badreCaptcha: 'Please confirm that you are not a bot',
passwordComplexityStart: 'Password must contain at least ',
passwordComplexitySeparator: ', ',
passwordComplexityUppercaseInfo: ' uppercase letter(s)',
passwordComplexityLowercaseInfo: ' lowercase letter(s)',
passwordComplexitySpecialCharsInfo: ' special character(s)',
passwordComplexityNumericCharsInfo: ' numeric character(s)',
passwordComplexityEnd: '.'
}
});
})(jQuery, window);
/**
* File declaring all default validators.
*/
(function($) {
/*
* Validate email
*/
$.formUtils.addValidator({
name: 'email',
validatorFunction: function (email) {
var emailParts = email.toLowerCase().split('@'),
localPart = emailParts[0],
domain = emailParts[1];
if (localPart && domain) {
if( localPart.indexOf('"') === 0 ) {
var len = localPart.length;
localPart = localPart.replace(/\"/g, '');
if( localPart.length !== (len-2) ) {
return false; // It was not allowed to have more than two apostrophes
}
}
return $.formUtils.validators.validate_domain.validatorFunction(emailParts[1]) &&
localPart.indexOf('.') !== 0 &&
localPart.substring(localPart.length-1, localPart.length) !== '.' &&
localPart.indexOf('..') === -1 &&
!(/[^\w\+\.\-\#\-\_\~\!\$\&\'\(\)\*\+\,\;\=\:]/.test(localPart));
}
return false;
},
errorMessage: '',
errorMessageKey: 'badEmail'
});
/*
* Validate domain name
*/
$.formUtils.addValidator({
name: 'domain',
validatorFunction: function (val) {
return val.length > 0 &&
val.length <= 253 && // Including sub domains
!(/[^a-zA-Z0-9]/.test(val.slice(-2))) && !(/[^a-zA-Z0-9]/.test(val.substr(0, 1))) && !(/[^a-zA-Z0-9\.\-]/.test(val)) &&
val.split('..').length === 1 &&
val.split('.').length > 1;
},
errorMessage: '',
errorMessageKey: 'badDomain'
});
/*
* Validate required
*/
$.formUtils.addValidator({
name: 'required',
validatorFunction: function (val, $el, config, language, $form) {
switch ($el.attr('type')) {
case 'checkbox':
return $el.is(':checked');
case 'radio':
return $form.find('input[name="' + $el.attr('name') + '"]').filter(':checked').length > 0;
default:
return $.trim(val) !== '';
}
},
errorMessage: '',
errorMessageKey: function(config) {
if (config.errorMessagePosition === 'top' || typeof config.errorMessagePosition === 'function') {
return 'requiredFields';
}
else {
return 'requiredField';
}
}
});
/*
* Validate length range
*/
$.formUtils.addValidator({
name: 'length',
validatorFunction: function (val, $el, conf, lang) {
var lengthAllowed = $el.valAttr('length'),
type = $el.attr('type');
if (lengthAllowed === undefined) {
alert('Please add attribute "data-validation-length" to ' + $el[0].nodeName + ' named ' + $el.attr('name'));
return true;
}
// check if length is above min, below max or within range.
var len = type === 'file' && $el.get(0).files !== undefined ? $el.get(0).files.length : val.length,
lengthCheckResults = $.formUtils.numericRangeCheck(len, lengthAllowed),
checkResult;
switch (lengthCheckResults[0]) { // outside of allowed range
case 'out':
this.errorMessage = lang.lengthBadStart + lengthAllowed + lang.lengthBadEnd;
checkResult = false;
break;
// too short
case 'min':
this.errorMessage = lang.lengthTooShortStart + lengthCheckResults[1] + lang.lengthBadEnd;
checkResult = false;
break;
// too long
case 'max':
this.errorMessage = lang.lengthTooLongStart + lengthCheckResults[1] + lang.lengthBadEnd;
checkResult = false;
break;
// ok
default:
checkResult = true;
}
return checkResult;
},
errorMessage: '',
errorMessageKey: ''
});
/*
* Validate url
*/
$.formUtils.addValidator({
name: 'url',
validatorFunction: function (url) {
// written by Scott Gonzalez: http://projects.scottsplayground.com/iri/
// - Victor Jonsson added support for arrays in the url ?arg[]=sdfsdf
// - General improvements made by Stéphane Moureau <https://github.com/TraderStf>
var urlFilter = /^(https?|ftp):\/\/((((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])(\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])(\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/(((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|\[|\]|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#(((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i;
if (urlFilter.test(url)) {
var domain = url.split('://')[1],
domainSlashPos = domain.indexOf('/');
if (domainSlashPos > -1) {
domain = domain.substr(0, domainSlashPos);
}
return $.formUtils.validators.validate_domain.validatorFunction(domain); // todo: add support for IP-addresses
}
return false;
},
errorMessage: '',
errorMessageKey: 'badUrl'
});
/*
* Validate number (floating or integer)
*/
$.formUtils.addValidator({
name: 'number',
validatorFunction: function (val, $el, conf) {
if (val !== '') {
var allowing = $el.valAttr('allowing') || '',
decimalSeparator = $el.valAttr('decimal-separator') || conf.decimalSeparator,
allowsRange = false,
begin, end,
steps = $el.valAttr('step') || '',
allowsSteps = false,
sanitize = $el.attr('data-sanitize') || '',
isFormattedWithNumeral = sanitize.match(/(^|[\s])numberFormat([\s]|$)/i);
if (isFormattedWithNumeral) {
if (!window.numeral) {
throw new ReferenceError('The data-sanitize value numberFormat cannot be used without the numeral' +
' library. Please see Data Validation in http://www.formvalidator.net for more information.');
}
//Unformat input first, then convert back to String
if (val.length) {
val = String(numeral().unformat(val));
}
}
if (allowing.indexOf('number') === -1) {
allowing += ',number';
}
if (allowing.indexOf('negative') === -1 && val.indexOf('-') === 0) {
return false;
}
if (allowing.indexOf('range') > -1) {
begin = parseFloat(allowing.substring(allowing.indexOf('[') + 1, allowing.indexOf(';')));
end = parseFloat(allowing.substring(allowing.indexOf(';') + 1, allowing.indexOf(']')));
allowsRange = true;
}
if (steps !== '') {
allowsSteps = true;
}
if (decimalSeparator === ',') {
if (val.indexOf('.') > -1) {
return false;
}
// Fix for checking range with floats using ,
val = val.replace(',', '.');
}
if (val.replace(/[0-9-]/g, '') === '' && (!allowsRange || (val >= begin && val <= end)) && (!allowsSteps || (val % steps === 0))) {
return true;
}
if (allowing.indexOf('float') > -1 && val.match(new RegExp('^([0-9-]+)\\.([0-9]+)$')) !== null && (!allowsRange || (val >= begin && val <= end)) && (!allowsSteps || (val % steps === 0))) {
return true;
}
}
return false;
},
errorMessage: '',
errorMessageKey: 'badInt'
});
/*
* Validate alpha numeric
*/
$.formUtils.addValidator({
name: 'alphanumeric',
validatorFunction: function (val, $el, conf, language) {
var patternStart = '^([a-zA-Z0-9',
patternEnd = ']+)$',
additionalChars = $el.valAttr('allowing'),
pattern = '';
if (additionalChars) {
pattern = patternStart + additionalChars + patternEnd;
var extra = additionalChars.replace(/\\/g, '');
if (extra.indexOf(' ') > -1) {
extra = extra.replace(' ', '');
extra += language.andSpaces || $.formUtils.LANG.andSpaces;
}
this.errorMessage = language.badAlphaNumeric + language.badAlphaNumericExtra + extra;
} else {
pattern = patternStart + patternEnd;
this.errorMessage = language.badAlphaNumeric;
}
return new RegExp(pattern).test(val);
},
errorMessage: '',
errorMessageKey: ''
});
/*
* Validate against regexp
*/
$.formUtils.addValidator({
name: 'custom',
validatorFunction: function (val, $el) {
var regexp = new RegExp($el.valAttr('regexp'));
return regexp.test(val);
},
errorMessage: '',
errorMessageKey: 'badCustomVal'
});
/*
* Validate date
*/
$.formUtils.addValidator({
name: 'date',
validatorFunction: function (date, $el, conf) {
var dateFormat = $el.valAttr('format') || conf.dateFormat || 'yyyy-mm-dd',
addMissingLeadingZeros = $el.valAttr('require-leading-zero') === 'false';
return $.formUtils.parseDate(date, dateFormat, addMissingLeadingZeros) !== false;
},
errorMessage: '',
errorMessageKey: 'badDate'
});
/*
* Validate group of checkboxes, validate qty required is checked
* written by Steve Wasiura : http://stevewasiura.waztech.com
* element attrs
* data-validation="checkbox_group"
* data-validation-qty="1-2" // min 1 max 2
* data-validation-error-msg="chose min 1, max of 2 checkboxes"
*/
$.formUtils.addValidator({
name: 'checkbox_group',
validatorFunction: function (val, $el, conf, lang, $form) {
// preset return var
var isValid = true,
// get name of element. since it is a checkbox group, all checkboxes will have same name
elname = $el.attr('name'),
// get checkboxes and count the checked ones
$checkBoxes = $('input[type=checkbox][name^="' + elname + '"]', $form),
checkedCount = $checkBoxes.filter(':checked').length,
// get el attr that specs qty required / allowed
qtyAllowed = $el.valAttr('qty');
if (qtyAllowed === undefined) {
var elementType = $el.get(0).nodeName;
alert('Attribute "data-validation-qty" is missing from ' + elementType + ' named ' + $el.attr('name'));
}
// call Utility function to check if count is above min, below max, within range etc.
var qtyCheckResults = $.formUtils.numericRangeCheck(checkedCount, qtyAllowed);
// results will be array, [0]=result str, [1]=qty int
switch (qtyCheckResults[0]) {
// outside allowed range
case 'out':
this.errorMessage = lang.groupCheckedRangeStart + qtyAllowed + lang.groupCheckedEnd;
isValid = false;
break;
// below min qty
case 'min':
this.errorMessage = lang.groupCheckedTooFewStart + qtyCheckResults[1] + lang.groupCheckedEnd;
isValid = false;
break;
// above max qty
case 'max':
this.errorMessage = lang.groupCheckedTooManyStart + qtyCheckResults[1] + lang.groupCheckedEnd;
isValid = false;
break;
// ok
default:
isValid = true;
}
if( !isValid ) {
var _triggerOnBlur = function() {
$checkBoxes.unbind('click', _triggerOnBlur);
$checkBoxes.filter('*[data-validation]').validateInputOnBlur(lang, conf, false, 'blur');
};
$checkBoxes.bind('click', _triggerOnBlur);
}
return isValid;
}
// errorMessage : '', // set above in switch statement
// errorMessageKey: '' // not used
});
})(jQuery);
}));
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){function c(a,b){this.$form=a,this.$input=b,this.reset(),b.on("change paste",this.reset.bind(this))}var d=function(){return!1},e={numHalted:0,haltValidation:function(b){this.numHalted++,a.formUtils.haltValidation=!0,b.unbind("submit",d).bind("submit",d).find('*[type="submit"]').addClass("disabled").attr("disabled","disabled")},unHaltValidation:function(b){this.numHalted--,0===this.numHalted&&(a.formUtils.haltValidation=!1,b.unbind("submit",d).find('*[type="submit"]').removeClass("disabled").removeAttr("disabled","disabled"))}};c.prototype.reset=function(){this.haltedFormValidation=!1,this.hasRun=!1,this.isRunning=!1,this.result=b},c.prototype.run=function(a,b){return"keyup"===a?null:this.isRunning?(this.haltedFormValidation||"submit"!==a||(e.haltValidation(),this.haltedFormValidation=!0),null):this.hasRun?this.result:("submit"===a&&(e.haltValidation(this.$form),this.haltedFormValidation=!0),this.isRunning=!0,this.$input.attr("disabled","disabled").addClass("async-validation"),this.$form.addClass("async-validation"),b(function(a){this.done(a)}.bind(this)),null)},c.prototype.done=function(a){this.result=a,this.hasRun=!0,this.isRunning=!1,this.$input.removeAttr("disabled").removeClass("async-validation"),this.$form.removeClass("async-validation"),this.haltedFormValidation?(e.unHaltValidation(this.$form),this.$form.trigger("submit")):this.$input.trigger("validation.revalidate")},a.formUtils=a.extend(a.formUtils||{},{asyncValidation:function(a,b,d){var e,f=b.get(0);return f.asyncValidators||(f.asyncValidators={}),f.asyncValidators[a]?e=f.asyncValidators[a]:(e=new c(d,b),f.asyncValidators[a]=e),e}})}(a),function(a,b){"use strict";function c(b){b&&"custom"===b.errorMessagePosition&&"function"==typeof b.errorMessageCustom&&(a.formUtils.warn("Use of deprecated function errorMessageCustom, use config.submitErrorMessageCallback instead"),b.submitErrorMessageCallback=function(a,c){b.errorMessageCustom(a,b.language.errorTitle,c,b)})}function d(b){if(b.errorMessagePosition&&"object"==typeof b.errorMessagePosition){a.formUtils.warn("Deprecated use of config parameter errorMessagePosition, use config.submitErrorMessageCallback instead");var c=b.errorMessagePosition;b.errorMessagePosition="top",b.submitErrorMessageCallback=function(){return c}}}function e(b){var c=b.find("[data-validation-if-checked]");c.length&&a.formUtils.warn('Detected use of attribute "data-validation-if-checked" which is deprecated. Use "data-validation-depends-on" provided by module "logic"'),c.on("beforeValidation",function(){var c=a(this),d=c.valAttr("if-checked"),e=a('input[name="'+d+'"]',b),f=e.is(":checked"),g=(a.formUtils.getValue(e)||"").toString(),h=c.valAttr("if-checked-value");(!f||h&&h!==g)&&c.valAttr("skipped",!0)})}function f(b){var c={se:"sv",cz:"cs",dk:"da"};if(b.lang in c){var d=c[b.lang];a.formUtils.warn('Deprecated use of lang code "'+b.lang+'" use "'+d+'" instead'),b.lang=d}}a.fn.validateForm=function(b,c){return a.formUtils.warn("Use of deprecated function $.validateForm, use $.isValid instead"),this.isValid(b,c,!0)},a(window).on("formValidationPluginInit",function(a,b){f(b),c(b),d(b)}).on("validatorsLoaded formValidationSetup",function(b,c){c||(c=a("form")),e(c)})}(a),function(a){"use strict";var b={resolveErrorMessage:function(a,b,c,d,e){var f=d.validationErrorMsgAttribute+"-"+c.replace("validate_",""),g=a.attr(f);return g||(g=a.attr(d.validationErrorMsgAttribute),g||(g="function"!=typeof b.errorMessageKey?e[b.errorMessageKey]:e[b.errorMessageKey(d)],g||(g=b.errorMessage))),g},getParentContainer:function(b){if(b.valAttr("error-msg-container"))return a(b.valAttr("error-msg-container"));var c=b.parent();if(!c.hasClass("form-group")&&!c.closest("form").hasClass("form-horizontal")){var d=c.closest(".form-group");if(d.length)return d.eq(0)}return c},applyInputErrorStyling:function(a,b){a.addClass(b.errorElementClass).removeClass("valid"),this.getParentContainer(a).addClass(b.inputParentClassOnError).removeClass(b.inputParentClassOnSuccess),""!==b.borderColorOnError&&a.css("border-color",b.borderColorOnError)},applyInputSuccessStyling:function(a,b){a.addClass("valid"),this.getParentContainer(a).addClass(b.inputParentClassOnSuccess)},removeInputStylingAndMessage:function(a,c){a.removeClass("valid").removeClass(c.errorElementClass).css("border-color","");var d=b.getParentContainer(a);if(d.removeClass(c.inputParentClassOnError).removeClass(c.inputParentClassOnSuccess),"function"==typeof c.inlineErrorMessageCallback){var e=c.inlineErrorMessageCallback(a,!1,c);e&&e.html("")}else d.find("."+c.errorMessageClass).remove()},removeAllMessagesAndStyling:function(c,d){if("function"==typeof d.submitErrorMessageCallback){var e=d.submitErrorMessageCallback(c,!1,d);e&&e.html("")}else c.find("."+d.errorMessageClass+".alert").remove();c.find("."+d.errorElementClass+",.valid").each(function(){b.removeInputStylingAndMessage(a(this),d)})},setInlineMessage:function(b,c,d){this.applyInputErrorStyling(b,d);var e,f=document.getElementById(b.attr("name")+"_err_msg"),g=!1,h=function(d){a.formUtils.$win.trigger("validationErrorDisplay",[b,d]),d.html(c)},i=function(){var f=!1;g.find("."+d.errorMessageClass).each(function(){if(this.inputReferer===b[0])return f=a(this),!1}),f?c?h(f):f.remove():""!==c&&(e=a('<div class="'+d.errorMessageClass+' alert"></div>'),h(e),e[0].inputReferer=b[0],g.prepend(e))};if(f)a.formUtils.warn("Using deprecated element reference "+f.id),g=a(f),i();else if("function"==typeof d.inlineErrorMessageCallback){if(g=d.inlineErrorMessageCallback(b,c,d),!g)return;i()}else{var j=this.getParentContainer(b);e=j.find("."+d.errorMessageClass+".help-block"),0===e.length&&(e=a("<span></span>").addClass("help-block").addClass(d.errorMessageClass),e.appendTo(j)),h(e)}},setMessageInTopOfForm:function(b,c,d,e){var f='<div class="{errorMessageClass} alert alert-danger"><strong>{errorTitle}</strong><ul>{fields}</ul></div>',g=!1;if("function"!=typeof d.submitErrorMessageCallback||(g=d.submitErrorMessageCallback(b,c,d))){var h={errorTitle:e.errorTitle,fields:"",errorMessageClass:d.errorMessageClass};a.each(c,function(a,b){h.fields+="<li>"+b+"</li>"}),a.each(h,function(a,b){f=f.replace("{"+a+"}",b)}),g?g.html(f):b.children().eq(0).before(a(f))}}};a.formUtils=a.extend(a.formUtils||{},{dialogs:b})}(a),function(a,b,c){"use strict";var d=0;a.fn.validateOnBlur=function(b,c){var d=this,e=this.find("*[data-validation]");return e.each(function(){var e=a(this);if(e.is("[type=radio]")){var f=d.find('[type=radio][name="'+e.attr("name")+'"]');f.bind("blur.validation",function(){e.validateInputOnBlur(b,c,!0,"blur")}),c.validateCheckboxRadioOnClick&&f.bind("click.validation",function(){e.validateInputOnBlur(b,c,!0,"click")})}}),e.bind("blur.validation",function(){a(this).validateInputOnBlur(b,c,!0,"blur")}),c.validateCheckboxRadioOnClick&&this.find("input[type=checkbox][data-validation],input[type=radio][data-validation]").bind("click.validation",function(){a(this).validateInputOnBlur(b,c,!0,"click")}),this},a.fn.validateOnEvent=function(b,c){var d="FORM"===this[0].nodeName?this.find("*[data-validation-event]"):this;return d.each(function(){var d=a(this),e=d.valAttr("event");e&&d.unbind(e+".validation").bind(e+".validation",function(d){9!==(d||{}).keyCode&&a(this).validateInputOnBlur(b,c,!0,e)})}),this},a.fn.showHelpOnFocus=function(b){return b||(b="data-validation-help"),this.find("textarea,input").each(function(){var c=a(this),e="jquery_form_help_"+ ++d,f=c.attr(b);c.removeClass("has-help-text").unbind("focus.help").unbind("blur.help"),f&&c.addClass("has-help-txt").bind("focus.help",function(){var b=c.parent().find("."+e);0===b.length&&(b=a("<span />").addClass(e).addClass("help").addClass("help-block").text(f).hide(),c.after(b)),b.fadeIn()}).bind("blur.help",function(){a(this).parent().find("."+e).fadeOut("slow")})}),this},a.fn.validate=function(b,c,d){var e=a.extend({},a.formUtils.LANG,d||{});this.each(function(){var d=a(this),f=d.closest("form").get(0).validationConfig||{};d.one("validation",function(a,c){"function"==typeof b&&b(c,this,a)}),d.validateInputOnBlur(e,a.extend({},f,c||{}),!0)})},a.fn.willPostponeValidation=function(){return(this.valAttr("suggestion-nr")||this.valAttr("postpone")||this.hasClass("hasDatepicker"))&&!b.postponedValidation},a.fn.validateInputOnBlur=function(c,d,e,f){if(a.formUtils.eventType=f,this.willPostponeValidation()){var g=this,h=this.valAttr("postpone")||200;return b.postponedValidation=function(){g.validateInputOnBlur(c,d,e,f),b.postponedValidation=!1},setTimeout(function(){b.postponedValidation&&b.postponedValidation()},h),this}c=a.extend({},a.formUtils.LANG,c||{}),a.formUtils.dialogs.removeInputStylingAndMessage(this,d);var i=this,j=i.closest("form"),k=a.formUtils.validateInput(i,c,d,j,f),l=function(){i.validateInputOnBlur(c,d,!1,"blur.revalidated")};return"blur"===f&&i.unbind("validation.revalidate",l).one("validation.revalidate",l),e&&i.removeKeyUpValidation(),k.shouldChangeDisplay&&(k.isValid?a.formUtils.dialogs.applyInputSuccessStyling(i,d):a.formUtils.dialogs.setInlineMessage(i,k.errorMsg,d)),!k.isValid&&e&&i.validateOnKeyUp(c,d),this},a.fn.validateOnKeyUp=function(b,c){return this.each(function(){var d=a(this);d.valAttr("has-keyup-event")||d.valAttr("has-keyup-event","true").bind("keyup.validation",function(a){9!==a.keyCode&&d.validateInputOnBlur(b,c,!1,"keyup")})}),this},a.fn.removeKeyUpValidation=function(){return this.each(function(){a(this).valAttr("has-keyup-event",!1).unbind("keyup.validation")}),this},a.fn.valAttr=function(a,b){return b===c?this.attr("data-validation-"+a):b===!1||null===b?this.removeAttr("data-validation-"+a):(a=a.length>0?"-"+a:"",this.attr("data-validation"+a,b))},a.fn.isValid=function(b,c,d){if(a.formUtils.isLoadingModules){var e=this;return setTimeout(function(){e.isValid(b,c,d)},200),null}c=a.extend({},a.formUtils.defaultConfig(),c||{}),b=a.extend({},a.formUtils.LANG,b||{}),d=d!==!1,a.formUtils.errorDisplayPreventedWhenHalted&&(delete a.formUtils.errorDisplayPreventedWhenHalted,d=!1);var f=function(b,e){a.inArray(b,h)<0&&h.push(b),i.push(e),e.attr("current-error",b),d&&a.formUtils.dialogs.applyInputErrorStyling(e,c)},g=[],h=[],i=[],j=this,k=function(b,d){return"submit"===d||"button"===d||"reset"===d||a.inArray(b,c.ignore||[])>-1};if(d&&a.formUtils.dialogs.removeAllMessagesAndStyling(j,c),j.find("input,textarea,select").filter(':not([type="submit"],[type="button"])').each(function(){var d=a(this),e=d.attr("type"),h="radio"===e||"checkbox"===e,i=d.attr("name");if(!k(i,e)&&(!h||a.inArray(i,g)<0)){h&&g.push(i);var l=a.formUtils.validateInput(d,b,c,j,"submit");l.isValid?l.isValid&&l.shouldChangeDisplay&&(d.valAttr("current-error",!1),a.formUtils.dialogs.applyInputSuccessStyling(d,c)):f(l.errorMsg,d)}}),"function"==typeof c.onValidate){var l=c.onValidate(j);a.isArray(l)?a.each(l,function(a,b){f(b.message,b.element)}):l&&l.element&&l.message&&f(l.message,l.element)}return a.formUtils.isValidatingEntireForm=!1,i.length>0&&d&&("top"===c.errorMessagePosition?a.formUtils.dialogs.setMessageInTopOfForm(j,h,c,b):a.each(i,function(b,d){a.formUtils.dialogs.setInlineMessage(d,d.attr("current-error"),c)}),c.scrollToTopOnError&&a.formUtils.$win.scrollTop(j.offset().top-20)),!d&&a.formUtils.haltValidation&&(a.formUtils.errorDisplayPreventedWhenHalted=!0),0===i.length&&!a.formUtils.haltValidation},a.fn.restrictLength=function(b){return new a.formUtils.lengthRestriction(this,b),this},a.fn.addSuggestions=function(b){var c=!1;return this.find("input").each(function(){var d=a(this);c=a.split(d.attr("data-suggestions")),c.length>0&&!d.hasClass("has-suggestions")&&(a.formUtils.suggest(d,c,b),d.addClass("has-suggestions"))}),this}}(a,window),function(a){"use strict";a.formUtils=a.extend(a.formUtils||{},{isLoadingModules:!1,loadedModules:{},loadModules:function(b,c,d){if(a.formUtils.isLoadingModules)return void setTimeout(function(){a.formUtils.loadModules(b,c,d)},10);var e=!1,f=function(b,c){var f=a.split(b),g=f.length,h=function(){g--,0===g&&(a.formUtils.isLoadingModules=!1,d&&e&&"function"==typeof d&&d())};g>0&&(a.formUtils.isLoadingModules=!0);var i="?_="+(new Date).getTime(),j=document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0];a.each(f,function(b,d){if(d=a.trim(d),0===d.length)h();else{var f=c+d+(".js"===d.slice(-3)?"":".js"),g=document.createElement("SCRIPT");f in a.formUtils.loadedModules?h():(a.formUtils.loadedModules[f]=1,e=!0,g.type="text/javascript",g.onload=h,g.src=f+(".dev.js"===f.slice(-7)?i:""),g.onerror=function(){a.formUtils.warn("Unable to load form validation module "+f)},g.onreadystatechange=function(){"complete"!==this.readyState&&"loaded"!==this.readyState||(h(),this.onload=null,this.onreadystatechange=null)},j.appendChild(g))}})};if(c)f(b,c);else{var g=function(){var c=!1;return a('script[src*="form-validator"]').each(function(){var a=this.src.split("form-validator")[1].split("node_modules").length>1;if(!a)return c=this.src.substr(0,this.src.lastIndexOf("/"))+"/","/"===c&&(c=""),!1}),c!==!1&&(f(b,c),!0)};g()||a(g)}}})}(a),function(a){"use strict";a.split=function(b,c,d){d=void 0===d||d===!0;var e="[,|-"+(d?"\\s":"")+"]\\s*",f=new RegExp(e,"g");if("function"!=typeof c){if(!b)return[];var g=[];return a.each(b.split(c?c:f),function(b,c){c=a.trim(c),c.length&&g.push(c)}),g}b&&a.each(b.split(f),function(b,d){if(d=a.trim(d),d.length)return c(d,b)})},a.validate=function(b){var c=a.extend(a.formUtils.defaultConfig(),{form:"form",validateOnEvent:!1,validateOnBlur:!0,validateCheckboxRadioOnClick:!0,showHelpOnFocus:!0,addSuggestions:!0,modules:"",onModulesLoaded:null,language:!1,onSuccess:!1,onError:!1,onElementValidate:!1});if(b=a.extend(c,b||{}),a(window).trigger("formValidationPluginInit",[b]),b.lang&&"en"!==b.lang){var d="lang/"+b.lang+".js";b.modules+=b.modules.length?","+d:d}a(b.form).each(function(c,d){d.validationConfig=b;var e=a(d);e.trigger("formValidationSetup",[e,b]),e.find(".has-help-txt").unbind("focus.validation").unbind("blur.validation"),e.removeClass("has-validation-callback").unbind("submit.validation").unbind("reset.validation").find("input[data-validation],textarea[data-validation]").unbind("blur.validation"),e.bind("submit.validation",function(c){var d=a(this),e=function(){return c.stopImmediatePropagation(),!1};if(a.formUtils.haltValidation)return e();if(a.formUtils.isLoadingModules)return setTimeout(function(){d.trigger("submit.validation")},200),e();var f=d.isValid(b.language,b);if(a.formUtils.haltValidation)return e();if(!f||"function"!=typeof b.onSuccess)return f||"function"!=typeof b.onError?!!f||e():(b.onError(d),e());var g=b.onSuccess(d);return g===!1?e():void 0}).bind("reset.validation",function(){a.formUtils.dialogs.removeAllMessagesAndStyling(e,b)}).addClass("has-validation-callback"),b.showHelpOnFocus&&e.showHelpOnFocus(),b.addSuggestions&&e.addSuggestions(),b.validateOnBlur&&(e.validateOnBlur(b.language,b),e.bind("html5ValidationAttrsFound",function(){e.validateOnBlur(b.language,b)})),b.validateOnEvent&&e.validateOnEvent(b.language,b)}),""!==b.modules&&a.formUtils.loadModules(b.modules,!1,function(){"function"==typeof b.onModulesLoaded&&b.onModulesLoaded();var c="string"==typeof b.form?a(b.form):b.form;a.formUtils.$win.trigger("validatorsLoaded",[c,b])})}}(a),function(a,b){"use strict";var c=a(b);a.formUtils=a.extend(a.formUtils||{},{$win:c,defaultConfig:function(){return{ignore:[],errorElementClass:"error",borderColorOnError:"#b94a48",errorMessageClass:"form-error",validationRuleAttribute:"data-validation",validationErrorMsgAttribute:"data-validation-error-msg",errorMessagePosition:"inline",errorMessageTemplate:{container:'<div class="{errorMessageClass} alert alert-danger">{messages}</div>',messages:"<strong>{errorTitle}</strong><ul>{fields}</ul>",field:"<li>{msg}</li>"},scrollToTopOnError:!0,dateFormat:"yyyy-mm-dd",addValidClassOnAll:!1,decimalSeparator:".",inputParentClassOnError:"has-error",inputParentClassOnSuccess:"has-success",validateHiddenInputs:!1,inlineErrorMessageCallback:!1,submitErrorMessageCallback:!1}},validators:{},_events:{load:[],valid:[],invalid:[]},haltValidation:!1,addValidator:function(a){var b=0===a.name.indexOf("validate_")?a.name:"validate_"+a.name;void 0===a.validateOnKeyUp&&(a.validateOnKeyUp=!0),this.validators[b]=a},warn:function(a){"console"in b?"function"==typeof b.console.warn?b.console.warn(a):"function"==typeof b.console.log&&b.console.log(a):alert(a)},getValue:function(a,b){var c=b?b.find(a):a;if(c.length>0){var d=c.eq(0).attr("type");return"radio"===d||"checkbox"===d?c.filter(":checked").val()||"":c.val()||""}return!1},validateInput:function(b,c,d,e,f){d=d||a.formUtils.defaultConfig(),c=c||a.formUtils.LANG;var g=this.getValue(b);b.valAttr("skipped",!1).one("beforeValidation",function(){(b.attr("disabled")||!b.is(":visible")&&!d.validateHiddenInputs)&&b.valAttr("skipped",1)}).trigger("beforeValidation",[g,d,c]);var h="true"===b.valAttr("optional"),i=!g&&h,j=b.attr(d.validationRuleAttribute),k=!0,l="",m={isValid:!0,shouldChangeDisplay:!0,errorMsg:""};if(!j||i||b.valAttr("skipped"))return m.shouldChangeDisplay=d.addValidClassOnAll,m;var n=b.valAttr("ignore");return n&&a.each(n.split(""),function(a,b){g=g.replace(new RegExp("\\"+b,"g"),"")}),a.split(j,function(h){0!==h.indexOf("validate_")&&(h="validate_"+h);var i=a.formUtils.validators[h];if(!i)throw new Error('Using undefined validator "'+h+'". Maybe you have forgotten to load the module that "'+h+'" belongs to?');if("validate_checkbox_group"===h&&(b=e.find('[name="'+b.attr("name")+'"]:eq(0)')),("keyup"!==f||i.validateOnKeyUp)&&(k=i.validatorFunction(g,b,d,c,e,f)),!k)return d.validateOnBlur&&b.validateOnKeyUp(c,d),l=a.formUtils.dialogs.resolveErrorMessage(b,i,h,d,c),!1}),k===!1?(b.trigger("validation",!1),m.errorMsg=l,m.isValid=!1,m.shouldChangeDisplay=!0):null===k?m.shouldChangeDisplay=!1:(b.trigger("validation",!0),m.shouldChangeDisplay=!0),"function"==typeof d.onElementValidate&&null!==l&&d.onElementValidate(m.isValid,b,e,l),b.trigger("afterValidation",[m,f]),m},parseDate:function(b,c,d){var e,f,g,h,i=c.replace(/[a-zA-Z]/gi,"").substring(0,1),j="^",k=c.split(i||null);if(a.each(k,function(a,b){j+=(a>0?"\\"+i:"")+"(\\d{"+b.length+"})"}),j+="$",d){var l=[];a.each(b.split(i),function(a,b){1===b.length&&(b="0"+b),l.push(b)}),b=l.join(i)}if(e=b.match(new RegExp(j)),null===e)return!1;var m=function(b,c,d){for(var e=0;e<c.length;e++)if(c[e].substring(0,1)===b)return a.formUtils.parseDateInt(d[e+1]);return-1};return g=m("m",k,e),f=m("d",k,e),h=m("y",k,e),!(2===g&&f>28&&(h%4!==0||h%100===0&&h%400!==0)||2===g&&f>29&&(h%4===0||h%100!==0&&h%400===0)||g>12||0===g)&&(!(this.isShortMonth(g)&&f>30||!this.isShortMonth(g)&&f>31||0===f)&&[h,g,f])},parseDateInt:function(a){return 0===a.indexOf("0")&&(a=a.replace("0","")),parseInt(a,10)},isShortMonth:function(a){return a%2===0&&a<7||a%2!==0&&a>7},lengthRestriction:function(b,c){var d=parseInt(c.text(),10),e=0,f=function(){var a=b.val().length;if(a>d){var f=b.scrollTop();b.val(b.val().substring(0,d)),b.scrollTop(f)}e=d-a,e<0&&(e=0),c.text(e)};a(b).bind("keydown keyup keypress focus blur",f).bind("cut paste",function(){setTimeout(f,100)}),a(document).bind("ready",f)},numericRangeCheck:function(b,c){var d=a.split(c),e=parseInt(c.substr(3),10);return 1===d.length&&c.indexOf("min")===-1&&c.indexOf("max")===-1&&(d=[c,c]),2===d.length&&(b<parseInt(d[0],10)||b>parseInt(d[1],10))?["out",d[0],d[1]]:0===c.indexOf("min")&&b<e?["min",e]:0===c.indexOf("max")&&b>e?["max",e]:["ok"]},_numSuggestionElements:0,_selectedSuggestion:null,_previousTypedVal:null,suggest:function(b,d,e){var f={css:{maxHeight:"150px",background:"#FFF",lineHeight:"150%",textDecoration:"underline",overflowX:"hidden",overflowY:"auto",border:"#CCC solid 1px",borderTop:"none",cursor:"pointer"},activeSuggestionCSS:{background:"#E9E9E9"}},g=function(a,b){var c=b.offset();a.css({width:b.outerWidth(),left:c.left+"px",top:c.top+b.outerHeight()+"px"})};e&&a.extend(f,e),f.css.position="absolute",f.css["z-index"]=9999,b.attr("autocomplete","off"),0===this._numSuggestionElements&&c.bind("resize",function(){a(".jquery-form-suggestions").each(function(){var b=a(this),c=b.attr("data-suggest-container");g(b,a(".suggestions-"+c).eq(0))})}),this._numSuggestionElements++;var h=function(b){var c=b.valAttr("suggestion-nr");a.formUtils._selectedSuggestion=null,a.formUtils._previousTypedVal=null,a(".jquery-form-suggestion-"+c).fadeOut("fast")};return b.data("suggestions",d).valAttr("suggestion-nr",this._numSuggestionElements).unbind("focus.suggest").bind("focus.suggest",function(){a(this).trigger("keyup"),a.formUtils._selectedSuggestion=null}).unbind("keyup.suggest").bind("keyup.suggest",function(){var c=a(this),d=[],e=a.trim(c.val()).toLocaleLowerCase();if(e!==a.formUtils._previousTypedVal){a.formUtils._previousTypedVal=e;var i=!1,j=c.valAttr("suggestion-nr"),k=a(".jquery-form-suggestion-"+j);if(k.scrollTop(0),""!==e){var l=e.length>2;a.each(c.data("suggestions"),function(a,b){var c=b.toLocaleLowerCase();return c===e?(d.push("<strong>"+b+"</strong>"),i=!0,!1):void((0===c.indexOf(e)||l&&c.indexOf(e)>-1)&&d.push(b.replace(new RegExp(e,"gi"),"<strong>$&</strong>")))})}i||0===d.length&&k.length>0?k.hide():d.length>0&&0===k.length?(k=a("<div></div>").css(f.css).appendTo("body"),b.addClass("suggestions-"+j),k.attr("data-suggest-container",j).addClass("jquery-form-suggestions").addClass("jquery-form-suggestion-"+j)):d.length>0&&!k.is(":visible")&&k.show(),d.length>0&&e.length!==d[0].length&&(g(k,c),k.html(""),a.each(d,function(b,d){a("<div></div>").append(d).css({overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",padding:"5px"}).addClass("form-suggest-element").appendTo(k).click(function(){c.focus(),c.val(a(this).text()),c.trigger("change"),h(c)})}))}}).unbind("keydown.validation").bind("keydown.validation",function(b){var c,d,e=b.keyCode?b.keyCode:b.which,g=a(this);if(13===e&&null!==a.formUtils._selectedSuggestion){if(c=g.valAttr("suggestion-nr"),d=a(".jquery-form-suggestion-"+c),d.length>0){var i=d.find("div").eq(a.formUtils._selectedSuggestion).text();g.val(i),g.trigger("change"),h(g),b.preventDefault()}}else{c=g.valAttr("suggestion-nr"),d=a(".jquery-form-suggestion-"+c);var j=d.children();if(j.length>0&&a.inArray(e,[38,40])>-1){38===e?(null===a.formUtils._selectedSuggestion?a.formUtils._selectedSuggestion=j.length-1:a.formUtils._selectedSuggestion--,a.formUtils._selectedSuggestion<0&&(a.formUtils._selectedSuggestion=j.length-1)):40===e&&(null===a.formUtils._selectedSuggestion?a.formUtils._selectedSuggestion=0:a.formUtils._selectedSuggestion++,a.formUtils._selectedSuggestion>j.length-1&&(a.formUtils._selectedSuggestion=0));var k=d.innerHeight(),l=d.scrollTop(),m=d.children().eq(0).outerHeight(),n=m*a.formUtils._selectedSuggestion;return(n<l||n>l+k)&&d.scrollTop(n),j.removeClass("active-suggestion").css("background","none").eq(a.formUtils._selectedSuggestion).addClass("active-suggestion").css(f.activeSuggestionCSS),b.preventDefault(),!1}}}).unbind("blur.suggest").bind("blur.suggest",function(){h(a(this))}),b},LANG:{errorTitle:"Form submission failed!",requiredField:"This is a required field",requiredFields:"You have not answered all required fields",badTime:"You have not given a correct time",badEmail:"You have not given a correct e-mail address",badTelephone:"You have not given a correct phone number",badSecurityAnswer:"You have not given a correct answer to the security question",badDate:"You have not given a correct date",lengthBadStart:"The input value must be between ",lengthBadEnd:" characters",lengthTooLongStart:"The input value is longer than ",lengthTooShortStart:"The input value is shorter than ",notConfirmed:"Input values could not be confirmed",badDomain:"Incorrect domain value",badUrl:"The input value is not a correct URL",badCustomVal:"The input value is incorrect",andSpaces:" and spaces ",badInt:"The input value was not a correct number",badSecurityNumber:"Your social security number was incorrect",badUKVatAnswer:"Incorrect UK VAT Number",badUKNin:"Incorrect UK NIN",badUKUtr:"Incorrect UK UTR Number",badStrength:"The password isn't strong enough",badNumberOfSelectedOptionsStart:"You have to choose at least ",badNumberOfSelectedOptionsEnd:" answers",badAlphaNumeric:"The input value can only contain alphanumeric characters ",badAlphaNumericExtra:" and ",wrongFileSize:"The file you are trying to upload is too large (max %s)",wrongFileType:"Only files of type %s is allowed",groupCheckedRangeStart:"Please choose between ",groupCheckedTooFewStart:"Please choose at least ",groupCheckedTooManyStart:"Please choose a maximum of ",groupCheckedEnd:" item(s)",badCreditCard:"The credit card number is not correct",badCVV:"The CVV number was not correct",wrongFileDim:"Incorrect image dimensions,",imageTooTall:"the image can not be taller than",imageTooWide:"the image can not be wider than",imageTooSmall:"the image was too small",min:"min",max:"max",imageRatioNotAccepted:"Image ratio is not be accepted",badBrazilTelephoneAnswer:"The phone number entered is invalid",badBrazilCEPAnswer:"The CEP entered is invalid",badBrazilCPFAnswer:"The CPF entered is invalid",badPlPesel:"The PESEL entered is invalid",badPlNip:"The NIP entered is invalid",badPlRegon:"The REGON entered is invalid",badreCaptcha:"Please confirm that you are not a bot",passwordComplexityStart:"Password must contain at least ",passwordComplexitySeparator:", ",passwordComplexityUppercaseInfo:" uppercase letter(s)",passwordComplexityLowercaseInfo:" lowercase letter(s)",passwordComplexitySpecialCharsInfo:" special character(s)",passwordComplexityNumericCharsInfo:" numeric character(s)",passwordComplexityEnd:"."}})}(a,window),function(a){a.formUtils.addValidator({name:"email",validatorFunction:function(b){var c=b.toLowerCase().split("@"),d=c[0],e=c[1];if(d&&e){if(0===d.indexOf('"')){var f=d.length;if(d=d.replace(/\"/g,""),d.length!==f-2)return!1}return a.formUtils.validators.validate_domain.validatorFunction(c[1])&&0!==d.indexOf(".")&&"."!==d.substring(d.length-1,d.length)&&d.indexOf("..")===-1&&!/[^\w\+\.\-\#\-\_\~\!\$\&\'\(\)\*\+\,\;\=\:]/.test(d)}return!1},errorMessage:"",errorMessageKey:"badEmail"}),a.formUtils.addValidator({name:"domain",validatorFunction:function(a){return a.length>0&&a.length<=253&&!/[^a-zA-Z0-9]/.test(a.slice(-2))&&!/[^a-zA-Z0-9]/.test(a.substr(0,1))&&!/[^a-zA-Z0-9\.\-]/.test(a)&&1===a.split("..").length&&a.split(".").length>1},errorMessage:"",errorMessageKey:"badDomain"}),a.formUtils.addValidator({name:"required",validatorFunction:function(b,c,d,e,f){switch(c.attr("type")){case"checkbox":return c.is(":checked");case"radio":return f.find('input[name="'+c.attr("name")+'"]').filter(":checked").length>0;default:return""!==a.trim(b)}},errorMessage:"",errorMessageKey:function(a){return"top"===a.errorMessagePosition||"function"==typeof a.errorMessagePosition?"requiredFields":"requiredField"}}),a.formUtils.addValidator({name:"length",validatorFunction:function(b,c,d,e){var f=c.valAttr("length"),g=c.attr("type");if(void 0===f)return alert('Please add attribute "data-validation-length" to '+c[0].nodeName+" named "+c.attr("name")),!0;var h,i="file"===g&&void 0!==c.get(0).files?c.get(0).files.length:b.length,j=a.formUtils.numericRangeCheck(i,f);switch(j[0]){case"out":this.errorMessage=e.lengthBadStart+f+e.lengthBadEnd,h=!1;break;case"min":this.errorMessage=e.lengthTooShortStart+j[1]+e.lengthBadEnd,h=!1;break;case"max":this.errorMessage=e.lengthTooLongStart+j[1]+e.lengthBadEnd,h=!1;break;default:h=!0}return h},errorMessage:"",errorMessageKey:""}),a.formUtils.addValidator({name:"url",validatorFunction:function(b){var c=/^(https?|ftp):\/\/((((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])(\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])(\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/(((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|\[|\]|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#(((\w|-|\.|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i;if(c.test(b)){var d=b.split("://")[1],e=d.indexOf("/");return e>-1&&(d=d.substr(0,e)),a.formUtils.validators.validate_domain.validatorFunction(d)}return!1},errorMessage:"",errorMessageKey:"badUrl"}),a.formUtils.addValidator({name:"number",validatorFunction:function(a,b,c){if(""!==a){var d,e,f=b.valAttr("allowing")||"",g=b.valAttr("decimal-separator")||c.decimalSeparator,h=!1,i=b.valAttr("step")||"",j=!1,k=b.attr("data-sanitize")||"",l=k.match(/(^|[\s])numberFormat([\s]|$)/i);if(l){if(!window.numeral)throw new ReferenceError("The data-sanitize value numberFormat cannot be used without the numeral library. Please see Data Validation in http://www.formvalidator.net for more information.");a.length&&(a=String(numeral().unformat(a)))}if(f.indexOf("number")===-1&&(f+=",number"),f.indexOf("negative")===-1&&0===a.indexOf("-"))return!1;if(f.indexOf("range")>-1&&(d=parseFloat(f.substring(f.indexOf("[")+1,f.indexOf(";"))),e=parseFloat(f.substring(f.indexOf(";")+1,f.indexOf("]"))),h=!0),""!==i&&(j=!0),","===g){if(a.indexOf(".")>-1)return!1;a=a.replace(",",".")}if(""===a.replace(/[0-9-]/g,"")&&(!h||a>=d&&a<=e)&&(!j||a%i===0))return!0;if(f.indexOf("float")>-1&&null!==a.match(new RegExp("^([0-9-]+)\\.([0-9]+)$"))&&(!h||a>=d&&a<=e)&&(!j||a%i===0))return!0}return!1},errorMessage:"",errorMessageKey:"badInt"}),a.formUtils.addValidator({name:"alphanumeric",validatorFunction:function(b,c,d,e){var f="^([a-zA-Z0-9",g="]+)$",h=c.valAttr("allowing"),i="";if(h){i=f+h+g;var j=h.replace(/\\/g,"");j.indexOf(" ")>-1&&(j=j.replace(" ",""),j+=e.andSpaces||a.formUtils.LANG.andSpaces),this.errorMessage=e.badAlphaNumeric+e.badAlphaNumericExtra+j}else i=f+g,this.errorMessage=e.badAlphaNumeric;return new RegExp(i).test(b)},errorMessage:"",errorMessageKey:""}),a.formUtils.addValidator({name:"custom",validatorFunction:function(a,b){var c=new RegExp(b.valAttr("regexp"));return c.test(a)},errorMessage:"",errorMessageKey:"badCustomVal"}),a.formUtils.addValidator({name:"date",validatorFunction:function(b,c,d){var e=c.valAttr("format")||d.dateFormat||"yyyy-mm-dd",f="false"===c.valAttr("require-leading-zero");return a.formUtils.parseDate(b,e,f)!==!1},errorMessage:"",errorMessageKey:"badDate"}),a.formUtils.addValidator({name:"checkbox_group",validatorFunction:function(b,c,d,e,f){var g=!0,h=c.attr("name"),i=a('input[type=checkbox][name^="'+h+'"]',f),j=i.filter(":checked").length,k=c.valAttr("qty");if(void 0===k){var l=c.get(0).nodeName;alert('Attribute "data-validation-qty" is missing from '+l+" named "+c.attr("name"))}var m=a.formUtils.numericRangeCheck(j,k);switch(m[0]){case"out":this.errorMessage=e.groupCheckedRangeStart+k+e.groupCheckedEnd,g=!1;break;case"min":this.errorMessage=e.groupCheckedTooFewStart+m[1]+e.groupCheckedEnd,g=!1;break;case"max":this.errorMessage=e.groupCheckedTooManyStart+m[1]+e.groupCheckedEnd,g=!1;break;default:g=!0}if(!g){var n=function(){i.unbind("click",n),i.filter("*[data-validation]").validateInputOnBlur(e,d,!1,"blur")};i.bind("click",n)}return g}})}(a)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){"use strict";a.setupValidation=function(b){var c=a(b.form||"form");a.each(b.validate||b.validation||{},function(b,d){var e;e="#"===b[0]?a(b):"."===b[0]?c.find(b):c.find('*[name="'+b+'"]'),e.attr("data-validation",d.validation),a.each(d,function(a,b){"validation"!==a&&b!==!1&&(b===!0&&(b="true"),"_"===a[0]?(a=a.substring(1),b===!1?e.removeAttr(a):e.attr(a,b)):e.valAttr(a,b))})}),a.validate(b)}}(a)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"El formulari no s'ha pogut enviar!",requiredField:"Aquest camp és obligatori",requiredFields:"No ha contestat tots els camps requerits",badTime:"L'hora proporcionada no és vàlida",badEmail:"La direcció d'e-mail no és vàlida",badTelephone:"El número de telèfon proporcionat no és vàlid",badSecurityAnswer:"La resposta a la seva pregunta de seguretat és incorrecte",badDate:"La data proporcionada no és vàlida",lengthBadStart:"La seva resposta s'ha d'incloure entre ",lengthBadEnd:" caràcters",lengthTooLongStart:"La seva resposta ha de ser menor a ",lengthTooShortStart:"La seva resposta ha de ser major a ",notConfirmed:"Els valors proporcionats no poden ser confirmats",badDomain:"Ha introduït un domini incorrecte",badUrl:"La URL proporcionada no és vàlida",badCustomVal:"Els valors proporcionats no són vàlids",andSpaces:" i espais ",badInt:"El valor proporcionat no és un número vàlid",badSecurityNumber:"El número de seguretat social proporcionat és incorrecte",badUKVatAnswer:"El número VAT proporcionat no és vàlid pel Regne Unit",badStrength:"La contrasenya proporcionada no és suficientment segura",badNumberOfSelectedOptionsStart:"Ha de seleccionar almenys",badNumberOfSelectedOptionsEnd:" resposta(es)",badAlphaNumeric:"El valor proporcionat només ha de contenir caràcters alfanumèrics (a-z i números)",badAlphaNumericExtra:" i",wrongFileSize:"L'arxiu que està tractant de pujar és massa gran (màx. %s)",wrongFileType:"Només els arxius de tipus %s estan permesos",groupCheckedRangeStart:"Si us plau, triï entre ",groupCheckedTooFewStart:"Si us plau, triï almenys ",groupCheckedTooManyStart:"Si us plau, triï un màxim de ",groupCheckedEnd:" element(s)",badCreditCard:"El número de targeta de crèdit proporcionat no és vàlid",badCVV:"CVV proporcionat no és vàlid",wrongFileDim:"Les dimensions de la imatge no són vàlides,",imageTooTall:"l'alçada de la imatge no pot ser major a",imageTooWide:"l'amplada de la imatge no pot ser major a",imageTooSmall:"la imatge és massa petita",min:"min.",max:"màx.",imageRatioNotAccepted:"La proporció de la imatge (alçada x amplada) no és vàlida"}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Podání formuláře selhalo!",requiredField:"Toto pole je povinné",requiredfields:"Nebyly vyplněny všechny požadované pole",badTime:"Neplatný čas",badEmail:"Neplatná e-mailová adresa",badTelephone:"Neplatné telefonní číslo",badSecurityAnswer:"Chybná odpověď na bezpečnostní otázku",badDate:"Nesprávné datum",lengthBadStart:"Zadaná hodnota musí být v rozmezí ",lengthBadEnd:" znaků",lengthTooLongStart:"Zadaná hodnota je větší než ",lengthTooShortStart:"Zadaná hodnota je menší než ",notConfirmed:"Zadané hodnoty nebyly potvrzené",badDomain:"Neplatná doména",badUrl:"Neplatný URL",badCustomVal:"Zadaná hodnota je chybná",andSpaces:" a mezery",badInt:"Neplatné číslo",badSecurityNumber:"Neplatné číslo zabezpečení",badUKVatAnswer:"Neplatné číslo DIČ ",badStrength:"Vaše heslo není dostatečně silné",badNumberOfSelectedOptionsStart:"Musíte vybrat nejméně ",badNumberOfSelectedOptionsEnd:" odpověď",badAlphaNumeric:"Zadaná hodnota může obsahovat pouze alfanumerické znaky ",badAlphaNumericExtra:" a ",wrongFileSize:"Soubor je příliš velký (max %s)",wrongFileType:"Pouze soubory typu %s",groupCheckedRangeStart:"Prosím, vyberte ",groupCheckedTooFewStart:"Vyberte prosím nejméně ",groupCheckedTooManyStart:"Vyberte prosím maximálně ",groupCheckedEnd:" složka(y)",badCreditCard:"Číslo kreditní karty je neplatné",badCVV:"Číslo CVV je neplatné",wrongFileDim:"Nesprávné rozměry obrázku,",imageTooTall:"obraz nemůže být vyšší než",imageTooWide:"obraz nemůže být širší než",imageTooSmall:"obraz je příliš malý",min:"min",max:"max",imageRatioNotAccepted:"Poměr obrázku je nesprávný",badBrazilTelephoneAnswer:"Neplatné telefonní číslo",badBrazilCEPAnswer:"Neplatné CEP",badBrazilCPFAnswer:"Neplatné CPF"}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={andSpaces:" og mellemrum ",badAlphaNumeric:"Det indtastede kan kun indeholde alfanumeriske karakter ",badAlphaNumericExtra:" og ",badCVV:"Det angivne CVV nummer er ugyldigt",badCreditCard:"Det angivne kortnummer er ugyldigt",badCustomVal:"Den indtastede værdi er ugyldig",badDate:"Den angivne dato er ugyldig",badDomain:"Det angivne domæne er ugyldigt",badEmail:"Den angivne email adresse er ugyldig",badInt:"Det angivne tal er ugyldigt",badNumberOfSelectedOptionsEnd:" svar",badNumberOfSelectedOptionsStart:"Du skal vælge mindst ",badSecurityAnswer:"Du har ikke angivet et korrekt svar til sikkerhedsspørgsmålet",badSecurityNumber:"Dit CPR nummer er ikke korrekt",badStrength:"Det angivne password er ikke stærkt nok",badTelephone:"Det angivne telefonnummer er ugyldigt",badTime:"Det angivne tidspunkt er ugyldigt",badUrl:"Den angivne URL er ugyldig",badreCaptcha:"Verificer venligst at du ikke er en bot",errorTitle:"Formular forespørgslen fejlede!",groupCheckedEnd:" ting",groupCheckedRangeStart:"Vælg venligst mellem ",groupCheckedTooFewStart:"Vælg mindst ",groupCheckedTooManyStart:"Vælg højst ",imageRatioNotAccepted:"Billedets dimensioner er ikke acceptable",imageTooSmall:"Billedet er for lille",imageTooTall:"Billedet må ikke være højere end",imageTooWide:"Billedet må ikke være bredere end",lengthBadEnd:" tegn",lengthBadStart:"Feltets værdi skal være mellem ",lengthTooLongStart:"Feltets værdi må ikke være længere end ",lengthTooShortStart:"Feltets værdi må ikke være kortere end ",max:"max",min:"min",notConfirmed:"Feltværdierne kunne ikke bekræftes",requiredField:"Dette felt er påkrævet",requiredFields:"Du har ikke udfyldt alle påkrævede felter",wrongFileDim:"Forkerte billede dimensioner,",wrongFileSize:"Filen du forsøger at uploade er for stor (max %s)",wrongFileType:"Udelukkende filer at følgedne type er tilladt %s"}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Ihre Anfrage konnte nicht gesendet werden!",requiredField:"Dies ist ein Pflichtfeld",requiredFields:"Sie haben nicht alle Fragen beantwortet",badTime:"Sie haben nicht die korrekte Zeit eingegeben",badEmail:"Sie haben keine gültige E-Mail-Adresse eingegeben",badTelephone:"Sie haben keine richtige Telefonnummer eingetragen",badSecurityAnswer:"Sie haben die falsche Antwort auf die Sicherheitsfrage eingegeben",badDate:"Eingabe eines falschen Datums",lengthBadStart:"Der eingegebene Wert muss dazwischen sein ",lengthBadEnd:"  Zeichen",lengthTooLongStart:"Eingegebener Wert ist größer als ",lengthTooShortStart:"Eingegebener Wert ist größer als ",notConfirmed:"Die Antworten könnten nicht gegenseitig bestätigen,",badDomain:"Sie haben die falsche Domäne eingetragen",badUrl:"Sie haben nicht die richtige URL eingegeben",badCustomVal:"Eingabe einer falschen Antwort",andSpaces:" und Leerzeichen",badInt:"Sie haben keine Nummer eingegeben",badSecurityNumber:"Sie haben eine falsche Sozialversicherungsnummer eingegeben",badUKVatAnswer:"Sie haben keine UK-Umsatzsteuer-Identifikationsnummer eingegeben",badStrength:"Sie haben ein Kennwort, das nicht sicher genug ist eingegeben",badNumberOfSelectedOptionsStart:"Wählen Sie zu mindestens ",badNumberOfSelectedOptionsEnd:" Antwort",badAlphaNumeric:"Sie können nur alphanumerische Zeichen (Buchstaben und Zahlen) eingeben",badAlphaNumericExtra:" und",wrongFileSize:"Die Datei, die Sie hochzuladen versuchen, ist zu groß (max %s)",wrongFileType:"Nur Dateien vom Typ %s sind zulässig",groupCheckedRangeStart:"Wählen Sie zwischen",groupCheckedTooFewStart:"Dann müssen Sie zumindest sicher,",groupCheckedTooManyStart:"Sie können nicht mehr als zu machen",groupCheckedEnd:" Auswahl",badCreditCard:"Sie haben eine ungültige Kreditkartennummer eingegeben",badCVV:"Sie haben eine falsche CVV eingegeben",wrongFileDim:"Illegale Bildgröße,",imageTooTall:"Bild kann nicht größer sein als",imageTooWide:"Bild kann nicht breiter sein als",imageTooSmall:"Bild ist zu klein",min:"min",max:"max",imageRatioNotAccepted:"Bildverhältnis wird nicht akzeptiert",badBrazilTelephoneAnswer:"Die eingegebene Telefonnummer ist nicht korrekt",badBrazilCEPAnswer:"Der CEP ist ungültig",badBrazilCPFAnswer:"Der CEP ist ungültig"}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"El formulario no se ha podido enviar!",requiredField:"Este campo es obligatorio",requiredFields:"No ha contestado todos los campos requeridos",badTime:"La hora proporcionada no es válida",badEmail:"La dirección de e-mail no es válida",badTelephone:"El número de teléfono proporcionado no es válido",badSecurityAnswer:"La respuesta a su pregunta de seguridad es incorrecta",badDate:"La fecha proporcionada no es válida",lengthBadStart:"Su respuesta debe incluir entre ",lengthBadEnd:" caracteres",lengthTooLongStart:"Su respuesta debe de ser menor a ",lengthTooShortStart:"Su respuesta debe de ser mayor a ",notConfirmed:"Los valores proporcionados no pudieron ser confirmados",badDomain:"Ha introducido un dominio incorrecto",badUrl:"La URL proporcionada no es válida",badCustomVal:"Los valores proporcionados no son válidos",andSpaces:" y espacios ",badInt:"El valor proporcionado no es un número válido",badSecurityNumber:"El número de seguridad social proporcionado es incorrecto",badUKVatAnswer:"El número VAT proporcionado no es válido para el Reino Unido",badStrength:"La contraseña proporcionada no es lo suficientemente segura",badNumberOfSelectedOptionsStart:"Debe seleccionar al menos",badNumberOfSelectedOptionsEnd:" respuesta(s)",badAlphaNumeric:"El valor proporcionado solo debe contener caracteres alfanuméricos (a-z y números)",badAlphaNumericExtra:" y",wrongFileSize:"El archivo que está tratando de subir es demasiado grande (máx. %s)",wrongFileType:"Sólo los archivos del tipo %s están permitido",groupCheckedRangeStart:"Por favor, elija entre ",groupCheckedTooFewStart:"Por favor, elija al menos ",groupCheckedTooManyStart:"Por favor, elija un máximo de ",groupCheckedEnd:" ítem(s)",badCreditCard:"El número de tarjeta de crédito proporcionado no es válido",badCVV:"CVV proporcionado no es válido",wrongFileDim:"Las dimensiones de la imagen no son validas,",imageTooTall:"el alto de la imagen no puede ser mayor a",imageTooWide:"el ancho de la imagen no puede ser mayor a",imageTooSmall:"la imagen es demasiado pequeña",min:"min.",max:"máx.",imageRatioNotAccepted:"La proporción de imagen (alto x ancho) no es válida",passwordComplexityStart:"La contraseña debe contener al menos ",passwordComplexitySeparator:", ",passwordComplexityUppercaseInfo:" mayúscula(s)",passwordComplexityLowercaseInfo:" minúscula(s)",passwordComplexitySpecialCharsInfo:" caracter(es) especial(es)",passwordComplexityNumericCharsInfo:" número(s)",passwordComplexityEnd:"."}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Le formulaire n'a pas pu être envoyé!",requiredField:"Ce champ est obligatoire",requiredFields:"Vous n'avez pas rempli tous les champs",badTime:"Vous n'avez pas saisi l'heure correctement",badEmail:"Vous n'avez pas saisi une adresse e-mail valide",badTelephone:"Vous n'avez pas saisi un numéro de téléphone valide",badSecurityAnswer:"Vous avez saisi une mauvaise réponse à la question de sécurité",badDate:"Vous n'avez pas saisi une date correcte",lengthBadStart:"Votre saisie doit comporter entre ",lengthBadEnd:" caractères",lengthTooLongStart:"Vous avez saisi une réponse qui est plus longue que ",lengthTooShortStart:"Votre saisie est plus courte que ",notConfirmed:"Les saisies ne sont pas identiques",badDomain:"Vous avez saisi un domaine incorrect",badUrl:"Vous avez saisi une URL incorrecte",badCustomVal:"Re-saisissez une réponse correcte",andSpaces:" et des espaces ",badInt:"Vous n'avez pas saisi un numéro",badSecurityNumber:"Vous avez saisi un mauvais numéro de sécurité sociale",badUKVatAnswer:"Vous n'avez pas saisi un numéro de TVA au Royaume-Uni",badStrength:"Vous avez saisi un mot de passe pas assez sécurisé",badNumberOfSelectedOptionsStart:"Vous devez sélectionner au moins ",badNumberOfSelectedOptionsEnd:" réponse(s)",badAlphaNumeric:"Vous ne pouvez répondre qu'avec des caractères alphanumériques et des chiffres ",badAlphaNumericExtra:" et ",wrongFileSize:"Le fichier que vous essayez de télécharger est trop grand (max %s)",wrongFileType:"Seuls les fichiers du type %s sont autorisés",groupCheckedRangeStart:"Choisissez entre ",groupCheckedTooFewStart:"Vous devez faire au moins ",groupCheckedTooManyStart:"Vous ne pouvez pas faire plus de ",groupCheckedEnd:" sélection(s)",badCreditCard:"Vous avez saisi un numéro de carte de crédit invalide",badCVV:"Vous avez saisi un CVV incorrect",wrongFileDim:"Mauvaise taille de l'image, ",imageTooTall:"l'image ne peut pas être plus élevée que",imageTooWide:"l'image ne peut pas être plus large que",imageTooSmall:"l'image est trop petite",min:"moins",max:"max",imageRatioNotAccepted:"Ratio de l'image non accepté"}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Impossibile inviare il modulo!",requiredField:"Campo obbligatorio",requiredFields:"Non sono stati compilati tutti i campi richiesti",badTime:"L'ora scelta non &egrave; valida",badEmail:"Questo indirizzo email non &egrave; valido",badTelephone:"Il numero di telefono imputato non &egrave; valido",badSecurityAnswer:"La risposta alla domanda di sicurezza &egrave; errata",badDate:"La data scelta non &egrave; valida",lengthBadStart:"La sua risposta non può essere più lunga di ",lengthBadEnd:" caratteri",lengthTooLongStart:"La lunghezza della risposta deve essere minore di ",lengthTooShortStart:"La lunghezza della risposta deve essere maggiore di ",notConfirmed:"Los valores proporcionados no pudieron ser confirmados",badDomain:"Il dominio inserito non &egrave; corretto.",badUrl:"L' URL inserito non &egrave; valido",badCustomVal:"I valori inseriti non sono validi",andSpaces:" e spazi ",badInt:"Il numero inserito non &egrave; valido",badSecurityNumber:"Il numero di sicurezza inserito non &egrave; valido",badUKVatAnswer:"La Partita IVA (VAT) inserita non &egrave; valida nel Regno Unito",badStrength:"La password proposta non &egrave; sufficientemente sicura",badNumberOfSelectedOptionsStart:"Deve selezionare almeno",badNumberOfSelectedOptionsEnd:" risposta/e",badAlphaNumeric:"Il valore proposto deve contenere caratteri alfanumerici (a-z e 1234...)",badAlphaNumericExtra:"",wrongFileSize:"Il file che si sta cercando di caricare è troppo grande (massimo %s)",wrongFileType:"Solo i file di tipo %s possono essere inviati",groupCheckedRangeStart:"Si prega di scegliere tra ",groupCheckedTooFewStart:"Si prega di selezionare un minimo di ",groupCheckedTooManyStart:"Si prega di selezionare un massimo di ",groupCheckedEnd:" opzione/i",badCreditCard:"Il numero di carta di credito non risulta valido",badCVV:"CVV non valido",wrongFileDim:"La dimensione dell'immagine non &egrave; valida,",imageTooTall:"il lato alto dell'immagine non può essere maggiore di",imageTooWide:"il lato lungo dell'immagine non può essere maggiore di",imageTooSmall:"L'immagine è troppo piccola",min:"min.",max:"máx.",imageRatioNotAccepted:"La proporzione dell' immagine (altezza x larghezza) non &egrave; valida"}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={andSpaces:" en spaties ",badAlphaNumeric:"De ingevoerde waarde mag alleen alfabetische karakters bevatten",badAlphaNumericExtra:" en ",badCVV:"Het CVV nummer was onjuist",badCreditCard:"Het creditcardnummer is onjuist",badCustomVal:"De ingevoerde waarde is onjuist",badDate:"U heeft niet de juiste datum aangegeven",badDomain:"Incorrect domein",badEmail:"U heeft een onjuist e-mailadres ingevoerd ",badInt:"De ingevoerde waarde was een onjuist getal",badNumberOfSelectedOptionsEnd:" antwoorden",badNumberOfSelectedOptionsStart:"U moet tenminste ",badSecurityAnswer:"U heeft de beveilingsvraag onjuist beantwoord",badSecurityNumber:"Uw burgerservicenummer was incorrect",badStrength:"Het wachtwoord is niet veilig genoeg",badTelephone:"U heeft een onjuist telefoonnummer ingevoerd",badTime:"U heeft een incorrecte tijd aangegeven",badUrl:"De ingevoerde waarde is geen correcte URL",badreCaptcha:"Bevestig a.u.b. dat u geen robot bent",errorTitle:"Indienen van formulier mislukt!",groupCheckedEnd:" item(s)",groupCheckedRangeStart:"Kies a.u.b. tussen ",groupCheckedTooFewStart:"Kies a.u.b. ten minste ",groupCheckedTooManyStart:"Kies a.u.b. maximaal ",imageRatioNotAccepted:"De afbeeldingsverhouding wordt niet geaccepteerd",imageTooSmall:"de afbeelding was te klein",imageTooTall:"de afbeelding kan niet langer zijn dan",imageTooWide:"de afbeelding kan niet wijder zijn dan",lengthBadEnd:" karakters",lengthBadStart:"De ingevoerde waarde moet liggen tussen ",lengthTooLongStart:"De ingevoerde waarde is langer dan ",lengthTooShortStart:"De ingevoerde waarde is korter dan ",max:"max",min:"min",notConfirmed:"Invoerwaarden konden niet worden bevestigd",requiredField:"Dit is een verplicht veld",requiredFields:"U heeft niet alle verplichte velden ingevuld",wrongFileDim:"Incorrecte afbeeldingsafmetingen,",wrongFileSize:"Het bestand dat u probeert te uploaden is te groot (max %s)",wrongFileType:"Alleen type %s bestanden zijn toegestaan"}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={andSpaces:" og mellomrom ",badAlphaNumeric:"Inntastningsverdien kan kun inneholde alfanumeriske tegn ",badAlphaNumericExtra:" og ",badCVV:"CVV-nummeret var ikke korrekt",badCreditCard:"Kredittkortnummeret er ikke korrekt",badCustomVal:"Inntastingsverdien er ikke korrekt",badDate:"Du har ikke oppgitt en korrekt dato",badDomain:"Ukorrekt domeneverdi",badEmail:"Du har ikke oppgitt en korrekt e-postadresse",badInt:"Inntastingsverdien er ikke et korrekt tall",badNumberOfSelectedOptionsEnd:" svar",badNumberOfSelectedOptionsStart:"Du må velge minst ",badSecurityAnswer:"Du har ikke oppgitt et korrekt svar på sikkerhetsspørsmålet",badSecurityNumber:"Ditt personnummer var ukorrekt",badStrength:"Passordet er ikke sterkt nok",badTelephone:"Du har ikke oppgitt et korrekt telefonnummer",badTime:"Du har ikke oppgitt en korrekt tid",badUrl:"Inntastingsverdien er ikke en korrekt URL",badreCaptcha:"Vennligst bekreft at du ikke er en robot",errorTitle:"Innsending av skjemaet feilet!",groupCheckedEnd:" ting",groupCheckedRangeStart:"Vennligst velg mellom ",groupCheckedTooFewStart:"Vennligst velg minst ",groupCheckedTooManyStart:"Vennligst velg maksimum ",imageRatioNotAccepted:"Bildestørrelse ikke akseptert",imageTooSmall:"bildet er for lite",imageTooTall:"bildet kan ikke være høyere enn",imageTooWide:"bildet kan ikke være bredere enn",lengthBadEnd:"tegn",lengthBadStart:"Inntastingsverdien må være mellom ",lengthTooLongStart:"Inntastingsverdien er lenger enn ",lengthTooShortStart:"Inntastingsverdien er kortere enn ",max:"maks",min:"min",notConfirmed:"Inntastingsverdier kunne ikke bekreftes",requiredField:"Dette er et obligatorisk felt",requiredFields:"Du har ikke besvart alle obligatoriske felt",wrongFileDim:"Ukorrekte bildedimensjoner,",wrongFileSize:"Bildet du prøver å laste opp er for stort (max %s)",wrongFileType:"Kun filer av type %s er tillatt"}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Złożenie formularza nie powiodło się!",requiredField:"To pole jest wymagane",requiredfields:"Nie wszystkie wymagane pola zostały wypełnione",badTime:"Wprowadzono niepoprawny czas",badEmail:"Wprowadzono niepoprawny adres e-mail",badTelephone:"Wprowadzono niepoprawny numeru telefonu",badSecurityAnswer:"Nieprawidłowa odpowiedź na pytanie bezpieczeństwa",badDate:"Niepoprawna data",lengthBadStart:"Wprowadzona wartość musi być pomiędzy ",lengthBadEnd:" znaków",lengthTooLongStart:"Wprowadzona wartość jest większa niż ",lengthTooShortStart:"Wprowadzona wartość jest mniejsza niż ",notConfirmed:"Wprowadzone wartości nie zostały potwierdzone",badDomain:"Nieprawidłowa wartość domeny",badUrl:"Wprowadzono nieprawidłowy adres URL",badCustomVal:"Wprowadzona wartość jest niepoprawna",andSpaces:" i odstępy",badInt:"Wprowadzono nieprawidłowy numer",badSecurityNumber:"Wprowadzono niepoprawny numer ubezpieczenia społecznego",badUKVatAnswer:"Wprowadzono niepoprawny brytyjski numer VAT",badUKNin:"Wprowadzono niepoprawny brytyjski numer NIP",badUKUtr:"Wprowadzono niepoprawny brytyjski numer podatnika",badStrength:"Twoje hasło nie jest wystarczająco mocne",badNumberOfSelectedOptionsStart:"Musisz wybrać przynajmniej ",badNumberOfSelectedOptionsEnd:" odpowiedzi",badAlphaNumeric:"Wprowadzona wartość może zawierać tylko znaki alfanumeryczne ",badAlphaNumericExtra:" i ",wrongFileSize:"Wysyłany plik jest zbyt duży (max %s)",wrongFileType:"Dozwolone są tylko pliki typu %s",groupCheckedRangeStart:"Proszę wybrać pomiędzy ",groupCheckedTooFewStart:"Proszę wybrać przynajmniej ",groupCheckedTooManyStart:"Proszę wybrać maksymalnie ",groupCheckedEnd:" element(ów)",badCreditCard:"Podany numer karty kredytowej jest nieprawidłowy",badCVV:"Podany numer CVV jest nieprawidłowy",wrongFileDim:"Nieprawidłowe wymiary obrazu,",imageTooTall:"obraz nie może być wyższa niż",imageTooWide:"obraz nie może być szerszy niż",imageTooSmall:"obraz jest zbyt mały",min:"min",max:"max",imageRatioNotAccepted:"Proporcje obrazu są niepoprawne",badBrazilTelephoneAnswer:"Wprowadzono niepoprawny numer telefonu",badBrazilCEPAnswer:"Wprowadzono niepoprawny CEP",badBrazilCPFAnswer:"Wprowadzono niepoprawny CPF",badPlPesel:"Wprowadzono niepoprawny numer PESEL",badPlNip:"Wprowadzono niepoprawny numer NIP",badPlRegon:"Wprowadzono niepoprawny numer REGON",badreCaptcha:"Potwierdź że nie jesteś botem!"}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"O formulário não pode ser enviado!",requiredField:"Campo de preenchimento obrigatório",requiredFields:"Você ainda não preencheu todos os campos obrigatórios",badTime:"A hora digitada não é válida",badEmail:"O e-mail digitado não é válido",badTelephone:"O telefone digitado não é válido",badSecurityAnswer:"A pergunta de segurança não foi respondida corretamente",badDate:"A data digitada não é válida",lengthBadStart:"Sua resposta deve incluir entre ",lengthBadEnd:" caracteres",lengthTooLongStart:"Sua resposta tem mais que ",lengthTooShortStart:"Sua resposta tem menos que",notConfirmed:"As informações digitadas não puderam ser confirmadas",badDomain:"O domínio digitado não é válido",badUrl:"A URL digitada não é válida",badCustomVal:"Os dados digitados não são válidos",andSpaces:" e espaços",badInt:"O número digitado não é válido",badSecurityNumber:"O número de seguro social digitado não é válido",badUKVatAnswer:"O número do VAT digitado não é válido para o Reino Unido",badStrength:"Senha muito fraca",badNumberOfSelectedOptionsStart:"Selecione pelo menos",badNumberOfSelectedOptionsEnd:" alternativa(s)",badAlphaNumeric:"Use somente caracteres alfanuméricos (letras a-z e números)",badAlphaNumericExtra:" e",wrongFileSize:"O arquivo selecionado é maior que o tamanho máximo permitido (%s)",wrongFileType:"Somente arquivos %s são permitidos",groupCheckedRangeStart:"Por favor, escolha entre ",groupCheckedTooFewStart:"Por favor, escolha pelo menos ",groupCheckedTooManyStart:"Por favor, escolhe no máximo ",groupCheckedEnd:" alternativa(s)",badCreditCard:"O número de cartão de crédito digitado não é válido",badCVV:"O código de segurança do cartão de crédito não é válido",wrongFileDim:"As dimensões da imagem não são válidas",imageTooTall:"a imagem não pode ser mais alta que ",imageTooWide:"a imagem não pode ser mais larga que ",imageTooSmall:"a imagem é muito pequena",min:"min",max:"max",imageRatioNotAccepted:"A proporção da imagem (largura x altura) não é válida",badBrazilTelephoneAnswer:"O número de telefone digitado é inválido",badBrazilCEPAnswer:"O CEP digitado é inválido",badBrazilCPFAnswer:"O CPF digitado é inválido"}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Nu sa reusit lansarea formularului!",requiredField:"Acest câmp este obligatoriu",requiredfields:"Nu toate câmpurile obligatorii au fost completate",badTime:"Timpul introdus este incorect",badEmail:"Adresa de e-mail este incorectă",badTelephone:"Numărul de telefon este incorect",badSecurityAnswer:"Răspuns incorect la întrebarea de siguran?ă",badDate:"Dară incorectă",lengthBadStart:"Valoarea introdusă trebuie să fie interval ",lengthBadEnd:" caractere",lengthTooLongStart:"Valoarea introdusă este mai mare decât ",lengthTooShortStart:"Valoarea introdusă este mai mică decât ",notConfirmed:"Valorile introduse nu au fost confirmate",badDomain:"Domeniul este incorect",badUrl:"Adresa URL este incorectă",badCustomVal:"Valoarea introdusă este incorectă",andSpaces:" şi spaţierea",badInt:"Numărul introdus este incorect",badSecurityNumber:"Numărul de asigurare introdus este incorect",badUKVatAnswer:"Numărul CIF introdus este incorect",badStrength:"Parola Dvs nu este suficient de sigură",badNumberOfSelectedOptionsStart:"Trebuie să alegi măcar ",badNumberOfSelectedOptionsEnd:" răspunsuri",badAlphaNumeric:"Valoarea introdusă trebuie să con însă doar caractere alfanumerice ",badAlphaNumericExtra:" și ",wrongFileSize:"Fisierul trimis este prea mare (max %s)",wrongFileType:"Se acceptă doar fisiere tip %s",groupCheckedRangeStart:"Te rog alege între ",groupCheckedTooFewStart:"Te rog alege măcar ",groupCheckedTooManyStart:"Te rog alege maxim ",groupCheckedEnd:" elemnt(e)",badCreditCard:"Numărul de card introdus este incorect",badCVV:"Numărul CVV introdus este incorect",wrongFileDim:"Dimensiunea imaginii este incorectă,",imageTooTall:"imaginea nu poate fi mai înaltă decât",imageTooWide:"imaginea nu poate fi mai lată decât",imageTooSmall:"imaginea este prea mică",min:"min",max:"max",imageRatioNotAccepted:"Proportiile imaginii sunt incorecte",badBrazilTelephoneAnswer:"Numărul de telefon introdus este incorect.",badBrazilCEPAnswer:"CEP incorect",badBrazilCPFAnswer:"CPF incorect"}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Ошибка отправки формы!",requiredField:"Это обязательное поле",requiredFields:"Вы задали не все обязательные поля",badTime:"Вы задали некорректное время",badEmail:"Вы задали некорректный e-mail",badTelephone:"Вы задали некорректный номер телефона",badSecurityAnswer:"Вы задали некорректный ответ на секретный вопрос",badDate:"Вы задали некорректную дату",lengthBadStart:"Значение должно быть в диапазоне",lengthBadEnd:" символов",lengthTooLongStart:"Значение длинее, чем ",lengthTooShortStart:"Значение меньше, чем ",notConfirmed:"Введённые значения не могут быть подтверждены",badDomain:"Некорректное значение домена",badUrl:"Некорретный URL",badCustomVal:"Введённое значение неверно",andSpaces:" и пробелы ",badInt:"Значение - не число",badSecurityNumber:"Введённый защитный номер - неправильный",badUKVatAnswer:"Некорректный UK VAT номер",badStrength:"Пароль не достаточно надёжен",badNumberOfSelectedOptionsStart:"Вы должны выбрать как минимум ",badNumberOfSelectedOptionsEnd:" ответов",badAlphaNumeric:"Значение должно содержать только числа и буквы ",badAlphaNumericExtra:" и ",wrongFileSize:"Загружаемый файл слишком велик (максимальный размер %s)",wrongFileType:"Принимаются файлы следующих типов %s",groupCheckedRangeStart:"Выберите между ",groupCheckedTooFewStart:"Выберите как минимум ",groupCheckedTooManyStart:"Выберите максимум из ",groupCheckedEnd:" элемент(ов)",badCreditCard:"Номер кредитной карты некорректен",badCVV:"CVV номер некорректно",wrongFileDim:"Неверные размеры графического файла,",imageTooTall:"изображение не может быть уже чем",imageTooWide:"изображение не может быть шире чем",imageTooSmall:"изображение слишком мало",min:"минимум",max:"максимум",imageRatioNotAccepted:"Изображение с таким соотношением сторон не принимается",badBrazilTelephoneAnswer:"Введённый номер телефона неправильный",badBrazilCEPAnswer:"CEP неправильный",badBrazilCPFAnswer:"CPF неправильный"}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Formuläret kunde inte skickas!",requiredField:"Detta är ett obligtoriskt fält",requiredFields:"Du har inte besvarat alla frågor",badTime:"Du har inte angett en korrekt tidpunkt",badEmail:"Du har inte angett en korrekt e-postadress",badTelephone:"Du har inte angett ett korrekt telefonnummer",badSecurityAnswer:"Du har angett fel svar på säkerhetsfrågan",badDate:"Du har anget ett felaktigt datum",lengthBadStart:"Ditt svar måste innehålla mellan ",lengthBadEnd:" tecken",lengthTooLongStart:"Du har angett ett svar som är längre än ",lengthTooShortStart:"Du har angett ett svar som är kortare än ",notConfirmed:"Svaren kunde inte bekräfta varandra",badDomain:"Du har angett en inkorrekt domän",badUrl:"Du har inte angett en korrekt webbadress",badCustomVal:"Du har anget ett inkorrekt svar",andSpaces:" och mellanslag ",badInt:"Du har inte angett en siffra",badSecurityNumber:"Du har angett ett felaktigt personnummer",badUKVatAnswer:"Du har inte angett ett brittiskt moms-nummer",badStrength:"Du har angett ett lösenord som inte är nog säkert",badNumberOfSelectedOptionsStart:"Du måste åtminstone välja ",badNumberOfSelectedOptionsEnd:" svarsalternativ",badAlphaNumeric:"Du kan endast svara med alfanumersika tecken (a-z och siffror)",badAlphaNumericExtra:" och ",wrongFileSize:"Filen du försöker ladda upp är för stor (max %s)",wrongFileType:"Endast filer av typen %s är tillåtna",groupCheckedRangeStart:"Välj mellan ",groupCheckedTooFewStart:"Då måste göra minst ",groupCheckedTooManyStart:"Du får inte göra fler än ",groupCheckedEnd:" val",badCreditCard:"Du har angett ett felaktigt kreditkortsnummer",badCVV:"Du har angett ett felaktigt CVV-nummer",wrongFileDim:"Otillåten bildstorlek,",imageTooTall:"bilden får inte vara högre än",imageTooWide:"bilden får inte vara bredare än",imageTooSmall:"bilden är för liten",genericBadInputValue:"The input value can be accepted",min:"minst",max:"max",imageRatioNotAccepted:"Bildens dimensioner (förhållandet mellan höjd och längd) kan inte accepteras"}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a(b).bind("validatorsLoaded",function(){a.formUtils.LANG={errorTitle:"Có lỗi trong qua trình gửi dữ liệu!",requiredFields:"Bạn chưa nhập đủ các thông tin bắt buộc",badTime:"Thời gian chưa chính xác",badEmail:"Địa chỉ email chưa chính xác",badTelephone:"Số điện thoại chưa chính xác",badSecurityAnswer:"Câu hỏi bảo mật chưa chính xác",badDate:"Ngày tháng chưa chính xác",lengthBadStart:"Yêu cầu nhập từ ",lengthBadEnd:" ký tự",lengthTooLongStart:"Dữ liệu quá dài, yêu cầu ít hơn ",lengthTooShortStart:"Dữ liệu quá ngắn, yêu cầu nhiều hơn ",notConfirmed:"Dữ liệu không được xác nhận",badDomain:"Tên miền chưa chính xác",badUrl:"Địa chỉ website chưa chính xác",badCustomVal:"Dữ liệu chưa chính xác",andSpaces:" và các khoảng cách ",badInt:"Yêu cầu chỉ nhập số",badSecurityNumber:"Mã bảo mật chưa chính xác",badUKVatAnswer:"UK VAT chưa chính xác",badStrength:"Mật khẩu chưa đủ độ phức tạp",badNumberOfSelectedOptionsStart:"Bạn cần tích chọn ít nhất ",badNumberOfSelectedOptionsEnd:" lựa chọn",badAlphaNumeric:"Yêu cầu chỉ nhập chữ hoặc số ",badAlphaNumericExtra:" và ",wrongFileSize:"File của bạn quá lớn (chỉ chấp nhận file không quá %s)",wrongFileType:"Chỉ cho phép các định dạng file sau: %s",groupCheckedRangeStart:"Vui lòng tích chọn từ ",groupCheckedTooFewStart:"Vui lòng tích chọn ít nhất ",groupCheckedTooManyStart:"Vui lòng tích chọn nhiều nhất ",groupCheckedEnd:" lựa chọn",badCreditCard:"Mã thẻ chưa chính xác",badCVV:"Mã bảo mật (CVV) chưa chính xác",wrongFileDim:"Kích thước ảnh chưa chính xác,",imageTooTall:"Chiều cao ảnh không được vượt quá",imageTooWide:"Chiều rộng ảnh không được vượt quá",imageTooSmall:"Kích thước ảnh quá nhỏ",min:"nhỏ nhất",max:"lớn nhất",imageRatioNotAccepted:"Tỷ lệ ảnh chưa chính xác"}})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.formUtils.addValidator({name:"country",validatorFunction:function(b){return a.inArray(b.toLowerCase(),this.countries)>-1},countries:["afghanistan","albania","algeria","american samoa","andorra","angola","anguilla","antarctica","antigua and barbuda","arctic ocean","argentina","armenia","aruba","ashmore and cartier islands","atlantic ocean","australia","austria","azerbaijan","bahamas","bahrain","baltic sea","baker island","bangladesh","barbados","bassas da india","belarus","belgium","belize","benin","bermuda","bhutan","bolivia","borneo","bosnia and herzegovina","botswana","bouvet island","brazil","british virgin islands","brunei","bulgaria","burkina faso","burundi","cambodia","cameroon","canada","cape verde","cayman islands","central african republic","chad","chile","china","christmas island","clipperton island","cocos islands","colombia","comoros","cook islands","coral sea islands","costa rica","croatia","cuba","cyprus","czech republic","democratic republic of the congo","denmark","djibouti","dominica","dominican republic","east timor","ecuador","egypt","el salvador","equatorial guinea","eritrea","estonia","ethiopia","europa island","falkland islands","faroe islands","fiji","finland","france","french guiana","french polynesia","french southern and antarctic lands","gabon","gambia","gaza strip","georgia","germany","ghana","gibraltar","glorioso islands","greece","greenland","grenada","guadeloupe","guam","guatemala","guernsey","guinea","guinea-bissau","guyana","haiti","heard island and mcdonald islands","honduras","hong kong","howland island","hungary","iceland","india","indian ocean","indonesia","iran","iraq","ireland","isle of man","israel","italy","jamaica","jan mayen","japan","jarvis island","jersey","johnston atoll","jordan","juan de nova island","kazakhstan","kenya","kerguelen archipelago","kingman reef","kiribati","kosovo","kuwait","kyrgyzstan","laos","latvia","lebanon","lesotho","liberia","libya","liechtenstein","lithuania","luxembourg","macau","macedonia","madagascar","malawi","malaysia","maldives","mali","malta","marshall islands","martinique","mauritania","mauritius","mayotte","mediterranean sea","mexico","micronesia","midway islands","moldova","monaco","mongolia","montenegro","montserrat","morocco","mozambique","myanmar","namibia","nauru","navassa island","nepal","netherlands","netherlands antilles","new caledonia","new zealand","nicaragua","niger","nigeria","niue","norfolk island","north korea","north sea","northern mariana islands","norway","oman","pacific ocean","pakistan","palau","palmyra atoll","panama","papua new guinea","paracel islands","paraguay","peru","philippines","pitcairn islands","poland","portugal","puerto rico","qatar","republic of the congo","reunion","romania","ross sea","russia","rwanda","saint helena","saint kitts and nevis","saint lucia","saint pierre and miquelon","saint vincent and the grenadines","samoa","san marino","sao tome and principe","saudi arabia","senegal","serbia","seychelles","sierra leone","singapore","slovakia","slovenia","solomon islands","somalia","south africa","south georgia and the south sandwich islands","south korea","southern ocean","spain","spratly islands","sri lanka","sudan","suriname","svalbard","swaziland","sweden","switzerland","syria","taiwan","tajikistan","tanzania","tasman sea","thailand","togo","tokelau","tonga","trinidad and tobago","tromelin island","tunisia","turkey","turkmenistan","turks and caicos islands","tuvalu","uganda","ukraine","united arab emirates","united kingdom","uruguay","usa","uzbekistan","vanuatu","venezuela","viet nam","virgin islands","wake island","wallis and futuna","west bank","western sahara","yemen","zambia","zimbabwe"],errorMessage:"",errorMessageKey:"badCustomVal"}),a.formUtils.addValidator({name:"federatestate",validatorFunction:function(b){return a.inArray(b.toLowerCase(),this.states)>-1},states:["alabama","alaska","arizona","arkansas","california","colorado","connecticut","delaware","florida","georgia","hawaii","idaho","illinois","indiana","iowa","kansas","kentucky","louisiana","maine","maryland","district of columbia","massachusetts","michigan","minnesota","mississippi","missouri","montana","nebraska","nevada","new hampshire","new jersey","new mexico","new york","north carolina","north dakota","ohio","oklahoma","oregon","pennsylvania","rhode island","south carolina","south dakota","tennessee","texas","utah","vermont","virginia","washington","west virginia","wisconsin","wyoming"],errorMessage:"",errorMessageKey:"badCustomVal"}),a.formUtils.addValidator({name:"longlat",validatorFunction:function(a){var b=/^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$/;return b.test(a)},errorMessage:"",errorMessageKey:"badCustomVal"});var b=function(b){var c=[];return a.each(b,function(a,b){c.push(b.substr(0,1).toUpperCase()+b.substr(1,b.length))}),c.sort(),c};a.fn.suggestCountry=function(c){var d=b(a.formUtils.validators.validate_country.countries),e=a.inArray(d,"Usa");return d[e]="USA",a.formUtils.suggest(this,d,c)},a.fn.suggestState=function(c){var d=b(a.formUtils.validators.validate_federatestate.states);return a.formUtils.suggest(this,d,c)}}(a)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){"use strict";var b=function(b,c){var d=function(){var c=a(this),d=c.valAttr("depends-on")||c.valAttr("if-checked");if(d){var f=a.formUtils.getValue('[name="'+d+'"]',b),g=a.split(c.valAttr("depends-on-value"),!1,!1),h=!f||g.length&&!e(f,g);h&&c.valAttr("skipped","1")}},e=function(b,c){var d=!1,e=b.toLocaleLowerCase();return a.each(c,function(a,b){if(e===b.toLocaleLowerCase())return d=!0,!1}),d},f=function(){var b=a(this),d=this.$dependingInput,e=a.formUtils.getValue(b),f=b.valAttr("depending-value"),g=!!a.formUtils.getValue(d),h=!e||f&&f!==e;h&&!g&&a.formUtils.dialogs.removeInputStylingAndMessage(d,c)};b.find("[data-validation-depends-on]").off("beforeValidation",d).on("beforeValidation",d).each(function(){var c=a(this);b.find('[name="'+c.valAttr("depends-on")+'"]').each(function(){a(this).off("change",f).on("change",f).valAttr("depending-value",c.valAttr("depends-on-value")),this.$dependingInput=c})})},c=function(b,c){var d=function(){var c=a(this),d=c.valAttr("optional-if-answered"),e=!1,f=!!a.formUtils.getValue(c);f||(a.each(a.split(d),function(c,d){var f=b.find('[name="'+d+'"]');if(e=!!a.formUtils.getValue(f))return!1}),e&&c.valAttr("skipped",1))},e=function(){var d=a(this),e=d.valAttr("optional-if-answered");a.each(a.split(e),function(d,e){var f=b.find('[name="'+e+'"]'),g=!!a.formUtils.getValue(f);g||a.formUtils.dialogs.removeInputStylingAndMessage(f,c)})};b.find("[data-validation-optional-if-answered]").off("beforeValidation",d).on("beforeValidation",d).each(function(){a(this).off("change",e).on("change",e)})};a.formUtils.$win.bind("validatorsLoaded formValidationSetup",function(d,e,f){e||(e=a("form")),b(e,f),c(e,f)})}(a)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){a.formUtils.addValidator({name:"plpesel",validatorFunction:function(a){var b=[1,3,7,9,1,3,7,9,1,3],c=0,d=0;if(/\d{11}/.test(a)&&11===a.length){for(var e=0;e<10;e++)c+=a[e]*b[e];if(c%10!==0&&(d=10-c%10),parseInt(a.charAt(10))===d)return!0}return!1},errorMessage:"",errorMessageKey:"badPlPesel"}),a.formUtils.addValidator({name:"plnip",validatorFunction:function(a){var b=[6,5,7,2,3,4,5,6,7],c=0;if(/\d{10}/.test(a)&&10===a.length){for(var d=0;d<9;d++)c+=a[d]*b[d];if(parseInt(a.charAt(9))===c%11)return!0}return!1},errorMessage:"",errorMessageKey:"badPlNip"}),a.formUtils.addValidator({name:"plregon",validatorFunction:function(a){var b=[8,9,2,3,4,5,6,7],c=[2,4,8,5,0,9,7,3,6,1,2,4,8],d=0,e=0;if(/(\d{14}|\d{9})/.test(a)&&(9===a.length||14===a.length)){for(var f=0;f<8;f++)d+=a[f]*b[f];if(d%11!==10&&(e=d%11),parseInt(a.charAt(8))===e){if(14!==a.length)return!0;for(d=0,f=0;f<13;f++)d+=a[f]*c[f];if(d%11!==10&&(e=d%11),parseInt(a.charAt(13))===e)return!0}}return!1},errorMessage:"",errorMessageKey:"badPlRegon"})}(a)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";var c='[type="button"], [type="submit"], [type="radio"], [type="checkbox"], [type="reset"], [type="search"]',d={upper:function(a){return a.toLocaleUpperCase()},lower:function(a){return a.toLocaleLowerCase()},trim:function(b){return a.trim(b)},trimLeft:function(a){return a.replace(/^\s+/,"")},trimRight:function(a){return a.replace(/\s+$/,"")},capitalize:function(b){var c=b.split(" ");return a.each(c,function(a,b){c[a]=b.substr(0,1).toUpperCase()+b.substr(1,b.length)}),c.join(" ")},insert:function(a,b,c){var d=(b.attr("data-sanitize-insert-"+c)||"").replace(/\[SPACE\]/g," ");return"left"===c&&0===a.indexOf(d)||"right"===c&&a.substring(a.length-d.length)===d?a:("left"===c?d:"")+a+("right"===c?d:"")},insertRight:function(a,b){return this.insert(a,b,"right")},insertLeft:function(a,b){return this.insert(a,b,"left")},numberFormat:function(a,c){if(0===a.length)return a;if(!("numeral"in b))throw new ReferenceError('Using sanitation function "numberFormat" requires that you include numeral.js (http://numeraljs.com/)');return a=numeral().unformat(a),a=numeral(a).format(c.attr("data-sanitize-number-format"))},strip:function(b,c){var d=c.attr("data-sanitize-strip")||"";return a.split(d,function(c){var d=new RegExp(a.isNumeric(c)?c:"\\"+c,"g");b=b.replace(d,"")}),b},escape:function(b,c){var d=c.valAttr("is-escaped"),e={"<":"__%AMP%__lt;",">":"__%AMP%__gt;","&":"__%AMP%__amp;","'":"__%AMP%__#8217;",'"':"__%AMP%__quot;"};return"yes"===d?b:(c.valAttr("is-escaped","yes"),c.one("keyup",function(a){9!==a.keyCode&&c.valAttr("is-escaped","no")}),a.each(e,function(a,c){b=b.replace(new RegExp(a,"g"),c)}),b.replace(new RegExp("__%AMP%__","g"),"&"))}},e=function(b,e,f){e||(e=a("form")),e.each||(e=a(e));var g=function(){var b=a(this),c=b.val();a.split(b.attr("data-sanitize"),function(a){if(!(a in d))throw new Error('Use of unknown sanitize command "'+a+'"');c=d[a](c,b,f)}),b.val(c).trigger("keyup.validation")};e.each(function(){var b=a(this);f.sanitizeAll&&b.find("input,textarea").not(c).each(function(){var b=a(this),c=b.attr("data-sanitize")||"";b.attr("data-sanitize",f.sanitizeAll+" "+c)}),b.find("[data-sanitize]").unbind("blur.sanitation",g).bind("blur.sanitation",g),a(function(){b.trigger("blur.sanitation")})})};a(b).on("validatorsLoaded formValidationSetup",e),a.formUtils.setupSanitation=e}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){"use strict";a.formUtils.addValidator({name:"spamcheck",validatorFunction:function(a,b){var c=b.valAttr("captcha");return c===a},errorMessage:"",errorMessageKey:"badSecurityAnswer"}),a.formUtils.addValidator({name:"confirmation",validatorFunction:function(b,c,d,e,f){var g,h=c.valAttr("confirm")||c.attr("name")+"_confirmation",i=f.find('[name="'+h+'"]');if(!i.length)return a.formUtils.warn('Password confirmation validator: could not find an input with name "'+h+'"'),!1;if(g=i.val(),d.validateOnBlur&&!i[0].hasValidationCallback){i[0].hasValidationCallback=!0;var j=function(){c.validate()};i.on("keyup",j),f.one("formValidationSetup",function(){i[0].hasValidationCallback=!1,i.off("keyup",j)})}return b===g},errorMessage:"",errorMessageKey:"notConfirmed"});var c={amex:[15,15],diners_club:[14,14],cjb:[16,16],laser:[16,19],visa:[16,16],mastercard:[16,16],maestro:[12,19],discover:[16,16]},d=!1,e=!1;a.formUtils.addValidator({name:"creditcard",validatorFunction:function(b,f){var g=a.split(f.valAttr("allowing")||"");if(e=a.inArray("amex",g)>-1,d=e&&1===g.length,g.length>0){var h=!1;if(a.each(g,function(d,e){if(e in c){if(b.length>=c[e][0]&&b.length<=c[e][1])return h=!0,!1}else a.formUtils.warn('Use of unknown credit card "'+e+'"')}),!h)return!1}if(""!==b.replace(new RegExp("[0-9]","g"),""))return!1;var i=0;return a.each(b.split("").reverse(),function(a,b){b=parseInt(b,10),a%2===0?i+=b:(b*=2,i+=b<10?b:b-9)}),i%10===0},errorMessage:"",errorMessageKey:"badCreditCard"}),a.formUtils.addValidator({name:"cvv",validatorFunction:function(a){return""===a.replace(/[0-9]/g,"")&&(a+="",d?4===a.length:e?3===a.length||4===a.length:3===a.length)},errorMessage:"",errorMessageKey:"badCVV"}),a.formUtils.addValidator({name:"strength",validatorFunction:function(b,c){var d=c.valAttr("strength")||2;return d&&d>3&&(d=3),a.formUtils.validators.validate_strength.calculatePasswordStrength(b)>=d},errorMessage:"",errorMessageKey:"badStrength",calculatePasswordStrength:function(a){if(a.length<4)return 0;var b=0,c=function(a,b){for(var c="",d=0;d<b.length;d++){for(var e=!0,f=0;f<a&&f+d+a<b.length;f++)e=e&&b.charAt(f+d)===b.charAt(f+d+a);f<a&&(e=!1),e?(d+=a-1,e=!1):c+=b.charAt(d)}return c};return b+=4*a.length,b+=1*(c(1,a).length-a.length),b+=1*(c(2,a).length-a.length),b+=1*(c(3,a).length-a.length),b+=1*(c(4,a).length-a.length),a.match(/(.*[0-9].*[0-9].*[0-9])/)&&(b+=5),a.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)&&(b+=5),a.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)&&(b+=10),a.match(/([a-zA-Z])/)&&a.match(/([0-9])/)&&(b+=15),a.match(/([!,@,#,$,%,^,&,*,?,_,~])/)&&a.match(/([0-9])/)&&(b+=15),a.match(/([!,@,#,$,%,^,&,*,?,_,~])/)&&a.match(/([a-zA-Z])/)&&(b+=15),(a.match(/^\w+$/)||a.match(/^\d+$/))&&(b-=10),b<0&&(b=0),b>100&&(b=100),b<20?0:b<40?1:b<=60?2:3},strengthDisplay:function(b,c){var d={fontSize:"12pt",padding:"4px",bad:"Very bad",weak:"Weak",good:"Good",strong:"Strong"};c&&a.extend(d,c),b.bind("keyup",function(){var b=a(this).val(),c="undefined"==typeof d.parent?a(this).parent():a(d.parent),e=c.find(".strength-meter"),f=a.formUtils.validators.validate_strength.calculatePasswordStrength(b),g={background:"pink",color:"#FF0000",fontWeight:"bold",border:"red solid 1px",borderWidth:"0px 0px 4px",display:"inline-block",fontSize:d.fontSize,padding:d.padding},h=d.bad;0===e.length&&(e=a("<span></span>"),e.addClass("strength-meter").appendTo(c)),b?e.show():e.hide(),1===f?h=d.weak:2===f?(g.background="lightyellow",g.borderColor="yellow",g.color="goldenrod",h=d.good):f>=3&&(g.background="lightgreen",g.borderColor="darkgreen",g.color="darkgreen",h=d.strong),e.css(g).text(h)})}});var f=function(b,c,d,e,f){var g=c.valAttr("req-params")||c.data("validation-req-params")||{},h=function(a,b){b(a)};g||(g={}),"string"==typeof g&&(g=a.parseJSON(g)),g[c.valAttr("param-name")||c.attr("name")]=d,a.ajax({url:b,type:"POST",cache:!1,data:g,dataType:"json",error:function(a){return h({valid:!1,message:"Connection failed with status: "+a.statusText},f),!1},success:function(a){h(a,f)}})};a.formUtils.addValidator({name:"server",validatorFunction:function(b,c,d,e,g,h){var i=a.formUtils.asyncValidation(this.name,c,g);return i.run(h,function(a){var e=c.valAttr("url")||d.backendUrl||document.location.href;g.addClass("validating-server-side"),c.addClass("validating-server-side"),f(e,c,b,d,function(b){g.removeClass("validating-server-side"),c.removeClass("validating-server-side"),b.message&&c.attr(d.validationErrorMsgAttribute,b.message),a(b.valid)})})},errorMessage:"",errorMessageKey:"badBackend"}),a.formUtils.addValidator({name:"letternumeric",validatorFunction:function(b,c,d,e){var f="^([a-zA-Z0-9ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎↃↄⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々〆〱-〵〻〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛥꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",g="]+)$",h=c.valAttr("allowing"),i="";if(h){i=f+h+g;var j=h.replace(/\\/g,"");j.indexOf(" ")>-1&&(j=j.replace(" ",""),j+=e.andSpaces||a.formUtils.LANG.andSpaces),this.errorMessage=e.badAlphaNumeric+e.badAlphaNumericExtra+j}else i=f+g,this.errorMessage=e.badAlphaNumeric;return new RegExp(i).test(b)},errorMessage:"",errorMessageKey:"requiredFields"}),a.formUtils.addValidator({name:"complexity",validatorFunction:function(b,c,d,e){var f=c.valAttr("require-uc-letter")||"0",g=c.valAttr("require-lc-letter")||"0",h=c.valAttr("require-special-char")||"0",i=c.valAttr("require-numeral")||"0",j=c.valAttr("require-length")||"0",k={"uc-letter":{pattern:"^(?=(?:.*[A-Z]){"+f+",}).+",numRequired:f,dialogEnd:e.passwordComplexityUppercaseInfo},"lc-letter":{pattern:"^(?=(?:.*[a-z]){"+g+",}).+",numRequired:g,dialogEnd:e.passwordComplexityLowercaseInfo},"special-char":{pattern:"^(?=(?:.*(_|[!\"#$%&'()*+\\\\,-./:;<=>?@[\\]^_`{|}~])){"+h+",}).+",numRequired:h,dialogEnd:e.passwordComplexitySpecialCharsInfo},numeral:{pattern:"^(?=(?:.*\\d){"+i+",}).+",numRequired:i,dialogEnd:a.formUtils.LANG.passwordComplexityNumericCharsInfo},length:{callback:function(a){return a.length>j},numRequired:j,dialogEnd:"Lorem te ipsum"}},l="";return a.each(k,function(a,d){var f=parseInt(d.numRequired,10);if(f){var g=new RegExp(d.pattern),h=!1;h=d.callback?d.callback(b):g.test(b),h?c.trigger("complexityRequirementValidation",[!0,a]):(""===l&&(l=e.passwordComplexityStart),l+=e.passwordComplexitySeparator+f+d.dialogEnd,c.trigger("complexityRequirementValidation",[!1,a]))}}),!l||(this.errorMessage=l+e.passwordComplexityEnd,!1)},errorMessage:"",errorMessageKey:""}),a.formUtils.addValidator({name:"recaptcha",validatorFunction:function(a,b){return""!==grecaptcha.getResponse(b.valAttr("recaptcha-widget-id"))},errorMessage:"",errorMessageKey:"badreCaptcha"}),a.fn.displayPasswordStrength=function(b){return new a.formUtils.validators.validate_strength.strengthDisplay(this,b),this};var g=function(b,c,d){if(c||(c=a("form")),"undefined"!=typeof grecaptcha&&!a.formUtils.hasLoadedGrecaptcha)throw new Error("reCaptcha API can not be loaded by hand, delete reCaptcha API snippet.");if(!a.formUtils.hasLoadedGrecaptcha&&a('[data-validation~="recaptcha"]',c).length){a.formUtils.hasLoadedGrecaptcha=!0;var e="//www.google.com/recaptcha/api.js?onload=reCaptchaLoaded&render=explicit"+(d.lang?"&hl="+d.lang:""),f=document.createElement("script");f.type="text/javascript",f.async=!0,f.defer=!0,f.src=e,document.getElementsByTagName("body")[0].appendChild(f)}};b.reCaptchaLoaded=function(b){b&&"object"==typeof b&&b.length||(b=a("form")),b.each(function(){var b=a(this),c=b.context.validationConfig;a('[data-validation~="recaptcha"]',b).each(function(){var b=a(this),d=document.createElement("DIV"),e=c.reCaptchaSiteKey||b.valAttr("recaptcha-sitekey"),f=c.reCaptchaTheme||b.valAttr("recaptcha-theme")||"light";if(!e)throw new Error("Google reCaptcha site key is required.");var g=function(b){a("form").each(function(){a('[data-validation~="recaptcha"]',a(this)).each(function(){a(this).trigger("validation",b&&""!==b)})})},h=grecaptcha.render(d,{sitekey:e,theme:f,callback:g,"expired-callback":g});b.valAttr("recaptcha-widget-id",h).hide().on("beforeValidation",function(a){a.stopImmediatePropagation()}).parent().append(d)})})},a(b).on("validatorsLoaded formValidationSetup",g)}(a,window)});
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){"use strict";var b=[["AD",24,"F04F04A12"],["AE",23,"F03F16"],["AL",28,"F08A16"],["AT",20,"F05F11"],["AZ",28,"U04A20"],["BA",20,"F03F03F08F02"],["BE",16,"F03F07F02"],["BG",22,"U04F04F02A08"],["BH",22,"U04A14"],["BR",29,"F08F05F10U01A01"],["CH",21,"F05A12"],["CR",21,"F03F14"],["CY",28,"F03F05A16"],["CZ",24,"F04F06F10"],["DE",22,"F08F10"],["DK",18,"F04F09F01"],["DO",28,"U04F20"],["EE",20,"F02F02F11F01"],["ES",24,"F04F04F01F01F10"],["FI",18,"F06F07F01"],["FO",18,"F04F09F01"],["FR",27,"F05F05A11F02"],["GB",22,"U04F06F08"],["GE",22,"U02F16"],["GI",23,"U04A15"],["GL",18,"F04F09F01"],["GR",27,"F03F04A16"],["GT",28,"A04A20"],["HR",21,"F07F10"],["HU",28,"F03F04F01F15F01"],["IE",22,"U04F06F08"],["IL",23,"F03F03F13"],["IS",26,"F04F02F06F10"],["IT",27,"U01F05F05A12"],["KW",30,"U04A22"],["KZ",20,"F03A13"],["LB",28,"F04A20"],["LC",32,"U04F24"],["LI",21,"F05A12"],["LT",20,"F05F11"],["LU",20,"F03A13"],["LV",21,"U04A13"],["MC",27,"F05F05A11F02"],["MD",24,"U02A18"],["ME",22,"F03F13F02"],["MK",19,"F03A10F02"],["MR",27,"F05F05F11F02"],["MT",31,"U04F05A18"],["MU",30,"U04F02F02F12F03U03"],["NL",18,"U04F10"],["NO",15,"F04F06F01"],["PK",24,"U04A16"],["PL",28,"F08F16"],["PS",29,"U04A21"],["PT",25,"F04F04F11F02"],["RO",24,"U04A16"],["RS",22,"F03F13F02"],["SA",24,"F02A18"],["SE",24,"F03F16F01"],["SI",19,"F05F08F02"],["SK",24,"F04F06F10"],["SM",27,"U01F05F05A12"],["ST",25,"F08F11F02"],["TL",23,"F03F14F02"],["TN",24,"F02F03F13F02"],["TR",26,"F05F01A16"],["VG",24,"U04F16"],["XK",20,"F04F10F02"],["AO",25,"F21"],["BF",27,"F23"],["BI",16,"F12"],["BJ",28,"F24"],["CI",28,"U01F23"],["CM",27,"F23"],["CV",25,"F21"],["DZ",24,"F20"],["IR",26,"F22"],["JO",30,"A04F22"],["MG",27,"F23"],["ML",28,"U01F23"],["MZ",25,"F21"],["QA",29,"U04A21"],["SN",28,"U01F23"],["UA",29,"F25"]],c=function(a){a=a.toUpperCase(),a=a.replace(/\s+/g,""),a=a.substr(4)+a.substr(0,4),a=a.split("").map(function(a){var b=a.charCodeAt(0);return b>="A".charCodeAt(0)&&b<="Z".charCodeAt(0)?b-"A".charCodeAt(0)+10:a}).join("");for(var b,c=a;c.length>2;)b=c.slice(0,9),c=(parseInt(b,10)%97).toString()+c.slice(b.length);return parseInt(c,10)%97===1},d=function(a){a=a.toUpperCase(),a=a.replace(/\s+/g,"");var c=a.slice(0,2),d=0,e="";for(d=0;d<b.length;++d)if(b[d][0]===c){e=b[d][2];break}if(""===e)return!1;var f=e.match(/(.{3})/g).map(function(a){var b,c=a.slice(0,1),d=parseInt(a.slice(1),10);switch(c){case"A":b="0-9A-Za-z";break;case"B":b="0-9A-Z";break;case"C":b="A-Za-z";break;case"F":b="0-9";break;case"L":b="a-z";break;case"U":b="A-Z";break;case"W":b="0-9a-z"}return"(["+b+"]{"+d+"})"}),g=new RegExp("^"+f.join("")+"$");return a.length===b[d][1]&&g.test(a.slice(4))};a.formUtils.addValidator({name:"sepa",validatorFunction:c,errorMessage:"",errorMessageKey:"badSepa"}),a.formUtils.addValidator({name:"iban",validatorFunction:function(a){return d(a)&&c(a)},errorMessage:"",errorMessageKey:"badIban"}),a.formUtils.addValidator({name:"bic",validatorFunction:function(a){var b=new RegExp("^[A-Z]{6,6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3,3}){0,1}$");return b.test(a)},errorMessage:"",errorMessageKey:"badBic"})}(a)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b){a.formUtils.addValidator({name:"swesec",validatorFunction:function(c,d){var e,f,g,h;if(d.valAttr("use-hyphen")){if(h=c.split("-"),2!==h.length)return!1;c=h.join("")}if(!c.match(/^(\d{4})(\d{2})(\d{2})(\d{4})$/))return!1;e=RegExp.$1,f=a.formUtils.parseDateInt(RegExp.$2),g=a.formUtils.parseDateInt(RegExp.$3),b.ssnGender=parseInt(RegExp.$4.substring(2,3))%2===0?"female":"male";var i=[31,28,31,30,31,30,31,31,30,31,30,31];if((e%400===0||e%4===0&&e%100!==0)&&(i[1]=29),f<1||f>12||g<1||g>i[f-1])return!1;c=c.substring(2,c.length);for(var j="",k=0;k<c.length;k++)j+=((k+1)%2+1)*c.substring(k,k+1);var l=0;for(k=0;k<j.length;k++)l+=parseInt(j.substring(k,k+1),10);return l%10===0},errorMessage:"",errorMessageKey:"badSecurityNumber"}),a.formUtils.addValidator({name:"swecounty",validatorFunction:function(b){return b=b.toLowerCase(),a.inArray(b,this.counties)!==-1||"län"!==b.substr(-3).toLocaleLowerCase()&&a.inArray(b+"s län",this.counties)>-1},errorMessage:"",errorMessageKey:"badCustomVal",counties:["stockholms län","uppsala län","södermanlands län","östergötlands län","jönköpings län","kronobergs län","kalmar län","gotlands län","blekinge län","skåne län","hallands län","västra götalands län","värmlands län","örebro län","västmanlands län","dalarnas län","gävleborgs län","västernorrlands län","jämtlands län","västerbottens län","norrbottens län"]}),a.formUtils.addValidator({name:"swemunicipality",validatorFunction:function(b){return b=b.toLowerCase(),a.inArray(b,this.municipalities)!==-1||("s kommun"===b.substr(-8)&&a.inArray(b.substr(0,b.length-8),this.municipalities)>-1||" kommun"===b.substr(-7)&&a.inArray(b.substr(0,b.length-7),this.municipalities)>-1)},errorMessage:"",errorMessageKey:"badCustomVal",municipalities:["ale","alingsås","alvesta","aneby","arboga","arjeplog","arvidsjaur","arvika","askersund","avesta","bengtsfors","berg","bjurholm","bjuv","boden","bollebygd","bollnäs","borgholm","borlänge","borås","botkyrka","boxholm","bromölla","bräcke","burlöv","båstad","dals-ed","danderyd","degerfors","dorotea","eda","ekerö","eksjö","emmaboda","enköpings","eskilstuna","eslövs","essunga","fagersta","falkenberg","falköping","falu","filipstad","finspång","flen","forshaga","färgelanda","gagnef","gislaved","gnesta","gnosjö","gotland","grum","grästorp","gullspång","gällivare","gävle","göteborg","götene","habo","hagfor","hallsberg","hallstahammar","halmstad","hammarö","haninge","haparanda","heby","hedemora","helsingborg","herrljunga","hjo","hofor","huddinge","hudiksvall","hultsfred","hylte","håbo","hällefor","härjedalen","härnösand","härryda","hässleholm","höganäs","högsby","hörby","höör","jokkmokk","järfälla","jönköping","kalix","kalmar","karlsborg","karlshamn","karlskoga","karlskrona","karlstad","katrineholm","kil","kinda","kiruna","klippan","knivsta","kramfors","kristianstad","kristinehamn","krokoms","kumla","kungsbacka","kungsör","kungälv","kävlinge","köping","laholm","landskrona","laxå","lekeberg","leksand","lerum","lessebo","lidingö","lidköping","lilla edets","lindesbergs","linköpings","ljungby","ljusdals","ljusnarsbergs","lomma","ludvika","luleå","lunds","lycksele","lysekil","malmö","malung-sälen","malå","mariestad","marks","markaryd","mellerud","mjölby","mora","motala","mullsjö","munkedal","munkfors","mölndal","mönsterås","mörbylånga","nacka","nora","norberg","nordanstig","nordmaling","norrköping","norrtälje","norsjö","nybro","nykvarn","nyköping","nynäshamn","nässjö","ockelbo","olofström","orsa","orust","osby","oskarshamn","ovanåker","oxelösund","pajala","partille","perstorp","piteå","ragunda","robertsfors","ronneby","rättvik","sala","salem","sandviken","sigtuna","simrishamn","sjöbo","skara","skellefteå","skinnskatteberg","skurup","skövde","smedjebacken","sollefteå","sollentuna","solna","sorsele","sotenäs","staffanstorp","stenungsund","stockholm","storfors","storuman","strängnäs","strömstad","strömsund","sundbyberg","sundsvall","sunne","surahammar","svalöv","svedala","svenljunga","säffle","säter","sävsjö","söderhamns","söderköping","södertälje","sölvesborg","tanum","tibro","tidaholm","tierp","timrå","tingsryd","tjörn","tomelilla","torsby","torså","tranemo","tranå","trelleborg","trollhättan","trosa","tyresö","täby","töreboda","uddevalla","ulricehamns","umeå","upplands väsby","upplands-bro","uppsala","uppvidinge","vadstena","vaggeryd","valdemarsvik","vallentuna","vansbro","vara","varberg","vaxholm","vellinge","vetlanda","vilhelmina","vimmerby","vindeln","vingåker","vårgårda","vänersborg","vännäs","värmdö","värnamo","västervik","västerås","växjö","ydre","ystad","åmål","ånge","åre","årjäng","åsele","åstorp","åtvidaberg","älmhult","älvdalen","älvkarleby","älvsbyn","ängelholm","öckerö","ödeshög","örebro","örkelljunga","örnsköldsvik","östersund","österåker","östhammar","östra göinge","överkalix","övertorneå"]}),a.formUtils.addValidator({name:"swephone",validatorFunction:function(a){var b=a.match(/\+/g),c=a.match(/-/g);return!(null!==b&&b.length>1||null!==c&&c.length>1)&&((null===b||0===a.indexOf("+"))&&(a=a.replace(/([-|\+])/g,""),a.length>8&&null===a.match(/[^0-9]/g)))},errorMessage:"",errorMessageKey:"badTelephone"}),a.formUtils.addValidator({name:"swemobile",validatorFunction:function(b){if(!a.formUtils.validators.validate_swephone.validatorFunction(b))return!1;b=b.replace(/[^0-9]/g,"");var c=b.substring(0,3);return(10===b.length||"467"===c)&&((11===b.length||"467"!==c)&&(/07[0-9{1}]/.test(c)||"467"===c))},errorMessage:"",errorMessageKey:"badTelephone"});var c=function(b){var c=[];return a.each(b,function(a,b){c.push(b.substr(0,1).toUpperCase()+b.substr(1,b.length))}),c.sort(),c};a.fn.suggestSwedishCounty=function(b){var d=c(a.formUtils.validators.validate_swecounty.counties);return a.formUtils.suggest(this,d,b)},a.fn.suggestSwedishMunicipality=function(b){var d=c(a.formUtils.validators.validate_swemunicipality.municipalities);return a.formUtils.suggest(this,d,b)}}(a,window)});
\ No newline at end of file
/**
* Default CSS theme for jQuery-Form-Validator.
* @author Victor Jonsson <victorjonsson.se>
*/
/* Input element having an invalid value */
select.error,
input.error {
border-color: #b94a48;
background-image: url('data:image/png;base64,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YWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzAxNCA3OS4xNTY3OTcsIDIwMTQvMDgvMjAtMDk6NTM6MDIgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE0IChNYWNpbnRvc2gpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA1LTE1VDEwOjM4OjU1KzAyOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNS0wNS0xNVQxMDozODo1NSswMjowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDUtMTVUMTA6Mzg6NTUrMDI6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjU4ZmM5Yzg4LWFiYWUtNGEzMC1iNGUxLTUyMTQyZWYzMzM4NDwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjM4YmMxOTAwLTNiNmMtMTE3OC05ZDQ5LWY0MzVhZTM4NTFiMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOmQ1ZjJhY2QyLTQ2ZDUtNGVlZS05NDllLThkMDI0MTljZjA3ODwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpkNWYyYWNkMi00NmQ1LTRlZWUtOTQ5ZS04ZDAyNDE5Y2YwNzg8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTUtMDUtMTVUMTA6Mzg6NTUrMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE0IChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo1OGZjOWM4OC1hYmFlLTRhMzAtYjRlMS01MjE0MmVmMzMzODQ8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTUtMDUtMTVUMTA6Mzg6NTUrMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE0IChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8cGhvdG9zaG9wOkxheWVyTmFtZT7DlzwvcGhvdG9zaG9wOkxheWVyTmFtZT4KICAgICAgICAgICAgICAgICAgPHBob3Rvc2hvcDpMYXllclRleHQ+w5c8L3Bob3Rvc2hvcDpMYXllclRleHQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHBob3Rvc2hvcDpMYXllck5hbWU+YTwvcGhvdG9zaG9wOkxheWVyTmFtZT4KICAgICAgICAgICAgICAgICAgPHBob3Rvc2hvcDpMYXllclRleHQ+YTwvcGhvdG9zaG9wOkxheWVyVGV4dD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkJhZz4KICAgICAgICAgPC9waG90b3Nob3A6VGV4dExheWVycz4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPkRpc3BsYXk8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTk8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTc8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pmkb7KYAAAAgY0hSTQAAbZgAAHOOAAD6zAAAhPoAAHmBAAD9EwAAMG0AABIpDR4mTgAAAOZJREFUeNrMlL0NwyAQhZ+jLJAVkE4M4BVMR50RvIIzAivYI6S+zh4hHgAhZYWM4DTnCCFsoshFnkQBB9/9impZFhylEw5UFsaaatbUbj1iTR1ruhRhrKkGMALoWVOXsY8AHIAHa1KlyO4AVq+ONbkE1MhWAejjh+cMbBDPqzqJQAGoM3c/qnLdlPRcod7G+jAVYQJs0zT2QKXRmADMufMcaC9NJR1VW46sD6YI2wC9og7HkV+tD6/SaKQgIytWk9Y0B5tTkPVhljqZnbubNevFs7E+PBNbI9HfrA/DV6Pxn7/Gr3oPAAwLXEdIhTGuAAAAAElFTkSuQmCC');
background-position: right 5px center;
background-repeat: no-repeat;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
}
/* Input element having a valid value */
select.valid,
input.valid {
border-color: #468847;
background-image: url('data:image/png;base64,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YWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzAxNCA3OS4xNTY3OTcsIDIwMTQvMDgvMjAtMDk6NTM6MDIgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE0IChNYWNpbnRvc2gpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA1LTE1VDEwOjM5OjExKzAyOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNS0wNS0xNVQxMDozOToxMSswMjowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDUtMTVUMTA6Mzk6MTErMDI6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOmU3ODMyNmIwLTQ5NmItNGMyMy05ZGI1LTI4OTRkMWQxZWZmYzwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjQxZDQzYTcwLTNiNmMtMTE3OC05ZDQ5LWY0MzVhZTM4NTFiMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjVkM2FkZDhiLTljMmUtNDU0ZC1iMjFhLTk5ZTliZDY2ODg1MDwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo1ZDNhZGQ4Yi05YzJlLTQ1NGQtYjIxYS05OWU5YmQ2Njg4NTA8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTUtMDUtMTVUMTA6Mzk6MTErMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE0IChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDplNzgzMjZiMC00OTZiLTRjMjMtOWRiNS0yODk0ZDFkMWVmZmM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTUtMDUtMTVUMTA6Mzk6MTErMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE0IChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8cGhvdG9zaG9wOkxheWVyTmFtZT7DlzwvcGhvdG9zaG9wOkxheWVyTmFtZT4KICAgICAgICAgICAgICAgICAgPHBob3Rvc2hvcDpMYXllclRleHQ+w5c8L3Bob3Rvc2hvcDpMYXllclRleHQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHBob3Rvc2hvcDpMYXllck5hbWU+YTwvcGhvdG9zaG9wOkxheWVyTmFtZT4KICAgICAgICAgICAgICAgICAgPHBob3Rvc2hvcDpMYXllclRleHQ+YTwvcGhvdG9zaG9wOkxheWVyVGV4dD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkJhZz4KICAgICAgICAgPC9waG90b3Nob3A6VGV4dExheWVycz4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPkRpc3BsYXk8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTk8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTc8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pn/qNPoAAAAgY0hSTQAAbZgAAHOOAAD6zAAAhPoAAHmBAAD9EwAAMG0AABIpDR4mTgAAAMBJREFUeNrE1L0NwyAURtHrKAu4pPUKXsGs4AIGyGRQ2CM4K3gFt3TJCE5DgSL+7FgKEg0SB77HE82+71w1blw47mc3ais6YAGkUW47fbMA6n6Kqa1ogekbSmLaipe2ok9AC9AfeYAWmHycKqgUswOWAIxBbz8BaGJ9pq0IF1e/YYhA0ii3HmmNVKwxhHIxt8IB0ij3rK2ZDGtRAyUx39ExcExB2df09ZDB0sMoN+eyN6VfQ1sxAG0JqsL+9gV9BgBw6UeG/cRoQwAAAABJRU5ErkJggg==');
background-position: right 5px center;
background-repeat: no-repeat;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
box-shadow: inset 0 1px 1px rgba(0,0,0,0.075);
}
/* File inputs with invalid value */
input[type="file"].error {
color: #b94a48;
background: none;
-webkit-box-shadow: none;
box-shadow: none;
}
/* File inputs with valid value */
input[type="file"].valid {
color: #468847;
background: none;
-webkit-box-shadow: none;
box-shadow: none;
}
/* Element showing an inline error message */
.form-error {
display: block;
color: #b94a48;
margin-top: 5px;
margin-bottom: 10px;
line-height: 140%;
}
/* Element showing the help text declared in data-validation-help */
span.help {
color: #999;
font-size: 90%;
}
/* Here you can style the look of the input while server being
requested when using data-validation="server" */
select.async-validation,
input.async-validation,
select.validating-server-side, /* deprecated */
input.validating-server-side /* deprecated */ {
opacity: 0.5;
background-image: url('data:image/gif;base64,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');
background-position: right 5px center;
background-repeat: no-repeat;
background-color: #FFF;
}
/* Here you can style the entire form while server being
requested when using data-validation="server" */
form.async-validation,
form.validating-server-side /* deprecated */ {
}
/* Container for error messages when having configuration
parameter "errorMessagePosition" set to "top" */
div.form-error {
background-color: #f2dede;
padding: 15px;
margin-bottom: 20px;
border: #b94a48 1px solid;
border-radius: 4px;
}
/* Title in top of the error message container */
div.form-error strong {
font-weight: bold;
display: block;
margin: 0;
padding: 0 0 10px;
}
/* Typography styling in the error message container */
div.form-error strong,
div.form-error ul li {
line-height: 140%;
color: #b94a48;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
font-size: 14px;
}
div.form-error ul,
div.form-error ul li {
background: none;
}
input.error,input.valid,select.error,select.valid{background-position:right 5px center;background-repeat:no-repeat}input.error,select.error{border-color:#b94a48;background-image:url(data:image/png;base64,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YWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzAxNCA3OS4xNTY3OTcsIDIwMTQvMDgvMjAtMDk6NTM6MDIgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE0IChNYWNpbnRvc2gpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA1LTE1VDEwOjM4OjU1KzAyOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNS0wNS0xNVQxMDozODo1NSswMjowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDUtMTVUMTA6Mzg6NTUrMDI6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjU4ZmM5Yzg4LWFiYWUtNGEzMC1iNGUxLTUyMTQyZWYzMzM4NDwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjM4YmMxOTAwLTNiNmMtMTE3OC05ZDQ5LWY0MzVhZTM4NTFiMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOmQ1ZjJhY2QyLTQ2ZDUtNGVlZS05NDllLThkMDI0MTljZjA3ODwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpkNWYyYWNkMi00NmQ1LTRlZWUtOTQ5ZS04ZDAyNDE5Y2YwNzg8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTUtMDUtMTVUMTA6Mzg6NTUrMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE0IChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo1OGZjOWM4OC1hYmFlLTRhMzAtYjRlMS01MjE0MmVmMzMzODQ8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTUtMDUtMTVUMTA6Mzg6NTUrMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE0IChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8cGhvdG9zaG9wOkxheWVyTmFtZT7DlzwvcGhvdG9zaG9wOkxheWVyTmFtZT4KICAgICAgICAgICAgICAgICAgPHBob3Rvc2hvcDpMYXllclRleHQ+w5c8L3Bob3Rvc2hvcDpMYXllclRleHQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHBob3Rvc2hvcDpMYXllck5hbWU+YTwvcGhvdG9zaG9wOkxheWVyTmFtZT4KICAgICAgICAgICAgICAgICAgPHBob3Rvc2hvcDpMYXllclRleHQ+YTwvcGhvdG9zaG9wOkxheWVyVGV4dD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkJhZz4KICAgICAgICAgPC9waG90b3Nob3A6VGV4dExheWVycz4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPkRpc3BsYXk8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTk8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTc8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pmkb7KYAAAAgY0hSTQAAbZgAAHOOAAD6zAAAhPoAAHmBAAD9EwAAMG0AABIpDR4mTgAAAOZJREFUeNrMlL0NwyAQhZ+jLJAVkE4M4BVMR50RvIIzAivYI6S+zh4hHgAhZYWM4DTnCCFsoshFnkQBB9/9impZFhylEw5UFsaaatbUbj1iTR1ruhRhrKkGMALoWVOXsY8AHIAHa1KlyO4AVq+ONbkE1MhWAejjh+cMbBDPqzqJQAGoM3c/qnLdlPRcod7G+jAVYQJs0zT2QKXRmADMufMcaC9NJR1VW46sD6YI2wC9og7HkV+tD6/SaKQgIytWk9Y0B5tTkPVhljqZnbubNevFs7E+PBNbI9HfrA/DV6Pxn7/Gr3oPAAwLXEdIhTGuAAAAAElFTkSuQmCC);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}input.valid,select.valid{border-color:#468847;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAYSmlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjarVllVBV/t94TJ6hDdx26pLu7QboVOHRzODQYoIAICmKggoKCiogKBiklJqKIKKhYhIgoKgaKinI/gP7f9733frhr3d+HWc888+y9n73XrJk18wMQFqDR6XEoB0B8QgrD3daC6uvnTyW9ABSEgAJrQJUWmkw3d3V1gv95IQBfRwEBALivTKPT4+D/tjjDwpNDARBXAAgJSw6NB0AuAuBCoXRGCgBhCACk0lPoKQCELwDAw/D18wcgkgGAJ3IFiwAAT8gKVgMAHoanuyUA0QqAzEqjMSIBKK4AQE0LjUwBoNABiFwJYdEJADx5AEST0ChaGIDQVQBYEx+fGAYgNA8A8iH/kify33KG/M1Jo0X+xSu9AAAA2So6mR5Hy4T/7xUfl/qnhiQAsEYx7NwBgAcAORmb6OgOAKwASGdCyFoXAOACQG5GhwGs4rGoVDuvVf1caLKlPwDwAaAQRrNyBAARAJQvNdbLfBVr0BgAK3p0bXSKvecqDmEkuq/mR9PCk609/uCocHun1ZyFCXFr/+CqiGgbewDgAEAvZkV5+qz4RK+mRXuvBQAKADqUHOvhuKp/nhVlufaPhpHq7gUA0gDolwiGjfuKBhOIT/7TF6YSSrP2AAABAMwsJcrTbiUW8w1P9nX64y0s3Mp6xQMWFp7gteoZS6GnWLivxhbQ41xX9VhVeJyt+8qcsabkNI8/scMpDM/VmWOTMTQH1xX/2Fd6iqvnijccByewBCugQipQIQQSIQaiB+da54C6esUGaMCASAgH5VXmT4QP0IABCUADD8iCd5AA4ZD8N84CaMCAcEiDBPj1l105KkME0IABaRAOyRALr4AB8bgQboIb4k64CW6Gm+AauB6u/yeOyv6nKtGaaEW0I9oQFf76CIVEiINEYED0f+f+iSS8ItwjTBJGCOOEx+AIcRAOqcCAcEj425k3vAQGRP85D4rewvgP51RwhnFIXZ1KOIRAAsz+0eCyuAaujVvgxrgJrg9UnA8XAmVcC9fDzXFT3BDXxvX/zWHqXxf/zPI/64VDwr/1uMpTFCnaqy5C/vq3/Kv6zyyW/zKjMEgEx/9UYoXYBewGdhnrxzqxVqBiPVgbdhvrwlr/5U54CQyI/FvNHcIhAWIhDqL/aNQa1GbVlv5bddqqAwaEQzJASnhGCgCAZSI9kxEdGZVCNafT48Kp9gmhKmuoGmrq2gC+fv7UlcfHZ3dAAADhu/sPl6gOoB8KgGz9hwt+D9AaA0Dm+oeTbQVg1wDo3x+aykhb4XAAAAIwAzvwgCCIgRTIgzJogA4YghlYgwO4gCf4QSCEQhTEAwPSYQPkQgEUwy7YBxVQDbVwEs7AeWiFTrgM12EAhmAEnsA4TMNbmIev8BNBEBLChnAjgog4IoMoIRqIHmKCWCNOiDvihwQjkUgCkopsQLYixchupAI5itQj55B25DLSj9xDHiMTyCzyCfmBYigryoOKorKoKqqHmqOOqCe6Ho1Ek9AsNA8tQQ+gNehptAW9jA6gI+g4+hZdwABjwfgwCUwZ08MsMRfMH4vAGNgmrAgrx2qws1gHdgO7j41jc9h3nIhz41RcGTfE7XAvPBRPwjfhO/AK/CTegl/F7+MT+Dz+m8BGECEoEQwI9gRfQiQhnVBAKCecIDQTrhFGCNOEr0QikY8oR9Ql2hH9iDHEbOIO4mFiI7GXeI84RVwgkUiCJCWSMcmFRCOlkApIB0mnST2kYdI0aZHMQhYna5BtyP7kBPIWcjn5FLmbPEyeIf9k4mCSYTJgcmEKY8pkKmU6xtTBdJdpmuknMyezHLMxsydzDHMu8wHms8zXmJ8yf2ZhYZFk0WdxY4lmyWE5wNLEcpNlguU7KxerIqsl6zrWVNYS1jrWXtbHrJ/Z2Nhk2czY/NlS2ErY6tmusD1nW6RwU1Qo9pQwymZKJaWFMkx5z87ELsNuzh7InsVezn6B/S77HAcThyyHJQeNYxNHJUc7x0OOBU5uTnVOF854zh2cpzj7OV9zkbhkuay5wrjyuGq5rnBNcWPcUtyW3KHcW7mPcV/jnuYh8sjx2PPE8BTznOEZ5Jnn5eLV4vXmzeCt5O3iHefD+GT57Pni+Er5zvON8v3gF+U35w/n385/ln+Y/5uAsICZQLhAkUCjwIjAD0GqoLVgrGCZYKvgMyFcSFHITShdqEromtCcMI+woXCocJHweeExEVREUcRdJFukVuS2yIKomKitKF30oOgV0TkxPjEzsRixvWLdYrPi3OIm4tHie8V7xN9Qeanm1DjqAepV6ryEiISdRKrEUYlBiZ+ScpJeklskGyWfSTFL6UlFSO2V6pOalxaXdpbeIN0gPSbDJKMnEyWzX+aGzDdZOVkf2W2yrbKv5QTk7OWy5BrknsqzyZvKJ8nXyD9QICroKcQqHFYYUkQVtRWjFCsV7yqhSjpK0UqHle6tIazRX5OwpmbNQ2VWZXPlNOUG5QkVPhUnlS0qrSrvVaVV/VXLVG+o/lbTVotTO6b2RJ1L3UF9i3qH+icNRY1QjUqNB5psmjaamzXbND9qKWmFa1VpPdLm1nbW3qbdp/1LR1eHoXNWZ1ZXWjdY95DuQz0ePVe9HXo39Qn6Fvqb9Tv1vxvoGKQYnDf4YKhsGGt4yvC1kZxRuNExoyljSWOa8VHjcROqSbDJEZNxUwlTmmmN6aSZlFmY2QmzGXMF8xjz0+bvLdQsGBbNFt8sDSw3WvZaYVa2VkVWg9Zc1l7WFdbPbSRtIm0abOZttW2zbXvtCHaOdmV2D+1F7UPt6+3nHXQdNjpcdWR19HCscJx0UnRiOHU4o84Oznucn66VWZuwttUFXOxd9rg8c5VzTXK95EZ0c3WrdHvlru6+wf2GB7dHkMcpj6+eFp6lnk+85L1Svfq82b3Xedd7f/Ox8tntM+6r6rvRd8BPyC/ar82f5O/tf8J/IcA6YF/A9DrtdQXrRtfLrc9Y3x8oFBgX2BXEHkQLuhBMCPYJPhW8RHOh1dAWQuxDDoXMh1qG7g99G2YWtjdsNtw4fHf4TIRxxO6I15HGkXsiZ6NMo8qj5qItoyuiP8bYxVTHfIt1ia2LXY7ziWuMJ8cHx7cncCXEJlxNFEvMSLxHV6IX0MeTDJL2Jc0zHBknkpHk9cltKTwp9JTbqfKp+akTaSZplWmL6d7pFzI4MxIybmcqZm7PnMmyyTqejWeHZvdtkNiQu2Fio/nGo5uQTSGb+jZLbc7bPJ1jm3Mylzk3NvfOFrUtu7d82eqztSNPNC8nbyrfNr+hgFLAKHi4zXBbdSFeGF04uF1z+8Htv4vCim4VqxWXFy/tCN1xa6f6zgM7l0siSgZLdUqrdhF3JewaLTMtO7mbc3fW7qk9znta9lL3Fu39si9oX3+5Vnn1fub9qfvHDzgdaDsofXDXwaWKqIqRSovKxkMih7Yf+nY47PBwlVnV2WrR6uLqH0eijzw6anu0pUa2pryWWJtW++qY97Ebx/WO158QOlF84lddQt34SfeTV+t16+tPiZwqbUAbUhtmT687PXTG6kzbWeWzRxv5GouboCm16c254HOj5x3P913Qu3D2oszFQ83czUUtSEtmy3xrVOt4m1/bvXaH9r4Ow47mSyqX6jolOiu7eLtKu5m787qXe7J6FnrpvXOXIy9P9QX1Pbnie+XBVberg9ccr928bnP9yg3zGz03jW929hv0t9/Su9U6oDPQclv7dvMd7TvNgzqDLXd177YN6Q913DO61z1sOnz5vtX96w/sHwyMrB25N+o1+ujhuofjj8IevX4c9/jjWNrYzyc5TwlPi55xPCt/LvK85oXCi8ZxnfGuCauJ25Mek0+mQqfevkx+uTSd94rtVfmM+Ez9a43XnbM2s0NvAt5Mv6W//TlX8I7z3aH38u8vfjD7cHved376I+Pj8qcdnwU/133R+tK34Lrw/Gv815/fihYFF09+1/t+44fPj5mf6UukpQO/FH51/Hb8/XQ5fnmZTmPQAAAAAwA0IgLgUx0Amx8A9xAAM2Xl+2t1YQgACgAkEAMHKIYpRBFJQHpRQTQFHcPssSu4Lf6AEE/kJPaRNpBNmEhMz5jbWQ6xlrLVUZ5ycHA6cm3n7ufl5FvHf1oQF6IJd4lSxXaIL0qESY5Jr5Xpl1OVL1F4q2S/plr5q6ql2k71IU02LQvtZJ1Dur164/q/DPmNlIz1TaxN3c1CzZMt8iz3WzVY99jct521W3bgdVzjZOkcsDbaJc013223e7VHg2erV5/3gM+w72O/F/5TAa/XvVv/OvBp0GBwD60xpCp0Z1hWeESEW6RhlHQ0JfprzIvY63H18TsT6IkedN0koaQlxvPk3pTa1Py0iHT7DKVM5sw3WbezmzYc2Ji3KX1zUg4jN2tL0dajeV35L7YxFRptpxfVFo/uZC4xKo3fVVU2uPvX3jX7AsqL9rccGK9gqdQ+FHR4e9X56idH8RrlWu9jm4+fPHGvbrGeesqpYcPp82c+Nho0lZ77cCHg4t0Wl9YH7UYdKZfqO592s/Ro9npfTurLv1J2tfxa+fWyG4U3t/Zvu7VzYOft/Dspgz53Ve7+HOq9lz2sM/z1/sMH7SMVoxsfBj2yeCwzxjT27sm9p83PKp5vfBE8bjWhMMkx+X3q1cvR6f5Xl2cuvW6fbX9z/G3JXNq7wPfWH5TmOeYXPo596v589Ev+QtRXx2+qi9yL374//dH7s2Yp71f4b6tlyeVlACCCEJhBBlxDuBEnZBfyAtVES9DPWBA2invhzwh0IoXYSgonC5HHmA4xR7JYsBqzeVKi2HM4jnBe5prl4eW14svkbxT4IKQizBDpFGMR96aekliWMpfOlemRXZLXVYhRPKw0sOaTCq+qppqdeoBGpGaSVqb2Rp0s3Ri9AH0nA2NDNSNJY14TsskP03dmE+YjFrcsu60uWNfZHLAttEu3j3Lwc7Rz0nOWW8vrgrt8cZ10u+fe69HkWeVV6J3sE+hr76fpLxpADHi/bnR9V2BtUFFwIs0zRCuUNXQyrD28NCIi0iiKM+pV9KWYstjwOIN49viphNbEQrpfklLSEmMw+UgKI9UyjTdtJr09Y0dmYJZaNpr9cEPjxuJN8Zu9cqxyDbbobzXOs8v3LUjYtq3w+PYrRRPFv3eKlOiXeu9KLtu1+/Se/r2vytH9Igd0DrpVxFcWHzp9eKjq6xHJo641W2vbj308oVKXdPJi/bcG/dMbznQ3QpP5ua3nr10kNNu2FLbeaCd1WF/a0tnV9aVHttfjcnZf1ZVLV0euzV7/dhPv574lMaB62/iO06D/3aih9HsFw/vu1zxoHOkc7X84+mj68Zcn2FOeZzLP9V44jUdO1E7OvpSb9n9VMHPq9Y3ZiTeLc5R3Mu9NPwTM53wc+qz5Zc/C52/uixd/CPzMX1r8nb68DAA4cIIirIUc6EVIiAGSgrSiKOqMHkF/YoHYLdwIbyHoEfqIrsQpUjZZmHyDaSdzKIsRqzDrb7ZJygB7M8dxzgNcJdyFPPm8BXzF/HsEqgUbhNqEu0S6RLvFesS7qZckmiUbpA5LF8ukyq6TM5OXVACFJ4qtSsVrvJWpym9UmlVz1BzV+dQnNBo0U7VMtZm07+sc1o3S09Jb1O82yDd0NOIyGjOuMYkx1TBdMrtuXmax3lLR8pvVFetSmwBbOdtPdt32RQ7ejhKOb51anHPWOrnwuUy4Nrgluxt6oB63PHd7+XtTvWd8zvqm+hn6o/79AaXrPNbzrX8cWBm0Plg0+BntcMj6UJHQsbAD4d4R3BF3I4ujrKMh+lJMWqx67FxcXXxIgkjCw8Q99LVJ5KTLjKxkzeS5lOOpgWn8aXfTt2WYZixmNmVFZ1OzH2/Yu9Fzk+Cm6c1tOXtzM7dEbF2X55cfUBC+LbUwf3t50Ynilh3Xd46UTJd+KcN2c++R3Ku2z6Dccr/DAbeDfhUhlYmHNh/eU3W6euDIhxqZ2sxjQyfk6jadHD2l3JB3+slZ9cbCpufndS4UX3zRotm6re1ph+alos7JbqOeA71f+zyvNF+Tu37spnL/tYHYO9KDc0M3hs89qB9tenR57NkzeKE2UfeyYKboTet79o+FCwKLzUs+y8sAK//hAACIOgDHpwC8jwK4BQDUKQHIVAJQeABc2QA89QG1KAXk8UFAbM/+fX+wgRzYQARsg5PQD28RCqKOeCFZyGGkE3mCLKGiqCkaghagp9C76BdMGDPHorBdWDs2ibPg2ngwvgNvw18SuAimhATCUcIIkZloTswgnifOkeRJkaQ60ixZhZxK7mFiYfJnOs2MMPsyn2ehsCSwDLPqsR5hI7Mx2J5THCjt7PLsFRxsHLkc3zgTOV9zhXK94A7hnuGJ5/nKm8tH4TvMr8p/RSBAYEGwTEhd6L5wuoioyJDoNjELcRC/TM2XcJYUlHwtdUm6TCZG1kZORp5VfkFhUnFY6eqaDuULKk2qjWrn1ds0ejUHtJ5rf9TF9Xj1pQyUDdWN1IwVTaimXGao2QfzJxY9ljVWhdaJNr62Fnaq9mIO7I6Y46LTvPObtdMuk64Tbi/d33p89vzlzeTD7yvnp+/vHBC6Lnv9vsCmoMHgdyGUUM0wv/DNEbWR16Kmon/FcsVJxCsmqCQq0xWSJBl8yUzJP1Jm04TSnTPyMnuyfm+w3rhn09sc59xLW7Xy2gvst01t31YsseNsiVnpeFnZHt99xvvtD6ZXXqsSPkKpQWu/H/9U975+rmHuzIfGhXO/LpJbhNtUO6w6/bqje9P6Nl3Nub7xZtqtuNvBg8VDbcNvRiQern9c/eTVc/Xx3MmRaaWZwtmZOdv3pz5yfM5eeLcY8WPmF315GQDYQQXcIBUqoAdeIiyIBhKA5CH1yADyAeVBDdBgtBBtQh9jGKaM+WH52DnsBc6GG+GxeCV+B/9NUCeEEQ4RRojsRCfiduJNEjPJmbSbNEaWITPIfUx8THFM15mlmLcwT7M4sHSwKrFWs/Gy7aAQKVvYgT2XA+Mo5KRw7ueS5GrkNuMe4YnnJfLW8JnzTfIXCCgLjArmCqkJjQvvEbETxUX7xLaK21BZqaMSNZLJUjbSYtKLMqOyrXJH5PcrlCmWKJWs2a1coXJCtVntpvpzjW9avNoGOqG6JXpd+h8MZYyCjCtNnpiJmYdZNFr+tLa2KbYdsCc46DqGOBU4n1h72WXMdd4d9+DzVPQy8/bzSfYt9TvrPxjwcT1foHFQRHAZrTvkfZhUuG9EaeT1qF8xWrHRcVXx9xJRukZSMKMk+VLK6zT2dN2M4MzirLbsmY38m+w3b8w5n/tmq1Te+vyKgkeF/Nv9iqqKX+5ULskovV4msDtxz+19auWVBygHt1eyHtpXJVd942h0Leux8yf8T+L1TQ1BZzjOXmnKOK964XVzXWt0u3LHp86O7i29Tn38V6auNd3Y0O8wIHh7aNDr7tS9rPtiDwZHix95jMk+RZ5Nvrg+0TBVOs2Y8ZgVflM9J/fu3AeT+cFPQZ8/LOR8Y188+EPsZ/Uvod+ly8sAwA/mQIdquAvLiAYSgRxEriGfUUnUHc1DW9E5TALzxXZh/TiGm+BZeCu+QNAmpBG6iASiC7GS+IZkSNpFek22Ih9jIjPRmZ4yOzH3suiydLBasN5m82N7Q9nEzsvexOHC8ZGznMuEa5b7MI8HLxvvLb7t/E4CXAJjgseFGMLmItwib0Wvix0TL6DGSnhKmktpSMvJiMsKywnJUxWUFPWVHNfQlDeoVKh2qb3UoGgaaTG0z+p80NPWzzUYNpI3zjN5ZeZk3mqpZHXMRsK21l7BodnJyvmRC92N1b3JM8CbyafLLy1Aa91iYG/wzpDAMJ0I1sjH0RWx9nGzCZmJS0kpjOkU19QL6ZwZjMwH2QYbjm5i2ZyRM7PFd+vtfIuCjkKt7S3Fxjv6S/xK35Zt2sO5t6ZcdX/7QZOKnkNGh1uqCUecju6reXFM8Xj6iWsneesjTnWcppwJO9vZxHuOfn7gonxzUcu7Nrf21ktinQVd73t8ei/3KV3Zd3X5esyNB/1mtxpu891JHrw1JHwvavj0/TcjUqM+D7c8Ovn41tj0k6VnHM/FXyiNa08YTJpMmb00mzZ5ZTCj+1p9VvGN5FvK29m59nfp77Xfz304Pu/3kflj56eIzxyf276sW4CFmq8WXye/bV4UWWz/7vV9/seOn3I/+5YClxZ/7fmt+rt/OWx5GSA5QlNjZSeK1QKA8Hx5+bMsAGk3wK+y5eWfNcvLv2oBsKcAvXErezsAAEQOgEO1/9sey38BOi/O6KPLSP4AADwwaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzAxNCA3OS4xNTY3OTcsIDIwMTQvMDgvMjAtMDk6NTM6MDIgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE0IChNYWNpbnRvc2gpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA1LTE1VDEwOjM5OjExKzAyOjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNS0wNS0xNVQxMDozOToxMSswMjowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDUtMTVUMTA6Mzk6MTErMDI6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOmU3ODMyNmIwLTQ5NmItNGMyMy05ZGI1LTI4OTRkMWQxZWZmYzwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjQxZDQzYTcwLTNiNmMtMTE3OC05ZDQ5LWY0MzVhZTM4NTFiMTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjVkM2FkZDhiLTljMmUtNDU0ZC1iMjFhLTk5ZTliZDY2ODg1MDwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo1ZDNhZGQ4Yi05YzJlLTQ1NGQtYjIxYS05OWU5YmQ2Njg4NTA8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTUtMDUtMTVUMTA6Mzk6MTErMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE0IChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDplNzgzMjZiMC00OTZiLTRjMjMtOWRiNS0yODk0ZDFkMWVmZmM8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTUtMDUtMTVUMTA6Mzk6MTErMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE0IChNYWNpbnRvc2gpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxwaG90b3Nob3A6VGV4dExheWVycz4KICAgICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8cGhvdG9zaG9wOkxheWVyTmFtZT7DlzwvcGhvdG9zaG9wOkxheWVyTmFtZT4KICAgICAgICAgICAgICAgICAgPHBob3Rvc2hvcDpMYXllclRleHQ+w5c8L3Bob3Rvc2hvcDpMYXllclRleHQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHBob3Rvc2hvcDpMYXllck5hbWU+YTwvcGhvdG9zaG9wOkxheWVyTmFtZT4KICAgICAgICAgICAgICAgICAgPHBob3Rvc2hvcDpMYXllclRleHQ+YTwvcGhvdG9zaG9wOkxheWVyVGV4dD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkJhZz4KICAgICAgICAgPC9waG90b3Nob3A6VGV4dExheWVycz4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPkRpc3BsYXk8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTk8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTc8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pn/qNPoAAAAgY0hSTQAAbZgAAHOOAAD6zAAAhPoAAHmBAAD9EwAAMG0AABIpDR4mTgAAAMBJREFUeNrE1L0NwyAURtHrKAu4pPUKXsGs4AIGyGRQ2CM4K3gFt3TJCE5DgSL+7FgKEg0SB77HE82+71w1blw47mc3ais6YAGkUW47fbMA6n6Kqa1ogekbSmLaipe2ok9AC9AfeYAWmHycKqgUswOWAIxBbz8BaGJ9pq0IF1e/YYhA0ii3HmmNVKwxhHIxt8IB0ij3rK2ZDGtRAyUx39ExcExB2df09ZDB0sMoN+eyN6VfQ1sxAG0JqsL+9gV9BgBw6UeG/cRoQwAAAABJRU5ErkJggg==);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}input[type=file].error{color:#b94a48;background:0 0;-webkit-box-shadow:none;box-shadow:none}input[type=file].valid{color:#468847;background:0 0;-webkit-box-shadow:none;box-shadow:none}.form-error{display:block;color:#b94a48;margin-top:5px;margin-bottom:10px;line-height:140%}span.help{color:#999;font-size:90%}input.async-validation,input.validating-server-side,select.async-validation,select.validating-server-side{opacity:.5;background-image:url(data:image/gif;base64,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);background-position:right 5px center;background-repeat:no-repeat;background-color:#FFF}div.form-error{background-color:#f2dede;padding:15px;margin-bottom:20px;border:1px solid #b94a48;border-radius:4px}div.form-error strong{font-weight:700;display:block;margin:0;padding:0 0 10px}div.form-error strong,div.form-error ul li{line-height:140%;color:#b94a48;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px}div.form-error ul,div.form-error ul li{background:0 0}
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a,b,c){"use strict";var d=function(a,b){"disabled"===b?a.find('*[type="submit"]').addClass("disabled").attr("disabled","disabled"):a.find('*[type="submit"]').removeClass("disabled").removeAttr("disabled")},e=!1;a.formUtils.$win.bind("validatorsLoaded formValidationSetup",function(b,f,g){var h=g.disabledFormFilter?f.filter(g.disabledFormFilter):f,i=g.showErrorDialogs===c||g.showErrorDialogs,j=function(b,c,d){var e=a(this);d.indexOf("blur")>-1?e.unbind("afterValidation",j):c.isValid?e.unbind("afterValidation",j):e.valAttr("have-been-blurred")||(c.shouldChangeDisplay=!1)};h.addClass(i?"disabled-with-errors":"disabled-without-errors").find("*[data-validation]").valAttr("event","keyup change").on("validation",function(b,c){if(!e){e=!0;var f=a(this).closest("form");c&&f.isValid(g.language,g,!1)?d(f,"enabled"):d(f,"disabled"),e=!1}}).on("afterValidation",j).on("blur",function(){a(this).valAttr("have-been-blurred",1)}),d(h,"disabled"),h.validateOnEvent(g.language,g)}).on("validationErrorDisplay",function(a,b,c){b.closest("form").hasClass("disabled-without-errors")&&c.hide()})}(a,window)});
\ No newline at end of file
/** File generated by Grunt -- do not modify
* JQUERY-FORM-VALIDATOR
*
* @version 2.3.49
* @website http://formvalidator.net/
* @author Victor Jonsson, http://victorjonsson.se
* @license MIT
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){"use strict";a.formUtils.addValidator({name:"ukvatnumber",validatorFunction:function(a){if(a=a.replace(/[^0-9]/g,""),a.length<9)return!1;var b=!1,c=[];c=a.split("");var d=Number(c[7]+c[8]),e=c[0],f=c[1];if(0===e&&f>0)return!1;for(var g=0,h=0;h<7;h++)g+=c[h]*(8-h);for(var i=0,j=0,k=8;k>=2;k--)i+=c[j]*k,j++;for(;g>0;)g-=97;return g=Math.abs(g),d===g&&(b=!0),b||(g%=97,g>=55?g-=55:g+=42,g===d&&(b=!0)),b},errorMessage:"",errorMessageKey:"badUKVatAnswer"}),a.formUtils.addValidator({name:"ukutr",validatorFunction:function(a){var b=[0,6,7,8,9,10,5,4,3,2],c=[2,1,9,8,7,6,5,4,3,2,1],d=0;if(/\d{10}/.test(a)&&10===a.length){for(var e=0;e<10;e++)d+=a[e]*b[e];if(parseInt(a.charAt(0))===c[d%11])return!0}return!1},errorMessage:"",errorMessageKey:"badUkUtr"}),a.formUtils.addValidator({name:"uknin",validatorFunction:function(a){return!!/^(?!BG)(?!GB)(?!NK)(?!KN)(?!TN)(?!NT)(?!ZZ)(?:[A-CEGHJ-PR-TW-Z][A-CEGHJ-NPR-TW-Z])(?:\s*\d\s*){6}([A-D]|\s)$/i.test(a)},errorMessage:"",errorMessageKey:"badUkNin"})}(a)});
\ No newline at end of file
/*! jQuery v3.1.0 | (c) jQuery Foundation | jquery.org/license */
!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.1.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null!=a?a<0?this[a+this.length]:this[a]:f.call(this)},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=r.isArray(d)))?(e?(e=!1,f=c&&r.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"label"in b&&b.disabled===a||"form"in b&&b.disabled===a||"form"in b&&b.disabled===!1&&(b.isDisabled===a||b.isDisabled!==!a&&("label"in b||!ea(b))!==a)}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e)}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(_,aa),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=V.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(_,aa),$.test(j[0].type)&&qa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&sa(j),!a)return G.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||$.test(a)&&qa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext,B=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,C=/^.[^:#\[\.,]*$/;function D(a,b,c){if(r.isFunction(b))return r.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return r.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(C.test(b))return r.filter(b,a,c);b=r.filter(b,a)}return r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType})}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(D(this,a||[],!1))},not:function(a){return this.pushStack(D(this,a||[],!0))},is:function(a){return!!D(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var E,F=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,G=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||E,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:F.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),B.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};G.prototype=r.fn,E=r(d);var H=/^(?:parents|prev(?:Until|All))/,I={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function J(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return J(a,"nextSibling")},prev:function(a){return J(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return a.contentDocument||r.merge([],a.childNodes)}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(I[a]||r.uniqueSort(e),H.test(a)&&e.reverse()),this.pushStack(e)}});var K=/\S+/g;function L(a){var b={};return r.each(a.match(K)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?L(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function M(a){return a}function N(a){throw a}function O(a,b,c){var d;try{a&&r.isFunction(d=a.promise)?d.call(a).done(b).fail(c):a&&r.isFunction(d=a.then)?d.call(a,b,c):b.call(void 0,a)}catch(a){c.call(void 0,a)}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,M,e),g(f,c,N,e)):(f++,j.call(a,g(f,c,M,e),g(f,c,N,e),g(f,c,M,c.notifyWith))):(d!==M&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==N&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:M,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:M)),c[2][3].add(g(0,a,r.isFunction(d)?d:N))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(O(a,g.done(h(c)).resolve,g.reject),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)O(e[c],h(c),g.reject);return g.promise()}});var P=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&P.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var Q=r.Deferred();r.fn.ready=function(a){return Q.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,holdReady:function(a){a?r.readyWait++:r.ready(!0)},ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||Q.resolveWith(d,[r]))}}),r.ready.then=Q.then;function R(){d.removeEventListener("DOMContentLoaded",R),a.removeEventListener("load",R),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",R),a.addEventListener("load",R));var S=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)S(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,
r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},T=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function U(){this.expando=r.expando+U.uid++}U.uid=1,U.prototype={cache:function(a){var b=a[this.expando];return b||(b={},T(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){r.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(K)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var V=new U,W=new U,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Y=/[A-Z]/g;function Z(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Y,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c||"false"!==c&&("null"===c?null:+c+""===c?+c:X.test(c)?JSON.parse(c):c)}catch(e){}W.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return W.hasData(a)||V.hasData(a)},data:function(a,b,c){return W.access(a,b,c)},removeData:function(a,b){W.remove(a,b)},_data:function(a,b,c){return V.access(a,b,c)},_removeData:function(a,b){V.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=W.get(f),1===f.nodeType&&!V.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),Z(f,d,e[d])));V.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){W.set(this,a)}):S(this,function(b){var c;if(f&&void 0===b){if(c=W.get(f,a),void 0!==c)return c;if(c=Z(f,a),void 0!==c)return c}else this.each(function(){W.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){W.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=V.get(a,b),c&&(!d||r.isArray(c)?d=V.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return V.get(a,c)||V.access(a,c,{empty:r.Callbacks("once memory").add(function(){V.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=V.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var $=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,_=new RegExp("^(?:([+-])=|)("+$+")([a-z%]*)$","i"),aa=["Top","Right","Bottom","Left"],ba=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ca=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function da(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&_.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ea={};function fa(a){var b,c=a.ownerDocument,d=a.nodeName,e=ea[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ea[d]=e,e)}function ga(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=V.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&ba(d)&&(e[f]=fa(d))):"none"!==c&&(e[f]="none",V.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ga(this,!0)},hide:function(){return ga(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){ba(this)?r(this).show():r(this).hide()})}});var ha=/^(?:checkbox|radio)$/i,ia=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,ja=/^$|\/(?:java|ecma)script/i,ka={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ka.optgroup=ka.option,ka.tbody=ka.tfoot=ka.colgroup=ka.caption=ka.thead,ka.th=ka.td;function la(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&r.nodeName(a,b)?r.merge([a],c):c}function ma(a,b){for(var c=0,d=a.length;c<d;c++)V.set(a[c],"globalEval",!b||V.get(b[c],"globalEval"))}var na=/<|&#?\w+;/;function oa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(na.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ia.exec(f)||["",""])[1].toLowerCase(),i=ka[h]||ka._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=la(l.appendChild(f),"script"),j&&ma(g),c){k=0;while(f=g[k++])ja.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var pa=d.documentElement,qa=/^key/,ra=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,sa=/^([^.]*)(?:\.(.+)|)/;function ta(){return!0}function ua(){return!1}function va(){try{return d.activeElement}catch(a){}}function wa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)wa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ua;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(pa,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(K)||[""],j=b.length;while(j--)h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=V.hasData(a)&&V.get(a);if(q&&(i=q.events)){b=(b||"").match(K)||[""],j=b.length;while(j--)if(h=sa.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&V.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(V.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;c<h;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?r(e,this).index(i)>-1:r.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==va()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===va()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&r.nodeName(this,"input"))return this.click(),!1},_default:function(a){return r.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ta:ua,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:ua,isPropagationStopped:ua,isImmediatePropagationStopped:ua,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ta,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ta,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ta,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&qa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ra.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return wa(this,a,b,c,d)},one:function(a,b,c,d){return wa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=ua),this.each(function(){r.event.remove(this,a,c,b)})}});var xa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,ya=/<script|<style|<link/i,za=/checked\s*(?:[^=]|=\s*.checked.)/i,Aa=/^true\/(.*)/,Ba=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ca(a,b){return r.nodeName(a,"table")&&r.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a:a}function Da(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ea(a){var b=Aa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(V.hasData(a)&&(f=V.access(a),g=V.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}W.hasData(a)&&(h=W.access(a),i=r.extend({},h),W.set(b,i))}}function Ga(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ha.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ha(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&za.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(m&&(e=oa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(la(e,"script"),Da),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,la(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ea),l=0;l<i;l++)j=h[l],ja.test(j.type||"")&&!V.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Ba,""),k))}return a}function Ia(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(la(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&ma(la(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(xa,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=la(h),f=la(a),d=0,e=f.length;d<e;d++)Ga(f[d],g[d]);if(b)if(c)for(f=f||la(a),g=g||la(h),d=0,e=f.length;d<e;d++)Fa(f[d],g[d]);else Fa(a,h);return g=la(h,"script"),g.length>0&&ma(g,!i&&la(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(T(c)){if(b=c[V.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[V.expando]=void 0}c[W.expando]&&(c[W.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return S(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(la(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return S(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!ya.test(a)&&!ka[(ia.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(la(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(la(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var Ja=/^margin/,Ka=new RegExp("^("+$+")(?!px)[a-z%]+$","i"),La=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",pa.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,pa.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Ma(a,b,c){var d,e,f,g,h=a.style;return c=c||La(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ka.test(g)&&Ja.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Na(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Oa=/^(none|table(?!-c[ea]).+)/,Pa={position:"absolute",visibility:"hidden",display:"block"},Qa={letterSpacing:"0",fontWeight:"400"},Ra=["Webkit","Moz","ms"],Sa=d.createElement("div").style;function Ta(a){if(a in Sa)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ra.length;while(c--)if(a=Ra[c]+b,a in Sa)return a}function Ua(a,b,c){var d=_.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Va(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+aa[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+aa[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+aa[f]+"Width",!0,e))):(g+=r.css(a,"padding"+aa[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+aa[f]+"Width",!0,e)));return g}function Wa(a,b,c){var d,e=!0,f=La(a),g="border-box"===r.css(a,"boxSizing",!1,f);if(a.getClientRects().length&&(d=a.getBoundingClientRect()[b]),d<=0||null==d){if(d=Ma(a,b,f),(d<0||null==d)&&(d=a.style[b]),Ka.test(d))return d;e=g&&(o.boxSizingReliable()||d===a.style[b]),d=parseFloat(d)||0}return d+Va(a,b,c||(g?"border":"content"),e,f)+"px"}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ma(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=a.style;return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=_.exec(c))&&e[1]&&(c=da(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b);return b=r.cssProps[h]||(r.cssProps[h]=Ta(h)||h),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Ma(a,b,d)),"normal"===e&&b in Qa&&(e=Qa[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Oa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?Wa(a,b,d):ca(a,Pa,function(){return Wa(a,b,d)})},set:function(a,c,d){var e,f=d&&La(a),g=d&&Va(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=_.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ua(a,c,g)}}}),r.cssHooks.marginLeft=Na(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Ma(a,"marginLeft"))||a.getBoundingClientRect().left-ca(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+aa[d]+b]=f[d]||f[d-2]||f[0];return e}},Ja.test(a)||(r.cssHooks[a+b].set=Ua)}),r.fn.extend({css:function(a,b){return S(this,function(a,b,c){var d,e,f={},g=0;if(r.isArray(b)){for(d=La(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function Xa(a,b,c,d,e){return new Xa.prototype.init(a,b,c,d,e)}r.Tween=Xa,Xa.prototype={constructor:Xa,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=Xa.propHooks[this.prop];return a&&a.get?a.get(this):Xa.propHooks._default.get(this)},run:function(a){var b,c=Xa.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Xa.propHooks._default.set(this),this}},Xa.prototype.init.prototype=Xa.prototype,Xa.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},Xa.propHooks.scrollTop=Xa.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=Xa.prototype.init,r.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=/queueHooks$/;function ab(){Za&&(a.requestAnimationFrame(ab),r.fx.tick())}function bb(){return a.setTimeout(function(){Ya=void 0}),Ya=r.now()}function cb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=aa[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function db(a,b,c){for(var d,e=(gb.tweeners[b]||[]).concat(gb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function eb(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&ba(a),q=V.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],$a.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=V.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ga([a],!0),j=a.style.display||j,k=r.css(a,"display"),ga([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=V.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ga([a],!0),m.done(function(){p||ga([a]),V.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=db(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function fb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],r.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function gb(a,b,c){var d,e,f=0,g=gb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Ya||bb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:Ya||bb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(fb(k,j.opts.specialEasing);f<g;f++)if(d=gb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,db,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}r.Animation=r.extend(gb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return da(c.elem,a,_.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(K);for(var c,d=0,e=a.length;d<e;d++)c=a[d],gb.tweeners[c]=gb.tweeners[c]||[],gb.tweeners[c].unshift(b)},prefilters:[eb],prefilter:function(a,b){b?gb.prefilters.unshift(a):gb.prefilters.push(a)}}),r.speed=function(a,b,c){var e=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off||d.hidden?e.duration=0:e.duration="number"==typeof e.duration?e.duration:e.duration in r.fx.speeds?r.fx.speeds[e.duration]:r.fx.speeds._default,null!=e.queue&&e.queue!==!0||(e.queue="fx"),e.old=e.complete,e.complete=function(){r.isFunction(e.old)&&e.old.call(this),e.queue&&r.dequeue(this,e.queue)},e},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(ba).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=gb(this,r.extend({},a),f);(e||V.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=V.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&_a.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=V.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(cb(b,!0),a,d,e)}}),r.each({slideDown:cb("show"),slideUp:cb("hide"),slideToggle:cb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(Ya=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),Ya=void 0},r.fx.timer=function(a){r.timers.push(a),a()?r.fx.start():r.timers.pop()},r.fx.interval=13,r.fx.start=function(){Za||(Za=a.requestAnimationFrame?a.requestAnimationFrame(ab):a.setInterval(r.fx.tick,r.fx.interval))},r.fx.stop=function(){a.cancelAnimationFrame?a.cancelAnimationFrame(Za):a.clearInterval(Za),Za=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var hb,ib=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return S(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?hb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&r.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(K);
if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),hb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ib[b]||r.find.attr;ib[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=ib[g],ib[g]=e,e=null!=c(a,b,d)?g:null,ib[g]=f),e}});var jb=/^(?:input|select|textarea|button)$/i,kb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):jb.test(a.nodeName)||kb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});var lb=/[\t\r\n\f]/g;function mb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,mb(this)))});if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,mb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(K)||[];while(c=this[i++])if(e=mb(c),d=1===c.nodeType&&(" "+e+" ").replace(lb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=r.trim(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,mb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(K)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=mb(this),b&&V.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":V.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+mb(c)+" ").replace(lb," ").indexOf(b)>-1)return!0;return!1}});var nb=/\r/g,ob=/[\x20\t\r\n\f]+/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":r.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(nb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:r.trim(r.text(a)).replace(ob," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type,g=f?null:[],h=f?e+1:d.length,i=e<0?h:f?e:0;i<h;i++)if(c=d[i],(c.selected||i===e)&&!c.disabled&&(!c.parentNode.disabled||!r.nodeName(c.parentNode,"optgroup"))){if(b=r(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(r.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var pb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!pb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,pb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(V.get(h,"events")||{})[b.type]&&V.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&T(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!T(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=V.access(d,b);e||d.addEventListener(a,c,!0),V.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=V.access(d,b)-1;e?V.access(d,b,e):(d.removeEventListener(a,c,!0),V.remove(d,b))}}});var qb=a.location,rb=r.now(),sb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var tb=/\[\]$/,ub=/\r?\n/g,vb=/^(?:submit|button|image|reset|file)$/i,wb=/^(?:input|select|textarea|keygen)/i;function xb(a,b,c,d){var e;if(r.isArray(b))r.each(b,function(b,e){c||tb.test(a)?d(a,e):xb(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)xb(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(r.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)xb(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&wb.test(this.nodeName)&&!vb.test(a)&&(this.checked||!ha.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:r.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(ub,"\r\n")}}):{name:b.name,value:c.replace(ub,"\r\n")}}).get()}});var yb=/%20/g,zb=/#.*$/,Ab=/([?&])_=[^&]*/,Bb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Cb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Db=/^(?:GET|HEAD)$/,Eb=/^\/\//,Fb={},Gb={},Hb="*/".concat("*"),Ib=d.createElement("a");Ib.href=qb.href;function Jb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(K)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Kb(a,b,c,d){var e={},f=a===Gb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Lb(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Mb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Nb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:qb.href,type:"GET",isLocal:Cb.test(qb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Hb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Lb(Lb(a,r.ajaxSettings),b):Lb(r.ajaxSettings,a)},ajaxPrefilter:Jb(Fb),ajaxTransport:Jb(Gb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Bb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||qb.href)+"").replace(Eb,qb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(K)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Ib.protocol+"//"+Ib.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Kb(Fb,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Db.test(o.type),f=o.url.replace(zb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(yb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(sb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Ab,""),n=(sb.test(f)?"&":"?")+"_="+rb++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Hb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Kb(Gb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Mb(o,y,d)),v=Nb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Ob={0:200,1223:204},Pb=r.ajaxSettings.xhr();o.cors=!!Pb&&"withCredentials"in Pb,o.ajax=Pb=!!Pb,r.ajaxTransport(function(b){var c,d;if(o.cors||Pb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Ob[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Qb=[],Rb=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Qb.pop()||r.expando+"_"+rb++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Rb.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Rb.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Rb,"$1"+e):b.jsonp!==!1&&(b.url+=(sb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Qb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=B.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=oa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=r.trim(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length};function Sb(a){return r.isWindow(a)?a:9===a.nodeType&&a.defaultView}r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),d.width||d.height?(e=f.ownerDocument,c=Sb(e),b=e.documentElement,{top:d.top+c.pageYOffset-b.clientTop,left:d.left+c.pageXOffset-b.clientLeft}):d):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),r.nodeName(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||pa})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return S(this,function(a,d,e){var f=Sb(a);return void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Na(o.pixelPosition,function(a,c){if(c)return c=Ma(a,b),Ka.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return S(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.parseJSON=JSON.parse,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Tb=a.jQuery,Ub=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Ub),b&&a.jQuery===r&&(a.jQuery=Tb),r},b||(a.jQuery=a.$=r),r});
/*!
* jQuery.filer minified
* Copyright (c) 2016 CreativeDream
* Website: https://github.com/CreativeDream/jquery.filer
* Version: 1.3 (14-Sep-2016)
* Requires: jQuery v1.7.1 or later
*/
!function(a){"use strict";a.fn.filer=function(b){return this.each(function(c,d){var e=a(d),f=".jFiler",g=a(),h=a(),i=a(),j=[],k=a.isFunction(b)?b(e,a.fn.filer.defaults):b,l=k&&a.isPlainObject(k)?a.extend(!0,{},a.fn.filer.defaults,k):a.fn.filer.defaults,m={init:function(){e.wrap('<div class="jFiler"></div>'),m._set("props"),e.prop("jFiler").boxEl=g=e.closest(f),m._changeInput()},_bindInput:function(){l.changeInput&&h.length>0&&h.on("click",m._clickHandler),e.on({focus:function(){h.addClass("focused")},blur:function(){h.removeClass("focused")},change:m._onChange}),l.dragDrop&&(l.dragDrop.dragContainer.on("drag dragstart dragend dragover dragenter dragleave drop",function(a){a.preventDefault(),a.stopPropagation()}),l.dragDrop.dragContainer.on("drop",m._dragDrop.drop),l.dragDrop.dragContainer.on("dragover",m._dragDrop.dragEnter),l.dragDrop.dragContainer.on("dragleave",m._dragDrop.dragLeave)),l.uploadFile&&l.clipBoardPaste&&a(window).on("paste",m._clipboardPaste)},_unbindInput:function(b){l.changeInput&&h.length>0&&h.off("click",m._clickHandler),b&&(e.off("change",m._onChange),l.dragDrop&&(l.dragDrop.dragContainer.off("drop",m._dragDrop.drop),l.dragDrop.dragContainer.off("dragover",m._dragDrop.dragEnter),l.dragDrop.dragContainer.off("dragleave",m._dragDrop.dragLeave)),l.uploadFile&&l.clipBoardPaste&&a(window).off("paste",m._clipboardPaste))},_clickHandler:function(){if(!l.uploadFile&&l.addMore&&0!=e.val().length){m._unbindInput(!0);var b=a('<input type="file" />'),c=e.prop("attributes");a.each(c,function(){"required"!=this.name&&b.attr(this.name,this.value)}),e.after(b),j.push(b),e=b,m._bindInput(),m._set("props")}e.click()},_applyAttrSettings:function(){var a=["name","limit","maxSize","fileMaxSize","extensions","changeInput","showThumbs","appendTo","theme","addMore","excludeName","files","uploadUrl","uploadData","options"];for(var b in a){var c="data-jfiler-"+a[b];if(m._assets.hasAttr(c)){switch(a[b]){case"changeInput":case"showThumbs":case"addMore":l[a[b]]=["true","false"].indexOf(e.attr(c))>-1?"true"==e.attr(c):e.attr(c);break;case"extensions":l[a[b]]=e.attr(c).replace(/ /g,"").split(",");break;case"uploadUrl":l.uploadFile&&(l.uploadFile.url=e.attr(c));break;case"uploadData":l.uploadFile&&(l.uploadFile.data=JSON.parse(e.attr(c)));break;case"files":case"options":l[a[b]]=JSON.parse(e.attr(c));break;default:l[a[b]]=e.attr(c)}e.removeAttr(c)}}},_changeInput:function(){if(m._applyAttrSettings(),null!=l.beforeRender&&"function"==typeof l.beforeRender?l.beforeRender(g,e):null,l.theme&&g.addClass("jFiler-theme-"+l.theme),"input"!=e.get(0).tagName.toLowerCase()&&"file"!=e.get(0).type)h=e,e=a('<input type="file" name="'+l.name+'" />'),e.css({position:"absolute",left:"-9999px",top:"-9999px","z-index":"-9999"}),g.prepend(e),m._isGn=e;else if(l.changeInput){switch(typeof l.changeInput){case"boolean":h=a('<div class="jFiler-input"><div class="jFiler-input-caption"><span>'+l.captions.feedback+'</span></div><div class="jFiler-input-button">'+l.captions.button+'</div></div>"');break;case"string":case"object":h=a(l.changeInput);break;case"function":h=a(l.changeInput(g,e,l))}e.after(h),e.css({position:"absolute",left:"-9999px",top:"-9999px","z-index":"-9999"})}e.prop("jFiler").newInputEl=h,l.dragDrop&&(l.dragDrop.dragContainer=l.dragDrop.dragContainer?a(l.dragDrop.dragContainer):h),(!l.limit||l.limit&&l.limit>=2)&&(e.attr("multiple","multiple"),"[]"!=e.attr("name").slice(-2)?e.attr("name",e.attr("name")+"[]"):null),e.attr("disabled")||l.disabled?(l.disabled=!0,m._unbindInput(!0),g.addClass("jFiler-disabled")):(l.disabled=!1,m._bindInput(),g.removeClass("jFiler-disabled")),l.files&&m._append(!1,{files:l.files}),null!=l.afterRender&&"function"==typeof l.afterRender?l.afterRender(i,g,h,e):null},_clear:function(){m.files=null,e.prop("jFiler").files=null,l.uploadFile||l.addMore||m._reset(),m._set("feedback",m._itFl&&m._itFl.length>0?m._itFl.length+" "+l.captions.feedback2:l.captions.feedback),null!=l.onEmpty&&"function"==typeof l.onEmpty?l.onEmpty(g,h,e):null},_reset:function(b){if(!b){if(!l.uploadFile&&l.addMore){for(var c=0;c<j.length;c++)j[c].remove();j=[],m._unbindInput(!0),e=m._isGn?m._isGn:a(d),m._bindInput()}m._set("input","")}m._itFl=[],m._itFc=null,m._ajFc=0,m._set("props"),e.prop("jFiler").files_list=m._itFl,e.prop("jFiler").current_file=m._itFc,m._itFr=[],g.find("input[name^='jfiler-items-exclude-']:hidden").remove(),i.fadeOut("fast",function(){a(this).remove()}),e.prop("jFiler").listEl=i=a()},_set:function(a,b){switch(a){case"input":e.val(b);break;case"feedback":h.length>0&&h.find(".jFiler-input-caption span").html(b);break;case"props":e.prop("jFiler")||e.prop("jFiler",{options:l,listEl:i,boxEl:g,newInputEl:h,inputEl:e,files:m.files,files_list:m._itFl,current_file:m._itFc,append:function(a){return m._append(!1,{files:[a]})},enable:function(){l.disabled&&(l.disabled=!1,e.removeAttr("disabled"),g.removeClass("jFiler-disabled"),m._bindInput())},disable:function(){l.disabled||(l.disabled=!0,g.addClass("jFiler-disabled"),m._unbindInput(!0))},remove:function(a){return m._remove(null,{binded:!0,data:{id:a}}),!0},reset:function(){return m._reset(),m._clear(),!0},retry:function(a){return m._retryUpload(a)}})}},_filesCheck:function(){var b=0;if(l.limit&&m.files.length+m._itFl.length>l.limit)return l.dialogs.alert(m._assets.textParse(l.captions.errors.filesLimit)),!1;for(var c=0;c<m.files.length;c++){var d=m.files[c],e=d.name.split(".").pop().toLowerCase(),f={name:d.name,size:d.size,size2:m._assets.bytesToSize(d.size),type:d.type,ext:e};if(null!=l.extensions&&a.inArray(e,l.extensions)==-1&&a.inArray(f.type,l.extensions)==-1)return l.dialogs.alert(m._assets.textParse(l.captions.errors.filesType,f)),!1;if(null!=l.maxSize&&m.files[c].size>1048576*l.maxSize||null!=l.fileMaxSize&&m.files[c].size>1048576*l.fileMaxSize)return l.dialogs.alert(m._assets.textParse(l.captions.errors.filesSize,f)),!1;if(4096==d.size&&0==d.type.length)return l.dialogs.alert(m._assets.textParse(l.captions.errors.folderUpload,f)),!1;if(null!=l.onFileCheck&&"function"==typeof l.onFileCheck?l.onFileCheck(f,l,m._assets.textParse)===!1:null)return!1;if((l.uploadFile||l.addMore)&&!l.allowDuplicates){var f=m._itFl.filter(function(a,b){if(a.file.name==d.name&&a.file.size==d.size&&a.file.type==d.type&&(!d.lastModified||a.file.lastModified==d.lastModified))return!0});if(f.length>0){if(1==m.files.length)return!1;d._pendRemove=!0}}b+=m.files[c].size}return!(null!=l.maxSize&&b>=Math.round(1048576*l.maxSize))||(l.dialogs.alert(m._assets.textParse(l.captions.errors.filesSizeAll)),!1)},_thumbCreator:{create:function(b){var c=m.files[b],d=m._itFc?m._itFc.id:b,e=c.name,f=c.size,g=c.file,h=c.type?c.type.split("/",1):"".toString().toLowerCase(),j=e.indexOf(".")!=-1?e.split(".").pop().toLowerCase():"",k=l.uploadFile?'<div class="jFiler-jProgressBar">'+l.templates.progressBar+"</div>":"",n={id:d,name:e,size:f,size2:m._assets.bytesToSize(f),url:g,type:h,extension:j,icon:m._assets.getIcon(j,h),icon2:m._thumbCreator.generateIcon({type:h,extension:j}),image:'<div class="jFiler-item-thumb-image fi-loading"></div>',progressBar:k,_appended:c._appended},o="";return c.opts&&(n=a.extend({},c.opts,n)),o=a(m._thumbCreator.renderContent(n)).attr("data-jfiler-index",d),o.get(0).jfiler_id=d,m._thumbCreator.renderFile(c,o,n),c.forList?o:(m._itFc.html=o,o.hide()[l.templates.itemAppendToEnd?"appendTo":"prependTo"](i.find(l.templates._selectors.list)).show(),void(c._appended||m._onSelect(b)))},renderContent:function(a){return m._assets.textParse(a._appended?l.templates.itemAppend:l.templates.item,a)},renderFile:function(b,c,d){if(0==c.find(".jFiler-item-thumb-image").length)return!1;if(b.file&&"image"==d.type){var e='<img src="'+b.file+'" draggable="false" />',f=c.find(".jFiler-item-thumb-image.fi-loading");return a(e).error(function(){e=m._thumbCreator.generateIcon(d),c.addClass("jFiler-no-thumbnail"),f.removeClass("fi-loading").html(e)}).load(function(){f.removeClass("fi-loading").html(e)}),!0}if(window.File&&window.FileList&&window.FileReader&&"image"==d.type&&d.size<1e7){var g=new FileReader;g.onload=function(a){var b=c.find(".jFiler-item-thumb-image.fi-loading");if(l.templates.canvasImage){var e=document.createElement("canvas"),f=e.getContext("2d"),g=new Image;g.onload=function(){var a=b.height(),c=b.width(),d=g.height/a,h=g.width/c,i=d<h?d:h,j=g.height/i,k=g.width/i,l=Math.ceil(Math.log(g.width/k)/Math.log(2));if(e.height=a,e.width=c,g.width<e.width||g.height<e.height||l<=1){var m=g.width<e.width?e.width/2-g.width/2:g.width>e.width?-(g.width-e.width)/2:0,n=g.height<e.height?e.height/2-g.height/2:0;f.drawImage(g,m,n,g.width,g.height)}else{var o=document.createElement("canvas"),p=o.getContext("2d");o.width=.5*g.width,o.height=.5*g.height,p.fillStyle="#fff",p.fillRect(0,0,o.width,o.height),p.drawImage(g,0,0,o.width,o.height),p.drawImage(o,0,0,.5*o.width,.5*o.height),f.drawImage(o,k>e.width?k-e.width:0,0,.5*o.width,.5*o.height,0,0,k,j)}b.removeClass("fi-loading").html('<img src="'+e.toDataURL("image/png")+'" draggable="false" />')},g.onerror=function(){c.addClass("jFiler-no-thumbnail"),b.removeClass("fi-loading").html(m._thumbCreator.generateIcon(d))},g.src=a.target.result}else b.removeClass("fi-loading").html('<img src="'+a.target.result+'" draggable="false" />')},g.readAsDataURL(b)}else{var e=m._thumbCreator.generateIcon(d),f=c.find(".jFiler-item-thumb-image.fi-loading");c.addClass("jFiler-no-thumbnail"),f.removeClass("fi-loading").html(e)}},generateIcon:function(b){var c=new Array(3);if(b&&b.type&&b.type[0]&&b.extension)switch(b.type[0]){case"image":c[0]="f-image",c[1]='<i class="icon-jfi-file-image"></i>';break;case"video":c[0]="f-video",c[1]='<i class="icon-jfi-file-video"></i>';break;case"audio":c[0]="f-audio",c[1]='<i class="icon-jfi-file-audio"></i>';break;default:c[0]="f-file f-file-ext-"+b.extension,c[1]=b.extension.length>0?"."+b.extension:"",c[2]=1}else c[0]="f-file",c[1]=b.extension&&b.extension.length>0?"."+b.extension:"",c[2]=1;var d='<span class="jFiler-icon-file '+c[0]+'">'+c[1]+"</span>";if(1==c[2]){var e=m._assets.text2Color(b.extension);if(e){var f=a(d).appendTo("body");f.css("background-color",m._assets.text2Color(b.extension)),d=f.prop("outerHTML"),f.remove()}}return d},_box:function(b){if(null!=l.beforeShow&&"function"==typeof l.beforeShow&&!l.beforeShow(m.files,i,g,h,e))return!1;if(i.length<1){if(l.appendTo)var c=a(l.appendTo);else var c=g;c.find(".jFiler-items").remove(),i=a('<div class="jFiler-items jFiler-row"></div>'),e.prop("jFiler").listEl=i,i.append(m._assets.textParse(l.templates.box)).appendTo(c),i.on("click",l.templates._selectors.remove,function(c){c.preventDefault();var d=[b?b.remove.event:c,b?b.remove.el:a(this).closest(l.templates._selectors.item)],e=function(a){m._remove(d[0],d[1])};l.templates.removeConfirmation?l.dialogs.confirm(l.captions.removeConfirmation,e):e()})}for(var d=0;d<m.files.length;d++)m.files[d]._appended||(m.files[d]._choosed=!0),m._addToMemory(d),m._thumbCreator.create(d)}},_upload:function(b){var c=m._itFl[b],d=c.html,f=new FormData;if(f.append(e.attr("name"),c.file,!!c.file.name&&c.file.name),null!=l.uploadFile.data&&a.isPlainObject("function"==typeof l.uploadFile.data?l.uploadFile.data(c.file):l.uploadFile.data))for(var g in l.uploadFile.data)f.append(g,l.uploadFile.data[g]);m._ajax.send(d,f,c)},_ajax:{send:function(b,c,d){return d.ajax=a.ajax({url:l.uploadFile.url,data:c,type:l.uploadFile.type,enctype:l.uploadFile.enctype,xhr:function(){var c=a.ajaxSettings.xhr();return c.upload&&c.upload.addEventListener("progress",function(a){m._ajax.progressHandling(a,b)},!1),c},complete:function(a,b){d.ajax=!1,m._ajFc++,l.uploadFile.synchron&&d.id+1<m._itFl.length&&m._upload(d.id+1),m._ajFc>=m.files.length&&(m._ajFc=0,e.get(0).value="",null!=l.uploadFile.onComplete&&"function"==typeof l.uploadFile.onComplete?l.uploadFile.onComplete(i,g,h,e,a,b):null)},beforeSend:function(a,c){return null==l.uploadFile.beforeSend||"function"!=typeof l.uploadFile.beforeSend||l.uploadFile.beforeSend(b,i,g,h,e,d.id,a,c)},success:function(a,c,f){d.uploaded=!0,null!=l.uploadFile.success&&"function"==typeof l.uploadFile.success?l.uploadFile.success(a,b,i,g,h,e,d.id,c,f):null},error:function(a,c,f){d.uploaded=!1,null!=l.uploadFile.error&&"function"==typeof l.uploadFile.error?l.uploadFile.error(b,i,g,h,e,d.id,a,c,f):null},statusCode:l.uploadFile.statusCode,cache:!1,contentType:!1,processData:!1}),d.ajax},progressHandling:function(a,b){if(a.lengthComputable){var c=Math.round(100*a.loaded/a.total).toString();null!=l.uploadFile.onProgress&&"function"==typeof l.uploadFile.onProgress?l.uploadFile.onProgress(c,b,i,g,h,e):null,b.find(".jFiler-jProgressBar").find(l.templates._selectors.progressBar).css("width",c+"%")}}},_dragDrop:{dragEnter:function(a){clearTimeout(m._dragDrop._drt),l.dragDrop.dragContainer.addClass("dragged"),m._set("feedback",l.captions.drop),null!=l.dragDrop.dragEnter&&"function"==typeof l.dragDrop.dragEnter?l.dragDrop.dragEnter(a,h,e,g):null},dragLeave:function(a){clearTimeout(m._dragDrop._drt),m._dragDrop._drt=setTimeout(function(a){return m._dragDrop._dragLeaveCheck(a)?(l.dragDrop.dragContainer.removeClass("dragged"),m._set("feedback",l.captions.feedback),void(null!=l.dragDrop.dragLeave&&"function"==typeof l.dragDrop.dragLeave?l.dragDrop.dragLeave(a,h,e,g):null)):(m._dragDrop.dragLeave(a),!1)},100,a)},drop:function(a){clearTimeout(m._dragDrop._drt),l.dragDrop.dragContainer.removeClass("dragged"),m._set("feedback",l.captions.feedback),a&&a.originalEvent&&a.originalEvent.dataTransfer&&a.originalEvent.dataTransfer.files&&a.originalEvent.dataTransfer.files.length>0&&m._onChange(a,a.originalEvent.dataTransfer.files),null!=l.dragDrop.drop&&"function"==typeof l.dragDrop.drop?l.dragDrop.drop(a.originalEvent.dataTransfer.files,a,h,e,g):null},_dragLeaveCheck:function(b){var c=a(b.currentTarget),d=0;return!(!c.is(h)&&(d=h.find(c).length,d>0))}},_clipboardPaste:function(a,b){if((b||a.originalEvent.clipboardData||a.originalEvent.clipboardData.items)&&(!b||a.originalEvent.dataTransfer||a.originalEvent.dataTransfer.items)&&!m._clPsePre){var c=b?a.originalEvent.dataTransfer.items:a.originalEvent.clipboardData.items,d=function(a,b,c){b=b||"",c=c||512;for(var d=atob(a),e=[],f=0;f<d.length;f+=c){for(var g=d.slice(f,f+c),h=new Array(g.length),i=0;i<g.length;i++)h[i]=g.charCodeAt(i);var j=new Uint8Array(h);e.push(j)}var k=new Blob(e,{type:b});return k};if(c)for(var e=0;e<c.length;e++)if(c[e].type.indexOf("image")!==-1||c[e].type.indexOf("text/uri-list")!==-1){if(b)try{window.atob(a.originalEvent.dataTransfer.getData("text/uri-list").toString().split(",")[1])}catch(a){return}var f=b?d(a.originalEvent.dataTransfer.getData("text/uri-list").toString().split(",")[1],"image/png"):c[e].getAsFile();f.name=Math.random().toString(36).substring(5),f.name+=f.type.indexOf("/")!=-1?"."+f.type.split("/")[1].toString().toLowerCase():".png",m._onChange(a,[f]),m._clPsePre=setTimeout(function(){delete m._clPsePre},1e3)}}},_onSelect:function(b){l.uploadFile&&!a.isEmptyObject(l.uploadFile)&&(!l.uploadFile.synchron||l.uploadFile.synchron&&0==a.grep(m._itFl,function(a){return a.ajax}).length)&&m._upload(m._itFc.id),m.files[b]._pendRemove&&(m._itFc.html.hide(),m._remove(null,{binded:!0,data:{id:m._itFc.id}})),null!=l.onSelect&&"function"==typeof l.onSelect?l.onSelect(m.files[b],m._itFc.html,i,g,h,e):null,b+1>=m.files.length&&(null!=l.afterShow&&"function"==typeof l.afterShow?l.afterShow(i,g,h,e):null)},_onChange:function(b,c){if(c){if(!c||0==c.length)return m._set("input",""),m._clear(),!1;m.files=c}else{if(!e.get(0).files||"undefined"==typeof e.get(0).files||0==e.get(0).files.length)return l.uploadFile||l.addMore||(m._set("input",""),m._clear()),!1;m.files=e.get(0).files}if(l.uploadFile||l.addMore||m._reset(!0),e.prop("jFiler").files=m.files,!m._filesCheck()||null!=l.beforeSelect&&"function"==typeof l.beforeSelect&&!l.beforeSelect(m.files,i,g,h,e))return m._set("input",""),m._clear(),l.addMore&&j.length>0&&(m._unbindInput(!0),j[j.length-1].remove(),j.splice(j.length-1,1),e=j.length>0?j[j.length-1]:a(d),m._bindInput()),!1;if(m._set("feedback",m.files.length+m._itFl.length+" "+l.captions.feedback2),l.showThumbs)m._thumbCreator._box();else for(var f=0;f<m.files.length;f++)m.files[f]._choosed=!0,m._addToMemory(f),m._onSelect(f)},_append:function(a,b){var c=!!b&&b.files;if(c&&!(c.length<=0)&&(m.files=c,e.prop("jFiler").files=m.files,l.showThumbs)){for(var d=0;d<m.files.length;d++)m.files[d]._appended=!0;m._thumbCreator._box()}},_getList:function(a,b){var c=!!b&&b.files;if(c&&!(c.length<=0)&&(m.files=c,e.prop("jFiler").files=m.files,l.showThumbs)){for(var d=[],f=0;f<m.files.length;f++)m.files[f].forList=!0,d.push(m._thumbCreator.create(f));b.callback&&b.callback(d,i,g,h,e)}},_retryUpload:function(b,c){var d=parseInt("object"==typeof c?c.attr("data-jfiler-index"):c),f=m._itFl.filter(function(a,b){return a.id==d});return f.length>0&&(!l.uploadFile||a.isEmptyObject(l.uploadFile)||f[0].uploaded?void 0:(m._itFc=f[0],e.prop("jFiler").current_file=m._itFc,m._upload(d),!0))},_remove:function(b,d){if(d.binded){if("undefined"!=typeof d.data.id&&(d=i.find(l.templates._selectors.item+"[data-jfiler-index='"+d.data.id+"']"),0==d.length))return!1;d.data.el&&(d=d.data.el)}var f=function(b){var d=g.find("input[name^='jfiler-items-exclude-']:hidden").first();0==d.length&&(d=a('<input type="hidden" name="jfiler-items-exclude-'+(l.excludeName?l.excludeName:("[]"!=e.attr("name").slice(-2)?e.attr("name"):e.attr("name").substring(0,e.attr("name").length-2))+"-"+c)+'">'),d.appendTo(g)),b&&a.isArray(b)&&(b=JSON.stringify(b),d.val(b))},j=function(b,c){var d=m._itFl[c],e=[];if(d.file._choosed||d.file._appended||d.uploaded){m._itFr.push(d);for(var g=m._itFl.filter(function(a){return a.file.name==d.file.name}),h=0;h<m._itFr.length;h++)l.addMore&&m._itFr[h]==d&&g.length>0&&(m._itFr[h].remove_name=g.indexOf(d)+"://"+m._itFr[h].file.name),e.push(m._itFr[h].remove_name?m._itFr[h].remove_name:m._itFr[h].file.name)}f(e),m._itFl.splice(c,1),m._itFl.length<1?(m._reset(),m._clear()):m._set("feedback",m._itFl.length+" "+l.captions.feedback2),b.fadeOut("fast",function(){a(this).remove()})},k=d.get(0).jfiler_id||d.attr("data-jfiler-index"),n=null;for(var o in m._itFl)"length"!==o&&m._itFl.hasOwnProperty(o)&&m._itFl[o].id==k&&(n=o);return!!m._itFl.hasOwnProperty(n)&&(m._itFl[n].ajax?(m._itFl[n].ajax.abort(),void j(d,n)):void(null!=l.onRemove&&"function"==typeof l.onRemove&&l.onRemove(d,m._itFl[n].file,n,i,g,h,e)===!1||j(d,n)))},_addToMemory:function(b){m._itFl.push({id:m._itFl.length,file:m.files[b],html:a(),ajax:!1,uploaded:!1}),(l.addMore||m.files[b]._appended)&&(m._itFl[m._itFl.length-1].input=e),m._itFc=m._itFl[m._itFl.length-1],e.prop("jFiler").files_list=m._itFl,e.prop("jFiler").current_file=m._itFc},_assets:{bytesToSize:function(a){if(0==a)return"0 Byte";var b=1e3,c=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"],d=Math.floor(Math.log(a)/Math.log(b));return(a/Math.pow(b,d)).toPrecision(3)+" "+c[d]},hasAttr:function(a,b){var b=b?b:e,c=b.attr(a);return!(!c||"undefined"==typeof c)},getIcon:function(b,c){var d=["audio","image","text","video"];return a.inArray(c,d)>-1?'<i class="icon-jfi-file-'+c+" jfi-file-ext-"+b+'"></i>':'<i class="icon-jfi-file-o jfi-file-type-'+c+" jfi-file-ext-"+b+'"></i>'},textParse:function(b,c){switch(c=a.extend({},{limit:l.limit,maxSize:l.maxSize,fileMaxSize:l.fileMaxSize,extensions:l.extensions?l.extensions.join(","):null},c&&a.isPlainObject(c)?c:{},l.options),typeof b){case"string":return b.replace(/\{\{fi-(.*?)\}\}/g,function(a,b){return b=b.replace(/ /g,""),b.match(/(.*?)\|limitTo\:(\d+)/)?b.replace(/(.*?)\|limitTo\:(\d+)/,function(a,b,d){var b=c[b]?c[b]:"",e=b.substring(0,d);return e=b.length>e.length?e.substring(0,e.length-3)+"...":e}):c[b]?c[b]:""});case"function":return b(c);default:return b}},text2Color:function(a){if(!a||0==a.length)return!1;for(var b=0,c=0;b<a.length;c=a.charCodeAt(b++)+((c<<5)-c));for(var b=0,d="#";b<3;d+=("00"+(c>>2*b++&255).toString(16)).slice(-2));return d}},files:null,_itFl:[],_itFc:null,_itFr:[],_itPl:[],_ajFc:0};return e.on("filer.append",function(a,b){m._append(a,b)}).on("filer.remove",function(a,b){b.binded=!0,m._remove(a,b)}).on("filer.reset",function(a){return m._reset(),m._clear(),!0}).on("filer.generateList",function(a,b){return m._getList(a,b)}).on("filer.retry",function(a,b){return m._retryUpload(a,b)}),m.init(),this})},a.fn.filer.defaults={limit:null,maxSize:null,fileMaxSize:null,extensions:null,changeInput:!0,showThumbs:!1,appendTo:null,theme:"default",templates:{box:'<ul class="jFiler-items-list jFiler-items-default"></ul>',item:'<li class="jFiler-item"><div class="jFiler-item-container"><div class="jFiler-item-inner"><div class="jFiler-item-icon pull-left">{{fi-icon}}</div><div class="jFiler-item-info pull-left"><div class="jFiler-item-title" title="{{fi-name}}">{{fi-name | limitTo:30}}</div><div class="jFiler-item-others"><span>size: {{fi-size2}}</span><span>type: {{fi-extension}}</span><span class="jFiler-item-status">{{fi-progressBar}}</span></div><div class="jFiler-item-assets"><ul class="list-inline"><li><a class="icon-jfi-trash jFiler-item-trash-action"></a></li></ul></div></div></div></div></li>',itemAppend:'<li class="jFiler-item"><div class="jFiler-item-container"><div class="jFiler-item-inner"><div class="jFiler-item-icon pull-left">{{fi-icon}}</div><div class="jFiler-item-info pull-left"><div class="jFiler-item-title">{{fi-name | limitTo:35}}</div><div class="jFiler-item-others"><span>size: {{fi-size2}}</span><span>type: {{fi-extension}}</span><span class="jFiler-item-status"></span></div><div class="jFiler-item-assets"><ul class="list-inline"><li><a class="icon-jfi-trash jFiler-item-trash-action"></a></li></ul></div></div></div></div></li>',progressBar:'<div class="bar"></div>',itemAppendToEnd:!1,removeConfirmation:!0,canvasImage:!0,_selectors:{list:".jFiler-items-list",item:".jFiler-item",progressBar:".bar",remove:".jFiler-item-trash-action"}},files:null,uploadFile:null,dragDrop:null,addMore:!1,allowDuplicates:!1,clipBoardPaste:!0,excludeName:null,beforeRender:null,afterRender:null,beforeShow:null,beforeSelect:null,onSelect:null,onFileCheck:null,afterShow:null,onRemove:null,onEmpty:null,options:null,dialogs:{alert:function(a){return alert(a)},confirm:function(a,b){confirm(a)?b():null}},captions:{button:"Choose Files",feedback:"Choose files To Upload",feedback2:"files were chosen",drop:"Drop file here to Upload",removeConfirmation:"Are you sure you want to remove this file?",errors:{filesLimit:"Only {{fi-limit}} files are allowed to be uploaded.",filesType:"Only Images are allowed to be uploaded.",filesSize:"{{fi-name}} is too large! Please upload file up to {{fi-fileMaxSize}} MB.",filesSizeAll:"Files you've choosed are too large! Please upload files up to {{fi-maxSize}} MB.",folderUpload:"You are not allowed to upload folders."}}}}(jQuery);
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
/*!
* Knockout JavaScript library v3.4.0
* (c) Steven Sanderson - http://knockoutjs.com/
* License: MIT (http://www.opensource.org/licenses/mit-license.php)
*/
(function() {(function(n){var x=this||(0,eval)("this"),u=x.document,M=x.navigator,v=x.jQuery,F=x.JSON;(function(n){"function"===typeof define&&define.amd?define(["exports","require"],n):"object"===typeof exports&&"object"===typeof module?n(module.exports||exports):n(x.ko={})})(function(N,O){function J(a,c){return null===a||typeof a in T?a===c:!1}function U(b,c){var d;return function(){d||(d=a.a.setTimeout(function(){d=n;b()},c))}}function V(b,c){var d;return function(){clearTimeout(d);d=a.a.setTimeout(b,c)}}function W(a,
c){c&&c!==I?"beforeChange"===c?this.Kb(a):this.Ha(a,c):this.Lb(a)}function X(a,c){null!==c&&c.k&&c.k()}function Y(a,c){var d=this.Hc,e=d[s];e.R||(this.lb&&this.Ma[c]?(d.Pb(c,a,this.Ma[c]),this.Ma[c]=null,--this.lb):e.r[c]||d.Pb(c,a,e.s?{ia:a}:d.uc(a)))}function K(b,c,d,e){a.d[b]={init:function(b,g,k,l,m){var h,r;a.m(function(){var q=a.a.c(g()),p=!d!==!q,A=!r;if(A||c||p!==h)A&&a.va.Aa()&&(r=a.a.ua(a.f.childNodes(b),!0)),p?(A||a.f.da(b,a.a.ua(r)),a.eb(e?e(m,q):m,b)):a.f.xa(b),h=p},null,{i:b});return{controlsDescendantBindings:!0}}};
a.h.ta[b]=!1;a.f.Z[b]=!0}var a="undefined"!==typeof N?N:{};a.b=function(b,c){for(var d=b.split("."),e=a,f=0;f<d.length-1;f++)e=e[d[f]];e[d[d.length-1]]=c};a.G=function(a,c,d){a[c]=d};a.version="3.4.0";a.b("version",a.version);a.options={deferUpdates:!1,useOnlyNativeEvents:!1};a.a=function(){function b(a,b){for(var c in a)a.hasOwnProperty(c)&&b(c,a[c])}function c(a,b){if(b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function d(a,b){a.__proto__=b;return a}function e(b,c,d,e){var h=b[c].match(r)||
[];a.a.q(d.match(r),function(b){a.a.pa(h,b,e)});b[c]=h.join(" ")}var f={__proto__:[]}instanceof Array,g="function"===typeof Symbol,k={},l={};k[M&&/Firefox\/2/i.test(M.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"];k.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" ");b(k,function(a,b){if(b.length)for(var c=0,d=b.length;c<d;c++)l[b[c]]=a});var m={propertychange:!0},h=u&&function(){for(var a=3,b=u.createElement("div"),c=
b.getElementsByTagName("i");b.innerHTML="\x3c!--[if gt IE "+ ++a+"]><i></i><![endif]--\x3e",c[0];);return 4<a?a:n}(),r=/\S+/g;return{cc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],q:function(a,b){for(var c=0,d=a.length;c<d;c++)b(a[c],c)},o:function(a,b){if("function"==typeof Array.prototype.indexOf)return Array.prototype.indexOf.call(a,b);for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},Sb:function(a,b,c){for(var d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d))return a[d];
return null},La:function(b,c){var d=a.a.o(b,c);0<d?b.splice(d,1):0===d&&b.shift()},Tb:function(b){b=b||[];for(var c=[],d=0,e=b.length;d<e;d++)0>a.a.o(c,b[d])&&c.push(b[d]);return c},fb:function(a,b){a=a||[];for(var c=[],d=0,e=a.length;d<e;d++)c.push(b(a[d],d));return c},Ka:function(a,b){a=a||[];for(var c=[],d=0,e=a.length;d<e;d++)b(a[d],d)&&c.push(a[d]);return c},ra:function(a,b){if(b instanceof Array)a.push.apply(a,b);else for(var c=0,d=b.length;c<d;c++)a.push(b[c]);return a},pa:function(b,c,d){var e=
a.a.o(a.a.zb(b),c);0>e?d&&b.push(c):d||b.splice(e,1)},ka:f,extend:c,Xa:d,Ya:f?d:c,D:b,Ca:function(a,b){if(!a)return a;var c={},d;for(d in a)a.hasOwnProperty(d)&&(c[d]=b(a[d],d,a));return c},ob:function(b){for(;b.firstChild;)a.removeNode(b.firstChild)},jc:function(b){b=a.a.V(b);for(var c=(b[0]&&b[0].ownerDocument||u).createElement("div"),d=0,e=b.length;d<e;d++)c.appendChild(a.$(b[d]));return c},ua:function(b,c){for(var d=0,e=b.length,h=[];d<e;d++){var m=b[d].cloneNode(!0);h.push(c?a.$(m):m)}return h},
da:function(b,c){a.a.ob(b);if(c)for(var d=0,e=c.length;d<e;d++)b.appendChild(c[d])},qc:function(b,c){var d=b.nodeType?[b]:b;if(0<d.length){for(var e=d[0],h=e.parentNode,m=0,l=c.length;m<l;m++)h.insertBefore(c[m],e);m=0;for(l=d.length;m<l;m++)a.removeNode(d[m])}},za:function(a,b){if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==b;)a.splice(0,1);for(;1<a.length&&a[a.length-1].parentNode!==b;)a.length--;if(1<a.length){var c=a[0],d=a[a.length-1];for(a.length=0;c!==d;)a.push(c),
c=c.nextSibling;a.push(d)}}return a},sc:function(a,b){7>h?a.setAttribute("selected",b):a.selected=b},$a:function(a){return null===a||a===n?"":a.trim?a.trim():a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},nd:function(a,b){a=a||"";return b.length>a.length?!1:a.substring(0,b.length)===b},Mc:function(a,b){if(a===b)return!0;if(11===a.nodeType)return!1;if(b.contains)return b.contains(3===a.nodeType?a.parentNode:a);if(b.compareDocumentPosition)return 16==(b.compareDocumentPosition(a)&16);for(;a&&a!=
b;)a=a.parentNode;return!!a},nb:function(b){return a.a.Mc(b,b.ownerDocument.documentElement)},Qb:function(b){return!!a.a.Sb(b,a.a.nb)},A:function(a){return a&&a.tagName&&a.tagName.toLowerCase()},Wb:function(b){return a.onError?function(){try{return b.apply(this,arguments)}catch(c){throw a.onError&&a.onError(c),c;}}:b},setTimeout:function(b,c){return setTimeout(a.a.Wb(b),c)},$b:function(b){setTimeout(function(){a.onError&&a.onError(b);throw b;},0)},p:function(b,c,d){var e=a.a.Wb(d);d=h&&m[c];if(a.options.useOnlyNativeEvents||
d||!v)if(d||"function"!=typeof b.addEventListener)if("undefined"!=typeof b.attachEvent){var l=function(a){e.call(b,a)},f="on"+c;b.attachEvent(f,l);a.a.F.oa(b,function(){b.detachEvent(f,l)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else b.addEventListener(c,e,!1);else v(b).bind(c,e)},Da:function(b,c){if(!b||!b.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var d;"input"===a.a.A(b)&&b.type&&"click"==c.toLowerCase()?(d=b.type,d="checkbox"==
d||"radio"==d):d=!1;if(a.options.useOnlyNativeEvents||!v||d)if("function"==typeof u.createEvent)if("function"==typeof b.dispatchEvent)d=u.createEvent(l[c]||"HTMLEvents"),d.initEvent(c,!0,!0,x,0,0,0,0,0,!1,!1,!1,!1,0,b),b.dispatchEvent(d);else throw Error("The supplied element doesn't support dispatchEvent");else if(d&&b.click)b.click();else if("undefined"!=typeof b.fireEvent)b.fireEvent("on"+c);else throw Error("Browser doesn't support triggering events");else v(b).trigger(c)},c:function(b){return a.H(b)?
b():b},zb:function(b){return a.H(b)?b.t():b},bb:function(b,c,d){var h;c&&("object"===typeof b.classList?(h=b.classList[d?"add":"remove"],a.a.q(c.match(r),function(a){h.call(b.classList,a)})):"string"===typeof b.className.baseVal?e(b.className,"baseVal",c,d):e(b,"className",c,d))},Za:function(b,c){var d=a.a.c(c);if(null===d||d===n)d="";var e=a.f.firstChild(b);!e||3!=e.nodeType||a.f.nextSibling(e)?a.f.da(b,[b.ownerDocument.createTextNode(d)]):e.data=d;a.a.Rc(b)},rc:function(a,b){a.name=b;if(7>=h)try{a.mergeAttributes(u.createElement("<input name='"+
a.name+"'/>"),!1)}catch(c){}},Rc:function(a){9<=h&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},Nc:function(a){if(h){var b=a.style.width;a.style.width=0;a.style.width=b}},hd:function(b,c){b=a.a.c(b);c=a.a.c(c);for(var d=[],e=b;e<=c;e++)d.push(e);return d},V:function(a){for(var b=[],c=0,d=a.length;c<d;c++)b.push(a[c]);return b},Yb:function(a){return g?Symbol(a):a},rd:6===h,sd:7===h,C:h,ec:function(b,c){for(var d=a.a.V(b.getElementsByTagName("input")).concat(a.a.V(b.getElementsByTagName("textarea"))),
e="string"==typeof c?function(a){return a.name===c}:function(a){return c.test(a.name)},h=[],m=d.length-1;0<=m;m--)e(d[m])&&h.push(d[m]);return h},ed:function(b){return"string"==typeof b&&(b=a.a.$a(b))?F&&F.parse?F.parse(b):(new Function("return "+b))():null},Eb:function(b,c,d){if(!F||!F.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");
return F.stringify(a.a.c(b),c,d)},fd:function(c,d,e){e=e||{};var h=e.params||{},m=e.includeFields||this.cc,l=c;if("object"==typeof c&&"form"===a.a.A(c))for(var l=c.action,f=m.length-1;0<=f;f--)for(var g=a.a.ec(c,m[f]),k=g.length-1;0<=k;k--)h[g[k].name]=g[k].value;d=a.a.c(d);var r=u.createElement("form");r.style.display="none";r.action=l;r.method="post";for(var n in d)c=u.createElement("input"),c.type="hidden",c.name=n,c.value=a.a.Eb(a.a.c(d[n])),r.appendChild(c);b(h,function(a,b){var c=u.createElement("input");
c.type="hidden";c.name=a;c.value=b;r.appendChild(c)});u.body.appendChild(r);e.submitter?e.submitter(r):r.submit();setTimeout(function(){r.parentNode.removeChild(r)},0)}}}();a.b("utils",a.a);a.b("utils.arrayForEach",a.a.q);a.b("utils.arrayFirst",a.a.Sb);a.b("utils.arrayFilter",a.a.Ka);a.b("utils.arrayGetDistinctValues",a.a.Tb);a.b("utils.arrayIndexOf",a.a.o);a.b("utils.arrayMap",a.a.fb);a.b("utils.arrayPushAll",a.a.ra);a.b("utils.arrayRemoveItem",a.a.La);a.b("utils.extend",a.a.extend);a.b("utils.fieldsIncludedWithJsonPost",
a.a.cc);a.b("utils.getFormFields",a.a.ec);a.b("utils.peekObservable",a.a.zb);a.b("utils.postJson",a.a.fd);a.b("utils.parseJson",a.a.ed);a.b("utils.registerEventHandler",a.a.p);a.b("utils.stringifyJson",a.a.Eb);a.b("utils.range",a.a.hd);a.b("utils.toggleDomNodeCssClass",a.a.bb);a.b("utils.triggerEvent",a.a.Da);a.b("utils.unwrapObservable",a.a.c);a.b("utils.objectForEach",a.a.D);a.b("utils.addOrRemoveItem",a.a.pa);a.b("utils.setTextContent",a.a.Za);a.b("unwrap",a.a.c);Function.prototype.bind||(Function.prototype.bind=
function(a){var c=this;if(1===arguments.length)return function(){return c.apply(a,arguments)};var d=Array.prototype.slice.call(arguments,1);return function(){var e=d.slice(0);e.push.apply(e,arguments);return c.apply(a,e)}});a.a.e=new function(){function a(b,g){var k=b[d];if(!k||"null"===k||!e[k]){if(!g)return n;k=b[d]="ko"+c++;e[k]={}}return e[k]}var c=0,d="__ko__"+(new Date).getTime(),e={};return{get:function(c,d){var e=a(c,!1);return e===n?n:e[d]},set:function(c,d,e){if(e!==n||a(c,!1)!==n)a(c,!0)[d]=
e},clear:function(a){var b=a[d];return b?(delete e[b],a[d]=null,!0):!1},I:function(){return c++ +d}}};a.b("utils.domData",a.a.e);a.b("utils.domData.clear",a.a.e.clear);a.a.F=new function(){function b(b,c){var e=a.a.e.get(b,d);e===n&&c&&(e=[],a.a.e.set(b,d,e));return e}function c(d){var e=b(d,!1);if(e)for(var e=e.slice(0),l=0;l<e.length;l++)e[l](d);a.a.e.clear(d);a.a.F.cleanExternalData(d);if(f[d.nodeType])for(e=d.firstChild;d=e;)e=d.nextSibling,8===d.nodeType&&c(d)}var d=a.a.e.I(),e={1:!0,8:!0,9:!0},
f={1:!0,9:!0};return{oa:function(a,c){if("function"!=typeof c)throw Error("Callback must be a function");b(a,!0).push(c)},pc:function(c,e){var l=b(c,!1);l&&(a.a.La(l,e),0==l.length&&a.a.e.set(c,d,n))},$:function(b){if(e[b.nodeType]&&(c(b),f[b.nodeType])){var d=[];a.a.ra(d,b.getElementsByTagName("*"));for(var l=0,m=d.length;l<m;l++)c(d[l])}return b},removeNode:function(b){a.$(b);b.parentNode&&b.parentNode.removeChild(b)},cleanExternalData:function(a){v&&"function"==typeof v.cleanData&&v.cleanData([a])}}};
a.$=a.a.F.$;a.removeNode=a.a.F.removeNode;a.b("cleanNode",a.$);a.b("removeNode",a.removeNode);a.b("utils.domNodeDisposal",a.a.F);a.b("utils.domNodeDisposal.addDisposeCallback",a.a.F.oa);a.b("utils.domNodeDisposal.removeDisposeCallback",a.a.F.pc);(function(){var b=[0,"",""],c=[1,"<table>","</table>"],d=[3,"<table><tbody><tr>","</tr></tbody></table>"],e=[1,"<select multiple='multiple'>","</select>"],f={thead:c,tbody:c,tfoot:c,tr:[2,"<table><tbody>","</tbody></table>"],td:d,th:d,option:e,optgroup:e},
g=8>=a.a.C;a.a.ma=function(c,d){var e;if(v)if(v.parseHTML)e=v.parseHTML(c,d)||[];else{if((e=v.clean([c],d))&&e[0]){for(var h=e[0];h.parentNode&&11!==h.parentNode.nodeType;)h=h.parentNode;h.parentNode&&h.parentNode.removeChild(h)}}else{(e=d)||(e=u);var h=e.parentWindow||e.defaultView||x,r=a.a.$a(c).toLowerCase(),q=e.createElement("div"),p;p=(r=r.match(/^<([a-z]+)[ >]/))&&f[r[1]]||b;r=p[0];p="ignored<div>"+p[1]+c+p[2]+"</div>";"function"==typeof h.innerShiv?q.appendChild(h.innerShiv(p)):(g&&e.appendChild(q),
q.innerHTML=p,g&&q.parentNode.removeChild(q));for(;r--;)q=q.lastChild;e=a.a.V(q.lastChild.childNodes)}return e};a.a.Cb=function(b,c){a.a.ob(b);c=a.a.c(c);if(null!==c&&c!==n)if("string"!=typeof c&&(c=c.toString()),v)v(b).html(c);else for(var d=a.a.ma(c,b.ownerDocument),e=0;e<d.length;e++)b.appendChild(d[e])}})();a.b("utils.parseHtmlFragment",a.a.ma);a.b("utils.setHtml",a.a.Cb);a.M=function(){function b(c,e){if(c)if(8==c.nodeType){var f=a.M.lc(c.nodeValue);null!=f&&e.push({Lc:c,cd:f})}else if(1==c.nodeType)for(var f=
0,g=c.childNodes,k=g.length;f<k;f++)b(g[f],e)}var c={};return{wb:function(a){if("function"!=typeof a)throw Error("You can only pass a function to ko.memoization.memoize()");var b=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);c[b]=a;return"\x3c!--[ko_memo:"+b+"]--\x3e"},xc:function(a,b){var f=c[a];if(f===n)throw Error("Couldn't find any memo with ID "+a+". Perhaps it's already been unmemoized.");try{return f.apply(null,b||[]),
!0}finally{delete c[a]}},yc:function(c,e){var f=[];b(c,f);for(var g=0,k=f.length;g<k;g++){var l=f[g].Lc,m=[l];e&&a.a.ra(m,e);a.M.xc(f[g].cd,m);l.nodeValue="";l.parentNode&&l.parentNode.removeChild(l)}},lc:function(a){return(a=a.match(/^\[ko_memo\:(.*?)\]$/))?a[1]:null}}}();a.b("memoization",a.M);a.b("memoization.memoize",a.M.wb);a.b("memoization.unmemoize",a.M.xc);a.b("memoization.parseMemoText",a.M.lc);a.b("memoization.unmemoizeDomNodeAndDescendants",a.M.yc);a.Y=function(){function b(){if(e)for(var b=
e,c=0,m;g<e;)if(m=d[g++]){if(g>b){if(5E3<=++c){g=e;a.a.$b(Error("'Too much recursion' after processing "+c+" task groups."));break}b=e}try{m()}catch(h){a.a.$b(h)}}}function c(){b();g=e=d.length=0}var d=[],e=0,f=1,g=0;return{scheduler:x.MutationObserver?function(a){var b=u.createElement("div");(new MutationObserver(a)).observe(b,{attributes:!0});return function(){b.classList.toggle("foo")}}(c):u&&"onreadystatechange"in u.createElement("script")?function(a){var b=u.createElement("script");b.onreadystatechange=
function(){b.onreadystatechange=null;u.documentElement.removeChild(b);b=null;a()};u.documentElement.appendChild(b)}:function(a){setTimeout(a,0)},Wa:function(b){e||a.Y.scheduler(c);d[e++]=b;return f++},cancel:function(a){a-=f-e;a>=g&&a<e&&(d[a]=null)},resetForTesting:function(){var a=e-g;g=e=d.length=0;return a},md:b}}();a.b("tasks",a.Y);a.b("tasks.schedule",a.Y.Wa);a.b("tasks.runEarly",a.Y.md);a.ya={throttle:function(b,c){b.throttleEvaluation=c;var d=null;return a.B({read:b,write:function(e){clearTimeout(d);
d=a.a.setTimeout(function(){b(e)},c)}})},rateLimit:function(a,c){var d,e,f;"number"==typeof c?d=c:(d=c.timeout,e=c.method);a.cb=!1;f="notifyWhenChangesStop"==e?V:U;a.Ta(function(a){return f(a,d)})},deferred:function(b,c){if(!0!==c)throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");b.cb||(b.cb=!0,b.Ta(function(c){var e;return function(){a.Y.cancel(e);e=a.Y.Wa(c);b.notifySubscribers(n,"dirty")}}))},notify:function(a,c){a.equalityComparer=
"always"==c?null:J}};var T={undefined:1,"boolean":1,number:1,string:1};a.b("extenders",a.ya);a.vc=function(b,c,d){this.ia=b;this.gb=c;this.Kc=d;this.R=!1;a.G(this,"dispose",this.k)};a.vc.prototype.k=function(){this.R=!0;this.Kc()};a.J=function(){a.a.Ya(this,D);D.rb(this)};var I="change",D={rb:function(a){a.K={};a.Nb=1},X:function(b,c,d){var e=this;d=d||I;var f=new a.vc(e,c?b.bind(c):b,function(){a.a.La(e.K[d],f);e.Ia&&e.Ia(d)});e.sa&&e.sa(d);e.K[d]||(e.K[d]=[]);e.K[d].push(f);return f},notifySubscribers:function(b,
c){c=c||I;c===I&&this.zc();if(this.Pa(c))try{a.l.Ub();for(var d=this.K[c].slice(0),e=0,f;f=d[e];++e)f.R||f.gb(b)}finally{a.l.end()}},Na:function(){return this.Nb},Uc:function(a){return this.Na()!==a},zc:function(){++this.Nb},Ta:function(b){var c=this,d=a.H(c),e,f,g;c.Ha||(c.Ha=c.notifySubscribers,c.notifySubscribers=W);var k=b(function(){c.Mb=!1;d&&g===c&&(g=c());e=!1;c.tb(f,g)&&c.Ha(f=g)});c.Lb=function(a){c.Mb=e=!0;g=a;k()};c.Kb=function(a){e||(f=a,c.Ha(a,"beforeChange"))}},Pa:function(a){return this.K[a]&&
this.K[a].length},Sc:function(b){if(b)return this.K[b]&&this.K[b].length||0;var c=0;a.a.D(this.K,function(a,b){"dirty"!==a&&(c+=b.length)});return c},tb:function(a,c){return!this.equalityComparer||!this.equalityComparer(a,c)},extend:function(b){var c=this;b&&a.a.D(b,function(b,e){var f=a.ya[b];"function"==typeof f&&(c=f(c,e)||c)});return c}};a.G(D,"subscribe",D.X);a.G(D,"extend",D.extend);a.G(D,"getSubscriptionsCount",D.Sc);a.a.ka&&a.a.Xa(D,Function.prototype);a.J.fn=D;a.hc=function(a){return null!=
a&&"function"==typeof a.X&&"function"==typeof a.notifySubscribers};a.b("subscribable",a.J);a.b("isSubscribable",a.hc);a.va=a.l=function(){function b(a){d.push(e);e=a}function c(){e=d.pop()}var d=[],e,f=0;return{Ub:b,end:c,oc:function(b){if(e){if(!a.hc(b))throw Error("Only subscribable things can act as dependencies");e.gb.call(e.Gc,b,b.Cc||(b.Cc=++f))}},w:function(a,d,e){try{return b(),a.apply(d,e||[])}finally{c()}},Aa:function(){if(e)return e.m.Aa()},Sa:function(){if(e)return e.Sa}}}();a.b("computedContext",
a.va);a.b("computedContext.getDependenciesCount",a.va.Aa);a.b("computedContext.isInitial",a.va.Sa);a.b("ignoreDependencies",a.qd=a.l.w);var E=a.a.Yb("_latestValue");a.N=function(b){function c(){if(0<arguments.length)return c.tb(c[E],arguments[0])&&(c.ga(),c[E]=arguments[0],c.fa()),this;a.l.oc(c);return c[E]}c[E]=b;a.a.ka||a.a.extend(c,a.J.fn);a.J.fn.rb(c);a.a.Ya(c,B);a.options.deferUpdates&&a.ya.deferred(c,!0);return c};var B={equalityComparer:J,t:function(){return this[E]},fa:function(){this.notifySubscribers(this[E])},
ga:function(){this.notifySubscribers(this[E],"beforeChange")}};a.a.ka&&a.a.Xa(B,a.J.fn);var H=a.N.gd="__ko_proto__";B[H]=a.N;a.Oa=function(b,c){return null===b||b===n||b[H]===n?!1:b[H]===c?!0:a.Oa(b[H],c)};a.H=function(b){return a.Oa(b,a.N)};a.Ba=function(b){return"function"==typeof b&&b[H]===a.N||"function"==typeof b&&b[H]===a.B&&b.Vc?!0:!1};a.b("observable",a.N);a.b("isObservable",a.H);a.b("isWriteableObservable",a.Ba);a.b("isWritableObservable",a.Ba);a.b("observable.fn",B);a.G(B,"peek",B.t);a.G(B,
"valueHasMutated",B.fa);a.G(B,"valueWillMutate",B.ga);a.la=function(b){b=b||[];if("object"!=typeof b||!("length"in b))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");b=a.N(b);a.a.Ya(b,a.la.fn);return b.extend({trackArrayChanges:!0})};a.la.fn={remove:function(b){for(var c=this.t(),d=[],e="function"!=typeof b||a.H(b)?function(a){return a===b}:b,f=0;f<c.length;f++){var g=c[f];e(g)&&(0===d.length&&this.ga(),d.push(g),c.splice(f,1),f--)}d.length&&
this.fa();return d},removeAll:function(b){if(b===n){var c=this.t(),d=c.slice(0);this.ga();c.splice(0,c.length);this.fa();return d}return b?this.remove(function(c){return 0<=a.a.o(b,c)}):[]},destroy:function(b){var c=this.t(),d="function"!=typeof b||a.H(b)?function(a){return a===b}:b;this.ga();for(var e=c.length-1;0<=e;e--)d(c[e])&&(c[e]._destroy=!0);this.fa()},destroyAll:function(b){return b===n?this.destroy(function(){return!0}):b?this.destroy(function(c){return 0<=a.a.o(b,c)}):[]},indexOf:function(b){var c=
this();return a.a.o(c,b)},replace:function(a,c){var d=this.indexOf(a);0<=d&&(this.ga(),this.t()[d]=c,this.fa())}};a.a.ka&&a.a.Xa(a.la.fn,a.N.fn);a.a.q("pop push reverse shift sort splice unshift".split(" "),function(b){a.la.fn[b]=function(){var a=this.t();this.ga();this.Vb(a,b,arguments);var d=a[b].apply(a,arguments);this.fa();return d===a?this:d}});a.a.q(["slice"],function(b){a.la.fn[b]=function(){var a=this();return a[b].apply(a,arguments)}});a.b("observableArray",a.la);a.ya.trackArrayChanges=function(b,
c){function d(){if(!e){e=!0;var c=b.notifySubscribers;b.notifySubscribers=function(a,b){b&&b!==I||++k;return c.apply(this,arguments)};var d=[].concat(b.t()||[]);f=null;g=b.X(function(c){c=[].concat(c||[]);if(b.Pa("arrayChange")){var e;if(!f||1<k)f=a.a.ib(d,c,b.hb);e=f}d=c;f=null;k=0;e&&e.length&&b.notifySubscribers(e,"arrayChange")})}}b.hb={};c&&"object"==typeof c&&a.a.extend(b.hb,c);b.hb.sparse=!0;if(!b.Vb){var e=!1,f=null,g,k=0,l=b.sa,m=b.Ia;b.sa=function(a){l&&l.call(b,a);"arrayChange"===a&&d()};
b.Ia=function(a){m&&m.call(b,a);"arrayChange"!==a||b.Pa("arrayChange")||(g.k(),e=!1)};b.Vb=function(b,c,d){function m(a,b,c){return l[l.length]={status:a,value:b,index:c}}if(e&&!k){var l=[],g=b.length,t=d.length,G=0;switch(c){case "push":G=g;case "unshift":for(c=0;c<t;c++)m("added",d[c],G+c);break;case "pop":G=g-1;case "shift":g&&m("deleted",b[G],G);break;case "splice":c=Math.min(Math.max(0,0>d[0]?g+d[0]:d[0]),g);for(var g=1===t?g:Math.min(c+(d[1]||0),g),t=c+t-2,G=Math.max(g,t),P=[],n=[],Q=2;c<G;++c,
++Q)c<g&&n.push(m("deleted",b[c],c)),c<t&&P.push(m("added",d[Q],c));a.a.dc(n,P);break;default:return}f=l}}}};var s=a.a.Yb("_state");a.m=a.B=function(b,c,d){function e(){if(0<arguments.length){if("function"===typeof f)f.apply(g.pb,arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");return this}a.l.oc(e);(g.S||g.s&&e.Qa())&&e.aa();return g.T}"object"===typeof b?d=b:(d=d||{},b&&(d.read=
b));if("function"!=typeof d.read)throw Error("Pass a function that returns the value of the ko.computed");var f=d.write,g={T:n,S:!0,Ra:!1,Fb:!1,R:!1,Va:!1,s:!1,jd:d.read,pb:c||d.owner,i:d.disposeWhenNodeIsRemoved||d.i||null,wa:d.disposeWhen||d.wa,mb:null,r:{},L:0,bc:null};e[s]=g;e.Vc="function"===typeof f;a.a.ka||a.a.extend(e,a.J.fn);a.J.fn.rb(e);a.a.Ya(e,z);d.pure?(g.Va=!0,g.s=!0,a.a.extend(e,$)):d.deferEvaluation&&a.a.extend(e,aa);a.options.deferUpdates&&a.ya.deferred(e,!0);g.i&&(g.Fb=!0,g.i.nodeType||
(g.i=null));g.s||d.deferEvaluation||e.aa();g.i&&e.ba()&&a.a.F.oa(g.i,g.mb=function(){e.k()});return e};var z={equalityComparer:J,Aa:function(){return this[s].L},Pb:function(a,c,d){if(this[s].Va&&c===this)throw Error("A 'pure' computed must not be called recursively");this[s].r[a]=d;d.Ga=this[s].L++;d.na=c.Na()},Qa:function(){var a,c,d=this[s].r;for(a in d)if(d.hasOwnProperty(a)&&(c=d[a],c.ia.Uc(c.na)))return!0},bd:function(){this.Fa&&!this[s].Ra&&this.Fa()},ba:function(){return this[s].S||0<this[s].L},
ld:function(){this.Mb||this.ac()},uc:function(a){if(a.cb&&!this[s].i){var c=a.X(this.bd,this,"dirty"),d=a.X(this.ld,this);return{ia:a,k:function(){c.k();d.k()}}}return a.X(this.ac,this)},ac:function(){var b=this,c=b.throttleEvaluation;c&&0<=c?(clearTimeout(this[s].bc),this[s].bc=a.a.setTimeout(function(){b.aa(!0)},c)):b.Fa?b.Fa():b.aa(!0)},aa:function(b){var c=this[s],d=c.wa;if(!c.Ra&&!c.R){if(c.i&&!a.a.nb(c.i)||d&&d()){if(!c.Fb){this.k();return}}else c.Fb=!1;c.Ra=!0;try{this.Qc(b)}finally{c.Ra=!1}c.L||
this.k()}},Qc:function(b){var c=this[s],d=c.Va?n:!c.L,e={Hc:this,Ma:c.r,lb:c.L};a.l.Ub({Gc:e,gb:Y,m:this,Sa:d});c.r={};c.L=0;e=this.Pc(c,e);this.tb(c.T,e)&&(c.s||this.notifySubscribers(c.T,"beforeChange"),c.T=e,c.s?this.zc():b&&this.notifySubscribers(c.T));d&&this.notifySubscribers(c.T,"awake")},Pc:function(b,c){try{var d=b.jd;return b.pb?d.call(b.pb):d()}finally{a.l.end(),c.lb&&!b.s&&a.a.D(c.Ma,X),b.S=!1}},t:function(){var a=this[s];(a.S&&!a.L||a.s&&this.Qa())&&this.aa();return a.T},Ta:function(b){a.J.fn.Ta.call(this,
b);this.Fa=function(){this.Kb(this[s].T);this[s].S=!0;this.Lb(this)}},k:function(){var b=this[s];!b.s&&b.r&&a.a.D(b.r,function(a,b){b.k&&b.k()});b.i&&b.mb&&a.a.F.pc(b.i,b.mb);b.r=null;b.L=0;b.R=!0;b.S=!1;b.s=!1;b.i=null}},$={sa:function(b){var c=this,d=c[s];if(!d.R&&d.s&&"change"==b){d.s=!1;if(d.S||c.Qa())d.r=null,d.L=0,d.S=!0,c.aa();else{var e=[];a.a.D(d.r,function(a,b){e[b.Ga]=a});a.a.q(e,function(a,b){var e=d.r[a],l=c.uc(e.ia);l.Ga=b;l.na=e.na;d.r[a]=l})}d.R||c.notifySubscribers(d.T,"awake")}},
Ia:function(b){var c=this[s];c.R||"change"!=b||this.Pa("change")||(a.a.D(c.r,function(a,b){b.k&&(c.r[a]={ia:b.ia,Ga:b.Ga,na:b.na},b.k())}),c.s=!0,this.notifySubscribers(n,"asleep"))},Na:function(){var b=this[s];b.s&&(b.S||this.Qa())&&this.aa();return a.J.fn.Na.call(this)}},aa={sa:function(a){"change"!=a&&"beforeChange"!=a||this.t()}};a.a.ka&&a.a.Xa(z,a.J.fn);var R=a.N.gd;a.m[R]=a.N;z[R]=a.m;a.Xc=function(b){return a.Oa(b,a.m)};a.Yc=function(b){return a.Oa(b,a.m)&&b[s]&&b[s].Va};a.b("computed",a.m);
a.b("dependentObservable",a.m);a.b("isComputed",a.Xc);a.b("isPureComputed",a.Yc);a.b("computed.fn",z);a.G(z,"peek",z.t);a.G(z,"dispose",z.k);a.G(z,"isActive",z.ba);a.G(z,"getDependenciesCount",z.Aa);a.nc=function(b,c){if("function"===typeof b)return a.m(b,c,{pure:!0});b=a.a.extend({},b);b.pure=!0;return a.m(b,c)};a.b("pureComputed",a.nc);(function(){function b(a,f,g){g=g||new d;a=f(a);if("object"!=typeof a||null===a||a===n||a instanceof RegExp||a instanceof Date||a instanceof String||a instanceof
Number||a instanceof Boolean)return a;var k=a instanceof Array?[]:{};g.save(a,k);c(a,function(c){var d=f(a[c]);switch(typeof d){case "boolean":case "number":case "string":case "function":k[c]=d;break;case "object":case "undefined":var h=g.get(d);k[c]=h!==n?h:b(d,f,g)}});return k}function c(a,b){if(a instanceof Array){for(var c=0;c<a.length;c++)b(c);"function"==typeof a.toJSON&&b("toJSON")}else for(c in a)b(c)}function d(){this.keys=[];this.Ib=[]}a.wc=function(c){if(0==arguments.length)throw Error("When calling ko.toJS, pass the object you want to convert.");
return b(c,function(b){for(var c=0;a.H(b)&&10>c;c++)b=b();return b})};a.toJSON=function(b,c,d){b=a.wc(b);return a.a.Eb(b,c,d)};d.prototype={save:function(b,c){var d=a.a.o(this.keys,b);0<=d?this.Ib[d]=c:(this.keys.push(b),this.Ib.push(c))},get:function(b){b=a.a.o(this.keys,b);return 0<=b?this.Ib[b]:n}}})();a.b("toJS",a.wc);a.b("toJSON",a.toJSON);(function(){a.j={u:function(b){switch(a.a.A(b)){case "option":return!0===b.__ko__hasDomDataOptionValue__?a.a.e.get(b,a.d.options.xb):7>=a.a.C?b.getAttributeNode("value")&&
b.getAttributeNode("value").specified?b.value:b.text:b.value;case "select":return 0<=b.selectedIndex?a.j.u(b.options[b.selectedIndex]):n;default:return b.value}},ha:function(b,c,d){switch(a.a.A(b)){case "option":switch(typeof c){case "string":a.a.e.set(b,a.d.options.xb,n);"__ko__hasDomDataOptionValue__"in b&&delete b.__ko__hasDomDataOptionValue__;b.value=c;break;default:a.a.e.set(b,a.d.options.xb,c),b.__ko__hasDomDataOptionValue__=!0,b.value="number"===typeof c?c:""}break;case "select":if(""===c||
null===c)c=n;for(var e=-1,f=0,g=b.options.length,k;f<g;++f)if(k=a.j.u(b.options[f]),k==c||""==k&&c===n){e=f;break}if(d||0<=e||c===n&&1<b.size)b.selectedIndex=e;break;default:if(null===c||c===n)c="";b.value=c}}}})();a.b("selectExtensions",a.j);a.b("selectExtensions.readValue",a.j.u);a.b("selectExtensions.writeValue",a.j.ha);a.h=function(){function b(b){b=a.a.$a(b);123===b.charCodeAt(0)&&(b=b.slice(1,-1));var c=[],d=b.match(e),r,k=[],p=0;if(d){d.push(",");for(var A=0,y;y=d[A];++A){var t=y.charCodeAt(0);
if(44===t){if(0>=p){c.push(r&&k.length?{key:r,value:k.join("")}:{unknown:r||k.join("")});r=p=0;k=[];continue}}else if(58===t){if(!p&&!r&&1===k.length){r=k.pop();continue}}else 47===t&&A&&1<y.length?(t=d[A-1].match(f))&&!g[t[0]]&&(b=b.substr(b.indexOf(y)+1),d=b.match(e),d.push(","),A=-1,y="/"):40===t||123===t||91===t?++p:41===t||125===t||93===t?--p:r||k.length||34!==t&&39!==t||(y=y.slice(1,-1));k.push(y)}}return c}var c=["true","false","null","undefined"],d=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,
e=RegExp("\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|/(?:[^/\\\\]|\\\\.)*/w*|[^\\s:,/][^,\"'{}()/:[\\]]*[^\\s,\"'{}()/:[\\]]|[^\\s]","g"),f=/[\])"'A-Za-z0-9_$]+$/,g={"in":1,"return":1,"typeof":1},k={};return{ta:[],ea:k,yb:b,Ua:function(e,m){function h(b,e){var m;if(!A){var l=a.getBindingHandler(b);if(l&&l.preprocess&&!(e=l.preprocess(e,b,h)))return;if(l=k[b])m=e,0<=a.a.o(c,m)?m=!1:(l=m.match(d),m=null===l?!1:l[1]?"Object("+l[1]+")"+l[2]:m),l=m;l&&g.push("'"+b+"':function(_z){"+m+"=_z}")}p&&(e=
"function(){return "+e+" }");f.push("'"+b+"':"+e)}m=m||{};var f=[],g=[],p=m.valueAccessors,A=m.bindingParams,y="string"===typeof e?b(e):e;a.a.q(y,function(a){h(a.key||a.unknown,a.value)});g.length&&h("_ko_property_writers","{"+g.join(",")+" }");return f.join(",")},ad:function(a,b){for(var c=0;c<a.length;c++)if(a[c].key==b)return!0;return!1},Ea:function(b,c,d,e,f){if(b&&a.H(b))!a.Ba(b)||f&&b.t()===e||b(e);else if((b=c.get("_ko_property_writers"))&&b[d])b[d](e)}}}();a.b("expressionRewriting",a.h);a.b("expressionRewriting.bindingRewriteValidators",
a.h.ta);a.b("expressionRewriting.parseObjectLiteral",a.h.yb);a.b("expressionRewriting.preProcessBindings",a.h.Ua);a.b("expressionRewriting._twoWayBindings",a.h.ea);a.b("jsonExpressionRewriting",a.h);a.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",a.h.Ua);(function(){function b(a){return 8==a.nodeType&&g.test(f?a.text:a.nodeValue)}function c(a){return 8==a.nodeType&&k.test(f?a.text:a.nodeValue)}function d(a,d){for(var e=a,f=1,l=[];e=e.nextSibling;){if(c(e)&&(f--,0===f))return l;l.push(e);
b(e)&&f++}if(!d)throw Error("Cannot find closing comment tag to match: "+a.nodeValue);return null}function e(a,b){var c=d(a,b);return c?0<c.length?c[c.length-1].nextSibling:a.nextSibling:null}var f=u&&"\x3c!--test--\x3e"===u.createComment("test").text,g=f?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,k=f?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,l={ul:!0,ol:!0};a.f={Z:{},childNodes:function(a){return b(a)?d(a):a.childNodes},xa:function(c){if(b(c)){c=a.f.childNodes(c);for(var d=
0,e=c.length;d<e;d++)a.removeNode(c[d])}else a.a.ob(c)},da:function(c,d){if(b(c)){a.f.xa(c);for(var e=c.nextSibling,f=0,l=d.length;f<l;f++)e.parentNode.insertBefore(d[f],e)}else a.a.da(c,d)},mc:function(a,c){b(a)?a.parentNode.insertBefore(c,a.nextSibling):a.firstChild?a.insertBefore(c,a.firstChild):a.appendChild(c)},gc:function(c,d,e){e?b(c)?c.parentNode.insertBefore(d,e.nextSibling):e.nextSibling?c.insertBefore(d,e.nextSibling):c.appendChild(d):a.f.mc(c,d)},firstChild:function(a){return b(a)?!a.nextSibling||
c(a.nextSibling)?null:a.nextSibling:a.firstChild},nextSibling:function(a){b(a)&&(a=e(a));return a.nextSibling&&c(a.nextSibling)?null:a.nextSibling},Tc:b,pd:function(a){return(a=(f?a.text:a.nodeValue).match(g))?a[1]:null},kc:function(d){if(l[a.a.A(d)]){var h=d.firstChild;if(h){do if(1===h.nodeType){var f;f=h.firstChild;var g=null;if(f){do if(g)g.push(f);else if(b(f)){var k=e(f,!0);k?f=k:g=[f]}else c(f)&&(g=[f]);while(f=f.nextSibling)}if(f=g)for(g=h.nextSibling,k=0;k<f.length;k++)g?d.insertBefore(f[k],
g):d.appendChild(f[k])}while(h=h.nextSibling)}}}}})();a.b("virtualElements",a.f);a.b("virtualElements.allowedBindings",a.f.Z);a.b("virtualElements.emptyNode",a.f.xa);a.b("virtualElements.insertAfter",a.f.gc);a.b("virtualElements.prepend",a.f.mc);a.b("virtualElements.setDomNodeChildren",a.f.da);(function(){a.Q=function(){this.Fc={}};a.a.extend(a.Q.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return null!=b.getAttribute("data-bind")||a.g.getComponentNameForNode(b);case 8:return a.f.Tc(b);
default:return!1}},getBindings:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b):null;return a.g.Ob(d,b,c,!1)},getBindingAccessors:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b,{valueAccessors:!0}):null;return a.g.Ob(d,b,c,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind");case 8:return a.f.pd(b);default:return null}},parseBindingsString:function(b,c,d,e){try{var f=this.Fc,g=b+(e&&e.valueAccessors||
""),k;if(!(k=f[g])){var l,m="with($context){with($data||{}){return{"+a.h.Ua(b,e)+"}}}";l=new Function("$context","$element",m);k=f[g]=l}return k(c,d)}catch(h){throw h.message="Unable to parse bindings.\nBindings value: "+b+"\nMessage: "+h.message,h;}}});a.Q.instance=new a.Q})();a.b("bindingProvider",a.Q);(function(){function b(a){return function(){return a}}function c(a){return a()}function d(b){return a.a.Ca(a.l.w(b),function(a,c){return function(){return b()[c]}})}function e(c,e,h){return"function"===
typeof c?d(c.bind(null,e,h)):a.a.Ca(c,b)}function f(a,b){return d(this.getBindings.bind(this,a,b))}function g(b,c,d){var e,h=a.f.firstChild(c),f=a.Q.instance,m=f.preprocessNode;if(m){for(;e=h;)h=a.f.nextSibling(e),m.call(f,e);h=a.f.firstChild(c)}for(;e=h;)h=a.f.nextSibling(e),k(b,e,d)}function k(b,c,d){var e=!0,h=1===c.nodeType;h&&a.f.kc(c);if(h&&d||a.Q.instance.nodeHasBindings(c))e=m(c,null,b,d).shouldBindDescendants;e&&!r[a.a.A(c)]&&g(b,c,!h)}function l(b){var c=[],d={},e=[];a.a.D(b,function Z(h){if(!d[h]){var f=
a.getBindingHandler(h);f&&(f.after&&(e.push(h),a.a.q(f.after,function(c){if(b[c]){if(-1!==a.a.o(e,c))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+e.join(", "));Z(c)}}),e.length--),c.push({key:h,fc:f}));d[h]=!0}});return c}function m(b,d,e,h){var m=a.a.e.get(b,q);if(!d){if(m)throw Error("You cannot apply bindings multiple times to the same element.");a.a.e.set(b,q,!0)}!m&&h&&a.tc(b,e);var g;if(d&&"function"!==typeof d)g=d;else{var k=a.Q.instance,r=k.getBindingAccessors||
f,p=a.B(function(){(g=d?d(e,b):r.call(k,b,e))&&e.P&&e.P();return g},null,{i:b});g&&p.ba()||(p=null)}var u;if(g){var v=p?function(a){return function(){return c(p()[a])}}:function(a){return g[a]},s=function(){return a.a.Ca(p?p():g,c)};s.get=function(a){return g[a]&&c(v(a))};s.has=function(a){return a in g};h=l(g);a.a.q(h,function(c){var d=c.fc.init,h=c.fc.update,f=c.key;if(8===b.nodeType&&!a.f.Z[f])throw Error("The binding '"+f+"' cannot be used with virtual elements");try{"function"==typeof d&&a.l.w(function(){var a=
d(b,v(f),s,e.$data,e);if(a&&a.controlsDescendantBindings){if(u!==n)throw Error("Multiple bindings ("+u+" and "+f+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");u=f}}),"function"==typeof h&&a.B(function(){h(b,v(f),s,e.$data,e)},null,{i:b})}catch(m){throw m.message='Unable to process binding "'+f+": "+g[f]+'"\nMessage: '+m.message,m;}})}return{shouldBindDescendants:u===n}}function h(b){return b&&b instanceof a.U?b:new a.U(b)}
a.d={};var r={script:!0,textarea:!0,template:!0};a.getBindingHandler=function(b){return a.d[b]};a.U=function(b,c,d,e){var h=this,f="function"==typeof b&&!a.H(b),m,g=a.B(function(){var m=f?b():b,l=a.a.c(m);c?(c.P&&c.P(),a.a.extend(h,c),g&&(h.P=g)):(h.$parents=[],h.$root=l,h.ko=a);h.$rawData=m;h.$data=l;d&&(h[d]=l);e&&e(h,c,l);return h.$data},null,{wa:function(){return m&&!a.a.Qb(m)},i:!0});g.ba()&&(h.P=g,g.equalityComparer=null,m=[],g.Ac=function(b){m.push(b);a.a.F.oa(b,function(b){a.a.La(m,b);m.length||
(g.k(),h.P=g=n)})})};a.U.prototype.createChildContext=function(b,c,d){return new a.U(b,this,c,function(a,b){a.$parentContext=b;a.$parent=b.$data;a.$parents=(b.$parents||[]).slice(0);a.$parents.unshift(a.$parent);d&&d(a)})};a.U.prototype.extend=function(b){return new a.U(this.P||this.$data,this,null,function(c,d){c.$rawData=d.$rawData;a.a.extend(c,"function"==typeof b?b():b)})};var q=a.a.e.I(),p=a.a.e.I();a.tc=function(b,c){if(2==arguments.length)a.a.e.set(b,p,c),c.P&&c.P.Ac(b);else return a.a.e.get(b,
p)};a.Ja=function(b,c,d){1===b.nodeType&&a.f.kc(b);return m(b,c,h(d),!0)};a.Dc=function(b,c,d){d=h(d);return a.Ja(b,e(c,d,b),d)};a.eb=function(a,b){1!==b.nodeType&&8!==b.nodeType||g(h(a),b,!0)};a.Rb=function(a,b){!v&&x.jQuery&&(v=x.jQuery);if(b&&1!==b.nodeType&&8!==b.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");b=b||x.document.body;k(h(a),b,!0)};a.kb=function(b){switch(b.nodeType){case 1:case 8:var c=a.tc(b);if(c)return c;
if(b.parentNode)return a.kb(b.parentNode)}return n};a.Jc=function(b){return(b=a.kb(b))?b.$data:n};a.b("bindingHandlers",a.d);a.b("applyBindings",a.Rb);a.b("applyBindingsToDescendants",a.eb);a.b("applyBindingAccessorsToNode",a.Ja);a.b("applyBindingsToNode",a.Dc);a.b("contextFor",a.kb);a.b("dataFor",a.Jc)})();(function(b){function c(c,e){var m=f.hasOwnProperty(c)?f[c]:b,h;m?m.X(e):(m=f[c]=new a.J,m.X(e),d(c,function(b,d){var e=!(!d||!d.synchronous);g[c]={definition:b,Zc:e};delete f[c];h||e?m.notifySubscribers(b):
a.Y.Wa(function(){m.notifySubscribers(b)})}),h=!0)}function d(a,b){e("getConfig",[a],function(c){c?e("loadComponent",[a,c],function(a){b(a,c)}):b(null,null)})}function e(c,d,f,h){h||(h=a.g.loaders.slice(0));var g=h.shift();if(g){var q=g[c];if(q){var p=!1;if(q.apply(g,d.concat(function(a){p?f(null):null!==a?f(a):e(c,d,f,h)}))!==b&&(p=!0,!g.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.");}else e(c,d,f,h)}else f(null)}
var f={},g={};a.g={get:function(d,e){var f=g.hasOwnProperty(d)?g[d]:b;f?f.Zc?a.l.w(function(){e(f.definition)}):a.Y.Wa(function(){e(f.definition)}):c(d,e)},Xb:function(a){delete g[a]},Jb:e};a.g.loaders=[];a.b("components",a.g);a.b("components.get",a.g.get);a.b("components.clearCachedDefinition",a.g.Xb)})();(function(){function b(b,c,d,e){function g(){0===--y&&e(k)}var k={},y=2,t=d.template;d=d.viewModel;t?f(c,t,function(c){a.g.Jb("loadTemplate",[b,c],function(a){k.template=a;g()})}):g();d?f(c,d,function(c){a.g.Jb("loadViewModel",
[b,c],function(a){k[l]=a;g()})}):g()}function c(a,b,d){if("function"===typeof b)d(function(a){return new b(a)});else if("function"===typeof b[l])d(b[l]);else if("instance"in b){var e=b.instance;d(function(){return e})}else"viewModel"in b?c(a,b.viewModel,d):a("Unknown viewModel value: "+b)}function d(b){switch(a.a.A(b)){case "script":return a.a.ma(b.text);case "textarea":return a.a.ma(b.value);case "template":if(e(b.content))return a.a.ua(b.content.childNodes)}return a.a.ua(b.childNodes)}function e(a){return x.DocumentFragment?
a instanceof DocumentFragment:a&&11===a.nodeType}function f(a,b,c){"string"===typeof b.require?O||x.require?(O||x.require)([b.require],c):a("Uses require, but no AMD loader is present"):c(b)}function g(a){return function(b){throw Error("Component '"+a+"': "+b);}}var k={};a.g.register=function(b,c){if(!c)throw Error("Invalid configuration for "+b);if(a.g.ub(b))throw Error("Component "+b+" is already registered");k[b]=c};a.g.ub=function(a){return k.hasOwnProperty(a)};a.g.od=function(b){delete k[b];
a.g.Xb(b)};a.g.Zb={getConfig:function(a,b){b(k.hasOwnProperty(a)?k[a]:null)},loadComponent:function(a,c,d){var e=g(a);f(e,c,function(c){b(a,e,c,d)})},loadTemplate:function(b,c,f){b=g(b);if("string"===typeof c)f(a.a.ma(c));else if(c instanceof Array)f(c);else if(e(c))f(a.a.V(c.childNodes));else if(c.element)if(c=c.element,x.HTMLElement?c instanceof HTMLElement:c&&c.tagName&&1===c.nodeType)f(d(c));else if("string"===typeof c){var l=u.getElementById(c);l?f(d(l)):b("Cannot find element with ID "+c)}else b("Unknown element type: "+
c);else b("Unknown template value: "+c)},loadViewModel:function(a,b,d){c(g(a),b,d)}};var l="createViewModel";a.b("components.register",a.g.register);a.b("components.isRegistered",a.g.ub);a.b("components.unregister",a.g.od);a.b("components.defaultLoader",a.g.Zb);a.g.loaders.push(a.g.Zb);a.g.Bc=k})();(function(){function b(b,e){var f=b.getAttribute("params");if(f){var f=c.parseBindingsString(f,e,b,{valueAccessors:!0,bindingParams:!0}),f=a.a.Ca(f,function(c){return a.m(c,null,{i:b})}),g=a.a.Ca(f,function(c){var e=
c.t();return c.ba()?a.m({read:function(){return a.a.c(c())},write:a.Ba(e)&&function(a){c()(a)},i:b}):e});g.hasOwnProperty("$raw")||(g.$raw=f);return g}return{$raw:{}}}a.g.getComponentNameForNode=function(b){var c=a.a.A(b);if(a.g.ub(c)&&(-1!=c.indexOf("-")||"[object HTMLUnknownElement]"==""+b||8>=a.a.C&&b.tagName===c))return c};a.g.Ob=function(c,e,f,g){if(1===e.nodeType){var k=a.g.getComponentNameForNode(e);if(k){c=c||{};if(c.component)throw Error('Cannot use the "component" binding on a custom element matching a component');
var l={name:k,params:b(e,f)};c.component=g?function(){return l}:l}}return c};var c=new a.Q;9>a.a.C&&(a.g.register=function(a){return function(b){u.createElement(b);return a.apply(this,arguments)}}(a.g.register),u.createDocumentFragment=function(b){return function(){var c=b(),f=a.g.Bc,g;for(g in f)f.hasOwnProperty(g)&&c.createElement(g);return c}}(u.createDocumentFragment))})();(function(b){function c(b,c,d){c=c.template;if(!c)throw Error("Component '"+b+"' has no template");b=a.a.ua(c);a.f.da(d,b)}
function d(a,b,c,d){var e=a.createViewModel;return e?e.call(a,d,{element:b,templateNodes:c}):d}var e=0;a.d.component={init:function(f,g,k,l,m){function h(){var a=r&&r.dispose;"function"===typeof a&&a.call(r);q=r=null}var r,q,p=a.a.V(a.f.childNodes(f));a.a.F.oa(f,h);a.m(function(){var l=a.a.c(g()),k,t;"string"===typeof l?k=l:(k=a.a.c(l.name),t=a.a.c(l.params));if(!k)throw Error("No component name specified");var n=q=++e;a.g.get(k,function(e){if(q===n){h();if(!e)throw Error("Unknown component '"+k+
"'");c(k,e,f);var g=d(e,f,p,t);e=m.createChildContext(g,b,function(a){a.$component=g;a.$componentTemplateNodes=p});r=g;a.eb(e,f)}})},null,{i:f});return{controlsDescendantBindings:!0}}};a.f.Z.component=!0})();var S={"class":"className","for":"htmlFor"};a.d.attr={update:function(b,c){var d=a.a.c(c())||{};a.a.D(d,function(c,d){d=a.a.c(d);var g=!1===d||null===d||d===n;g&&b.removeAttribute(c);8>=a.a.C&&c in S?(c=S[c],g?b.removeAttribute(c):b[c]=d):g||b.setAttribute(c,d.toString());"name"===c&&a.a.rc(b,
g?"":d.toString())})}};(function(){a.d.checked={after:["value","attr"],init:function(b,c,d){function e(){var e=b.checked,f=p?g():e;if(!a.va.Sa()&&(!l||e)){var m=a.l.w(c);if(h){var k=r?m.t():m;q!==f?(e&&(a.a.pa(k,f,!0),a.a.pa(k,q,!1)),q=f):a.a.pa(k,f,e);r&&a.Ba(m)&&m(k)}else a.h.Ea(m,d,"checked",f,!0)}}function f(){var d=a.a.c(c());b.checked=h?0<=a.a.o(d,g()):k?d:g()===d}var g=a.nc(function(){return d.has("checkedValue")?a.a.c(d.get("checkedValue")):d.has("value")?a.a.c(d.get("value")):b.value}),k=
"checkbox"==b.type,l="radio"==b.type;if(k||l){var m=c(),h=k&&a.a.c(m)instanceof Array,r=!(h&&m.push&&m.splice),q=h?g():n,p=l||h;l&&!b.name&&a.d.uniqueName.init(b,function(){return!0});a.m(e,null,{i:b});a.a.p(b,"click",e);a.m(f,null,{i:b});m=n}}};a.h.ea.checked=!0;a.d.checkedValue={update:function(b,c){b.value=a.a.c(c())}}})();a.d.css={update:function(b,c){var d=a.a.c(c());null!==d&&"object"==typeof d?a.a.D(d,function(c,d){d=a.a.c(d);a.a.bb(b,c,d)}):(d=a.a.$a(String(d||"")),a.a.bb(b,b.__ko__cssValue,
!1),b.__ko__cssValue=d,a.a.bb(b,d,!0))}};a.d.enable={update:function(b,c){var d=a.a.c(c());d&&b.disabled?b.removeAttribute("disabled"):d||b.disabled||(b.disabled=!0)}};a.d.disable={update:function(b,c){a.d.enable.update(b,function(){return!a.a.c(c())})}};a.d.event={init:function(b,c,d,e,f){var g=c()||{};a.a.D(g,function(g){"string"==typeof g&&a.a.p(b,g,function(b){var m,h=c()[g];if(h){try{var r=a.a.V(arguments);e=f.$data;r.unshift(e);m=h.apply(e,r)}finally{!0!==m&&(b.preventDefault?b.preventDefault():
b.returnValue=!1)}!1===d.get(g+"Bubble")&&(b.cancelBubble=!0,b.stopPropagation&&b.stopPropagation())}})})}};a.d.foreach={ic:function(b){return function(){var c=b(),d=a.a.zb(c);if(!d||"number"==typeof d.length)return{foreach:c,templateEngine:a.W.sb};a.a.c(c);return{foreach:d.data,as:d.as,includeDestroyed:d.includeDestroyed,afterAdd:d.afterAdd,beforeRemove:d.beforeRemove,afterRender:d.afterRender,beforeMove:d.beforeMove,afterMove:d.afterMove,templateEngine:a.W.sb}}},init:function(b,c){return a.d.template.init(b,
a.d.foreach.ic(c))},update:function(b,c,d,e,f){return a.d.template.update(b,a.d.foreach.ic(c),d,e,f)}};a.h.ta.foreach=!1;a.f.Z.foreach=!0;a.d.hasfocus={init:function(b,c,d){function e(e){b.__ko_hasfocusUpdating=!0;var f=b.ownerDocument;if("activeElement"in f){var g;try{g=f.activeElement}catch(h){g=f.body}e=g===b}f=c();a.h.Ea(f,d,"hasfocus",e,!0);b.__ko_hasfocusLastValue=e;b.__ko_hasfocusUpdating=!1}var f=e.bind(null,!0),g=e.bind(null,!1);a.a.p(b,"focus",f);a.a.p(b,"focusin",f);a.a.p(b,"blur",g);a.a.p(b,
"focusout",g)},update:function(b,c){var d=!!a.a.c(c());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===d||(d?b.focus():b.blur(),!d&&b.__ko_hasfocusLastValue&&b.ownerDocument.body.focus(),a.l.w(a.a.Da,null,[b,d?"focusin":"focusout"]))}};a.h.ea.hasfocus=!0;a.d.hasFocus=a.d.hasfocus;a.h.ea.hasFocus=!0;a.d.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.Cb(b,c())}};K("if");K("ifnot",!1,!0);K("with",!0,!1,function(a,c){return a.createChildContext(c)});var L={};
a.d.options={init:function(b){if("select"!==a.a.A(b))throw Error("options binding applies only to SELECT elements");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,c,d){function e(){return a.a.Ka(b.options,function(a){return a.selected})}function f(a,b,c){var d=typeof b;return"function"==d?b(a):"string"==d?a[b]:c}function g(c,e){if(A&&h)a.j.ha(b,a.a.c(d.get("value")),!0);else if(p.length){var f=0<=a.a.o(p,a.j.u(e[0]));a.a.sc(e[0],f);A&&!f&&a.l.w(a.a.Da,null,[b,
"change"])}}var k=b.multiple,l=0!=b.length&&k?b.scrollTop:null,m=a.a.c(c()),h=d.get("valueAllowUnset")&&d.has("value"),r=d.get("optionsIncludeDestroyed");c={};var q,p=[];h||(k?p=a.a.fb(e(),a.j.u):0<=b.selectedIndex&&p.push(a.j.u(b.options[b.selectedIndex])));m&&("undefined"==typeof m.length&&(m=[m]),q=a.a.Ka(m,function(b){return r||b===n||null===b||!a.a.c(b._destroy)}),d.has("optionsCaption")&&(m=a.a.c(d.get("optionsCaption")),null!==m&&m!==n&&q.unshift(L)));var A=!1;c.beforeRemove=function(a){b.removeChild(a)};
m=g;d.has("optionsAfterRender")&&"function"==typeof d.get("optionsAfterRender")&&(m=function(b,c){g(0,c);a.l.w(d.get("optionsAfterRender"),null,[c[0],b!==L?b:n])});a.a.Bb(b,q,function(c,e,g){g.length&&(p=!h&&g[0].selected?[a.j.u(g[0])]:[],A=!0);e=b.ownerDocument.createElement("option");c===L?(a.a.Za(e,d.get("optionsCaption")),a.j.ha(e,n)):(g=f(c,d.get("optionsValue"),c),a.j.ha(e,a.a.c(g)),c=f(c,d.get("optionsText"),g),a.a.Za(e,c));return[e]},c,m);a.l.w(function(){h?a.j.ha(b,a.a.c(d.get("value")),
!0):(k?p.length&&e().length<p.length:p.length&&0<=b.selectedIndex?a.j.u(b.options[b.selectedIndex])!==p[0]:p.length||0<=b.selectedIndex)&&a.a.Da(b,"change")});a.a.Nc(b);l&&20<Math.abs(l-b.scrollTop)&&(b.scrollTop=l)}};a.d.options.xb=a.a.e.I();a.d.selectedOptions={after:["options","foreach"],init:function(b,c,d){a.a.p(b,"change",function(){var e=c(),f=[];a.a.q(b.getElementsByTagName("option"),function(b){b.selected&&f.push(a.j.u(b))});a.h.Ea(e,d,"selectedOptions",f)})},update:function(b,c){if("select"!=
a.a.A(b))throw Error("values binding applies only to SELECT elements");var d=a.a.c(c()),e=b.scrollTop;d&&"number"==typeof d.length&&a.a.q(b.getElementsByTagName("option"),function(b){var c=0<=a.a.o(d,a.j.u(b));b.selected!=c&&a.a.sc(b,c)});b.scrollTop=e}};a.h.ea.selectedOptions=!0;a.d.style={update:function(b,c){var d=a.a.c(c()||{});a.a.D(d,function(c,d){d=a.a.c(d);if(null===d||d===n||!1===d)d="";b.style[c]=d})}};a.d.submit={init:function(b,c,d,e,f){if("function"!=typeof c())throw Error("The value for a submit binding must be a function");
a.a.p(b,"submit",function(a){var d,e=c();try{d=e.call(f.$data,b)}finally{!0!==d&&(a.preventDefault?a.preventDefault():a.returnValue=!1)}})}};a.d.text={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.Za(b,c())}};a.f.Z.text=!0;(function(){if(x&&x.navigator)var b=function(a){if(a)return parseFloat(a[1])},c=x.opera&&x.opera.version&&parseInt(x.opera.version()),d=x.navigator.userAgent,e=b(d.match(/^(?:(?!chrome).)*version\/([^ ]*) safari/i)),f=b(d.match(/Firefox\/([^ ]*)/));
if(10>a.a.C)var g=a.a.e.I(),k=a.a.e.I(),l=function(b){var c=this.activeElement;(c=c&&a.a.e.get(c,k))&&c(b)},m=function(b,c){var d=b.ownerDocument;a.a.e.get(d,g)||(a.a.e.set(d,g,!0),a.a.p(d,"selectionchange",l));a.a.e.set(b,k,c)};a.d.textInput={init:function(b,d,g){function l(c,d){a.a.p(b,c,d)}function k(){var c=a.a.c(d());if(null===c||c===n)c="";v!==n&&c===v?a.a.setTimeout(k,4):b.value!==c&&(u=c,b.value=c)}function y(){s||(v=b.value,s=a.a.setTimeout(t,4))}function t(){clearTimeout(s);v=s=n;var c=
b.value;u!==c&&(u=c,a.h.Ea(d(),g,"textInput",c))}var u=b.value,s,v,x=9==a.a.C?y:t;10>a.a.C?(l("propertychange",function(a){"value"===a.propertyName&&x(a)}),8==a.a.C&&(l("keyup",t),l("keydown",t)),8<=a.a.C&&(m(b,x),l("dragend",y))):(l("input",t),5>e&&"textarea"===a.a.A(b)?(l("keydown",y),l("paste",y),l("cut",y)):11>c?l("keydown",y):4>f&&(l("DOMAutoComplete",t),l("dragdrop",t),l("drop",t)));l("change",t);a.m(k,null,{i:b})}};a.h.ea.textInput=!0;a.d.textinput={preprocess:function(a,b,c){c("textInput",
a)}}})();a.d.uniqueName={init:function(b,c){if(c()){var d="ko_unique_"+ ++a.d.uniqueName.Ic;a.a.rc(b,d)}}};a.d.uniqueName.Ic=0;a.d.value={after:["options","foreach"],init:function(b,c,d){if("input"!=b.tagName.toLowerCase()||"checkbox"!=b.type&&"radio"!=b.type){var e=["change"],f=d.get("valueUpdate"),g=!1,k=null;f&&("string"==typeof f&&(f=[f]),a.a.ra(e,f),e=a.a.Tb(e));var l=function(){k=null;g=!1;var e=c(),f=a.j.u(b);a.h.Ea(e,d,"value",f)};!a.a.C||"input"!=b.tagName.toLowerCase()||"text"!=b.type||
"off"==b.autocomplete||b.form&&"off"==b.form.autocomplete||-1!=a.a.o(e,"propertychange")||(a.a.p(b,"propertychange",function(){g=!0}),a.a.p(b,"focus",function(){g=!1}),a.a.p(b,"blur",function(){g&&l()}));a.a.q(e,function(c){var d=l;a.a.nd(c,"after")&&(d=function(){k=a.j.u(b);a.a.setTimeout(l,0)},c=c.substring(5));a.a.p(b,c,d)});var m=function(){var e=a.a.c(c()),f=a.j.u(b);if(null!==k&&e===k)a.a.setTimeout(m,0);else if(e!==f)if("select"===a.a.A(b)){var g=d.get("valueAllowUnset"),f=function(){a.j.ha(b,
e,g)};f();g||e===a.j.u(b)?a.a.setTimeout(f,0):a.l.w(a.a.Da,null,[b,"change"])}else a.j.ha(b,e)};a.m(m,null,{i:b})}else a.Ja(b,{checkedValue:c})},update:function(){}};a.h.ea.value=!0;a.d.visible={update:function(b,c){var d=a.a.c(c()),e="none"!=b.style.display;d&&!e?b.style.display="":!d&&e&&(b.style.display="none")}};(function(b){a.d[b]={init:function(c,d,e,f,g){return a.d.event.init.call(this,c,function(){var a={};a[b]=d();return a},e,f,g)}}})("click");a.O=function(){};a.O.prototype.renderTemplateSource=
function(){throw Error("Override renderTemplateSource");};a.O.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock");};a.O.prototype.makeTemplateSource=function(b,c){if("string"==typeof b){c=c||u;var d=c.getElementById(b);if(!d)throw Error("Cannot find template with ID "+b);return new a.v.n(d)}if(1==b.nodeType||8==b.nodeType)return new a.v.qa(b);throw Error("Unknown template type: "+b);};a.O.prototype.renderTemplate=function(a,c,d,e){a=this.makeTemplateSource(a,
e);return this.renderTemplateSource(a,c,d,e)};a.O.prototype.isTemplateRewritten=function(a,c){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(a,c).data("isRewritten")};a.O.prototype.rewriteTemplate=function(a,c,d){a=this.makeTemplateSource(a,d);c=c(a.text());a.text(c);a.data("isRewritten",!0)};a.b("templateEngine",a.O);a.Gb=function(){function b(b,c,d,k){b=a.h.yb(b);for(var l=a.h.ta,m=0;m<b.length;m++){var h=b[m].key;if(l.hasOwnProperty(h)){var r=l[h];if("function"===typeof r){if(h=
r(b[m].value))throw Error(h);}else if(!r)throw Error("This template engine does not support the '"+h+"' binding within its templates");}}d="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+a.h.Ua(b,{valueAccessors:!0})+" } })()},'"+d.toLowerCase()+"')";return k.createJavaScriptEvaluatorBlock(d)+c}var c=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,d=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{Oc:function(b,
c,d){c.isTemplateRewritten(b,d)||c.rewriteTemplate(b,function(b){return a.Gb.dd(b,c)},d)},dd:function(a,f){return a.replace(c,function(a,c,d,e,h){return b(h,c,d,f)}).replace(d,function(a,c){return b(c,"\x3c!-- ko --\x3e","#comment",f)})},Ec:function(b,c){return a.M.wb(function(d,k){var l=d.nextSibling;l&&l.nodeName.toLowerCase()===c&&a.Ja(l,b,k)})}}}();a.b("__tr_ambtns",a.Gb.Ec);(function(){a.v={};a.v.n=function(b){if(this.n=b){var c=a.a.A(b);this.ab="script"===c?1:"textarea"===c?2:"template"==c&&
b.content&&11===b.content.nodeType?3:4}};a.v.n.prototype.text=function(){var b=1===this.ab?"text":2===this.ab?"value":"innerHTML";if(0==arguments.length)return this.n[b];var c=arguments[0];"innerHTML"===b?a.a.Cb(this.n,c):this.n[b]=c};var b=a.a.e.I()+"_";a.v.n.prototype.data=function(c){if(1===arguments.length)return a.a.e.get(this.n,b+c);a.a.e.set(this.n,b+c,arguments[1])};var c=a.a.e.I();a.v.n.prototype.nodes=function(){var b=this.n;if(0==arguments.length)return(a.a.e.get(b,c)||{}).jb||(3===this.ab?
b.content:4===this.ab?b:n);a.a.e.set(b,c,{jb:arguments[0]})};a.v.qa=function(a){this.n=a};a.v.qa.prototype=new a.v.n;a.v.qa.prototype.text=function(){if(0==arguments.length){var b=a.a.e.get(this.n,c)||{};b.Hb===n&&b.jb&&(b.Hb=b.jb.innerHTML);return b.Hb}a.a.e.set(this.n,c,{Hb:arguments[0]})};a.b("templateSources",a.v);a.b("templateSources.domElement",a.v.n);a.b("templateSources.anonymousTemplate",a.v.qa)})();(function(){function b(b,c,d){var e;for(c=a.f.nextSibling(c);b&&(e=b)!==c;)b=a.f.nextSibling(e),
d(e,b)}function c(c,d){if(c.length){var e=c[0],f=c[c.length-1],g=e.parentNode,k=a.Q.instance,n=k.preprocessNode;if(n){b(e,f,function(a,b){var c=a.previousSibling,d=n.call(k,a);d&&(a===e&&(e=d[0]||b),a===f&&(f=d[d.length-1]||c))});c.length=0;if(!e)return;e===f?c.push(e):(c.push(e,f),a.a.za(c,g))}b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.Rb(d,b)});b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.M.yc(b,[d])});a.a.za(c,g)}}function d(a){return a.nodeType?a:0<a.length?a[0]:null}function e(b,
e,f,k,q){q=q||{};var p=(b&&d(b)||f||{}).ownerDocument,n=q.templateEngine||g;a.Gb.Oc(f,n,p);f=n.renderTemplate(f,k,q,p);if("number"!=typeof f.length||0<f.length&&"number"!=typeof f[0].nodeType)throw Error("Template engine must return an array of DOM nodes");p=!1;switch(e){case "replaceChildren":a.f.da(b,f);p=!0;break;case "replaceNode":a.a.qc(b,f);p=!0;break;case "ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+e);}p&&(c(f,k),q.afterRender&&a.l.w(q.afterRender,null,[f,k.$data]));
return f}function f(b,c,d){return a.H(b)?b():"function"===typeof b?b(c,d):b}var g;a.Db=function(b){if(b!=n&&!(b instanceof a.O))throw Error("templateEngine must inherit from ko.templateEngine");g=b};a.Ab=function(b,c,h,k,q){h=h||{};if((h.templateEngine||g)==n)throw Error("Set a template engine before calling renderTemplate");q=q||"replaceChildren";if(k){var p=d(k);return a.B(function(){var g=c&&c instanceof a.U?c:new a.U(a.a.c(c)),n=f(b,g.$data,g),g=e(k,q,n,g,h);"replaceNode"==q&&(k=g,p=d(k))},null,
{wa:function(){return!p||!a.a.nb(p)},i:p&&"replaceNode"==q?p.parentNode:p})}return a.M.wb(function(d){a.Ab(b,c,h,d,"replaceNode")})};a.kd=function(b,d,g,k,q){function p(a,b){c(b,s);g.afterRender&&g.afterRender(b,a);s=null}function u(a,c){s=q.createChildContext(a,g.as,function(a){a.$index=c});var d=f(b,a,s);return e(null,"ignoreTargetNode",d,s,g)}var s;return a.B(function(){var b=a.a.c(d)||[];"undefined"==typeof b.length&&(b=[b]);b=a.a.Ka(b,function(b){return g.includeDestroyed||b===n||null===b||!a.a.c(b._destroy)});
a.l.w(a.a.Bb,null,[k,b,u,g,p])},null,{i:k})};var k=a.a.e.I();a.d.template={init:function(b,c){var d=a.a.c(c());if("string"==typeof d||d.name)a.f.xa(b);else{if("nodes"in d){if(d=d.nodes||[],a.H(d))throw Error('The "nodes" option must be a plain, non-observable array.');}else d=a.f.childNodes(b);d=a.a.jc(d);(new a.v.qa(b)).nodes(d)}return{controlsDescendantBindings:!0}},update:function(b,c,d,e,f){var g=c(),s;c=a.a.c(g);d=!0;e=null;"string"==typeof c?c={}:(g=c.name,"if"in c&&(d=a.a.c(c["if"])),d&&"ifnot"in
c&&(d=!a.a.c(c.ifnot)),s=a.a.c(c.data));"foreach"in c?e=a.kd(g||b,d&&c.foreach||[],c,b,f):d?(f="data"in c?f.createChildContext(s,c.as):f,e=a.Ab(g||b,f,c,b)):a.f.xa(b);f=e;(s=a.a.e.get(b,k))&&"function"==typeof s.k&&s.k();a.a.e.set(b,k,f&&f.ba()?f:n)}};a.h.ta.template=function(b){b=a.h.yb(b);return 1==b.length&&b[0].unknown||a.h.ad(b,"name")?null:"This template engine does not support anonymous templates nested within its templates"};a.f.Z.template=!0})();a.b("setTemplateEngine",a.Db);a.b("renderTemplate",
a.Ab);a.a.dc=function(a,c,d){if(a.length&&c.length){var e,f,g,k,l;for(e=f=0;(!d||e<d)&&(k=a[f]);++f){for(g=0;l=c[g];++g)if(k.value===l.value){k.moved=l.index;l.moved=k.index;c.splice(g,1);e=g=0;break}e+=g}}};a.a.ib=function(){function b(b,d,e,f,g){var k=Math.min,l=Math.max,m=[],h,n=b.length,q,p=d.length,s=p-n||1,u=n+p+1,t,v,x;for(h=0;h<=n;h++)for(v=t,m.push(t=[]),x=k(p,h+s),q=l(0,h-1);q<=x;q++)t[q]=q?h?b[h-1]===d[q-1]?v[q-1]:k(v[q]||u,t[q-1]||u)+1:q+1:h+1;k=[];l=[];s=[];h=n;for(q=p;h||q;)p=m[h][q]-
1,q&&p===m[h][q-1]?l.push(k[k.length]={status:e,value:d[--q],index:q}):h&&p===m[h-1][q]?s.push(k[k.length]={status:f,value:b[--h],index:h}):(--q,--h,g.sparse||k.push({status:"retained",value:d[q]}));a.a.dc(s,l,!g.dontLimitMoves&&10*n);return k.reverse()}return function(a,d,e){e="boolean"===typeof e?{dontLimitMoves:e}:e||{};a=a||[];d=d||[];return a.length<d.length?b(a,d,"added","deleted",e):b(d,a,"deleted","added",e)}}();a.b("utils.compareArrays",a.a.ib);(function(){function b(b,c,d,k,l){var m=[],
h=a.B(function(){var h=c(d,l,a.a.za(m,b))||[];0<m.length&&(a.a.qc(m,h),k&&a.l.w(k,null,[d,h,l]));m.length=0;a.a.ra(m,h)},null,{i:b,wa:function(){return!a.a.Qb(m)}});return{ca:m,B:h.ba()?h:n}}var c=a.a.e.I(),d=a.a.e.I();a.a.Bb=function(e,f,g,k,l){function m(b,c){w=q[c];v!==c&&(D[b]=w);w.qb(v++);a.a.za(w.ca,e);u.push(w);z.push(w)}function h(b,c){if(b)for(var d=0,e=c.length;d<e;d++)c[d]&&a.a.q(c[d].ca,function(a){b(a,d,c[d].ja)})}f=f||[];k=k||{};var r=a.a.e.get(e,c)===n,q=a.a.e.get(e,c)||[],p=a.a.fb(q,
function(a){return a.ja}),s=a.a.ib(p,f,k.dontLimitMoves),u=[],t=0,v=0,x=[],z=[];f=[];for(var D=[],p=[],w,C=0,B,E;B=s[C];C++)switch(E=B.moved,B.status){case "deleted":E===n&&(w=q[t],w.B&&(w.B.k(),w.B=n),a.a.za(w.ca,e).length&&(k.beforeRemove&&(u.push(w),z.push(w),w.ja===d?w=null:f[C]=w),w&&x.push.apply(x,w.ca)));t++;break;case "retained":m(C,t++);break;case "added":E!==n?m(C,E):(w={ja:B.value,qb:a.N(v++)},u.push(w),z.push(w),r||(p[C]=w))}a.a.e.set(e,c,u);h(k.beforeMove,D);a.a.q(x,k.beforeRemove?a.$:
a.removeNode);for(var C=0,r=a.f.firstChild(e),F;w=z[C];C++){w.ca||a.a.extend(w,b(e,g,w.ja,l,w.qb));for(t=0;s=w.ca[t];r=s.nextSibling,F=s,t++)s!==r&&a.f.gc(e,s,F);!w.Wc&&l&&(l(w.ja,w.ca,w.qb),w.Wc=!0)}h(k.beforeRemove,f);for(C=0;C<f.length;++C)f[C]&&(f[C].ja=d);h(k.afterMove,D);h(k.afterAdd,p)}})();a.b("utils.setDomNodeChildrenFromArrayMapping",a.a.Bb);a.W=function(){this.allowTemplateRewriting=!1};a.W.prototype=new a.O;a.W.prototype.renderTemplateSource=function(b,c,d,e){if(c=(9>a.a.C?0:b.nodes)?
b.nodes():null)return a.a.V(c.cloneNode(!0).childNodes);b=b.text();return a.a.ma(b,e)};a.W.sb=new a.W;a.Db(a.W.sb);a.b("nativeTemplateEngine",a.W);(function(){a.vb=function(){var a=this.$c=function(){if(!v||!v.tmpl)return 0;try{if(0<=v.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(a){}return 1}();this.renderTemplateSource=function(b,e,f,g){g=g||u;f=f||{};if(2>a)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var k=b.data("precompiled");
k||(k=b.text()||"",k=v.template(null,"{{ko_with $item.koBindingContext}}"+k+"{{/ko_with}}"),b.data("precompiled",k));b=[e.$data];e=v.extend({koBindingContext:e},f.templateOptions);e=v.tmpl(k,b,e);e.appendTo(g.createElement("div"));v.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return"{{ko_code ((function() { return "+a+" })()) }}"};this.addTemplate=function(a,b){u.write("<script type='text/html' id='"+a+"'>"+b+"\x3c/script>")};0<a&&(v.tmpl.tag.ko_code={open:"__.push($1 || '');"},
v.tmpl.tag.ko_with={open:"with($1) {",close:"} "})};a.vb.prototype=new a.O;var b=new a.vb;0<b.$c&&a.Db(b);a.b("jqueryTmplTemplateEngine",a.vb)})()})})();})();
/// Knockout Mapping plugin v2.4.1
/// (c) 2013 Steven Sanderson, Roy Jacobs - http://knockoutjs.com/
/// License: MIT (http://www.opensource.org/licenses/mit-license.php)
(function(e){"function"===typeof require&&"object"===typeof exports&&"object"===typeof module?e(require("knockout"),exports):"function"===typeof define&&define.amd?define(["knockout","exports"],e):e(ko,ko.mapping={})})(function(e,f){function y(b,c){var a,d;for(d in c)if(c.hasOwnProperty(d)&&c[d])if(a=f.getType(b[d]),d&&b[d]&&"array"!==a&&"string"!==a)y(b[d],c[d]);else if("array"===f.getType(b[d])&&"array"===f.getType(c[d])){a=b;for(var e=d,l=b[d],n=c[d],t={},g=l.length-1;0<=g;--g)t[l[g]]=l[g];for(g=
n.length-1;0<=g;--g)t[n[g]]=n[g];l=[];n=void 0;for(n in t)l.push(t[n]);a[e]=l}else b[d]=c[d]}function E(b,c){var a={};y(a,b);y(a,c);return a}function z(b,c){for(var a=E({},b),e=L.length-1;0<=e;e--){var f=L[e];a[f]&&(a[""]instanceof Object||(a[""]={}),a[""][f]=a[f],delete a[f])}c&&(a.ignore=h(c.ignore,a.ignore),a.include=h(c.include,a.include),a.copy=h(c.copy,a.copy),a.observe=h(c.observe,a.observe));a.ignore=h(a.ignore,j.ignore);a.include=h(a.include,j.include);a.copy=h(a.copy,j.copy);a.observe=h(a.observe,
j.observe);a.mappedProperties=a.mappedProperties||{};a.copiedProperties=a.copiedProperties||{};return a}function h(b,c){"array"!==f.getType(b)&&(b="undefined"===f.getType(b)?[]:[b]);"array"!==f.getType(c)&&(c="undefined"===f.getType(c)?[]:[c]);return e.utils.arrayGetDistinctValues(b.concat(c))}function F(b,c,a,d,k,l,n){var t="array"===f.getType(e.utils.unwrapObservable(c));l=l||"";if(f.isMapped(b)){var g=e.utils.unwrapObservable(b)[p];a=E(g,a)}var j=n||k,h=function(){return a[d]&&a[d].create instanceof
Function},x=function(b){var f=G,g=e.dependentObservable;e.dependentObservable=function(a,b,c){c=c||{};a&&"object"==typeof a&&(c=a);var d=c.deferEvaluation,M=!1;c.deferEvaluation=!0;a=new H(a,b,c);if(!d){var g=a,d=e.dependentObservable;e.dependentObservable=H;a=e.isWriteableObservable(g);e.dependentObservable=d;d=H({read:function(){M||(e.utils.arrayRemoveItem(f,g),M=!0);return g.apply(g,arguments)},write:a&&function(a){return g(a)},deferEvaluation:!0});d.__DO=g;a=d;f.push(a)}return a};e.dependentObservable.fn=
H.fn;e.computed=e.dependentObservable;b=e.utils.unwrapObservable(k)instanceof Array?a[d].create({data:b||c,parent:j,skip:N}):a[d].create({data:b||c,parent:j});e.dependentObservable=g;e.computed=e.dependentObservable;return b},u=function(){return a[d]&&a[d].update instanceof Function},v=function(b,f){var g={data:f||c,parent:j,target:e.utils.unwrapObservable(b)};e.isWriteableObservable(b)&&(g.observable=b);return a[d].update(g)};if(n=I.get(c))return n;d=d||"";if(t){var t=[],s=!1,m=function(a){return a};
a[d]&&a[d].key&&(m=a[d].key,s=!0);e.isObservable(b)||(b=e.observableArray([]),b.mappedRemove=function(a){var c="function"==typeof a?a:function(b){return b===m(a)};return b.remove(function(a){return c(m(a))})},b.mappedRemoveAll=function(a){var c=C(a,m);return b.remove(function(a){return-1!=e.utils.arrayIndexOf(c,m(a))})},b.mappedDestroy=function(a){var c="function"==typeof a?a:function(b){return b===m(a)};return b.destroy(function(a){return c(m(a))})},b.mappedDestroyAll=function(a){var c=C(a,m);return b.destroy(function(a){return-1!=
e.utils.arrayIndexOf(c,m(a))})},b.mappedIndexOf=function(a){var c=C(b(),m);a=m(a);return e.utils.arrayIndexOf(c,a)},b.mappedGet=function(a){return b()[b.mappedIndexOf(a)]},b.mappedCreate=function(a){if(-1!==b.mappedIndexOf(a))throw Error("There already is an object with the key that you specified.");var c=h()?x(a):a;u()&&(a=v(c,a),e.isWriteableObservable(c)?c(a):c=a);b.push(c);return c});n=C(e.utils.unwrapObservable(b),m).sort();g=C(c,m);s&&g.sort();s=e.utils.compareArrays(n,g);n={};var J,A=e.utils.unwrapObservable(c),
y={},z=!0,g=0;for(J=A.length;g<J;g++){var r=m(A[g]);if(void 0===r||r instanceof Object){z=!1;break}y[r]=A[g]}var A=[],B=0,g=0;for(J=s.length;g<J;g++){var r=s[g],q,w=l+"["+g+"]";switch(r.status){case "added":var D=z?y[r.value]:K(e.utils.unwrapObservable(c),r.value,m);q=F(void 0,D,a,d,b,w,k);h()||(q=e.utils.unwrapObservable(q));w=O(e.utils.unwrapObservable(c),D,n);q===N?B++:A[w-B]=q;n[w]=!0;break;case "retained":D=z?y[r.value]:K(e.utils.unwrapObservable(c),r.value,m);q=K(b,r.value,m);F(q,D,a,d,b,w,
k);w=O(e.utils.unwrapObservable(c),D,n);A[w]=q;n[w]=!0;break;case "deleted":q=K(b,r.value,m)}t.push({event:r.status,item:q})}b(A);a[d]&&a[d].arrayChanged&&e.utils.arrayForEach(t,function(b){a[d].arrayChanged(b.event,b.item)})}else if(P(c)){b=e.utils.unwrapObservable(b);if(!b){if(h())return s=x(),u()&&(s=v(s)),s;if(u())return v(s);b={}}u()&&(b=v(b));I.save(c,b);if(u())return b;Q(c,function(d){var f=l.length?l+"."+d:d;if(-1==e.utils.arrayIndexOf(a.ignore,f))if(-1!=e.utils.arrayIndexOf(a.copy,f))b[d]=
c[d];else if("object"!=typeof c[d]&&"array"!=typeof c[d]&&0<a.observe.length&&-1==e.utils.arrayIndexOf(a.observe,f))b[d]=c[d],a.copiedProperties[f]=!0;else{var g=I.get(c[d]),k=F(b[d],c[d],a,d,b,f,b),g=g||k;if(0<a.observe.length&&-1==e.utils.arrayIndexOf(a.observe,f))b[d]=g(),a.copiedProperties[f]=!0;else{if(e.isWriteableObservable(b[d])){if(g=e.utils.unwrapObservable(g),b[d]()!==g)b[d](g)}else g=void 0===b[d]?g:e.utils.unwrapObservable(g),b[d]=g;a.mappedProperties[f]=!0}}})}else switch(f.getType(c)){case "function":u()?
e.isWriteableObservable(c)?(c(v(c)),b=c):b=v(c):b=c;break;default:if(e.isWriteableObservable(b))return q=u()?v(b):e.utils.unwrapObservable(c),b(q),q;h()||u();b=h()?x():e.observable(e.utils.unwrapObservable(c));u()&&b(v(b))}return b}function O(b,c,a){for(var d=0,e=b.length;d<e;d++)if(!0!==a[d]&&b[d]===c)return d;return null}function R(b,c){var a;c&&(a=c(b));"undefined"===f.getType(a)&&(a=b);return e.utils.unwrapObservable(a)}function K(b,c,a){b=e.utils.unwrapObservable(b);for(var d=0,f=b.length;d<
f;d++){var l=b[d];if(R(l,a)===c)return l}throw Error("When calling ko.update*, the key '"+c+"' was not found!");}function C(b,c){return e.utils.arrayMap(e.utils.unwrapObservable(b),function(a){return c?R(a,c):a})}function Q(b,c){if("array"===f.getType(b))for(var a=0;a<b.length;a++)c(a);else for(a in b)c(a)}function P(b){var c=f.getType(b);return("object"===c||"array"===c)&&null!==b}function T(){var b=[],c=[];this.save=function(a,d){var f=e.utils.arrayIndexOf(b,a);0<=f?c[f]=d:(b.push(a),c.push(d))};
this.get=function(a){a=e.utils.arrayIndexOf(b,a);return 0<=a?c[a]:void 0}}function S(){var b={},c=function(a){var c;try{c=a}catch(e){c="$$$"}a=b[c];void 0===a&&(a=new T,b[c]=a);return a};this.save=function(a,b){c(a).save(a,b)};this.get=function(a){return c(a).get(a)}}var p="__ko_mapping__",H=e.dependentObservable,B=0,G,I,L=["create","update","key","arrayChanged"],N={},x={include:["_destroy"],ignore:[],copy:[],observe:[]},j=x;f.isMapped=function(b){return(b=e.utils.unwrapObservable(b))&&b[p]};f.fromJS=
function(b){if(0==arguments.length)throw Error("When calling ko.fromJS, pass the object you want to convert.");try{B++||(G=[],I=new S);var c,a;2==arguments.length&&(arguments[1][p]?a=arguments[1]:c=arguments[1]);3==arguments.length&&(c=arguments[1],a=arguments[2]);a&&(c=E(c,a[p]));c=z(c);var d=F(a,b,c);a&&(d=a);if(!--B)for(;G.length;){var e=G.pop();e&&(e(),e.__DO.throttleEvaluation=e.throttleEvaluation)}d[p]=E(d[p],c);return d}catch(f){throw B=0,f;}};f.fromJSON=function(b){var c=e.utils.parseJson(b);
arguments[0]=c;return f.fromJS.apply(this,arguments)};f.updateFromJS=function(){throw Error("ko.mapping.updateFromJS, use ko.mapping.fromJS instead. Please note that the order of parameters is different!");};f.updateFromJSON=function(){throw Error("ko.mapping.updateFromJSON, use ko.mapping.fromJSON instead. Please note that the order of parameters is different!");};f.toJS=function(b,c){j||f.resetDefaultOptions();if(0==arguments.length)throw Error("When calling ko.mapping.toJS, pass the object you want to convert.");
if("array"!==f.getType(j.ignore))throw Error("ko.mapping.defaultOptions().ignore should be an array.");if("array"!==f.getType(j.include))throw Error("ko.mapping.defaultOptions().include should be an array.");if("array"!==f.getType(j.copy))throw Error("ko.mapping.defaultOptions().copy should be an array.");c=z(c,b[p]);return f.visitModel(b,function(a){return e.utils.unwrapObservable(a)},c)};f.toJSON=function(b,c){var a=f.toJS(b,c);return e.utils.stringifyJson(a)};f.defaultOptions=function(){if(0<arguments.length)j=
arguments[0];else return j};f.resetDefaultOptions=function(){j={include:x.include.slice(0),ignore:x.ignore.slice(0),copy:x.copy.slice(0)}};f.getType=function(b){if(b&&"object"===typeof b){if(b.constructor===Date)return"date";if(b.constructor===Array)return"array"}return typeof b};f.visitModel=function(b,c,a){a=a||{};a.visitedObjects=a.visitedObjects||new S;var d,k=e.utils.unwrapObservable(b);if(P(k))a=z(a,k[p]),c(b,a.parentName),d="array"===f.getType(k)?[]:{};else return c(b,a.parentName);a.visitedObjects.save(b,
d);var l=a.parentName;Q(k,function(b){if(!(a.ignore&&-1!=e.utils.arrayIndexOf(a.ignore,b))){var j=k[b],g=a,h=l||"";"array"===f.getType(k)?l&&(h+="["+b+"]"):(l&&(h+="."),h+=b);g.parentName=h;if(!(-1===e.utils.arrayIndexOf(a.copy,b)&&-1===e.utils.arrayIndexOf(a.include,b)&&k[p]&&k[p].mappedProperties&&!k[p].mappedProperties[b]&&k[p].copiedProperties&&!k[p].copiedProperties[b]&&"array"!==f.getType(k)))switch(f.getType(e.utils.unwrapObservable(j))){case "object":case "array":case "undefined":g=a.visitedObjects.get(j);
d[b]="undefined"!==f.getType(g)?g:f.visitModel(j,c,a);break;default:d[b]=c(j,a.parentName)}}});return d}});
var constants = {
group: {
3: {
kinds: [
{
id: 1,
name: 'Simplu'
},
]
},
1: {
kinds: [
{
id: 1,
name: 'Simplu'
},
]
},
4: {
kinds: [
{
id: 1,
name: 'Simplu'
},
{
id: 3,
name: 'UNEJ'
}
]
},
2: {
kinds: [
{
id: 1,
name: 'Simplu'
},
{
id: 2,
name: 'LTD'
}
]
},
5: {
kinds: [
{
id: 1,
name: 'Simplu'
},
{
id: 2,
name: 'LTD'
}
]
}
},
kindNames: {
1: 'Simplu',
2: 'LTD',
3: 'UNEJ'
}
};
var kalOpt = {
months: 4,
mode: 'multiple',
weekStart: 1,
direction: 'future',
directionScrolling: true,
useYearNav: false,
blackout: function(date) {
var dateFmt = 'YYYY-MM-DD';
var date = Kalendae.moment(date).startOf('day');
var shortDate = date.format(dateFmt);
var day = date.day();
var publicationID = this.settings.publicationID;
var publication = ko.utils.arrayFirst(app.publications(), function(e) {
return e.id() === publicationID;
});
if (!publication) {
return [1,0,0,0,0,0,0][day];
}
var disabledWeekDays = publication.disabledWeekDays();
for (var i = 0; i < disabledWeekDays.length; i++) {
if (disabledWeekDays[i] == day) {
return true;
}
}
var disabledDates = publication.disabledDates();
for (var i = 0; i < disabledDates.length; i++) {
if (disabledDates[i].split('T')[0] == shortDate) {
return true;
}
}
return false;
}
};
var PublicationModel = function(data) {
ko.mapping.fromJS(data, {}, this);
var self = this;
self.selected = ko.observable(false);
self.columns = ko.observableArray([]);
self.columnID = ko.observable(0);
self.optionIDs = ko.observableArray([]);
self.dates = ko.observableArray([]);
self.pubName = data.name;
self.distribution = ko.pureComputed(function() {
return self.type() == 1 ? 'National' : 'Local';
});
self.price = ko.observable({'total': '0', 'vat': '0', 'base': '0'});
self.isPristine = function() {
return (self.dates().length && self.columnID());
};
self.options = ko.pureComputed(function() {
var selectedColumn = ko.utils.arrayFilter(self.columns(), function(column) {
return column.id == self.columnID();
});
return selectedColumn.length ? selectedColumn[0].options : [];
}, self).extend({ notify: 'always' });
self.columnName = ko.pureComputed(function(){
var selectedColumn = ko.utils.arrayFilter(self.columns(), function(column) {
return column.id == self.columnID();
});
return selectedColumn[0].name;
}, self).extend({notify: 'always'});
self.columnID.subscribe(app.getSummary);
self.optionIDs.subscribe(app.getSummary);
self.dates.subscribe(function() {
if(self.dates().length == 0) {
self.price({'vat': '0', 'base': '0', 'total': '0'});
}
app.getSummary();
});
self.columnID.subscribe(function() {
self.optionIDs([]);
});
self.optionStr = ko.pureComputed(function() {
var optionNames = [];
ko.utils.arrayForEach(self.optionIDs(), function(sopt) {
ko.utils.arrayForEach(self.options(), function(opt) {
if(sopt == opt.id) {
optionNames.push(opt.name);
}
});
});
return optionNames.join(', ');
});
self.columnStr = function() {
ret = '';
ko.utils.arrayForEach(self.columns(), function(col) {
if (col.id == self.columnID()) {
ret = col.name;
}
});
return ret ? ret : '';
};
self.datesStr = ko.pureComputed(function() {
var sDates = '';
ko.utils.arrayForEach(self.dates(), function(date) {
sDates = sDates + moment(date).format('D-M-Y, ');
});
sDates = sDates.trim();
if (sDates.length > 0 && sDates.charAt(sDates.length - 1) == ',') {
sDates = sDates.substr(0, sDates.length - 1);
}
return sDates;
});
self.selected.subscribe(function(isSelected) {
app.getSummary();
if (isSelected && self.columns().length == 0) {
$.get('/columns/' + self.id()).done(function(data) {
self.columns(data);
if (self.columns().length == 0) {
return;
}
$('select').material_select('destroy');
$('select').material_select();
kalOpt.publicationID = self.id();
var k = new Kalendae('cal' + self.id(), kalOpt);
k.subscribe('change', function(date) {
app.text.pauseNotifications = true;
$('#textarea1').blur();
app.text.pauseNotifications = false;
self.dates(this.getSelectedAsDates());
});
});
}
});
}
var Application = function() {
var self = this;
// my vars
self.isLoggedIn = ko.observable(false);
self.adType = ko.observable(1);
self.kinds = ko.observableArray([]);
self.selectedKind = ko.observable();
self.invoicePerAd = ko.observable(true);
self.groupId = ko.observable(0);
self.kindNames = constants.kindNames;
self.quoteFile = ko.observable({});
// end of my vars
self.text = ko.observable('');
self.words = ko.observable(0);
self.publications = ko.observableArray([]);
self.price = ko.observable({});
self.finalStep = ko.observable(false);
self.firstName = ko.observable('');
self.lastName = ko.observable('');
self.address = ko.observable('');
self.company = ko.observable('');
self.vat = ko.observable('');
self.crn = ko.observable('');
self.phone = ko.observable('');
self.email = ko.observable('');
self.nin = ko.observable('');
self.bank = ko.observable('');
self.iban = ko.observable('');
self.contactValid = ko.observable(false);
// my functions
self.changeAdType = function(adType) {
self.adType(adType);
};
self.isPristineQuote = function(){
return self.adType() && self.contactValid() && Object.keys(self.quoteFile()).length != 0;
};
self.selectedKind.subscribe(function() {
if(self.selectedKind() == 3){
ko.utils.arrayForEach(self.publications(), function(publication){
if(publication.id() == jenuPublication){
publication.selected(true);
}else{
publication.selected(false);
}
});
}else{
ko.utils.arrayForEach(self.publications(), function(publication){
publication.selected(false);
});
$(".collapsible > li:first-child .collapsible-header").trigger("click");
}
});
self.doFinalQuote = function(){
if(self.isPristineQuote() && self.selected().length) {
$(".quote-btn-create").addClass("disabled").text("Asteptati...");
var adObj = {
columns: [],
selectedKind: self.selectedKind(),
invoicePerAd: self.invoicePerAd(),
groupId: self.groupId()
};
ko.utils.arrayForEach(self.selected(), function(pub) {
var days = [];
var options = [];
ko.utils.arrayForEach(pub.optionIDs(), function(id) {
options.push({'OptionID': id});
});
ko.utils.arrayForEach(pub.dates(), function(date) {
days.push({'Date': moment(date).format('YYYY-MM-DDT00:00:00[Z]')});
});
if (pub.isPristine()) {
adObj.columns.push({
'PublicationID': pub.id(),
'publicationName': pub.name(),
'ColumnID': pub.columnID(),
'columnName': pub.columnName(),
'Options': options,
'Days': days,
});
}
});
var name = (self.company() != '') ? self.company() :
self.firstName() + ' ' + self.lastName();
adObj['contact'] = {
name: name,
type: self.company() != '' ? 2 : 1,
firstName: self.firstName(),
lastName: self.lastName(),
address: self.address(),
phone: self.phone(),
email: self.email(),
vat: self.vat(),
nin: self.nin(),
crn: self.crn(),
bank: self.bank(),
iban: self.iban()
};
if(!Object.keys(self.quoteFile()).length){
return;
}
adObj["file"] = self.quoteFile();
var formData = new FormData();
formData.append("columns", JSON.stringify(adObj.columns));
formData.append("selectedKind", adObj.selectedKind);
formData.append("contact", JSON.stringify(adObj.contact));
formData.append("quoteFile", adObj.file);
formData.append("invoicePerAd", adObj.invoicePerAd);
formData.append("groupID", adObj.groupId);
$.ajax({
type: "POST",
url: "/quotation",
processData: false,
contentType: false,
data: formData,
success: function(resp){
if(resp.success){
//redirect here to the user account
window.location = '/contul-meu';
}
},
});
}
};
// end of my functions
self.buildSummary = function() {
var obj = {
text: self.text(), columns: [],
};
ko.utils.arrayForEach(self.selected(), function(pub) {
var days = [];
var options = [];
ko.utils.arrayForEach(pub.optionIDs(), function(id) {
options.push({'OptionID': id});
});
ko.utils.arrayForEach(pub.dates(), function(date) {
days.push({'Date': moment(date).format('YYYY-MM-DDT00:00:00[Z]')});
});
if (pub.isPristine()) {
obj.columns.push({
'PublicationID': pub.id(),
'ColumnID': pub.columnID(),
'Options': options,
'Days': days
});
}
});
return obj;
};
self.createDraft = function() {
var obj = self.buildSummary();
var name = (self.company() != '') ? self.company() :
self.firstName() + ' ' + self.lastName();
obj['contact'] = {
name: name,
type: self.company() != '' ? 2 : 1,
firstName: self.firstName(),
lastName: self.lastName(),
address: self.address(),
phone: self.phone(),
email: self.email(),
vat: self.vat(),
nin: self.nin(),
crn: self.crn(),
bank: self.bank(),
iban: self.iban()
};
var payButton = $('.pay-ad');
var doPayment = function(data) {
$.each(data, function(k, v) {
$('#payForm input[name=' + k + ']').attr('value', v);
});
payButton.removeAttr('disabled');
$('#payForm').submit();
};
payButton.attr('disabled', 'disabled');
$.ajax({
type: 'POST',
url: '/createDraft',
dataType: 'json',
contentType: 'application/json;charset=utf-8',
data: JSON.stringify(obj),
success: function(data) {
var id = data.ad_id;
if (!id) {
payButton.removeAttr('disabled');
return;
}
var uploader = $('#image-upload').prop('jFiler');
if (!uploader.files || uploader.files.length == 0) {
doPayment(data);
return;
}
formData = new FormData();
formData.append('id', id);
formData.append('file', uploader.files[0]);
$.ajax({
url: '/uploadImage',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function() {
doPayment(data);
},
error: function(data) {
payButton.removeAttr('disabled');
}
});
},
error: function(data) {
payButton.removeAttr('disabled');
}
});
};
self.isPristine = ko.computed(function() {
return self.price().total !== '0' && self.contactValid();
});
self.doFinal = function() {
if(self.isPristine() && self.selected().length) {
self.finalStep(true);
}
};
self.selected = function() {
return ko.utils.arrayFilter(self.publications(), function(publication) {
return publication.selected();
});
};
self.addTooltip = function(els) {
$('label[for="' + els[1].id + '"]').tooltip();
};
self.resetPrice = function() {
ko.utils.arrayForEach(self.selected(), function(pub) {
pub.price({'vat': '0', 'base': '0', 'total': '0'});
});
self.price({'vat': '0', 'base': '0', 'total': '0'});
self.finalStep(false);
};
self.getSummary = function() {
if(!self.text().length) {
self.words('0');
self.resetPrice();
return;
}
if(!self.selected().length) {
self.resetPrice();
return;
}
var obj = self.buildSummary();
if (!obj.columns.length) {
self.resetPrice();
return;
}
$.ajax({
type: 'POST',
url: '/summary',
dataType: 'json',
contentType: 'application/json;charset=utf-8',
data: JSON.stringify(obj),
success: function(data) {
self.price(data.price);
self.words(data.words);
ko.utils.arrayForEach(data.columns, function(column) {
ko.utils.arrayForEach(self.selected(), function(pub) {
if(column.id === pub.id()) {
pub.price(column.price);
return;
}
});
});
},
});
};
self.text.subscribe(self.getSummary);
};
Application.prototype = function() {
return {
getPublications: function() {
var self = this;
$.get('/listing', function(data) {
ko.mapping.fromJS(data, {
create: function(options) {
return new PublicationModel(options.data);
}}, self.publications);
// just testing for viata libera
// var pub = self.publications()[3];
// self.publications.removeAll();
// self.publications.push(pub);
if(self.publications().length == 1){
self.publications()[0].selected(true);
}
});
},
getUserProfile: function() {
var self = this;
$.get('/users/profile', function(resp) {
var profile = resp.data;
// date personale
self.firstName(profile.contact.firstName);
self.lastName(profile.contact.lastName);
self.address(profile.contact.address);
self.email(profile.contact.email);
self.nin(profile.contact.nin);
self.phone(profile.contact.phone);
// date companie
self.company(profile.group.contact.name);
self.groupId(profile.group.id);
self.vat(profile.group.contact.vat);
self.iban(profile.group.contact.iban);
self.bank(profile.group.contact.bank);
self.crn(profile.group.contact.crn);
self.invoicePerAd(profile.group.invoiceInterval);
if(self.invoicePerAd() != 0){
$("#date_persoana input").prop("disabled", "disabled");
self.contactValid(true);
}
if(constants.group[profile.group.type]){
self.kinds(constants.group[profile.group.type].kinds);
$('select').material_select();
}
});
}
};
}();
function gotostep(step){
$('#'+step).click();
}
var app = new Application();
app.getPublications();
ko.bindingHandlers.visible = {
init: function(element, valueAccessor) {
var value = valueAccessor();
$(element).toggle(ko.unwrap(value));
},
update: function(element, valueAccessor) {
var value = valueAccessor();
ko.unwrap(value) ? $(element).slideDown('fast') :
$(element).slideUp('fast');
}
};
ko.applyBindings(app);
$(document).ready(function(){
var isLoggedIn = !!$("#loggedInUser").val();
if(isLoggedIn){
app.isLoggedIn(isLoggedIn);
app.getUserProfile();
}
$('.tabs').tabs();
$('.button-collapse').sideNav();
$('.slider').slider({
full_width: true,
indicators: true,
height: 170
});
$('.modal').modal();
$('#do-payment').on('click', function(e) {
$('#date_persoana').submit();
});
$('#image-upload-quote').filer({
limit: 1,
maxSize: 10,
fileMaxSize: 10,
// extensions: ['jpg', 'png'],
changeInput: false,
// showThumbs: true,
// appendTo: '.image-preview-summary',
// templates: {
// box: '<div class="thumb-preview jFiler-items-grid"></div>',
// item: '<div class="thumb-preview-item jFiler-item">\
// <div class="jFiler-item-container">\
// <div class="jFiler-item-thumb">\
// {{fi-image}}\
// </div>\
// </div>\
// </div>',
// itemAppendToEnd: false,
// canvasImage: false,
// removeConfirmation: true,
// _selectors: {
// list: '.thumb-preview',
// item: '.thumb-preview-item',
// }
// },
captions: {
button: 'Choose Files',
feedback: 'Choose files To Upload',
feedback2: 'files were chosen',
drop: 'Drop file here to Upload',
removeConfirmation: 'Are you sure you want to remove this file?',
errors: {
filesLimit: 'Nu puteti incarca mai mult de o imagine.',
// filesType: 'Numai fisiere JPG si PNG sunt permise.',
filesSize: '{{fi-name}} este prea mare! Puteti incarca imagini de maxim {{fi-fileMaxSize}} MB.',
filesSizeAll: 'Fisierele alese sunt prea mari! Puteti incarca imagini de maxim {{fi-maxSize}} MB.',
folderUpload: 'Nu puteti incarca directoare.'
}
},
onSelect: function(f){
app.quoteFile(f);
},
onRemove: function(){
app.quoteFile({});
}
});
$('#image-upload').filer({
limit: 1,
maxSize: 10,
fileMaxSize: 10,
extensions: ['jpg', 'png'],
changeInput: false,
showThumbs: true,
appendTo: '.image-preview-summary',
templates: {
box: '<div class="thumb-preview jFiler-items-grid"></div>',
item: '<div class="thumb-preview-item jFiler-item">\
<div class="jFiler-item-container">\
<div class="jFiler-item-thumb">\
{{fi-image}}\
</div>\
</div>\
</div>',
itemAppendToEnd: false,
canvasImage: false,
removeConfirmation: true,
_selectors: {
list: '.thumb-preview',
item: '.thumb-preview-item',
}
},
captions: {
button: 'Choose Files',
feedback: 'Choose files To Upload',
feedback2: 'files were chosen',
drop: 'Drop file here to Upload',
removeConfirmation: 'Are you sure you want to remove this file?',
errors: {
filesLimit: 'Nu puteti incarca mai mult de o imagine.',
filesType: 'Numai fisiere JPG si PNG sunt permise.',
filesSize: '{{fi-name}} este prea mare! Puteti incarca imagini de maxim {{fi-fileMaxSize}} MB.',
filesSizeAll: 'Fisierele alese sunt prea mari! Puteti incarca imagini de maxim {{fi-maxSize}} MB.',
folderUpload: 'Nu puteti incarca directoare.'
}
}
});
$('.image-preview-summary').on('DOMNodeInserted', 'img', function () {
var img = $('.image-preview-summary img').clone();
$('.image-preview-finalize').empty().append(img);
});
$('.btn-delete-image').click(function() {
var el = $('#image-upload');
el.prop('jFiler').reset();
$('#file-path-name').val('');
$('.image-preview-finalize img').remove();
});
$.validate({
lang : 'ro',
form: '#date_persoana',
scrollToTopOnError : true,
modules : 'html5',
modules : 'sanitize',
modules : 'security',
modules : 'sepa',
onError : function($form) {
return false;
},
onSuccess : function($form) {
return false;
},
onElementValidate : function(valid, $el, $form, errorMess) {
if(!app.invoicePerAd()){
app.contactValid(true);
} else {
app.contactValid(valid);
}
}
});
});
This source diff could not be displayed because it is too large. You can view the blob instead.
/* Modernizr 2.8.3 (Custom Build) | MIT & BSD
* Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
*/
;window.Modernizr=function(a,b,c){function C(a){j.cssText=a}function D(a,b){return C(n.join(a+";")+(b||""))}function E(a,b){return typeof a===b}function F(a,b){return!!~(""+a).indexOf(b)}function G(a,b){for(var d in a){var e=a[d];if(!F(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function H(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:E(f,"function")?f.bind(d||b):f}return!1}function I(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return E(b,"string")||E(b,"undefined")?G(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),H(e,b,c))}function J(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)u[c[d]]=c[d]in k;return u.list&&(u.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),u}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)k.setAttribute("type",f=a[d]),e=k.type!=="text",e&&(k.value=l,k.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&k.style.WebkitAppearance!==c?(g.appendChild(k),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(k,null).WebkitAppearance!=="textfield"&&k.offsetHeight!==0,g.removeChild(k)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=k.checkValidity&&k.checkValidity()===!1:e=k.value!=l)),t[a[d]]=!!e;return t}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var d="2.8.3",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k=b.createElement("input"),l=":)",m={}.toString,n=" -webkit- -moz- -o- -ms- ".split(" "),o="Webkit Moz O ms",p=o.split(" "),q=o.toLowerCase().split(" "),r={svg:"http://www.w3.org/2000/svg"},s={},t={},u={},v=[],w=v.slice,x,y=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["&#173;",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=E(e[d],"function"),E(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),A={}.hasOwnProperty,B;!E(A,"undefined")&&!E(A.call,"undefined")?B=function(a,b){return A.call(a,b)}:B=function(a,b){return b in a&&E(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return I("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!E(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!I("indexedDB",a)},s.hashchange=function(){return z("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return C("background-color:rgba(150,255,150,.5)"),F(j.backgroundColor,"rgba")},s.hsla=function(){return C("background-color:hsla(120,40%,100%,.5)"),F(j.backgroundColor,"rgba")||F(j.backgroundColor,"hsla")},s.multiplebgs=function(){return C("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return I("backgroundSize")},s.borderimage=function(){return I("borderImage")},s.borderradius=function(){return I("borderRadius")},s.boxshadow=function(){return I("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return D("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return I("animationName")},s.csscolumns=function(){return I("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return C((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),F(j.backgroundImage,"gradient")},s.cssreflections=function(){return I("boxReflect")},s.csstransforms=function(){return!!I("transform")},s.csstransforms3d=function(){var a=!!I("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return I("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="<svg/>",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var K in s)B(s,K)&&(x=K.toLowerCase(),e[x]=s[K](),v.push((e[x]?"":"no-")+x));return e.input||J(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)B(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},C(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function q(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return s.shivMethods?o(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(s,b.frag)}function r(a){a||(a=b);var c=n(a);return s.shivCSS&&!g&&!c.hasCSS&&(c.hasCSS=!!l(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),k||q(a,c),a}var c="3.7.0",d=a.html5||{},e=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,f=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g,h="_html5shiv",i=0,j={},k;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.hasEvent=z,e.testProp=function(a){return G([a])},e.testAllProps=I,e.testStyles=y,e.prefixed=function(a,b,c){return b?I(a,b,c):I(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
$(document).ready(function(){
$('.modal').modal();
$(".send-quote-price").on("click", function(){
var quoteId = $(this).data("quote");
var $modal = $("#modal-send-" + quoteId);
var $adText = $modal.find("textarea");
var adTextVal = $adText.val();
if(adTextVal.length && quoteId){
$(this).addClass("disabled").text("Asteptati...");
$.ajax({
url: "/quote/" + quoteId + "/update",
method: "POST",
data: {
adText: adTextVal
},
success: function(resp){
window.location.reload();
},
error: function(err) {
}
});
}else{
$adText.focus();
}
});
$('.deny-quote').on("click", function(){
var quoteId = $(this).data("quote");
if(quoteId){
$(this).addClass("disabled").text("Asteptati...");
$.ajax({
url: "/quote/" + quoteId + "/update",
method: "POST",
data: {
status: 7
},
success: function(resp){
window.location.reload();
},
error: function(err) {
}
});
}
});
$('.accept-quote').on("click", function(){
var quoteId = $(this).data("quote");
if(quoteId){
$(this).addClass("disabled").text("Asteptati...");
$.ajax({
url: "/quote/" + quoteId + "/update",
method: "POST",
data: {
status: 3
},
success: function(resp){
window.location.reload();
},
error: function(err) {
}
});
}
});
$('.delete-quote').on("click", function(){
var quoteId = $(this).data("quote");
if(quoteId){
$(this).addClass("disabled").text("Asteptati...");
$.ajax({
url: "/quotation/" + quoteId,
data: {},
method: 'DELETE',
success: function(resp){
window.location.reload();
}
});
}
});
$('.pay-quote').on('click', function(){
$(this).next("form").submit();
});
});
<!DOCTYPE html>
<html lang="ro-RO" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Termeni și Condiții - Anunțuri Mica Publicitate Monitorul Oficial România Liberă</title>
<meta name="keywords" content="anuțuri românia liberă, anuțuri mica publicitate, anuțuri monitorul oficial"/>
<meta name="description" content="anuțuri românia liberă, anunturi mica publicitate, anuțuri monitorul oficial"/>
<meta name="subject" content="anuțuri românia liberă, anuțuri mica publicitate, anuțuri monitorul oficial"/>
<meta name="copyright" content="România Liberă"/>
<meta name="language" content="RO"/>
<meta name="robots" content="index,follow" />
<meta name="revised" content="Sunday, July 31th, 2016, 00:00 am" />
<meta name="abstract" content="anuțuri monitorul oficial românia liberă">
<meta name="topic" content="Ads">
<meta name="summary" content="anuțuri monitorul oficial românia liberă">
<meta name="Classification" content="Business">
<meta name="author" content="România Liberă, anuțuri@micapublicitate.romanialibera.ro">
<meta name="designer" content="Activemall SRL">
<meta name="copyright" content="România Liberă">
<meta name="reply-to" content="anuțuri@micapublicitate.romanialibera.ro">
<meta name="owner" content="România Liberă">
<meta name="url" content="http://www.micapublicitate.romanialibera.ro">
<meta name="identifier-URL" content="http://www.micapublicitate.romanialibera.ro">
<meta name="directory" content="submission">
<meta name="category" content="Ads">
<meta name="coverage" content="Worldwide">
<meta name="distribution" content="Global">
<meta name="rating" content="General">
<meta name="revisit-after" content="7 days">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta name="og:title" content="anuțuri Monitorul Oficial - România Liberă"/>
<meta name="og:type" content="business"/>
<meta name="og:url" content="http://www.micapublicitate.romanialibera.ro"/>
<meta name="og:image" content="http://www.micapublicitate.romanialibera.ro/mo.jpg"/>
<meta name="og:site_name" content="anuțuri Monitorul Oficial - România Liberă"/>
<meta name="og:description" content="anuțuri Monitorul Oficial - România Liberă"/>
<meta name="twitter:card" content="anuțuri Monitorul Oficial - România Liberă">
<meta name="twitter:title" content="anuțuri Monitorul Oficial - România Liberă">
<meta name="twitter:description" content="anuțuri Monitorul Oficial - România Liberă">
<meta name="twitter:image" content="http://www.micapublicitate.romanialibera.ro/mo.jpg">
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
<link rel="canonical" href="http://www.micapublicitate.romanialibera.ro/index.html" />
<link rel="shortcut icon" type="image/ico" href="/favicon.ico" />
<link href="css/materialize.css" type="text/css" rel="stylesheet">
<link href="css/style-mo.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>
<div class="navbar-fixed">
<nav class="default_color" role="navigation">
<div class="container">
<div class="nav-wrapper">
<a href="anunturi-monitorul-oficial.html" class="brand-logo">Anunțuri Monitorul Oficial<br><small>Partea a III-a</small></a>
<ul id="nav-mobile" class="right hide-on-med-and-down">
<li><a class='dropdown-button' href='#!' data-activates='mo3'>Monitorul Oficial <small>Partea a III-a</small><i class="material-icons right">arrow_drop_down</i></a></li>
<li><a class='dropdown-button' href='#!' data-activates='mo4'>Monitorul Oficial <small>Partea a IV-a</small><i class="material-icons right">arrow_drop_down</i></a></li>
<li><a class='dropdown-button' href='#!' data-activates='mo6'>Monitorul Oficial <small>Partea a VI-a</small><i class="material-icons right">arrow_drop_down</i></a></li>
<li><a href="/" class="waves-effect waves-light btn-large">Mica Publicitate</a></li>
</ul>
<ul id='mo3' class='dropdown-content'>
<li><a href="anunturi-monitorul-oficial-partea-a-III-a.html#anunturi-pierderi-persoane-fizice" class="collection-item">Anuțuri Pierderi Persoane Fizice</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-III-a.html#anunturi-pierderi-persoane-juridice" class="collection-item">Anuțuri Pierderi Persoane Juridice</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-III-a.html#concursuri-functionari-publici" class="collection-item">Concursuri Functionari Publici</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-III-a.html#concursuri-contractuale" class="collection-item">Concursuri Contractuale</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-III-a.html#alte-anunturi" class="collection-item">Alte anuțuri care se publică în Partea a III-a</a></li>
</ul>
<ul id='mo4' class='dropdown-content'>
<li><a href="anunturi-monitorul-oficial-partea-a-IV-a-convocari-ale-adunarii-generale-a-actionarilor-aga.html" class="collection-item">Convocări ale Adunării Generale a Acționarilor AGA</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-IV-a-raportul-activitate-si-extrasul-situatiilor-financiare-anuale-ale-asociatiilor-fundatiilor-si-federatiilor-recunoscute-ca-fiind-de-utilitate-publica.html" class="collection-item">Raportul de activitate şi extrasul situaţiilor financiare anuale ale asociaţiilor, fundaţiilor şi federaţiilor recunoscute ca fiind de utilitate publică</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-IV-a-somatii-colective.html" class="collection-item">Somații colective</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-IV-a-decizii-de-anulare-a-actiunilor.html" class="collection-item">Decizii de anulare a acţiunilor</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-IV-a-anunt-privind-depunerea-situatiilor-financiare-anuale-in-baza-art-185-alin-4-din-legea-nr-31-1990.html" class="collection-item">Anunţ privind depunerea situaţiilor financiare anuale în baza art. 185, alin 4 din Legea nr. 31/1990</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-IV-a-alte-acte-care-se-publica-in-partea-a-IV-a.html" class="collection-item">Alte acte care se publică în Partea a IV-a</a></li>
</ul>
<ul id='mo6' class='dropdown-content'>
<li><a href="anunturi-monitorul-oficial-partea-a-VI-a-anunturi-de-intentie-de-participare-de-atribuire-referitoare-la-achizitiile-publice-de-produse-lucrari-si-servicii.html" class="collection-item">Anunţuri de intenţie, de participare, de atribuire referitoare la achiziţiile publice de produse, lucrări şi servicii</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-VI-a-anunturi-de-participare-si-atribuire-privind-concesiunea-de-bunuri-lucrari-activitati-si-servicii.html" class="collection-item">Anunţuri de participare şi atribuire privind concesiunea de bunuri, lucrări / activităţi şi servicii</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-VI-a-anunturi-de-participare-si-atribuire-pentru-delegarea-de-gestiune-a-serviciilor-publice.html" class="collection-item">Anunţuri de participare şi atribuire pentru delegarea de gestiune a serviciilor publice</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-VI-a-anunturi-privind-finantarea-nerambursabila.html" class="collection-item">Anunţuri privind finanţarea nerambursabilă</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-VI-a-anunturi-in-baza-legii-350-2005-privind-regimul-finantarilor-nerambursabile-din-fonduri-publice-alocate-pentru-activitati-non-profit-de-interes-general.html" class="collection-item">Anunturi în baza legii 350- 2005 privind regimul finanțărilor nerambursabile din fonduri publice alocate pentru activități non profit de interes general</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-VI-a-alte-anunturi-a-caror-publicare-este-prevăzuta-de-lege.html" class="collection-item">Alte anunţuri a căror publicare este prevăzută de lege</a></li>
</ul>
<ul id="slide-out" class="side-nav">
<li><h2 class="card-panel default_color">Anunțuri Monitorul Oficial<br>România Liberă</h2></li>
<li><a href="anunturi-monitorul-oficial-partea-a-III-a.html">MO Partea a-III-a</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-IV-a.html">MO Partea a-IV-a</a></li>
<li><a href="anunturi-monitorul-oficial-partea-a-VI-a.html">MO Partea a-VI-a</a></li>
<li><hr/></li>
<li><a href="/">Magazinul de Mica Publicitate</a></li>
<li><hr/></li>
<li><a href="contact.html">Contact</a></li>
</ul>
</div>
<a href="#" data-activates="slide-out" class="button-collapse"><i class="material-icons">menu</i></a>
</div>
</nav>
</div>
<div class="parallax-container">
<div class="parallax">
<div class="container pinfo">
<h1>Termeni și Condiții - Romania Liberă - Anunțuri Monitorul Oficial</h1>
<h2>Anunțuri Monitorul Oficial - Partea a III-a - a IV-a - a VI-a</h2>
<h3>Autorizat de Monitorul Oficial al României</h3>
</div>
</div>
</div>
<div id="mo" class="section">
<div class="container">
<div class="clr"><hr/></div>
<div class="row">
<div class="col s12">
<h2>Termeni și Condiții</h2>
<p>
Utilizatorii site-ului <a href="https://www.magazinuldemicapublicitate.ro" target="_blank">www.magazinuldemicapublicitate.ro</a> sunt de acord sa respecte urmatorul regulament si sunt responsabili in fata legii cu privire la continutul anunturilor adaugate. Acest regulament poate fi modificat oricand de catre proprietarul site-ului.
</p>
<h3>1. Termeni</h3>
<p>
Site = pagina web <a href="https://www.magazinuldemicapublicitate.ro" target="_blank">www.magazinuldemicapublicitate.ro</a> (și moderatoriii săi), cu toate aplicațiile și secțiunile acesteia
Utilizator = orice persoană fizică și/sau juridică, în vârstă de cel puțin 18 ani, care accesează site-ul <a href="https://www.magazinuldemicapublicitate.ro" target="_blank">www.magazinuldemicapublicitate.ro</a>
Anunț = ofertă publică lansată de un Utilizator prin care este prezentat un produs sau un serviciu cu scopul vânzării sau închirierii  
Vânzător = Utilizatorul site-lui <a href="https://www.magazinuldemicapublicitate.ro" target="_blank">www.magazinuldemicapublicitate.ro</a> care oferă spre vânzare si/sau inchiriere unul sau mai multe produse și/sau, dupa caz, servicii
Moderatori = persoanele care verifică un Anunț înaintea sau ulterior publicării acestuia
Termeni și condiții = prezentul contract de utilizare
Furnizor = societatea SC Grupul de Presa SRL, funcționând în conformitate cu legislația din România, cu sediul social Blvd Carol I, nr 32-34, et 12, Sect 2, Bucuresti, inregistrata la Oficiul Registrului Comerțului sub nr. J40/94/2002 având Codul Unic de Înregistrare R14376529.
</p>
<h3>2. Conditii</h3>
<p>
Este interzisa folosirea de coduri html si inserarea linkurilor in anunturi printr-o alta metoda decat metoda oferita de site.
Este interzisa adaugarea de anunturi a caror continut nu are legatura cu rubrica respectiva.
Este interzisa adaugarea de anunturi care au urmatorul continut:
Țigări, țigarete, țigări de foi, tutun, droguri de orice fel
Arme și muniții letale conform Legii 295/2004 privind regimul armelor şi al muniţiilor
Materiale explozibile sau pirotehnice conform Legii 126/1995 privind regimul materiilor explozive, precum și alte obiecte periculoase pentru sănătate
Medicamente, produse medicale și farmaceutice (pentru oameni sau animale), sânge, organe umane, afrodisiace, suplimente nutriționale sau produse pentru slăbit
Bunuri periculoase pentru sănătatea și viața umană
Materiale erotice și obscene, dating, servicii de masaj erotic, servicii de escortă, precum și oferte de muncă pentru posturile de dansatoare, animatoare club
Obiecte obținute prin furt, înșelăciune sau alte tipuri de infracțiuni
Bunuri ce se află în afara țării
Animale pe cale de dispariție, protejate de Legea nr. 69/1994 pentru aderarea României la Convenţia privind comerţul internaţional cu specii sălbatice de faună şi floră pe cale de dispariţie, adoptată la Washington la 3 martie 1973.
Servicii de ghicitoare, tarot, clarvăzătoare, magie albă sau alte servicii asemănătoare
Servicii de camătă, amanet, credite sau alte activități similare
Servicii de deblocare iCloud
Oferte de job-uri pe internet prin care faci bani stând în fața calculatorului
Oferte de luare în spațiu pentru viză de flotant sau pentru eliberarea C.I.
Bunuri inexistente
Muzica, filme, software sau alte bunuri care încalcă drepturile de autor și proprietate intelectuală
Lucrări de diplomă/licență sau ajutor în scrierea unei lucrări de diplomă/licență
Jocuri de noroc, tranzacții virtuale
Orice alt produs sau activitate ilegală, vanzari organe, mama purtatoare/surogat, magie, decese,
Nu adaugati fotografii cu continut pornografic sau obscen. Daca vor exista totusi astfel de fotografii atasate anunturilor acestea vor fi sterse sau in cazul unor abuzuri (nerespectarea regulamentului in mod intentionat si repetat in ciuda notificarilor reprezentantilor site-ului) anunturile care vor contine asemenea fotografii vor fi sterse.
Este interzisa vanzarea lucrurilor furate sau oferirea de servicii ilicite.
Este interzisa adaugarea aceluiasi anunt de mai multe ori, chiar daca este ales un alt judet.
Toate anunturile duplicat vor fi sterse fara nici un avertisment prealabil
Toate anunturile care nu respecta regulile de mai sus vor fi sterse fara nici un avertisment prealabil. 
Anunturile care nu respecta legislatia in vigoare cu privire la discriminari de orice natura vor fi eliminate de pe site. 
</p>
<h3>3. Acceptarea condițiilor</h3>
<p>
Folosirea site-ului <a href="https://www.magazinuldemicapublicitate.ro" target="_blank">www.magazinuldemicapublicitate.ro</a> presupune acceptarea necondiționată și în totalitate a acestor Termeni și Condiții. Prin folosirea site-ului <a href="https://www.magazinuldemicapublicitate.ro" target="_blank">www.magazinuldemicapublicitate.ro</a> se intelege atât accesarea, vizitarea, cât și/sau folosirea serviciilor de publicare pe a anunțurilor pentru vânzarea, cumpărarea sau închirierea de bunuri sau servicii. Te rugăm să acorzi câteva minute pentru a le citi. Ne rezervăm dreptul de a modifica și actualiza această pagină în orice moment Pagina Termeni și condiții este disponibilă permanent și poate fi consultată oricând aici.
<br/><br/>Dreptul de autor<br/>
Întregul conținut al site-ului <a href="https://www.magazinuldemicapublicitate.ro" target="_blank">www.magazinuldemicapublicitate.ro</a> prin conținut înțelegându-se imagini, texte, grafică, inclusiv Anunțul în forma publicată pe site pentru care Vânzătorul cedează dreptul de utilizare, neexclusiv, în favoarea Furnizorului, aplicații, link-uri și orice alt conținut audio-vizual, cât și design-ul grafic, codul sursă și orice alte date și informatii aparțin Site-ului, Furnizorului și afiliaților acestuia.
Aceste informații sunt protejate conform Legii drepturilor de autor și legilor care privesc dreptul de proprietate intelectuală și industrială. Informațiile publicate pe <a href="https://www.magazinuldemicapublicitate.ro" target="_blank">www.magazinuldemicapublicitate.ro</a> nu pot fi publicate, transmise, copiate prin orice metodă fără acordul scris al reprezentantului legal al Furnizorului. Nerespectarea acestor condiții se pedepsește conform legii în vigoare.
Prin publicarea unui anunț pe site-ul <a href="https://www.magazinuldemicapublicitate.ro" target="_blank">www.magazinuldemicapublicitate.ro</a> tu afirmi, garantezi și susții că deții toate drepturile de autor pentru imagini, text și conținut și nu încalci dreptul de proprietate intelectuală al unei terțe părți. Tu ești singurul răspunzător pentru tot ceea ce postezi și de consecința publicării unui Anunț. 
Publicând anunțul pe site-ul <a href="https://www.magazinuldemicapublicitate.ro" target="_blank">www.magazinuldemicapublicitate.ro</a> accepți să acorzi către Furnizor o licență cu titlu gratuit, nelimitată în timp și irevocabilă prin care transmiți către Site toate drepturile asupra materialului postat. De asemenea, utilizatori isi dau acordul ca prin postarea anunturilor pe <a href="https://www.magazinuldemicapublicitate.ro" target="_blank">www.magazinuldemicapublicitate.ro</a>, acestea sa poata fi publicate si pe site-urile partenere
</p>
<h3>4. Eligibilitatea</h3>
<p>
Site-ul <a href="https://www.magazinuldemicapublicitate.ro" target="_blank">www.magazinuldemicapublicitate.ro</a> este destinat persoanelor fizice și/sau juridice cu vârsta de cel puțin 18 ani și capacitate deplină de exercițiu.
</p>
<h3>5. Plata cu cardul</h3>
<p>
Plata serviciilor de pe acest website este efectuata prin intermediul solutiilor de plata online oferite de Banca Transilvania impreuna cu PayU.
Informatiile privind datele cardului bancar (numar de card, data expirarii etc.) nu sunt transferate sau stocate, la nici un moment de timp, pe serverele furnizorului.
Preturile prezentate includ TVA 20%.
Pretul prezentat pe factura va fi acelasi cu cel prezentat pe site la momentul efectuarii operatiunii, pret la care se adauga TVA si costurile de livrare, daca este cazul.
</p>
</div>
</div>
</div>
<div class="container">
<div class="clr"><hr/></div>
<div class="row">
<div class="col s12">
<h2>Magazinul de Mică Publicitate Romania Liberă</h2>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri România Liberă" title="Anunțuri România Liberă">
<img src="img/logo-rl.jpg" alt="Anunțuri România Liberă" title="Anunțuri România Liberă">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Libertatea" title="Anunțuri Libertatea">
<img src="img/logo-libertatea.jpg" alt="Anunțuri Libertatea" title="Anunțuri Libertatea">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Evenimentul Zilei" title="Anunțuri Evenimentul Zilei">
<img src="img/logo-evz.jpg" alt="Anunțuri Evenimentul Zilei" title="Anunțuri Evenimentul Zilei">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Adevărul" title="Anunțuri Adevărul">
<img src="img/logo-adevarul.jpg" alt="Anunțuri Adevărul" title="Anunțuri Adevărul">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Click" title="Anunțuri Click">
<img src="img/logo-click.jpg" alt="Anunțuri Click" title="Anunțuri Click">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Bursa" title="Anunțuri Bursa">
<img src="img/logo-bursa.jpg" alt="Anunțuri Bursa" title="Anunțuri Bursa">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Capital" title="Anunțuri Capital">
<img src="img/logo-capital.jpg" alt="Anunțuri Capital" title="Anunțuri Capital">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Jurnalul Național" title="Anunțuri Jurnalul Național">
<img src="img/logo-jurnalul-national.jpg" alt="Anunțuri Jurnalul Național" title="Anunțuri Jurnalul Național">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Anunțul Telefonic" title="Anunțuri Anunțul Telefonic">
<img src="img/logo-anuntul-telefonic.jpg" alt="Anunțuri Anunțul Telefonic" title="Anunțuri Anunțul Telefonic">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri RAID Prahova" title="Anunțuri RAID Prahova">
<img src="img/logo-raid-prahova.jpg" alt="Anunțuri RAID Prahova" title="Anunțuri RAID Prahova">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri RAID Dâmbovița" title="Anunțuri RAID Dâmbovița">
<img src="img/logo-raid-dambovita.jpg" alt="Anunțuri RAID Dâmbovița" title="Anunțuri RAID Dâmbovița">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Transilvania Expres" title="Anunțuri Transilvania Expres">
<img src="img/logo-transilvania-expres.jpg" alt="Anunțuri Transilvania Expres" title="Anunțuri Transilvania Expres">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Telegraf Constanța" title="Anunțuri Telegraf Constanța">
<img src="img/logo-telegraf-constanta.jpg" alt="Anunțuri Telegraf Constanța" title="Anunțuri Telegraf Constanța">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Evenimentul de Iași" title="Anunțuri Evenimentul de Iași">
<img src="img/logo-evenimentul-de-iasi.jpg" alt="Anunțuri Evenimentul de Iași" title="Anunțuri Evenimentul de Iași">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Timisoara" title="Anunțuri Timisoara">
<img src="img/logo-timisoara.jpg" alt="Anunțuri Timisoara" title="Anunțuri Timisoara">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Monitorul de Cluj" title="Anunțuri Monitorul de Cluj">
<img src="img/logo-monitorul-de-cluj.jpg" alt="Anunțuri Monitorul de Cluj" title="Anunțuri Monitorul de Cluj">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Mesagerul de Sibiu" title="Anunțuri Mesagerul de Sibiu">
<img src="img/logo-mesagerul-de-sibiu.jpg" alt="Anunțuri Mesagerul de Sibiu" title="Anunțuri Mesagerul de Sibiu">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Gazeta de Sud" title="Anunțuri Gazeta de Sud">
<img src="img/logo-gazeta-de-sud.jpg" alt="Anunțuri Gazeta de Sud" title="Anunțuri Gazeta de Sud">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Curierul zilei Pitești" title="Anunțuri Curierul zilei Pitești">
<img src="img/logo-curierul-zilei-pitesti.jpg" alt="Anunțuri Curierul zilei Pitești" title="Anunțuri Curierul zilei Pitești">
</a>
</div>
</div>
</div>
<div class="col s3 m2 l1 logos">
<div class="card">
<div class="card-image waves-effect waves-block waves-light">
<a href="/" alt="Anunțuri Giurgiuveanul" title="Anunțuri Giurgiuveanul">
<img src="img/logo-giurgiuveanul.jpg" alt="Anunțuri Giurgiuveanul" title="Anunțuri Giurgiuveanul">
</a>
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="page-footer default_color scrollspy z-depth-2" >
<div class="container white-text">
<div class="row">
<div class="col l1 s12">
<img title="Anunțuri România Liberă" alt="Anunțuri România Liberă" class="responsive-img" src="img/romania-libera.jpg">
</div>
<div class="col l6 s12">
<h3>Magazinul de Mică Publicitate România Liberă</h3>
<p>Magazinul de Mică Publicitate este un produs al Grupului de Presă Român, parte a Medien Holding, din portofoliul căruia mai fac parte: cotidianul România Liberă, bilunarul Academia Cațavencu, revista Casa Mea, revistele TAROM Insight și SkyLady, website-urile <a href="http://www.romanialibera.ro" title="www.romanialibera.ro">www.romanialibera.ro</a>, <a href="http://www.casamea.ro" title="www.casamea.ro">www.casamea.ro</a>, <a href="http://www.academiacatavencu.info" title="www.academiacatavencu.info">www.academiacatavencu.info</a> și tipografia <a href="http://www.unitedprint.ro" title="www.unitedprint.ro">Sigma Media</a></p>
</div>
<div class="col l2 s12">
<h3>Info</h3>
<ul>
<li><a href="/" title="Mica Publicitate">Mica Publicitate</a></li>
<li><a href="anunturi-monitorul-oficial.html" title="Monitorul Oficial">Monitorul Oficial</a></li>
<li><a href="intrebari-si-raspunsuri.html" title="Intrebări și Răspunsuri">Intrebări și Răspunsuri</a></li>
<li><a href="termeni-si-conditii-magazinul-de-mica-publicitate.html" title="Termeni și Condiții">Termeni și Condiții</a></li>
<li><a href="termeni-si-conditii.html" title="Termeni și Condiții Monitorul Oficial">Termeni și Condiții Monitorul Oficial</a></li>
<li><a href="contact.html" title="Contact">Contact</a></li>
</ul>
</div>
<div class="col l3 s12">
<h3>Magazinul de Mică Publicitate</h3>
<ul>
<li>Telefon: +40 21 223 09 97</li>
<li>Fax: +40 21 223 09 96</li>
<li>Mobil: +40 747 400 300</li>
<li>Email: monitoruloficial@romanialibera.ro</li>
</ul>
</div>
</div>
</div>
<div class="footer-copyright z-depth-1">
<div class="container">
<b>&copy; 2016 România Liberă SA / Grupul de Presă Român / Medien Holding</b>
<span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" title="activemall.ro">activemall.ro</a></span>
</div>
</div>
</footer>
<script src="js/jquery-3.1.0.min.js"></script>
<script src="js/materialize.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.button-collapse').sideNav();
});
</script>
<!--Start of Tawk.to Script-->
<script type="text/javascript">
var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date();
(function(){
var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0];
s1.async=true;
s1.src='https://embed.tawk.to/582af69a397ff569a3cddddd/default';
s1.charset='UTF-8';
s1.setAttribute('crossorigin','*');
s0.parentNode.insertBefore(s1,s0);
})();
</script>
<!--End of Tawk.to Script-->
</body>
</html>
<?php
/**
* Class Mobilpay_Payment_Address
* @copyright NETOPIA
* @author Claudiu Tudose
* @version 1.0
*
*/
class Mobilpay_Payment_Address
{
const TYPE_COMPANY = 'company';
const TYPE_PERSON = 'person';
const ERROR_INVALID_PARAMETER = 0x11100001;
const ERROR_INVALID_ADDRESS_TYPE = 0x11100002;
const ERROR_INVALID_ADDRESS_TYPE_VALUE = 0x11100003;
public $type = null;
public $firstName = null;
public $lastName = null;
public $address = null;
public $email = null;
public $mobilePhone = null;
public function __construct (DOMNode $elem = null)
{
if ($elem != null)
{
$this->loadFromXml($elem);
}
}
protected function loadFromXml (DOMNode $elem)
{
$attr = $elem->attributes->getNamedItem('type');
if ($attr != null)
{
$this->type = $attr->nodeValue;
} else
{
$this->type = self::TYPE_PERSON;
}
$elems = $elem->getElementsByTagName('first_name');
if ($elems->length == 1)
{
$this->firstName = urldecode($elems->item(0)->nodeValue);
}
$elems = $elem->getElementsByTagName('last_name');
if ($elems->length == 1)
{
$this->lastName = urldecode($elems->item(0)->nodeValue);
}
$elems = $elem->getElementsByTagName('address');
if ($elems->length == 1)
{
$this->address = urldecode($elems->item(0)->nodeValue);
}
$elems = $elem->getElementsByTagName('email');
if ($elems->length == 1)
{
$this->email = urldecode($elems->item(0)->nodeValue);
}
$elems = $elem->getElementsByTagName('mobile_phone');
if ($elems->length == 1)
{
$this->mobilePhone = urldecode($elems->item(0)->nodeValue);
}
}
public function createXmlElement (DOMDocument $xmlDoc, $nodeName)
{
if (! ($xmlDoc instanceof DOMDocument))
{
throw new Exception('', self::ERROR_INVALID_PARAMETER);
}
$addrElem = $xmlDoc->createElement($nodeName);
if ($this->type == null)
{
throw new Exception('Invalid address type', self::ERROR_INVALID_ADDRESS_TYPE);
} elseif ($this->type != self::TYPE_COMPANY && $this->type != self::TYPE_PERSON)
{
throw new Exception('Invalid address type', self::ERROR_INVALID_ADDRESS_TYPE_VALUE);
}
$xmlAttr = $xmlDoc->createAttribute('type');
$xmlAttr->nodeValue = $this->type;
$addrElem->appendChild($xmlAttr);
if ($this->firstName != null)
{
$xmlElem = $xmlDoc->createElement('first_name');
$xmlElem->appendChild($xmlDoc->createCDATASection(urlencode($this->firstName)));
$addrElem->appendChild($xmlElem);
}
if ($this->lastName != null)
{
$xmlElem = $xmlDoc->createElement('last_name');
$xmlElem->appendChild($xmlDoc->createCDATASection(urlencode($this->lastName)));
$addrElem->appendChild($xmlElem);
}
if ($this->address != null)
{
$xmlElem = $xmlDoc->createElement('address');
$xmlElem->appendChild($xmlDoc->createCDATASection(urlencode($this->address)));
$addrElem->appendChild($xmlElem);
}
if ($this->email != null)
{
$xmlElem = $xmlDoc->createElement('email');
$xmlElem->appendChild($xmlDoc->createCDATASection(urlencode($this->email)));
$addrElem->appendChild($xmlElem);
}
if ($this->mobilePhone != null)
{
$xmlElem = $xmlDoc->createElement('mobile_phone');
$xmlElem->appendChild($xmlDoc->createCDATASection(urlencode($this->mobilePhone)));
$addrElem->appendChild($xmlElem);
}
return $addrElem;
}
public function toArray ()
{
return array(
'ppiFirstName' => $this->firstName ,
'ppiLastName' => $this->lastName ,
'ppiAddress' => $this->address ,
'ppiEmail' => $this->email ,
'ppiPhone' => $this->mobilePhone);
}
}
<?php
/**
* Class Mobilpay_Payment_Invoice
* @copyright NETOPIA
* @author Claudiu Tudose
* @version 1.0
*
*/
class Mobilpay_Payment_Invoice
{
const ERROR_INVALID_PARAMETER = 0x11110001;
const ERROR_INVALID_CURRENCY = 0x11110002;
const ERROR_ITEM_INSERT_INVALID_INDEX = 0x11110003;
const ERROR_LOAD_FROM_XML_CURRENCY_ATTR_MISSING = 0x31110001;
public $currency = null;
public $amount = null;
public $details = null;
public $installments = null;
public $selectedInstallments = null;
public $tokenId = null;
public $promotionCode = null;
protected $billingAddress = null;
protected $shippingAddress = null;
protected $items = array();
protected $exchangeRates = array();
public function __construct(DOMNode $elem = null)
{
if($elem != null)
{
$this->loadFromXml($elem);
}
}
protected function loadFromXml(DOMNode $elem)
{
$attr = $elem->attributes->getNamedItem('currency');
if($attr == null)
{
throw new Exception('Mobilpay_Payment_Invoice::loadFromXml failed; currency attribute missing', self::ERROR_LOAD_FROM_XML_CURRENCY_ATTR_MISSING);
}
$this->currency = $attr->nodeValue;
$attr = $elem->attributes->getNamedItem('amount');
if($attr != null)
{
$this->amount = $attr->nodeValue;
}
$attr = $elem->attributes->getNamedItem('installments');
if($attr != null)
{
$this->installments = $attr->nodeValue;
}
$attr = $elem->attributes->getNamedItem('selected_installments');
if($attr != null)
{
$this->selectedInstallments = $attr->nodeValue;
}
$attr = $elem->attributes->getNamedItem('token_id');
if($attr != null)
{
$this->tokenId = $attr->nodeValue;
}
$attr = $elem->attributes->getNamedItem('promotion_code');
if($attr != null)
{
$this->promotionCode = $attr->nodeValue;
}
$elems = $elem->getElementsByTagName('details');
if($elems->length == 1)
{
$this->details = urldecode($elems->item(0)->nodeValue);
}
$elems = $elem->getElementsByTagName('contact_info');
if($elems->length == 1)
{
$addrElem = $elems->item(0);
$elems = $addrElem->getElementsByTagName('billing');
if($elems->length == 1)
{
$this->billingAddress = new Mobilpay_Payment_Address($elems->item(0));
}
$elems = $addrElem->getElementsByTagName('shipping');
if($elems->length == 1)
{
$this->shippingAddress = new Mobilpay_Payment_Address($elems->item(0));
}
}
$this->items = array();
$elems = $elem->getElementsByTagName('items');
if($elems->length == 1)
{
$itemElems = $elems->item(0);
$elems = $itemElems->getElementsByTagName('item');
if($elems->length > 0)
{
$amount = 0;
foreach ($elems as $itemElem)
{
try
{
$objItem = new Mobilpay_Payment_Invoice_Item($itemElem);
$this->items[] = $objItem;
$amount += $objItem->getTotalAmount();
}
catch (Exception $e)
{
$e = $e;
continue;
}
}
$this->amount = $amount;
}
}
$this->exchangeRates = array();
$elems = $elem->getElementsByTagName('exchange_rates');
if($elems->length == 1)
{
$rateElems = $elems->item(0);
$elems = $rateElems->getElementsByTagName('rate');
foreach ($elems as $rateElem)
{
try
{
$objRate = new Mobilpay_Payment_Exchange_Rate($rateElem);
$this->exchangeRates[] = $objRate;
}
catch (Exception $e)
{
$e = $e;
continue;
}
}
}
}
public function createXmlElement(DOMDocument $xmlDoc)
{
if(!($xmlDoc instanceof DOMDocument))
{
throw new Exception('', self::ERROR_INVALID_PARAMETER);
}
$xmlInvElem = $xmlDoc->createElement('invoice');
if($this->currency == null)
{
throw new Exception('Invalid currency', self::ERROR_INVALID_CURRENCY);
}
$xmlAttr = $xmlDoc->createAttribute('currency');
$xmlAttr->nodeValue = $this->currency;
$xmlInvElem->appendChild($xmlAttr);
if($this->amount != null)
{
$xmlAttr = $xmlDoc->createAttribute('amount');
$xmlAttr->nodeValue = sprintf('%.02f', doubleval($this->amount));
$xmlInvElem->appendChild($xmlAttr);
}
if($this->installments != null)
{
$xmlAttr = $xmlDoc->createAttribute('installments');
$xmlAttr->nodeValue = $this->installments;
$xmlInvElem->appendChild($xmlAttr);
}
if($this->selectedInstallments != null)
{
$xmlAttr = $xmlDoc->createAttribute('selected_installments');
$xmlAttr->nodeValue = $this->selectedInstallments;
$xmlInvElem->appendChild($xmlAttr);
}
if($this->tokenId != null)
{
$xmlAttr = $xmlDoc->createAttribute('token_id');
$xmlAttr->nodeValue = $this->tokenId;
$xmlInvElem->appendChild($xmlAttr);
}
if($this->promotionCode != null)
{
$xmlAttr = $xmlDoc->createAttribute('promotion_code');
$xmlAttr->nodeValue = $this->promotionCode;
$xmlInvElem->appendChild($xmlAttr);
}
if($this->details != null)
{
$xmlElem = $xmlDoc->createElement('details');
$xmlElem->appendChild($xmlDoc->createCDATASection(urlencode($this->details)));
$xmlInvElem->appendChild($xmlElem);
}
if(($this->billingAddress instanceof Mobilpay_Payment_Address) || ($this->shippingAddress instanceof Mobilpay_Payment_Address))
{
$xmlAddr = null;
if($this->billingAddress instanceof Mobilpay_Payment_Address)
{
try
{
$xmlElem = $this->billingAddress->createXmlElement($xmlDoc, 'billing');
if($xmlAddr == null)
{
$xmlAddr = $xmlDoc->createElement('contact_info');
}
$xmlAddr->appendChild($xmlElem);
}
catch(Exception $e)
{
$e = $e;
}
}
if($this->shippingAddress instanceof Mobilpay_Payment_Address)
{
try
{
$xmlElem = $this->shippingAddress->createXmlElement($xmlDoc, 'shipping');
if($xmlAddr == null)
{
$xmlAddr = $xmlDoc->createElement('contact_info');
}
$xmlAddr->appendChild($xmlElem);
}
catch(Exception $e)
{
$e = $e;
}
}
if($xmlAddr != null)
{
$xmlInvElem->appendChild($xmlAddr);
}
}
if(is_array($this->items) && sizeof($this->items) > 0)
{
$xmlItems = null;
foreach ($this->items as $item)
{
if(!($item instanceof Mobilpay_Payment_Invoice_Item))
{
continue;
}
try
{
$xmlItem = $item->createXmlElement($xmlDoc);
if($xmlItems == null)
{
$xmlItems = $xmlDoc->createElement('items');
}
$xmlItems->appendChild($xmlItem);
}
catch (Exception $e)
{
$e = $e;
}
}
if($xmlItems != null)
{
$xmlInvElem->appendChild($xmlItems);
}
}
if(is_array($this->exchangeRates) && sizeof($this->exchangeRates) > 0)
{
$xmlRates = null;
foreach ($this->exchangeRates as $rate)
{
if(!($rate instanceof Mobilpay_Payment_Exchange_Rate))
{
continue;
}
try
{
$xmlRate = $rate->createXmlElement($xmlDoc);
if($xmlRates == null)
{
$xmlRates = $xmlDoc->createElement('items');
}
$xmlRates->appendChild($xmlRate);
}
catch (Exception $e)
{
$e = $e;
}
}
if($xmlItems != null)
{
$xmlInvElem->appendChild($xmlRates);
}
}
return $xmlInvElem;
}
public function setBillingAddress(Mobilpay_Payment_Address $address)
{
$this->billingAddress = $address;
return $this;
}
public function setShippingAddress(Mobilpay_Payment_Address $address)
{
$this->shippingAddress = $address;
return $this;
}
public function getBillingAddress()
{
return $this->billingAddress;
}
public function getShippingAddress()
{
return $this->shippingAddress;
}
public function addHeadItem(Mobilpay_Payment_Invoice_Item $item)
{
array_unshift($this->items, $item);
return $this;
}
public function addTailItem(Mobilpay_Payment_Invoice_Item $item)
{
array_push($this->items, $item);
return $this;
}
public function removeHeadItem()
{
return array_shift($this->items);
}
public function removeTailItem()
{
return array_pop($this->items);
}
public function addHeadExchangeRate(Mobilpay_Payment_Exchange_Rate $rate)
{
array_unshift($this->exchangeRates, $rate);
return $this;
}
public function addTailExchangeRate(Mobilpay_Payment_Exchange_Rate $rate)
{
array_push($this->exchangeRates, $rate);
return $this;
}
public function removeHeadExchangeRate()
{
return array_shift($this->exchangeRates);
}
public function removeTailExchangeRate()
{
return array_pop($this->exchangeRates);
}
}
<?php
/**
* Class Mobilpay_Payment_Invoice_Item
* @copyright NETOPIA
* @author Claudiu Tudose
* @version 1.0
*
*/
class Mobilpay_Payment_Invoice_Item
{
const ERROR_INVALID_PARAMETER = 0x11111001;
const ERROR_INVALID_PROPERTY = 0x11110002;
const ERROR_LOAD_FROM_XML_CODE_ELEM_MISSING = 0x40000001;
const ERROR_LOAD_FROM_XML_NAME_ELEM_MISSING = 0x40000002;
const ERROR_LOAD_FROM_XML_QUANTITY_ELEM_MISSING = 0x40000003;
const ERROR_LOAD_FROM_XML_QUANTITY_ELEM_EMPTY = 0x40000004;
const ERROR_LOAD_FROM_XML_PRICE_ELEM_MISSING = 0x40000005;
const ERROR_LOAD_FROM_XML_PRICE_ELEM_EMPTY = 0x40000006;
const ERROR_LOAD_FROM_XML_VAT_ELEM_MISSING = 0x40000007;
public $code = null;
public $name = null;
public $measurment = null;
public $quantity = null;
public $price = null;
public $vat = null;
public function __construct(DOMNode $elem = null)
{
if($elem != null)
{
$this->loadFromXml($elem);
}
}
protected function loadFromXml(DOMNode $elem)
{
$elems = $elem->getElementsByTagName('code');
if($elems->length != 1)
{
throw new Exception('Mobilpay_Payment_Invoice_Item::loadFromXml failed! Invalid code element.', self::ERROR_LOAD_FROM_XML_CODE_ELEM_MISSING);
}
$this->code = urldecode($elems->item(0)->nodeValue);
$elems = $elem->getElementsByTagName('name');
if($elems->length != 1)
{
throw new Exception('Mobilpay_Payment_Invoice_Item::loadFromXml failed! Invalid name element.', self::ERROR_LOAD_FROM_XML_NAME_ELEM_MISSING);
}
$this->name = urldecode($elems->item(0)->nodeValue);
$elems = $elem->getElementsByTagName('measurment');
if($elems->length == 1)
{
$this->measurment = urldecode($elems->item(0)->nodeValue);
}
$elems = $elem->getElementsByTagName('quantity');
if($elems->length != 1)
{
throw new Exception('Mobilpay_Payment_Invoice_Item::loadFromXml failed! Invalid quantity element.', self::ERROR_LOAD_FROM_XML_QUANTITY_ELEM_MISSING);
}
$this->quantity = doubleval(urldecode($elems->item(0)->nodeValue));
if($this->quantity == 0)
{
throw new Exception('Mobilpay_Payment_Invoice_Item::loadFromXml failed! Invalid quantity value=' . $this->quantity, self::ERROR_LOAD_FROM_XML_QUANTITY_ELEM_EMPTY);
}
$elems = $elem->getElementsByTagName('price');
if($elems->length != 1)
{
throw new Exception('Mobilpay_Payment_Invoice_Item::loadFromXml failed! Invalid price element.', self::ERROR_LOAD_FROM_XML_PRICE_ELEM_MISSING);
}
$this->price = doubleval(urldecode($elems->item(0)->nodeValue));
if($this->price == 0)
{
throw new Exception('Mobilpay_Payment_Invoice_Item::loadFromXml failed! Invalid price value=' . $this->price, self::ERROR_LOAD_FROM_XML_PRICE_ELEM_EMPTY);
}
$elems = $elem->getElementsByTagName('vat');
if($elems->length != 1)
{
throw new Exception('Mobilpay_Payment_Invoice_Item::loadFromXml failed! Invalid vat element.', self::ERROR_LOAD_FROM_XML_VAT_ELEM_MISSING);
}
$this->vat = doubleval(urldecode($elems->item(0)->nodeValue));
return $this;
}
public function createXmlElement(DOMDocument $xmlDoc)
{
if(!($xmlDoc instanceof DOMDocument))
{
throw new Exception('', self::ERROR_INVALID_PARAMETER);
}
$xmlItemElem = $xmlDoc->createElement('item');
if($this->code == null || $this->name == null || $this->measurment == null || $this->quantity == null || $this->price == null || $this->vat == null)
{
throw new Exception('Invalid property', self::ERROR_INVALID_PROPERTY);
}
$xmlElem = $xmlDoc->createElement('code');
$xmlElem->appendChild($xmlDoc->createCDATASection(urlencode($this->code)));
$xmlItemElem->appendChild($xmlElem);
$xmlElem = $xmlDoc->createElement('name');
$xmlElem->appendChild($xmlDoc->createCDATASection(urlencode($this->name)));
$xmlItemElem->appendChild($xmlElem);
$xmlElem = $xmlDoc->createElement('measurment');
$xmlElem->appendChild($xmlDoc->createCDATASection(urlencode($this->measurment)));
$xmlItemElem->appendChild($xmlElem);
$xmlElem = $xmlDoc->createElement('quantity');
$xmlElem->nodeValue = $this->quantity;
$xmlItemElem->appendChild($xmlElem);
$xmlElem = $xmlDoc->createElement('price');
$xmlElem->nodeValue = $this->price;
$xmlItemElem->appendChild($xmlElem);
$xmlElem = $xmlDoc->createElement('vat');
$xmlElem->nodeValue = $this->vat;
$xmlItemElem->appendChild($xmlElem);
return $xmlItemElem;
}
public function getTotalAmmount()
{
$value = round($this->price * $this->quantity, 2);
$vat = round($value * $this->vat, 2);
return ($value + $vat);
}
}
<?php
/**
* Class Mobilpay_Payment_Request
* This class can be used for accessing mobilpay.ro payment interface for your configured online services
* @copyright NETOPIA
* @author Claudiu Tudose
* @version 1.0
*
* This class uses OpenSSL
* In order to use the OpenSSL functions you need to install the OpenSSL package.
* See PHP documentation for installing OpenSSL package
*/
class Mobilpay_Payment_Request
{
const PAYMENT_TYPE_SMS = 0x01;
const PAYMENT_TYPE_CARD = 0x02;
#declare member variables
/**
* m_signatue (Mandatory) - signature received from mobilpay.Ro that identifies merchant account
*
* @var string(24)
*/
public $m_signature = null;
/**
* m_service (Mandatory) - signature received from mobilpay.ro thet identifies the online service for which you are requesting a payment
*/
public $m_service = null;
/**
* m_tran_id (Mandatory) - payment transaction generated by seller; helps seller to interpret a request to return url; it should be unique for the specified service
*
* @var string(64)
*/
public $m_type = self::PAYMENT_TYPE_SMS;
public $m_details = null;
public $m_price = null;
public $m_currency = null;
public $m_tran_id = null;
/**
* m_timetsamp (Mandatory) - merchant's site datetime when the transaction was generated expressed as YYYYMMDDhhmmss
*
* @var string
*/
public $m_timestamp = null;
/**
* m_return_url (Optional) - URL where the user is redirected from mobilpay.Ro payment interface
* when the transaction is canceled or confirmed. If it is not supplied the application will use
* return URL configured for the specified service in control panel
*
* @var string
*/
public $m_return_url = null;
/**
* m_confirm_url (Optional) - URL of the seller that will be requested when mobilpay.ro will make
* a decision about payment (e.g. confirmed, canceled). If it is not supplied the application will use
* confirm URL configured for the specified service in control panel
*
* @var string
*/
public $m_confirm_url = null;
/**
* m_first_name (Optional) - First name of the customer.
*
* @var string(255)
*/
public $m_first_name = null;
/**
* m_last_name (Optional) - Last name of the customer.
*
* @var string(255)
*/
public $m_last_name = null;
/**
* m_msisdn (Optional) - MSISDN (mobile phone numner) of the customer. If it's supplied it should be in 07XXXXXXXX format.
* If it's supplied mobilpay.ro will use it for checking if payment is allowed for the specified service automaticaly
*
* @var string(10)
*/
public $m_msisdn = null;
/**
* m_params (Optional) - additional parameters sent to mobilpay.ro secure payment portal
*
* @var array
*/
public $m_params = array();
function Mobilpay_Payment_Request()
{
}
public function builParametersList()
{
if(is_null($this->m_signature) || /*is_null($this->m_service) || */is_null($this->m_tran_id) || is_null($this->m_timestamp))
return null;
$params['signature'] = urlencode($this->m_signature);
if($this->m_service != null)
{
$params['service'] = urlencode($this->m_service);
}
$params['tran_id'] = urlencode($this->m_tran_id);
$params['timestamp'] = urlencode($this->m_timestamp);
if($this->m_type == null)
{
$this->m_type = self::PAYMENT_TYPE_SMS;
}
$params['type'] = urlencode($this->m_type);
if($this->m_details != null)
{
$params['details'] = urlencode($this->m_details);
}
if($this->m_price != null)
{
$params['price'] = urlencode(sprintf('%.02f', $this->m_price));
}
if($this->m_currency != null)
{
$params['currency'] = urlencode($this->m_currency);
}
if(!is_null($this->m_return_url))
$params['return_url'] = urlencode($this->m_return_url);
if(!is_null($this->m_confirm_url))
$params['confirm_url'] = urlencode($this->m_confirm_url);
if(!is_null($this->m_first_name))
$params['first_name'] = urlencode($this->m_first_name);
if(!is_null($this->m_last_name))
$params['last_name'] = urlencode($this->m_last_name);
if(!is_null($this->m_msisdn))
$params['msisdn'] = urlencode($this->m_msisdn);
if(is_array($this->m_params))
{
foreach ($this->m_params as $key=>$value)
{
if(isset($params[$key]))
continue;
$params[$key] = urlencode($value);
}
}
$params['crc'] = Mobilpay_Global::buildCRC($params);
return $params;
}
static function buildQueryString($params)
{
$crc_pairs = array();
foreach ($params as $key=>$value)
$crc_pairs[] = "{$key}={$value}";
return implode('&', $crc_pairs);
}
/**
* access Mobilpay.Ro secure payment portal
*
* @param resource $public_key - obtained by calling openssl_pkey_get_public
* @param string &$env_key - returns envelope key base64 encoded or null if function fails
* @param string &$enc_data - returns data to post base64 encoded or null if function fails
*
* @return boolean
*/
public function buildAccessParameters($public_key, &$env_key, &$enc_data)
{
$params = $this->builParametersList();
if(is_null($params))
return false;
$src_data = Mobilpay_Payment_Request::buildQueryString($params);
$enc_data = '';
$env_keys = array();
$result = openssl_seal($src_data, $enc_data, $env_keys, array($public_key));
if($result === false)
{
$env_key = null;
$enc_data = null;
return false;
}
$env_key = base64_encode($env_keys[0]);
$enc_data = base64_encode($enc_data);
return true;
}
}
<?php
/**
* Class Mobilpay_Payment_Request_Abstract
* This class can be used for accessing mobilpay.ro payment interface for your configured online services
* @copyright NETOPIA
* @author Claudiu Tudose
* @version 1.0
*
* This class uses OpenSSL
* In order to use the OpenSSL functions you need to install the OpenSSL package.
* Check PHP documentation for installing OpenSSL package
*/
abstract class Mobilpay_Payment_Request_Abstract
{
const PAYMENT_TYPE_SMS = 'sms';
const PAYMENT_TYPE_CARD = 'card';
const CONFIRM_ERROR_TYPE_NONE = 0x00;
const CONFIRM_ERROR_TYPE_TEMPORARY = 0x01;
const CONFIRM_ERROR_TYPE_PERMANENT = 0x02;
const ERROR_LOAD_X509_CERTIFICATE = 0x10000001;
const ERROR_ENCRYPT_DATA = 0x10000002;
const ERROR_PREPARE_MANDATORY_PROPERTIES_UNSET = 0x11000001;
const ERROR_FACTORY_BY_XML_ORDER_ELEM_NOT_FOUND = 0x20000001;
const ERROR_FACTORY_BY_XML_ORDER_TYPE_ATTR_NOT_FOUND = 0x20000002;
const ERROR_FACTORY_BY_XML_INVALID_TYPE = 0x20000003;
const ERROR_LOAD_FROM_XML_ORDER_ID_ATTR_MISSING = 0x30000001;
const ERROR_LOAD_FROM_XML_SIGNATURE_ELEM_MISSING = 0x30000002;
const ERROR_CONFIRM_LOAD_PRIVATE_KEY = 0x300000f0;
const ERROR_CONFIRM_FAILED_DECODING_DATA = 0x300000f1;
const ERROR_CONFIRM_FAILED_DECODING_ENVELOPE_KEY = 0x300000f2;
const ERROR_CONFIRM_FAILED_DECRYPT_DATA = 0x300000f3;
const ERROR_CONFIRM_INVALID_POST_METHOD = 0x300000f4;
const ERROR_CONFIRM_INVALID_POST_PARAMETERS = 0x300000f5;
const ERROR_CONFIRM_INVALID_ACTION = 0x300000f6;
const VERSION_QUERY_STRING = 0x01;
const VERSION_XML = 0x02;
#declare member variables
/**
* signatue (Mandatory) - signature received from mobilpay.ro that identifies merchant account
*
* @var string(64)
*/
public $signature = null;
/**
* service - identifier of service/product for which you're requesting a payment
* Mandatory for Mobilpay_Payment_Request_Sms
* Optional for Mobilpay_Payment_Request_Card
*/
public $service = null;
/**
* orderId (Mandatory) - payment transaction identifier generated by merchant; helps merchant to interpret a request to confirm or return url;
* it should be unique for the specified signature
*
* @var string(64)
*/
public $orderId = null;
public $timestamp = null;
public $type = self::PAYMENT_TYPE_SMS;
public $objPmNotify = null;
/**
* returnUrl (Optional) - URL where the user is redirected from mobilpay.ro payment interface
* when the transaction is canceled or confirmed. If it is not supplied the application will use
* return URL configured in control panel
* use it only if you want to overwrite the configured one otherwise set it's value to NULL
*
* @var string
*/
public $returnUrl = null;
/**
* confirmUrl (Optional) - URL of the seller that will be requested when mobilpay.ro will make
* a decision about payment (e.g. confirmed, canceled). If it is not supplied the application will use
* confirm URL configured in control panel
* use it only if you want to overwrite the configured one otherwise set it's value to NULL
*
* @var string
*/
public $confirmUrl = null;
public $params = array();
/**
* outEnvKey - output envelope key
* in this property is stored the envelope key after encrypting data to send to payment interface
*/
private $outEnvKey = null;
/**
* outEncData - output encrypted data
* in this property is stored the encrypted data to send to payment interface
*/
private $outEncData = null;
protected $_xmlDoc = null;
protected $_requestIdentifier = null;
protected $_objRequestParams= null;
protected $_objRequestInfo = null;
public $objReqNotify = null;
public function __construct()
{
srand((double) microtime() * 1000000);
$this->_requestIdentifier = md5(uniqid(rand()));
$this->_objRequestParams = new stdClass();
}
abstract protected function _prepare();
abstract protected function _loadFromXml(DOMElement $elem);
static public function factory($data)
{
$objPmReq = null;
$xmlDoc = new DOMDocument();
if(@$xmlDoc->loadXML($data) === true)
{
//try to create payment request from xml
$objPmReq = Mobilpay_Payment_Request_Abstract::_factoryFromXml($xmlDoc);
$objPmReq->_setRequestInfo(self::VERSION_XML, $data);
}
else
{
//try to create payment request from query string
$objPmReq = Mobilpay_Payment_Request_Abstract::_factoryFromQueryString($data);
$objPmReq->_setRequestInfo(self::VERSION_QUERY_STRING, $data);
}
return $objPmReq;
}
static public function factoryFromEncrypted($envKey, $encData, $privateKeyFilePath, $privateKeyPassword = null)
{
$privateKey = null;
if($privateKeyPassword == null)
{
$privateKey = @openssl_get_privatekey("file://{$privateKeyFilePath}");
}
else
{
$privateKey = @openssl_get_privatekey("file://{$privateKeyFilePath}", $privateKeyPassword);
}
if($privateKey === false)
{
throw new Exception('Error loading private key', self::ERROR_CONFIRM_LOAD_PRIVATE_KEY);
}
$srcData = base64_decode($encData);
if($srcData === false)
{
@openssl_free_key($privateKey);
throw new Exception('Failed decoding data', self::ERROR_CONFIRM_FAILED_DECODING_DATA);
}
$srcEnvKey = base64_decode($envKey);
if($srcEnvKey === false)
{
throw new Exception('Failed decoding envelope key', self::ERROR_CONFIRM_FAILED_DECODING_ENVELOPE_KEY);
}
$data = null;
$result = @openssl_open($srcData, $data, $srcEnvKey, $privateKey);
if($result === false)
{
throw new Exception('Failed decrypting data', self::ERROR_CONFIRM_FAILED_DECRYPT_DATA);
}
return Mobilpay_Payment_Request_Abstract::factory($data);
}
static protected function _factoryFromXml(DOMDocument $xmlDoc)
{
$elems = $xmlDoc->getElementsByTagName('order');
if($elems->length != 1)
{
throw new Exception('factoryFromXml order element not found', Mobilpay_Payment_Request_Abstract::ERROR_FACTORY_BY_XML_ORDER_ELEM_NOT_FOUND);
}
$orderElem = $elems->item(0);
$attr = $orderElem->attributes->getNamedItem('type');
if($attr == null || strlen($attr->nodeValue) == 0)
{
throw new Exception('factoryFromXml invalid payment request type=' . $attr->nodeValue, Mobilpay_Payment_Request_Abstract::ERROR_FACTORY_BY_XML_ORDER_TYPE_ATTR_NOT_FOUND);
}
switch ($attr->nodeValue)
{
case Mobilpay_Payment_Request_Abstract::PAYMENT_TYPE_CARD:
$objPmReq = new Mobilpay_Payment_Request_Card();
break;
case Mobilpay_Payment_Request_Abstract::PAYMENT_TYPE_SMS:
$objPmReq = new Mobilpay_Payment_Request_Sms();
break;
default:
throw new Exception('factoryFromXml invalid payment request type=' . $attr->nodeValue, Mobilpay_Payment_Request_Abstract::ERROR_FACTORY_BY_XML_INVALID_TYPE);
break;
}
$objPmReq->_loadFromXml($orderElem);
return $objPmReq;
}
static protected function _factoryFromQueryString($data)
{
$objPmReq = new Mobilpay_Payment_Request_Sms();
$objPmReq->_loadFromQueryString($data);
return $objPmReq;
}
protected function _setRequestInfo($reqVersion, $reqData)
{
$this->_objRequestInfo = new stdClass();
$this->_objRequestInfo->reqVersion = $reqVersion;
$this->_objRequestInfo->reqData = $reqData;
}
public function getRequestInfo()
{
return $this->_objRequestInfo;
}
protected function _parseFromXml(DOMNode $elem)
{
$xmlAttr = $elem->attributes->getNamedItem('id');
if($xmlAttr == null || strlen((string)$xmlAttr->nodeValue) == 0)
{
throw new Exception('Mobilpay_Payment_Request_Sms::_parseFromXml failed: empty order id', self::ERROR_LOAD_FROM_XML_ORDER_ID_ATTR_MISSING);
}
$this->orderId = $xmlAttr->nodeValue;
$elems = $elem->getElementsByTagName('signature');
if($elems->length != 1)
{
throw new Exception('Mobilpay_Payment_Request_Sms::loadFromXml failed: signature is missing', self::ERROR_LOAD_FROM_XML_SIGNATURE_ELEM_MISSING);
}
$xmlElem = $elems->item(0);
$this->signature = $xmlElem->nodeValue;
$elems = $elem->getElementsByTagName('url');
if($elems->length == 1)
{
$xmlElem = $elems->item(0);
//check for overwritten return url
$elems = $xmlElem->getElementsByTagName('return');
if($elems->length == 1)
{
$this->returnUrl = $elems->item(0)->nodeValue;
}
//check for overwritten confirm url
$elems = $xmlElem->getElementsByTagName('confirm');
if($elems->length == 1)
{
$this->confirmUrl = $elems->item(0)->nodeValue;
}
}
$this->params = array();
$paramElems = $elem->getElementsByTagName('params');
if($paramElems->length == 1)
{
$paramElems = $paramElems->item(0)->getElementsByTagName('param');
for ($i = 0; $i < $paramElems->length; $i++)
{
$xmlParam = $paramElems->item($i);
$elems = $xmlParam->getElementsByTagName('name');
if($elems->length != 1)
{
continue;
}
$paramName = $elems->item(0)->nodeValue;
$elems = $xmlParam->getElementsByTagName('value');
if($elems->length != 1)
{
continue;
}
$this->params[$paramName] = urldecode($elems->item(0)->nodeValue);
}
}
$elems = $elem->getElementsByTagName('mobilpay');
if($elems->length == 1)
{
$this->objPmNotify = new Mobilpay_Payment_Request_Notify();
$this->objPmNotify->loadFromXml($elems->item(0));
}
}
public function encrypt($x509FilePath)
{
$this->_prepare();
$publicKey = openssl_pkey_get_public("file://{$x509FilePath}");
if($publicKey === false)
{
$this->outEncData = null;
$this->outEnvKey = null;
$errorMessage = "Error while loading X509 public key certificate! Reason:";
while(($errorString = openssl_error_string()))
{
$errorMessage .= $errorString . "\n";
}
throw new Exception($errorMessage, self::ERROR_LOAD_X509_CERTIFICATE);
}
$srcData = $this->_xmlDoc->saveXML();
$publicKeys = array($publicKey);
$encData = null;
$envKeys = null;
$result = openssl_seal($srcData, $encData, $envKeys, $publicKeys);
if($result === false)
{
$this->outEncData = null;
$this->outEnvKey = null;
$errorMessage = "Error while encrypting data! Reason:";
while(($errorString = openssl_error_string()))
{
$errorMessage .= $errorString . "\n";
}
throw new Exception($errorMessage, self::ERROR_ENCRYPT_DATA);
}
$this->outEncData = base64_encode($encData);
$this->outEnvKey = base64_encode($envKeys[0]);
}
public function getEnvKey()
{
return $this->outEnvKey;
}
public function getEncData()
{
return $this->outEncData;
}
public function getRequestIdentifier()
{
return $this->_requestIdentifier;
}
public function __isset($name)
{
return (isset($this->_objRequestParams) && isset($this->_objRequestParams->$name));
}
public function __set($name, $value)
{
$this->_objRequestParams->$name = $value;
}
public function __get($name)
{
if (!isset($this->_objRequestParams) || !isset($this->_objRequestParams->$name))
{
return null;
}
return $this->_objRequestParams->$name;
}
public function __wakeup(){
$this->_objRequestParams= new stdClass();
}
public function __sleep()
{
return array('_requestIdentifier','orderId','signature', 'returnUrl', 'confirmUrl', 'params');
}
}
<?php
/**
* Class Mobilpay_Payment_Request_Card
* This class can be used for accessing mobilpay.ro payment interface for your configured online services
* @copyright NETOPIA
* @author Claudiu Tudose
* @version 1.0
*
*/
class Mobilpay_Payment_Request_Card extends Mobilpay_Payment_Request_Abstract
{
const ERROR_LOAD_FROM_XML_ORDER_INVOICE_ELEM_MISSING = 0x30000001;
public $invoice = null;
function __construct()
{
parent::__construct();
$this->type = self::PAYMENT_TYPE_CARD;
}
protected function _loadFromXml(DOMElement $elem)
{
parent::_parseFromXml($elem);
//card request specific data
$elems = $elem->getElementsByTagName('invoice');
if($elems->length != 1)
{
throw new Exception('Mobilpay_Payment_Request_Card::loadFromXml failed; invoice element is missing', self::ERROR_LOAD_FROM_XML_ORDER_INVOICE_ELEM_MISSING);
}
$this->invoice = new Mobilpay_Payment_Invoice($elems->item(0));
return $this;
}
protected function _prepare()
{
if(is_null($this->signature) || is_null($this->orderId) || !($this->invoice instanceof Mobilpay_Payment_Invoice))
{
throw new Exception('One or more mandatory properties are invalid!', self::ERROR_PREPARE_MANDATORY_PROPERTIES_UNSET);
}
$this->_xmlDoc = new DOMDocument('1.0', 'utf-8');
$rootElem = $this->_xmlDoc->createElement('order');
//set payment type attribute
$xmlAttr = $this->_xmlDoc->createAttribute('type');
$xmlAttr->nodeValue = $this->type;
$rootElem->appendChild($xmlAttr);
//set id attribute
$xmlAttr = $this->_xmlDoc->createAttribute('id');
$xmlAttr->nodeValue = $this->orderId;
$rootElem->appendChild($xmlAttr);
//set timestamp attribute
$xmlAttr = $this->_xmlDoc->createAttribute('timestamp');
$xmlAttr->nodeValue = date('YmdHis');
$rootElem->appendChild($xmlAttr);
$xmlElem = $this->_xmlDoc->createElement('signature');
$xmlElem->nodeValue = $this->signature;
$rootElem->appendChild($xmlElem);
$xmlElem = $this->invoice->createXmlElement($this->_xmlDoc);
$rootElem->appendChild($xmlElem);
if(is_array($this->params) && sizeof($this->params) > 0)
{
$xmlParams = $this->_xmlDoc->createElement('params');
foreach ($this->params as $key=>$value)
{
$xmlParam = $this->_xmlDoc->createElement('param');
$xmlName = $this->_xmlDoc->createElement('name');
$xmlName->nodeValue = trim($key);
$xmlParam->appendChild($xmlName);
$xmlValue = $this->_xmlDoc->createElement('value');
$xmlValue->appendChild($this->_xmlDoc->createCDATASection($value));
$xmlParam->appendChild($xmlValue);
$xmlParams->appendChild($xmlParam);
}
$rootElem->appendChild($xmlParams);
}
if(!is_null($this->returnUrl) || !is_null($this->confirmUrl))
{
$xmlUrl = $this->_xmlDoc->createElement('url');
if(!is_null($this->returnUrl))
{
$xmlElem = $this->_xmlDoc->createElement('return');
$xmlElem->nodeValue = $this->returnUrl;
$xmlUrl->appendChild($xmlElem);
}
if(!is_null($this->confirmUrl))
{
$xmlElem = $this->_xmlDoc->createElement('confirm');
$xmlElem->nodeValue = $this->confirmUrl;
$xmlUrl->appendChild($xmlElem);
}
$rootElem->appendChild($xmlUrl);
}
$this->_xmlDoc->appendChild($rootElem);
return $this;
}
}
<?php
/**
* mobilPay
*
* @package Mobilpay_Payment_Request_Notify
* @copyright Copyright (c)NETOPIA
* @author Claudiu Tudose <claudiu.tudose@netopia-system.com>
*
* This class is used for the IPN
*/
class Mobilpay_Payment_Request_Notify {
/**
*
* class-specific errors
* @var integer
*/
const ERROR_LOAD_FROM_XML_CRC_ATTR_MISSING = 0x60000001;
const ERROR_LOAD_FROM_XML_ACTION_ELEM_MISSING = 0x60000002;
/**
*
* class-specific properties
* @var string
*/
public $purchaseId = null;
public $action = null;
public $errorCode = null;
public $errorMessage = null;
public $timestamp = null;
public $originalAmount = null;
public $processedAmount = null;
public $promotionAmount = null;
public $pan_masked = null;
public $token_id = null;
public $token_expiration_date = null;
public $customer_id = null;
public $customer_type = null;
public $customer = null;
public $issuer = null;
public $paidByPhone = null;
public $validationCode = null;
public $installments = null;
public $rrn = null;
/**
*
* In a recurrent payment context the value of this property identifies the payment number
* @var integer
*/
public $current_payment_count = 1;
/**
*
* The id of the payment instrument
* @var integer
*/
public $paymentInstrumentId = null;
/**
*
* Array of discounts that have been applied in the payment process
* @var array
*/
public $discounts = Array();
/**
*
* CRC hash
* @var string
*/
private $_crc = null;
/**
*
* parameters array
* @var array
*/
public $params = array();
/**
*
* Constructor
*/
function __construct() {
}
/**
*
* Populate the class from the request xml
* @param DOMNode $elem
* @return Mobilpay_Payment_Reuquest_Notify
* @throws Exception On missing xml attributes
*/
public function loadFromXml(DOMElement $elem) {
$attr = $elem->attributes->getNamedItem('timestamp');
if ($attr != null) {
$this->timestamp = $attr->nodeValue;
}
$attr = $elem->attributes->getNamedItem('crc');
if ($attr == null) {
throw new Exception('Mobilpay_Payment_Request_Notify::loadFromXml failed; mandatory crc attribute missing', self::ERROR_LOAD_FROM_XML_CRC_ATTR_MISSING);
}
$this->_crc = $attr->nodeValue;
$elems = $elem->getElementsByTagName('action');
if ($elems->length != 1) {
throw new Exception('Mobilpay_Payment_Request_Notify::loadFromXml failed; mandatory action attribute missing', self::ERROR_LOAD_FROM_XML_ACTION_ELEM_MISSING);
}
$this->action = $elems->item(0)->nodeValue;
$elems = $elem->getElementsByTagName('customer');
if ($elems->length == 1) {
$this->customer = new Mobilpay_Payment_Address($elems->item(0));
}
$elems = $elem->getElementsByTagName('issuer');
if ($elems->length == 1) {
$this->issuer = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('rrn');
if ($elems->length == 1)
{
$this->rrn = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('purchase');
if ($elems->length == 1) {
$this->purchaseId = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('original_amount');
if ($elems->length == 1) {
$this->originalAmount = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('processed_amount');
if ($elems->length == 1) {
$this->processedAmount = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('promotion_amount');
if ($elems->length == 1) {
$this->promotionAmount = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('current_payment_count');
if ($elems->length == 1) {
$this->current_payment_count = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('pan_masked');
if ($elems->length == 1) {
$this->pan_masked = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('payment_instrument_id');
if ($elems->length == 1) {
$this->paymentInstrumentId = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('token_id');
if ($elems->length == 1) {
$this->token_id = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('token_expiration_date');
if ($elems->length == 1) {
$this->token_expiration_date = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('customer_type');
if ($elems->length == 1) {
$this->customer_type = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('customer_id');
if ($elems->length == 1) {
$this->customer_id = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('paid_by_phone');
if ($elems->length == 1) {
$this->paidByPhone = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('validation_code');
if ($elems->length == 1) {
$this->validationCode = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('installments');
if ($elems->length == 1) {
$this->installments = $elems->item(0)->nodeValue;
}
$elems = $elem->getElementsByTagName('discounts');
if ($elems->length == 1) {
$doaElems = $elems->item(0)->getElementsByTagName('discount');
$this->discounts = Array();
foreach ($doaElems as $de) {
$doaEntry = new stdClass();
$doaEntry->id = $de->attributes->getNamedItem('id')->nodeValue;
$doaEntry->amount = $de->attributes->getNamedItem('amount')->nodeValue;
$doaEntry->currency = $de->attributes->getNamedItem('currency')->nodeValue;
$doaEntry->third_party = $de->attributes->getNamedItem('third_party')->nodeValue;
$this->discounts[] = $doaEntry;
}
}
$elems = $elem->getElementsByTagName('error');
if ($elems->length == 1) {
$xmlErrorElem = $elems->item(0);
$attr = $xmlErrorElem->attributes->getNamedItem('code');
if ($attr != null) {
$this->errorCode = $attr->nodeValue;
}
$this->errorMessage = $xmlErrorElem->nodeValue;
}
}
/**
*
* Populates the object from a sms payment request query string
* @param string $queryString
* @throws Exception On missing attributes
*/
public function _loadFromQueryString($queryString) {
$parameters = explode('&', $queryString);
$reqParams = array();
foreach ($parameters as $item) {
list($key, $value) = explode('=', $item);
$reqParams[$key] = urldecode($value);
}
$this->purchaseId = isset($reqParams['mobilpay_refference_id']) ? $reqParams['mobilpay_refference_id'] : null;
$this->action = isset($reqParams['mobilpay_refference_action']) ? $reqParams['mobilpay_refference_action'] : null;
$this->originalAmount = isset($reqParams['mobilpay_refference_original_amount']) ? $reqParams['mobilpay_refference_original_amount'] : null;
$this->processedAmount = isset($reqParams['mobilpay_refference_processed_amount']) ? $reqParams['mobilpay_refference_processed_amount'] : null;
$this->promotionAmount = isset($reqParams['mobilpay_refference_promotion_amount']) ? $reqParams['mobilpay_refference_promotion_amount'] : null;
$this->current_payment_count = isset($reqParams['mobilpay_refference_current_payment_count']) ? $reqParams['mobilpay_refference_current_payment_count'] : null;
$this->pan_masked = isset($reqParams['mobilpay_refference_pan_masked']) ? $reqParams['mobilpay_refference_pan_masked'] : null;
$this->token_id = isset($reqParams['mobilpay_refference_token_id']) ? $reqParams['mobilpay_refference_token_id'] : null;
$this->token_expiration_date = isset($reqParams['mobilpay_refference_token_expiration_date']) ? $reqParams['mobilpay_refference_token_expiration_date'] : null;
$this->customer_id = isset($reqParams['mobilpay_refference_customer_id']) ? $reqParams['mobilpay_refference_customer_id'] : null;
$this->customer_type = isset($reqParams['mobilpay_refference_customer_type']) ? $reqParams['mobilpay_refference_customer_type'] : null;
$this->errorCode = isset($reqParams['mobilpay_refference_error_code']) ? $reqParams['mobilpay_refference_error_code'] : null;
$this->errorMessage = isset($reqParams['mobilpay_refference_error_message']) ? $reqParams['mobilpay_refference_error_message'] : null;
$this->timestamp = isset($reqParams['mobilpay_refference_timestamp']) ? $reqParams['mobilpay_refference_timestamp'] : null;
}
/**
*
* Appends to computed xml element to the xmlDoc and returns it
* @param DOMDocument $xmlDoc
* @return DOMElement
*/
public function createXmlElement(DOMDocument $xmlDoc) {
$xmlNotifyElem = $xmlDoc->createElement('mobilpay');
$attr = $xmlDoc->createAttribute('timestamp');
$attr->nodeValue = date('YmdHis');
$xmlNotifyElem->appendChild($attr);
$this->_crc = md5(rand() . time());
$attr = $xmlDoc->createAttribute('crc');
$attr->nodeValue = $this->_crc;
$xmlNotifyElem->appendChild($attr);
$elem = $xmlDoc->createElement('action');
$elem->nodeValue = $this->action;
$xmlNotifyElem->appendChild($elem);
if ($this->customer instanceof Mobilpay_Payment_Address) {
$xmlNotifyElem->appendChild($this->customer->createXmlElement($xmlDoc, 'customer'));
}
$elem = $xmlDoc->createElement('purchase');
$elem->nodeValue = $this->purchaseId;
$xmlNotifyElem->appendChild($elem);
if ($this->originalAmount != null) {
$elem = $xmlDoc->createElement('original_amount');
$elem->nodeValue = $this->originalAmount;
$xmlNotifyElem->appendChild($elem);
}
if ($this->processedAmount != null) {
$elem = $xmlDoc->createElement('processed_amount');
$elem->nodeValue = $this->processedAmount;
$xmlNotifyElem->appendChild($elem);
}
if ($this->promotionAmount != null) {
$elem = $xmlDoc->createElement('promotion_amount');
$elem->nodeValue = $this->promotionAmount;
$xmlNotifyElem->appendChild($elem);
}
if (is_null($this->current_payment_count) == FALSE) {
$elem = $xmlDoc->createElement('current_payment_count');
$elem->nodeValue = $this->current_payment_count;
$xmlNotifyElem->appendChild($elem);
}
if (is_null($this->pan_masked) == FALSE) {
$elem = $xmlDoc->createElement('pan_masked');
$elem->nodeValue = $this->pan_masked;
$xmlNotifyElem->appendChild($elem);
}
if (is_null($this->rrn) == FALSE)
{
$elem = $xmlDoc->createElement('rrn');
$elem->nodeValue = $this->rrn;
$xmlNotifyElem->appendChild($elem);
}
if (is_null($this->paymentInstrumentId) == FALSE) {
$elem = $xmlDoc->createElement('payment_instrument_id');
$elem->nodeValue = $this->paymentInstrumentId;
$xmlNotifyElem->appendChild($elem);
}
if (is_null($this->token_id) == FALSE) {
$elem = $xmlDoc->createElement('token_id');
$elem->nodeValue = $this->token_id;
$xmlNotifyElem->appendChild($elem);
}
if (is_null($this->token_expiration_date) == FALSE) {
$elem = $xmlDoc->createElement('token_expiration_date');
$elem->nodeValue = $this->token_expiration_date;
$xmlNotifyElem->appendChild($elem);
}
if (is_null($this->customer_type) == FALSE) {
$elem = $xmlDoc->createElement('customer_type');
$elem->nodeValue = $this->customer_type;
$xmlNotifyElem->appendChild($elem);
} else {
//TODO alex
}
if (is_null($this->customer_id) == FALSE) {
$elem = $xmlDoc->createElement('customer_id');
$elem->nodeValue = $this->customer_id;
$xmlNotifyElem->appendChild($elem);
}
if ($this->issuer != null) {
$elem = $xmlDoc->createElement('issuer');
$elem->nodeValue = $this->issuer;
$xmlNotifyElem->appendChild($elem);
}
if ($this->paidByPhone != null) {
$elem = $xmlDoc->createElement('paid_by_phone');
$elem->nodeValue = $this->paidByPhone;
$xmlNotifyElem->appendChild($elem);
}
if ($this->validationCode != null) {
$elem = $xmlDoc->createElement('validation_code');
$elem->nodeValue = $this->validationCode;
$xmlNotifyElem->appendChild($elem);
}
if ($this->installments != null) {
$elem = $xmlDoc->createElement('installments');
$elem->nodeValue = $this->installments;
$xmlNotifyElem->appendChild($elem);
}
if (is_array($this->discounts) && sizeof($this->discounts) > 0) {
$elem = $xmlDoc->createElement('discounts');
foreach ($this->discounts as $d) {
$discount = $xmlDoc->createElement('discount');
$attributes = Array(
'id',
'amount',
'currency',
'third_party'
);
foreach ($attributes as $attr_name) {
$attr = $xmlDoc->createAttribute($attr_name);
$attr->nodeValue = $d->$attr_name;
$discount->appendChild($attr);
$elem->appendChild($discount);
}
}
$xmlNotifyElem->appendChild($elem);
}
// if (is_array($this->params) && sizeof($this->params) > 0) {
// $xmlParams = $xmlDoc->createElement('params');
// foreach ($this->params as $key => $value) {
// if (is_array($value)) {
// foreach ($value as $v) {
// $xmlParam = $xmlDoc->createElement('param');
// $xmlName = $xmlDoc->createElement('name');
// $xmlName->nodeValue = trim($key);
// $xmlParam->appendChild($xmlName);
// $xmlValue = $xmlDoc->createElement('value');
// $xmlValue->appendChild($xmlDoc->createCDATASection($v));
// $xmlParam->appendChild($xmlValue);
// $xmlParams->appendChild($xmlParam);
// }
// } else {
// $xmlParam = $xmlDoc->createElement('param');
// $xmlName = $xmlDoc->createElement('name');
// $xmlName->nodeValue = trim($key);
// $xmlParam->appendChild($xmlName);
// $xmlValue = $xmlDoc->createElement('value');
// $xmlValue->appendChild($xmlDoc->createCDATASection($value));
// $xmlParam->appendChild($xmlValue);
// $xmlParams->appendChild($xmlParam);
// }
// }
// $xmlNotifyElem->appendChild($xmlParams);
// }
$elem = $xmlDoc->createElement('error');
$attr = $xmlDoc->createAttribute('code');
$attr->nodeValue = $this->errorCode;
$elem->appendChild($attr);
$elem->appendChild($xmlDoc->createCDATASection($this->errorMessage));
$xmlNotifyElem->appendChild($elem);
return $xmlNotifyElem;
}
/**
*
* Returns the CRC hash
* @return string
*/
public function getCrc() {
return $this->_crc;
}
}
<?php
/**
* Class Mobilpay_Payment_Request_Sms
* This class can be used for accessing mobilpay.ro payment interface for your configured online services
* @copyright NETOPIA
* @author Claudiu Tudose
* @version 1.0
*
*/
class Mobilpay_Payment_Request_Sms extends Mobilpay_Payment_Request_Abstract
{
const ERROR_LOAD_FROM_XML_SERVICE_ELEM_MISSING = 0x31000001;
/**
* mobilePhone (Optional) - MSISDN (mobile phone numner) of the customer. If it's supplied it should be in 07XXXXXXXX format.
* If it's supplied mobilpay.ro will autocomplete mobile phone field on payment interface
*
* @var string(10)
*/
public $msisdn = null;
function __construct()
{
parent::__construct();
$this->type = self::PAYMENT_TYPE_SMS;
}
protected function _loadFromXml(DOMElement $elem)
{
parent::_parseFromXml($elem);
//SMS request specific data
$elems = $elem->getElementsByTagName('service');
if($elems->length != 1)
{
throw new Exception('Mobilpay_Payment_Request_Sms::loadFromXml failed: service is missing', self::ERROR_LOAD_FROM_XML_SERVICE_ELEM_MISSING);
}
$xmlElem = $elems->item(0);
$this->service = $xmlElem->nodeValue;
$elems = $elem->getElementsByTagName('msisdn');
if($elems->length == 1)
{
$this->msisdn = $elems->item(0)->nodeValue;
}
$elem = $elem;
return $this;
}
protected function _loadFromQueryString($queryString)
{
$parameters = explode('&', $queryString);
$reqParams = array();
foreach ($parameters as $item)
{
list ($key, $value) = explode('=', $item);
$reqParams[$key] = urldecode($value);
}
if(!isset($reqParams['signature']))
{
throw new Exception('Mobilpay_Payment_Request_Sms::loadFromQueryString failed: signature is missing', self::ERROR_LOAD_FROM_XML_SIGNATURE_ELEM_MISSING);
}
$this->signature = $reqParams['signature'];
if(!isset($reqParams['service']))
{
throw new Exception('Mobilpay_Payment_Request_Sms::loadFromQueryString failed: service is missing', self::ERROR_LOAD_FROM_XML_SERVICE_ELEM_MISSING);
}
$this->service = $reqParams['service'];
if(!isset($reqParams['tran_id']))
{
throw new Exception('Mobilpay_Payment_Request_Sms::loadFromQueryString failed: empty order id', self::ERROR_LOAD_FROM_XML_ORDER_ID_ATTR_MISSING);
}
$this->orderId = $reqParams['tran_id'];
if(isset($reqParams['timestamp']))
{
$this->timestamp = $reqParams['timestamp'];
}
if(isset($reqParams['confirm_url']))
{
$this->confirmUrl = $reqParams['confirm_url'];
}
if(isset($reqParams['return_url']))
{
$this->confirmUrl = $reqParams['return_url'];
}
if(isset($reqParams['msisdn']))
{
$this->msisdn = $reqParams['msisdn'];
}
if(isset($reqParams['first_name']))
{
$this->params['first_name'] = $reqParams['first_name'];
}
if(isset($reqParams['last_name']))
{
$this->params['last_name'] = $reqParams['last_name'];
}
return $this;
}
protected function _prepare()
{
if(is_null($this->signature) || is_null($this->service) || is_null($this->orderId))
{
throw new Exception('One or more mandatory properties are invalid!', self::ERROR_PREPARE_MANDATORY_PROPERTIES_UNSET);
}
$this->_xmlDoc = new DOMDocument('1.0', 'utf-8');
$rootElem = $this->_xmlDoc->createElement('order');
//set payment type attribute
$xmlAttr = $this->_xmlDoc->createAttribute('type');
$xmlAttr->nodeValue = $this->type;
$rootElem->appendChild($xmlAttr);
//set id attribute
$xmlAttr = $this->_xmlDoc->createAttribute('id');
$xmlAttr->nodeValue = $this->orderId;
$rootElem->appendChild($xmlAttr);
//set timestamp attribute
$xmlAttr = $this->_xmlDoc->createAttribute('timestamp');
$xmlAttr->nodeValue = date('YmdHis');
$rootElem->appendChild($xmlAttr);
$xmlElem = $this->_xmlDoc->createElement('signature');
$xmlElem->nodeValue = $this->signature;
$rootElem->appendChild($xmlElem);
$xmlElem = $this->_xmlDoc->createElement('service');
$xmlElem->nodeValue = $this->service;
$rootElem->appendChild($xmlElem);
if(!is_null($this->msisdn))
{
$xmlElem = $this->_xmlDoc->createElement('msisdn');
$xmlElem->nodeValue = $this->msisdn;
$rootElem->appendChild($xmlElem);
}
if(is_array($this->params) && sizeof($this->params) > 0)
{
$xmlParams = $this->_xmlDoc->createElement('params');
foreach ($this->params as $key=>$value)
{
$xmlParam = $this->_xmlDoc->createElement('param');
$xmlName = $this->_xmlDoc->createElement('name');
$xmlName->nodeValue = trim($key);
$xmlParam->appendChild($xmlName);
$xmlValue = $this->_xmlDoc->createElement('value');
$xmlValue->appendChild($this->_xmlDoc->createCDATASection(urlencode($value)));
$xmlParam->appendChild($xmlValue);
$xmlParams->appendChild($xmlParam);
}
$rootElem->appendChild($xmlParams);
}
if(!is_null($this->returnUrl) || !is_null($this->confirmUrl))
{
$xmlUrl = $this->_xmlDoc->createElement('url');
if(!is_null($this->returnUrl))
{
$xmlElem = $this->_xmlDoc->createElement('return');
$xmlElem->nodeValue = $this->returnUrl;
$xmlUrl->appendChild($xmlElem);
}
if(!is_null($this->confirmUrl))
{
$xmlElem = $this->_xmlDoc->createElement('confirm');
$xmlElem->nodeValue = $this->confirmUrl;
$xmlUrl->appendChild($xmlElem);
}
$rootElem->appendChild($xmlUrl);
}
$this->_xmlDoc->appendChild($rootElem);
return $this;
}
}
<?php
use Slim\Container;
use Aura\SqlQuery\QueryFactory;
use Slim\Http\UploadedFile;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception as PException;
class API
{
protected $address;
protected $port;
protected $cookieFile;
protected $email;
protected $password;
protected $certificate;
protected $db;
protected $query_factory;
protected $session;
protected $uploadDirectory;
// cookie file for client
protected $cookieFileClient;
protected $admin;
protected $smtp;
function __construct(Container $c = null) {
global $settings;
$api = $settings['settings']['api'];
$this->address = $api['address'];
$this->port = $api['port'];
$this->cookieFile = $api['cookieFile'];
$this->email = $api['email'];
$this->password = $api['password'];
$this->certificate = $api['certificate'];
$this->admin = $settings["settings"]["admin"];
$this->smtp = $settings["settings"]["smtp"];
$this->uploadDirectory = $settings['settings']['upload']['path'];
if($c){
$this->db = $c->get('db');
$this->query_factory = new QueryFactory('mysql');
$this->session = $c->get('session');
}
// cookie file for client
$this->cookieFileClient = "/tmp/cookieFileClient.txt";
}
function Request($method, $path, $data = [],
$saveCookies = false, $upload = false) {
$curl = curl_init();
$opts = array(
CURLOPT_URL => $this->address . $path,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_PORT => $this->port,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_NONE,
);
if (empty($this->certificate)) {
$opts[CURLOPT_SSL_VERIFYPEER] = false;
} else {
$opts[CURLOPT_SSL_VERIFYPEER] = true;
$opts[CURLOPT_SSL_VERIFYHOST] = 2;
$opts[CURLOPT_CAINFO] = $this->certificate;
}
if($saveCookies) {
$opts[CURLOPT_COOKIEJAR] = $this->cookieFile;
} else {
$opts[CURLOPT_COOKIEFILE] = $this->cookieFile;
}
if(strtoupper($method) !== 'GET') {
if($upload) {
$opts[CURLOPT_POSTFIELDS] = $data;
$opts[CURLOPT_HTTPHEADER] = array(
'Content-Type: multipart/form-data',
'cache-control: no-cache'
);
} else {
$opts[CURLOPT_POSTFIELDS] = json_encode($data);
$opts[CURLOPT_HTTPHEADER] = array(
'Content-Type: application/json',
'cache-control: no-cache'
);
}
}
curl_setopt_array($curl, $opts);
$response = curl_exec($curl);
$err = curl_error($curl);
$info = curl_getinfo($curl);
curl_close($curl);
if($path !== '/users/login' && $info['http_code'] == 401) {
$ret = $this::Login();
if ($ret['info']['http_code'] == 200) {
return $this->Request($method, $path, $data, $saveCookies);
}
}
if ($info['http_code'] != 200) {
throw new Exception('Internal API error');
}
return ['info' => $info, 'data' => json_decode($response, true)];
}
function preserve($arr, $keys, $add = array()) {
foreach ($arr as $id => $v) {
foreach ($v as $key => $value) {
if (!in_array($key, $keys)) {
unset($arr[$id][$key]);
}
}
$arr[$id] = array_merge($arr[$id], $add);
}
return $arr;
}
function Login() {
return $this::Request('POST', '/users/login',
['email' => $this->email, 'password' => $this->password], true);
}
function GetSettings() {
return $this::Request('GET', '/application/settings');
}
function GetPublications() {
$settings = $this->GetSettings()['data'];
$disabledDates = $settings['dates']['disabledDates'];
$disabledWeekDays = $settings['dates']['disabledWeekDays'];
$ret = $this::Request('GET',
'/publications?active=true&onwebsite=true&&order=position');
foreach($ret['data']['list'] as $id => $val) {
$logo = $this->address.'/publications/'.$val['id'].'/logo';
$ret['data']['list'][$id]['image'] = $logo;
$enabledDates = [];
$pubDisabledDates = $disabledDates;
if (!empty($val['enabledDates'])) {
foreach ($val['enabledDates'] as $enabledDate) {
$enabledDates[] = $enabledDate['date'];
}
}
$enabledWeekDays = [];
$pubDisabledWeekDays = $disabledWeekDays;
if (!empty($val['enabledWeekDays'])) {
foreach ($val['enabledWeekDays'] as $enabledWeekDay) {
$enabledWeekDays[] = $enabledWeekDay['day'];
}
}
$ret['data']['list'][$id]['disabledDates'] = array_values(
array_diff($pubDisabledDates, $enabledDates)
);
$ret['data']['list'][$id]['disabledWeekDays'] = array_values(
array_diff($pubDisabledWeekDays, $enabledWeekDays)
);
}
$ret['data'] = $this::preserve(
$ret['data']['list'], [
'id', 'name', 'image', 'description', 'topics', 'circulation',
'type', 'disabledDates', 'disabledWeekDays'
]
);
return $ret;
}
function GetPublicationsExt($id) {
$ret = $this::Request('GET',
'/publications/'.$id.'/columns?active=true&order=name');
$ret['data'] = $this::preserve($ret['data']['list'],
['id','name','options']);
foreach ($ret['data'] as $id => $col) {
if(!is_array($ret['data'][$id]['options'])) {
continue;
}
$ret['data'][$id]['options'] = $this::preserve(
$ret['data'][$id]['options'],
['id', 'name', 'description', 'columnID', 'active']
);
$options = [];
foreach($ret['data'][$id]['options'] as $oid => $o) {
if($o['active'] !== true) {
continue;
}
$options[] = $o;
}
$ret['data'][$id]['options'] = $options;
}
return $ret;
}
function MarkPayment($id, $amount, $transaction) {
$ad = $this::Request('GET', '/ads/'.$id);
if (empty($ad['data'])) {
return false;
}
$ad = $ad['data'];
if (empty($ad['invoiceValue']['total']) ||
$ad['invoiceValue']['total'] != $amount) {
return false;
}
if(empty($transaction)) {
return false;
}
if(!empty($ad['transaction'])) {
return true;
}
$ad['transaction'] = $transaction;
$result = $this::Request('PUT', '/ads/'.$id, $ad);
if (empty($result['data'])) {
return false;
}
$ad = $this::Request('GET', '/ads/'.$id);
if (empty($ad['data']['transaction']) ||
$ad['data']['transaction'] != $transaction) {
return false;
}
return true;
}
function GetAd($id) {
return $this::Request('GET', '/ads/'.$id);
}
function CancelDraft($id) {
return $this::Request('POST', '/ads/'.$id.'/cancel', '');
}
function CreateDraft($data) {
$data['source'] = 2;
$data['hasImage'] = false;
$data['kind'] = 1;
$data['type'] = 1;
if(is_string($data['contact'])){
$data["contact"] = json_decode($data["contact"], true);
}
if(is_string($data['columns'])){
$data["columns"] = json_decode($data["columns"], true);
}
if(isset($data["invoicePerAd"])){
unset($data["invoicePerAd"]);
}
if(isset($data["selectedKind"])){
unset($data["selectedKind"]);
}
return $this::Request('POST', '/ads', $data);
}
function ClientCreateDraft($data) {
$data['source'] = 2;
$data['hasImage'] = false;
$data['type'] = 1;
if(is_string($data['contact'])){
$data["contact"] = json_decode($data["contact"], true);
}
if(is_string($data['columns'])){
$data["columns"] = json_decode($data["columns"], true);
}
if(isset($data["invoicePerAd"])){
unset($data["invoicePerAd"]);
}
if(isset($data["selectedKind"])){
$data["kind"] = (int)$data["selectedKind"];
unset($data["selectedKind"]);
}
if(!empty($data["groupID"])){
$data["groupID"] = (int)$data["groupID"];
$data["groupUserID"] = $data["groupID"];
}
$userCookie = $this::GetUserCookie($this->session->user_id)['cookie'];
$profile = $this::FetchUserProfile();
$data["group_id"] = $profile["data"]["group"]['id'];
$response = $this::RequestClient('POST', '/ads', $data, false, false, $userCookie);
return $response;
}
function GetPrice($data) {
$data['source'] = 2;
$data['hasImage'] = false;
$data['type'] = 1;
if(empty($data["selectedKind"])){
$data['kind'] = 1;
}else{
$data['kind'] = (int)$data["selectedKind"];
}
if(!empty($data["groupID"])){
$data["groupID"] = (int)$data["groupID"];
}
$ret = $this::Request('POST', '/ads/summary', $data);
$nw = array('columns' => array());
foreach($ret['data']['columns'] as $column) {
array_push($nw['columns'], array(
'id' => $column['publicationID'],
'price' => $column['invoiceValue'],
));
}
$nw['words'] = $ret['data']['words'];
$nw['price'] = $ret['data']['invoiceValue'];
$ret['data'] = $nw;
return $ret;
}
function UploadImage($id, $data) {
$this::Request('POST', '/ads/'.$id.'/images/display/upload',
$data, false, true);
return $this::Request('POST', '/ads/'.$id.'/images/print/upload',
$data, false, true);
}
function RequestClient($method, $path, $data = [],
$upload = false, $withHeaders = false, $cookie = '') {
$curl = curl_init();
$opts = array(
CURLOPT_URL => $this->address . $path,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_PORT => $this->port,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_NONE,
);
if($withHeaders){
$opts[CURLOPT_HEADER] = 1;}
{}
if (empty($this->certificate)) {
$opts[CURLOPT_SSL_VERIFYPEER] = false;
} else {
$opts[CURLOPT_SSL_VERIFYPEER] = true;
$opts[CURLOPT_SSL_VERIFYHOST] = 2;
$opts[CURLOPT_CAINFO] = $this->certificate;
}
if(strtoupper($method) !== 'GET') {
if($upload) {
$opts[CURLOPT_POSTFIELDS] = $data;
$opts[CURLOPT_HTTPHEADER] = array(
'Content-Type: multipart/form-data',
'cache-control: no-cache'
);
} else {
$opts[CURLOPT_POSTFIELDS] = json_encode($data);
$opts[CURLOPT_HTTPHEADER] = array(
'Content-Type: application/json',
'cache-control: no-cache'
);
}
}
if(strlen($cookie)){
$opts[CURLOPT_HTTPHEADER][] = "Cookie: rl=$cookie;";
}
curl_setopt_array($curl, $opts);
$response = curl_exec($curl);
$err = curl_error($curl);
$info = curl_getinfo($curl);
if($path == '/users/login'){
preg_match('/Set-Cookie:\s*rl=([^;]+);/i', $response, $m);
if(count($m)){
$cookies = $m[1];
if(strlen($cookies)){
$newR = explode("\n\r\n", $response);
$user = json_decode($newR[1]);
$select = $this->query_factory->newSelect();
$select->from('cookies')->cols([
'user_id'
])
->where("user_id = :user_id")
->bindValues([
'user_id' => $user->id
]);
$result = $this->db->fetchOne($select->getStatement(), $select->getBindValues());
if(!$result){
$insert = $this->query_factory->newInsert();
$insert->into('cookies')->cols([
'cookie' => $cookies,
'user_id' => $user->id
]);
$sth = $this->db->prepare($insert->getStatement());
$sth->execute($insert->getBindValues());
} else {
$update = $this->query_factory->newUpdate();
$update->table('cookies')
->cols([
'cookie'
])
->where('user_id = :user_id')
->bindValues([
'user_id' => $user->id,
'cookie' => $cookies
]);
$stmt = $this->db->prepare($update->getStatement());
$stmt->execute($update->getBindValues());
}
$exists = $this->session->exists('user_id');
if(!$exists){
$this->session->set('user_id', $user->id);
}
}
}
}
curl_close($curl);
return ['info' => $info, 'data' => json_decode($response, true)];
}
function LoginUser($credentials) {
return $this::RequestClient('POST', '/users/login',
['email' => $credentials['email'], 'password' => $credentials['password']], false, true);
}
function AuthenticateUser($params = []){
if(!empty($params)){
$ret = $this::LoginUser($params);
return $ret;
}
return [];
}
function GetUserCookie($userId){
$select = $this->query_factory->newSelect();
$select->from('cookies')->cols([
'cookie'
])
->where("user_id = :user_id")
->bindValues([
'user_id' => $userId
]);
return $this->db->fetchOne($select->getStatement(), $select->getBindValues());
}
function FetchUserProfile() {
if ($this->session->exists('user_id')){
$userCookie = $this::GetUserCookie($this->session->user_id)['cookie'];
$rsp = $this::RequestClient('GET','/users/profile',[], false, false, $userCookie);
return $rsp;
}
return false;
}
function AddQuote($params, $file) {
if(count($params) && !empty($file) && $this->session->exists('user_id')){
if( $file->getError() === UPLOAD_ERR_OK ){
$filename = $this->moveUploadedFile($this->uploadDirectory, $file);
}
$insert = $this->query_factory->newInsert();
$insert->into("quotes")
->cols([
"user_id" => $this->session->user_id,
"created_at" => date("Y-m-d H:i:s") ,
"status" => 1,
"price" => NULL,
"details" => json_encode($params),
"file" => $filename
]);
$sth = $this->db->prepare($insert->getStatement());
$sth->execute($insert->getBindValues());
$contact = json_decode($params["contact"], true);
// TODO de pus email-ul clientului aici
$this::SendMail($this->admin["email"], $contact['email'], "Cotatie adaugata", "O noua cotatie a fost adaugata" );
return true;
}
return false;
}
function GetUserQuotes($params = []){
if($this->session->exists("user_id")){
$select = $this->query_factory->newSelect();
$select->from('quotes')->cols(["*"])->where('user_id = :user_id')->orderBy(['status', 'created_at desc'])
->bindValues([
"user_id" => $this->session->user_id
]);
$limit = isset($params['limit']) ? $params['limit']:'';
$offset = isset($params['offset']) ? $params['offset']:0;
if(!empty($offset) && is_numeric($offset)){
$select->offset($offset);
}
if(!empty($limit) && is_numeric($limit)){
$select->limit($limit);
}
$results['quotes'] = $this->db->fetchAll($select->getStatement(), $select->getBindValues());
$select->resetCols()->cols(['count(*) as total'])->bindValues([
"user_id" => $this->session->user_id
])->limit(0)->offset(0);
$total = $this->db->fetchOne($select->getStatement(), $select->getBindValues());
$results['total'] = $total['total'];
return $results;
}
return false;
}
function GetAdminQuotes($params = []){
if($this->session->exists('user_id')){
$isAdmin = $this::CheckAdmin();
if($isAdmin){
$select = $this->query_factory->newSelect();
$select->from('quotes')->cols(["*"])->orderBy(['status', 'created_at desc']);
$limit = isset($params['limit']) ? $params['limit']:'';
$offset = isset($params['offset']) ? $params['offset']:0;
if(!empty($offset) && is_numeric($offset)){
$select->offset($offset);
}
if(!empty($limit) && is_numeric($limit)){
$select->limit($limit);
}
$results['quotes'] = $this->db->fetchAll($select->getStatement());
$select->resetCols()->cols(['count(*) as total'])->limit(0)->offset(0);
$total = $this->db->fetchOne($select->getStatement());
$results['total'] = $total['total'];
return $results;
}
}
}
function moveUploadedFile($directory, UploadedFile $uploadedFile)
{
$basename = bin2hex(openssl_random_pseudo_bytes(8));
$filename = sprintf('%s', $basename . '_' . $uploadedFile->getClientFilename());
$uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename);
return $filename;
}
function GetQuote($quoteId){
if($quoteId && $this->session->exists('user_id')){
$params = [
"id" => (int)$quoteId,
];
$select = $this->query_factory->newSelect();
$select->from('quotes')->cols(["*"])
->where('id = :id');
if(!$this::CheckAdmin()){
$params["user_id"] = $this->session->user_id;
$select->where('user_id = :user_id');
}
$select->bindValues($params);
$quote = $this->db->fetchOne($select->getStatement(), $select->getBindValues());
if($quote){
return $quote;
}
return false;
}
return false;
}
function UpdateQuote($params = []){
if(!empty($params) && isset($params['id'])){
$isAdmin = $this::CheckAdmin();
$cols = ["status"];
if(isset($params["price"]) || !empty($params['adText'])){
if($isAdmin){
$cols[] = "price";
}else{
unset($params["price"]);
}
}
if(!in_array($params["status"], [2,3,7]) && !empty($params["fromUser"]) && $params["fromUser"]){
return false;
}
if(isset($params["fromUser"])){
unset($params["fromUser"]);
}
$select = $this->query_factory->newSelect();
$select->from("quotes")->cols(["*"])
->where('id = :id')
->bindValues([
"id" => $params["id"]
]);
$quote = $this->db->fetchOne($select->getStatement(), $select->getBindValues());
$quoteDetails = json_decode($quote["details"], true);
if(!empty($params["adText"])){
$quoteDetails["text"] = $params["adText"];
$quoteDetails["columns"] = json_decode($quoteDetails["columns"]);
$quoteDetails["contact"] = json_decode($quoteDetails["contact"], true);
$price = $this::GetPrice($quoteDetails);
$params['price'] = $price['data']['price']['total'];
unset($params['adText']);
$params['details'] = json_encode($quoteDetails);
$cols[] = 'details';
}
if($params["status"] == 3){
// $quoteDetails["group_id"] = 8;
$data = $this::ClientCreateDraft($quoteDetails);
if (empty($data['data']['id'])) {
throw new Exception('Could not create ad');
}
$ret = array('ad_id' => $data['data']['id']);
$quoteDetails['ad_id'] = $ret['ad_id'];
$cols[] = 'details';
$params['details'] = json_encode($quoteDetails);
}
if(!empty($quoteDetails["invoicePerAd"]) && $quoteDetails["invoicePerAd"] != 0 && $params["status"] == 3){
$params["status"] = 6;
}
$update = $this->query_factory->newUpdate();
$update->table('quotes')
->cols($cols);
if(!$isAdmin && empty($params["payment"])){
$update->where('user_id = :user_id');
$params["user_id"] = $this->session->user_id;
}
$isPayment = !empty($params["payment"]);
if($isPayment){
unset($params["payment"]);
}
$update->where('id = :id')
->bindValues($params);
$stmt = $this->db->prepare($update->getStatement());
$stmt->execute($update->getBindValues());
if($params["status"] == 2 && $isAdmin){
$this::SendMail($this->admin["email"], $quoteDetails["contact"]["email"], "Cotatia calculata", "Cotatia a fost calculata la pretul de: " . $params["price"] );
}
if(($params["status"] == 3 || $params["status"] == 6) && !$isAdmin){
$this::SendMail( $quoteDetails["contact"]["email"], $this->admin["email"],"Cotatia Acceptata", "Cotatia a fost acceptata");
}
if($params["status"] == 7 && !$isAdmin){
$this::SendMail( $quoteDetails["contact"]["email"], $this->admin["email"],"Cotatia Refuzata", "Cotatia a fost refuzata");
}
if($params["status"] == 4 && $isPayment){
$this::SendMail( $quoteDetails["contact"]["email"], $this->admin["email"],"Cotatia Platita ", "Cotatia a fost platita");
}
return true;
}
return false;
}
function DeleteQuote($id){
if($this->session->exists('user_id')){
$delete = $this->query_factory->newDelete();
$delete->from('quotes')->where('user_id = :user_id')
->where('id = :id')
->where('status = :status')
->bindValues([
"user_id" => $this->session->user_id,
"id" => $id,
"status" => 7
]);
$stmt = $this->db->prepare($delete->getStatement());
$stmt->execute($delete->getBindValues());
return true;
}
return false;
}
function CheckAdmin(){
if($this->session->exists('user_id')){
$userProfile = $this::Request('GET', '/users/' . $this->session->user_id);
if($userProfile['info']['http_code'] == 200){
return $userProfile['data']['admin'];
}
return false;
}
return false;
}
function QuoteStatuses(){
return [
1 => 'Cotatie noua',
2 => 'Calculata',
3 => 'Acceptata',
4 => 'Platit + Anunt preluat',
5 => 'Eroare tranzactie',
6 => 'Anunt preluat',
7 => 'Refuzata',
8 => 'Canceled'
];
}
function AdTypes(){
return [
1 => 'Simplu',
2 => 'LTD',
3 => 'UNEJ'
];
}
function SendMail($from, $to, $subject, $body , $altBody = ''){
$mail = new PHPMailer(true);
try{
//Server settings
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = $this->smtp["host"]; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = $this->smtp["username"]; // SMTP username
$mail->Password = $this->smtp["password"]; // SMTP password
$mail->SMTPSecure = $this->smtp["secure"]; // Enable TLS encryption, `ssl` also accepted
$mail->Port = $this->smtp["port"]; // TCP port to connect to
//Recipients
$mail->setFrom($from);
$mail->addAddress($to); // Add a recipient
//Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $subject;
$mail->Body = $body;
$mail->AltBody = $altBody;
$mail->send();
} catch (PException $e) {
echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
}
}
?>
{
"require": {
"slim/flash": "^0.4.0",
"aura/sqlquery": "^2.7"
}
}
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "8d00115eeaf07897136026f12b449f55",
"content-hash": "5d87c7dae8f34fabd32c82c3066c64e6",
"packages": [
{
"name": "aura/sqlquery",
"version": "2.7.1",
"source": {
"type": "git",
"url": "https://github.com/auraphp/Aura.SqlQuery.git",
"reference": "dd81b57aeb43628180a9c70a4df58d872024d7f2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/auraphp/Aura.SqlQuery/zipball/dd81b57aeb43628180a9c70a4df58d872024d7f2",
"reference": "dd81b57aeb43628180a9c70a4df58d872024d7f2",
"shasum": ""
},
"require": {
"php": ">=5.3.9"
},
"suggest": {
"aura/sql": "Provides an extension to the native PDO along with a profiler and connection locator. Use version 2.*."
},
"type": "library",
"extra": {
"aura": {
"type": "library"
}
},
"autoload": {
"psr-4": {
"Aura\\SqlQuery\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-2-Clause"
],
"authors": [
{
"name": "Aura.SqlQuery Contributors",
"homepage": "https://github.com/auraphp/Aura.SqlQuery/contributors"
}
],
"description": "Object-oriented query builders for MySQL, Postgres, SQLite, and SQLServer; can be used with any database connection library.",
"homepage": "https://github.com/auraphp/Aura.SqlQuery",
"keywords": [
"database",
"db",
"delete",
"dml",
"insert",
"mysql",
"pdo",
"pgsql",
"postgres",
"postgresql",
"query",
"select",
"sql",
"sql server",
"sqlite",
"sqlserver",
"update"
],
"time": "2016-10-03 20:34:56"
},
{
"name": "slim/flash",
"version": "0.4.0",
"source": {
"type": "git",
"url": "https://github.com/slimphp/Slim-Flash.git",
"reference": "9aaff5fded3b54f4e519ec3d4ac74d3d1f2cbbbc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/slimphp/Slim-Flash/zipball/9aaff5fded3b54f4e519ec3d4ac74d3d1f2cbbbc",
"reference": "9aaff5fded3b54f4e519ec3d4ac74d3d1f2cbbbc",
"shasum": ""
},
"require": {
"php": ">=5.5.0"
},
"require-dev": {
"phpunit/phpunit": "^4.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Slim\\Flash\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Josh Lockhart",
"email": "hello@joshlockhart.com",
"homepage": "http://joshlockhart.com"
}
],
"description": "Slim Framework Flash message service provider",
"homepage": "http://slimframework.com",
"keywords": [
"flash",
"framework",
"message",
"provider",
"slim"
],
"time": "2017-10-22 10:35:05"
}
],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
"platform-dev": []
}
<?php
// DIC configuration
$container = $app->getContainer();
// view renderer
$container['renderer'] = function ($c) {
$settings = $c->get('settings')['renderer'];
return new Slim\Views\PhpRenderer($settings['template_path']);
};
// monolog
$container['logger'] = function ($c) {
$settings = $c->get('settings')['logger'];
$logger = new Monolog\Logger($settings['name']);
$logger->pushProcessor(new Monolog\Processor\UidProcessor());
$logger->pushHandler(new Monolog\Handler\StreamHandler($settings['path'], Monolog\Logger::DEBUG));
return $logger;
};
// flash messages
$container['flash'] = function () {
return new \Slim\Flash\Messages();
};
// slim session helper
$container['session'] = function ($c) {
return new \SlimSession\Helper;
};
// aura db builder
$container['db'] = function($c) {
$settings = $c->get('settings');
$pdo = new Aura\Sql\ExtendedPdo(
'mysql:host='.$settings['db']['host'].';dbname='.$settings['db']['dbname'],
$settings['db']['user'],
$settings['db']['password']
);
return $pdo;
};
$container['jenuPublication'] = function($c){
return $c->get('settings')['jenuPublication'];
};
<?php
/*
* Class Live Update v2.2
*
* This class generates HTML HTTP POST code for PayU Live Update implementation
*
* Last update: December 2013, 12
* More info: www.payu.ro
*
* This class is distributed to PayU partners as an example implementation only.
* The example is provided "AS IS" and without warranty, express or implied. In no
* event will GECAD ePayment be liable for any damages, including but not limited to
* any lost profits, lost savings or any incidental or consequential damages, whether
* resulting from impaired or lost data, software or computer failure or any other
* cause, or for any other claim by the user or for any third party claim.
*
* You can freely modify the code to fit your needs for implementation.
*
* This class will generate the HTML CODE for the HTTP POST request. It will
* not generate the entire HTML CODE. The <form></form> tags are not included,
* allowing you to customize your form layout.
* The class can be modified to include also the form tags. Please use the
* $liveUpdateURL member for the action property of the form tag.
*
* The class has the default behaviour for most situations.
*
* The class contains a number of functions to set different variables: setLiveUpdateURL,
* setTestMode, setLanguage, setSecretKey, setMerchant, setOrderRef, setOrderDate etc.
* After calling any of these functions please check the return value to see if
* the function succeeded. The functions will return an error if invalid data types
* or values are received as parameters. If any of these functions will fail, the method
* getLiveUpdateHTML might return an error. In case of an error, this method will
* output an error as an HTML comment like the one below:
* <!-- PayU ERROR: [error-message] -->
*
*/
class LiveUpdate {
/*
* Class setup members.
* Set up the next members with the class default values.
*
*/
/**
* Live Update URL
* This is the URL address where HTTP POST should be sent
* @var string
*/
var $liveUpdateURL = "https://secure.payu.ro/order/lu.php";
/**
* Test Mode
* Set to true or or 1 for testing mode.
* @var boolean
*/
var $testMode = false;
/**
* Language
* The language of the order interface. Default: "ro".
* @var string
*/
var $language = "";
/**
* Secret Key
* Communication secret code. Used to create the HMAC signature.
* @var string
*/
var $secretKey = NULL;
/**
* Merchant Identifier
* PayU merchant code
* @var string
*/
var $merchant = NULL;
/**
* Merchant order reference
* @var string
*/
var $orderRef = '';
/**
* Order date
* @var string
*/
var $orderDate = NULL;
/**
* Product Names
* @var array
*/
var $orderPName = array();
/**
* Product Groups
* @var array
*/
var $orderPGroup = array();
/**
* Product Price Types (NET or GROSS)
* @var array
*/
var $orderPType = array();
/**
* Product Codes
* @var array
*/
var $orderPCode = array();
/**
* Product additional information
* @var array
*/
var $orderPInfo = array();
/**
* Product Prices (WITH NO VAT/TAXES if Product Price Types is not specified or NET)
* @var array
*/
var $orderPrice = array();
/**
* Product Quantities
* @var array
*/
var $orderQty = array();
/**
* Product VAT/Tax
* @var array
*/
var $orderVAT = array();
/**
* Product versions
* @var array
*/
var $orderVer = array();
/**
* Shipping cost
* @var float
*/
var $orderShipping = 0;
/**
* Order currency
* @var string
*/
var $pricesCurrency = '';
/**
* Order discount
* @var float
*/
var $discount = 0;
/**
* Destination city
* @var string.
*/
var $destinationCity = '';
/**
* Destination state
* @var string
*/
var $destinationState = '';
/**
* Destination country code
* @var integer
*/
var $destinationCountry = '';
/**
* Payment method
* @var string
*/
var $payMethod = '';
/**
* Installments no
* @var int
*/
var $installments = 0;
/**
* Order Hash
*/
var $orderHash = '';
/*
* Billing information
* Used to autofill the ordering form
*/
var $billing = array(
"billFName" => '',
"billLName" => '',
"billCISerial" => '',
"billCINumber" => '',
"billCIIssuer" => '',
"billCNP" => '',
"billCompany" => '',
"billFiscalCode" => '',
"billRegNumber" => '',
"billBank" => '',
"billBankAccount" => '',
"billEmail" => '',
"billPhone" => '',
"billFax" => '',
"billAddress1" => '',
"billAddress2" => '',
"billZipCode" => '',
"billCity" => '',
"billState" => '',
"billCountryCode" => ''
);
var $billingSet = false;
/*
* Delivery information.
* Used to autofill the ordering form
*/
var $delivery = array(
"deliveryFName" => '',
"deliveryLName" => '',
"deliveryCompany" => '',
"deliveryPhone" => '',
"deliveryAddress1" => '',
"deliveryAddress2" => '',
"deliveryZipCode" => '',
"deliveryCity" => '',
"deliveryState" => '',
"deliveryCountryCode" => ''
);
var $deliverySet = false;
/**
* LiveUpdate class constructor
*
* @access public
* @param $secretKey string
* @param $liveUpdateURL string
* @param $debugMode boolean
* @param $testMode boolean
* @param $language string
* @return void
*/
function LiveUpdate ($secretKey = '', $liveUpdateURL = 'https://secure.payu.ro/order/lu.php', $debugMode = false, $testMode = false, $language = 'ro') {
if (!empty($liveUpdateURL))
if (!$this->setLiveUpdateURL($liveUpdateURL))
$this->setLiveUpdateURL('https://secure.payu.ro/order/lu.php');
if (!empty($debugMode))
$this->setDebugMode($debugMode);
if (!empty($testMode))
$this->setTestMode($testMode);
if (!empty($language))
$this->setLanguage($language);
if (!empty($secretKey))
$this->setSecretKey($secretKey);
}
/**
* setLiveUpdateURL class method
*
* Set up live update URL address
*
* @access public
* @param $liveUpdateURL - live update url address
* @return boolean
*/
function setLiveUpdateURL($liveUpdateURL = 'https://secure.payu.ro/order/lu.php') {
if (!is_string($liveUpdateURL)) { //invalid data type
return false;
}
if (empty($liveUpdateURL)) { //empty string
return false;
}
$this->liveUpdateURL = $liveUpdateURL; //everything is ok
return true;
}
/**
* setTestMode class method
*
* This method sets the protocol in test mode or not.
* Set the parameter to 1 or true to use the class in test mode. For
* any other values, including false or 0, the class will work in
* real mode
*
* @access public
* @param $testMode - boolean
* @return boolean
*/
function setTestMode ($testMode = false) {
switch ($testMode) {
case true:
case 1:
$this->testMode = true;
break;
case false:
case 0:
default:
$this->testMode = false;
}
return true;
}
/**
* setLanguage class method
*
* Sets the order language
*
* @access public
* @param $language - string
* @return boolean
*/
function setLanguage ($language = 'ro') {
$language = trim(strtolower($language));
switch ($language) {
case 'ro':
$this->language = 'ro';
break;
case 'en':
default:
$this->language = 'en';
}
return true;
}
/**
* setSecretKey class method
*
* Sets the secret key used for HASH signature
*
* @access public
* @param $secretKey - string
* @return boolean
*/
function setSecretKey ($secretKey) {
if (!is_string($secretKey)) {
$this->secretKeyError = 'invalid type';
return false;
}
if (empty($secretKey)) {
$this->secretKeyError = 'empty string';
return false;
}
if (strlen($secretKey) > 64) {
$this->secretKeyError = 'secret key is length is too big';
return false;
}
if (preg_match("/ /i",$secretKey)) {
$this->secretKeyError = 'invalid format; white spaces not allowed';
return false;
}
$this->secretKey = $secretKey;
return true;
}
/**
* setMerchant method
*
* Sets up merchant identifier code
*
* @access public
* @param $merchant string: merchat identifier
* @return boolean
*/
function setMerchant ($merchant) {
if (!is_string($merchant))
return false;
if (empty($merchant))
return false;
$this->merchant = $merchant;
return true;
}
/**
* setOrderRef method
*
* @access public
* @param $orderRef string
* @return boolean
*/
function setOrderRef ($orderRef = '') {
if (settype($orderRef, "string")) {
if (strlen($orderRef) <= 32) {
$this->orderRef = $orderRef;
return true;
}
$this->orderRef = NULL;
return false;
}
$this->orderRef = NULL;
return false;
}
/**
* setOrderDate class method
*
* @access public
* @param $orderDate string
* @return boolean
*/
function setOrderDate ($orderDate = '') {
if (strtotime($orderDate) === -1) {
$this->orderDate = NULL;
return false;
}
$dateFormatPattern = "^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))^";
if (!preg_match($dateFormatPattern, $orderDate)) {
$this->orderDate = NULL;
return false;
}
if(strtotime($orderDate) > strtotime(date("Y-m-d H:i:s"))) {
$this->orderDate = NULL;
return false;
}
$this->orderDate = $orderDate;
return true;
}
/**
* setOrderPName class method
*
* Sets shopping cart product names
*
* @access public
* @param $orderPName array
* @return boolean
*/
function setOrderPName ($orderPName) {
if (!is_array($orderPName)) {
$this->orderPName = NULL;
return false;
}
$isValid = true;
$index = 0;
while ($isValid && $index < count($orderPName)) {
if (strlen($orderPName[$index]) > 155)
$isValid = false;
else
$isValid = true;
$index++;
}
if (!$isValid) {
$this->orderPName = NULL;
return false;
}
$this->orderPName = $orderPName;
return true;
}
/**
* setOrderPGroup class method
*
* Sets products groups
*
* @access public
* @param $orderPGroup array
* @return boolean
*/
function setOrderPGroup ($orderPGroup) {
if (!is_array($orderPGroup)) {
$this->orderPGroup = NULL;
return false;
}
$isValid = true;
$index = 0;
while ($isValid && $index < count($orderPGroup)) {
if (strlen($orderPGroup[$index]) > 155)
$isValid = false;
else
$isValid = true;
$index++;
}
if (!$isValid) {
$this->orderPGroup = NULL;
return false;
}
$this->orderPGroup = $orderPGroup;
return true;
}
/**
* setOrderPType class method
*
* Sets products price types
*
* @access public
* @param $orderPType array
* @return boolean
*/
function setOrderPType ($orderPType) {
if (!is_array($orderPType)) {
$this->orderPType = NULL;
return false;
}
$isValid = true;
$index = 0;
while ($isValid && $index < count($orderPType)) {
if (!in_array($orderPType[$index], array('GROSS', 'NET')))
$isValid = false;
else
$isValid = true;
$index++;
}
if (!$isValid) {
$this->orderPType = NULL;
return false;
}
$this->orderPType = $orderPType;
return true;
}
/**
* setOrderPCode class method
*
* Sets shopping cart product codes
*
* @access public
* @param $orderPCode array
* @return boolean
*/
function setOrderPCode ($orderPCode) {
if (!is_array($orderPCode)) {
$this->orderPCode = NULL;
return false;
}
$isValid = true;
$index = 0;
while ($isValid && $index < count($orderPCode)) {
if (strlen($orderPCode[$index]) > 20)
$isValid = false;
else
$isValid = true;
$index++;
}
if (!$isValid) {
$this->orderPCode = NULL;
return false;
}
$this->orderPCode = $orderPCode;
return true;
}
/**
* setOrderPInfo class method
*
* Sets additional information for the products in the shopping cart
*
* @access public
* @param $orderPInfo array
* @return boolean
*/
function setOrderPInfo ($orderPInfo) {
if (!is_array($orderPInfo)) {
$this->orderPInfo = NULL;
return false;
}
$this->orderPInfo = $orderPInfo;
return true;
}
/**
* setOrderPrice class method
*
* Sets product prices
*
* @access public
* @param $orderPrice array
* @return boolean
*/
function setOrderPrice($orderPrice) {
if (!is_array($orderPrice)) {
$this->orderPrice = NULL;
return false;
}
$isValid = true;
$index = 0;
while ($isValid && $index < count($orderPrice)) {
if (is_numeric($orderPrice[$index]) && $orderPrice[$index] > 0)
$isValid = true;
else
$isValid = false;
$index++;
}
if (!$isValid) {
$this->orderPrice = NULL;
return false;
}
$this->orderPrice = $orderPrice;
return true;
}
/**
* setOrderQTY class method
*
* Sets quantities for each product in the shopping cart
* @access public
* @param $orderQty array
* @return boolean
*/
function setOrderQTY ($orderQty) {
if (!is_array($orderQty)) {
$this->orderQty = NULL;
return false;
}
$isValid = true;
$index = 0;
while ($isValid && $index < count($orderQty)) {
if (is_numeric($orderQty[$index]) && $orderQty[$index] > 0)
$isValid = true;
else
$isValid = false;
$index++;
}
if (!$isValid) {
$this->orderQty = NULL;
return false;
}
$this->orderQty = $orderQty;
return true;
}
/**
* setOrderVAT class method
*
* Sets VAT for each product in the shopping cart
* @access public
* @param $orderVAT array
* @return boolean
*/
function setOrderVAT ($orderVAT) {
if (!is_array($orderVAT)) {
$this->orderVAT = NULL;
return false;
}
$isValid = true;
$index = 0;
while ($isValid && $index < count($orderVAT)) {
if (is_numeric($orderVAT[$index]) && $orderVAT[$index] >= 0 && $orderVAT[$index] < 100)
$isValid = true;
else
$isValid = false;
$index++;
}
if (!$isValid) {
$this->orderVAT = NULL;
return false;
}
$this->orderVAT = $orderVAT;
return true;
}
/**
* setOrderVer class method
*
* Sets products versions
*
* @access public
* @param $orderVer array
* @return boolean
*/
function setOrderVer ($orderVer) {
if (!is_array($orderVer)) {
$this->orderVer = NULL;
return false;
}
$isValid = true;
$index = 0;
while ($isValid && $index < count($orderVer)) {
if (settype($orderVer[$index], "string"))
if (strlen($orderVer[$index]) < 51)
$isValid = true;
else
$isValid = false;
else
$isValid = false;
$index++;
}
if (!$isValid) {
$this->orderVer = NULL;
return false;
}
$this->orderVer = $orderVer;
return true;
}
/**
* setOrderShipping
*
* Sets the order shipping costs
*
* @access public
* @param $orderShipping float
* @return boolean
*/
function setOrderShipping ($orderShipping = 0) {
if (is_numeric($orderShipping) && $orderShipping >= 0) {
$this->orderShipping = $orderShipping;
return true;
} elseif (is_numeric($orderShipping) && $orderShipping < 0) {
$this->orderShipping = -1;
return true;
}
$this->orderShipping = NULL;
return false;
}
/**
* setPricesCurrency
*
* Sets the prices currency
*
* @access public
* @param $pricesCurrency string[3]
* @return true
*/
function setPricesCurrency ($pricesCurrency = 'RON') {
$pricesCurrency = strtoupper(trim($pricesCurrency));
switch ($pricesCurrency)
{
case 'EUR':
$this->pricesCurrency = 'EUR';
break;
case 'USD':
$this->pricesCurrency = 'USD';
break;
case 'RON':
default:
$this->pricesCurrency = 'RON';
}
return true;
}
/**
* setDiscount
*
* Sets the global order discount
*
* @access public
* @param $discount float
* @return boolean
*/
function setDiscount ($discount = 0) {
if (is_numeric($discount) && $discount >= 0) {
$this->discount = $discount;
return true;
}
$this->discount = NULL;
return false;
}
/**
* setDestinationCity
*
* @access public
* @param $destinationCity string
* @return boolean
*/
function setDestinationCity ($destinationCity) {
$destinationCity = trim($destinationCity);
if (is_string($destinationCity) && strlen($destinationCity) > 0) {
$this->destinationCity = $destinationCity;
return true;
}
$this->destinationCity = NULL;
return false;
}
/**
* setDestinationState
*
* @access public
* @param $destinationState string
* @return boolean
*/
function setDestinationState ($destinationState) {
$destinationState = trim($destinationState);
if (is_string($destinationState) && strlen($destinationState) > 0) {
$this->destinationState = $destinationState;
return true;
}
$this->destinationState = NULL;
return false;
}
/**
* setDestinationCountry
*
* @access public
* @param $destinationCountry integer
* @return boolean
*/
function setDestinationCountry ($destinationCountry) {
if (settype($destinationCountry, "string")) {
if (strlen($destinationCountry) == 2) {
$this->destinationCountry = $destinationCountry;
return true;
}
}
$this->destinationCountry = NULL;
return false;
}
/**
* setPayMethod
*
* @access public
* @param $payMethod string
* @return boolean
*/
function setPayMethod ($payMethod) {
$payMethod = strtoupper($payMethod);
switch ($payMethod) {
case 'CCVISAMC':
$this->payMethod = 'CCVISAMC';
$retval = true;
break;
case 'CCAMEX':
$this->payMethod = 'CCAMEX';
$retval = true;
break;
case 'CCDINERS':
$this->payMethod = 'CCDINERS';
$retval = true;
break;
case 'CCJCB':
$this->payMethod = 'CCJCB';
$retval = true;
break;
case 'WIRE':
$this->payMethod = 'WIRE';
$retval = true;
break;
case 'CASH':
$this->payMethod = 'CASH';
$retval = true;
break;
case 'PAYPAL':
$this->payMethod = 'PAYPAL';
$retval = true;
break;
case 'BRDF':
$this->payMethod = 'BRDF';
$retval = true;
break;
case 'STAR_BT':
$this->payMethod = 'STAR_BT';
$retval = true;
break;
case 'CARD_AVANTAJ':
$this->payMethod = 'CARD_AVANTAJ';
$retval = true;
break;
case 'RAIFFEISEN':
$this->payMethod = 'RAIFFEISEN';
$retval = true;
break;
case 'ITRANSFER_ING':
$this->payMethod = 'ITRANSFER_ING';
$retval = true;
break;
case 'ITRANSFER_BCR':
$this->payMethod = 'ITRANSFER_ING';
$retval = true;
break;
case 'ITRANSFER_BT':
$this->payMethod = 'ITRANSFER_BT';
$retval = true;
break;
default:
$this->payMethod = NULL;
$retval = false;
}
return $retval;
}
/**
* setInstallments
*
* Sets the installmebts no
*
* @access public
* @param $installments int
*/
function setInstallments ($installments) {
$this->installments = intval($installments);
}
/**
* setBilling
*
* Sets the billing information for the order
*
* @access public
* @param $billing array
*/
function setBilling ($billing) {
foreach ($billing as $key => $val)
$this->billing[$key] = $val;
$this->billingSet = true;
}
/**
* setDelivery
*
* Sets the delivery information for the order
*
* @access public
* @param $delivery array
*/
function setDelivery ($delivery) {
while (is_array($delivery) && list($key, $val) = each($delivery)) {
$$key = $val;
switch ($key) {
case 'deliveryCity':
if (is_string($this->destinationCity) && empty($this->destinationCity))
$this->delivery[$key] = $val;
else
$this->delivery[$key] = $this->destinationCity;
break;
case 'deliveryState':
if (is_string($this->destinationState) && empty($this->destinationState))
$this->delivery[$key] = $val;
else
$this->delivery[$key] = $this->destinationState;
break;
case 'deliveryCountryCode':
if ($this->destinationCountry === 0)
$this->delivery[$key] = $val;
else
$this->delivery[$key] = $this->destinationCountry;
break;
default:
$this->delivery[$key] = $val;
}
}
$this->deliverySet = true;
}
/**
* getLiveUpdateHTML
*
* This method returns the HTML code. This will include only the hidden
* fields, not the <form></form> tags.
*
* @access public
* @access public
* @return string
*/
function getLiveUpdateHTML () {
$htmlCode = "";
//add reference
if (is_null($this->merchant))
$htmlCode = "<!-- PayU ERROR: Invalid merchant id. -->";
else
$htmlCode .= $this->createHiddenField('merchant',$this->merchant, false);
//add external order ref
if (!is_null($this->orderRef))
$htmlCode .= $this->createHiddenField('order_ref',$this->orderRef, false);
//add order date
if (is_null($this->orderDate))
$htmlCode = "<!-- PayU ERROR: Invalid order date. -->";
else
$htmlCode .= $this->createHiddenField('order_date', $this->orderDate, false);
$sincronized = true;
if ((count($this->orderPName) == count($this->orderPCode))
&& (count($this->orderPCode) == count($this->orderPrice))
&& (count($this->orderPrice) == count($this->orderQty))
&& (count($this->orderQty) == count($this->orderVAT))) {
$count = count($this->orderPName);
if (count($this->orderPInfo))
if ($count != count($this->orderPInfo))
$sincronized = false;
if (count($this->orderVer))
if ($count != count($this->orderVer))
$sincronized = false;
if (count($this->orderPGroup))
if ($count != count($this->orderPGroup))
$sincronized = false;
if (count($this->orderPType))
if ($count != count($this->orderPType))
$sincronized = false;
} else {
$sincronized = false;
}
if ($sincronized) {
//add order pname
if (is_null($this->orderPName) || empty($this->orderPName))
$htmlCode = "<!-- PayU ERROR: Invalid order name. -->";
else
$htmlCode .= $this->createHiddenField('order_pname', $this->orderPName);
//add order pcode
if (is_null($this->orderPGroup))
$htmlCode = "<!-- PayU ERROR: Invalid order group input. -->";
elseif (!empty($this->orderPGroup))
$htmlCode .= $this->createHiddenField('ORDER_PGROUP', $this->orderPGroup);
//add order pcode
if (is_null($this->orderPCode) || empty($this->orderPCode))
$htmlCode = "<!-- PayU ERROR: Invalid product codes. -->";
else
$htmlCode .= $this->createHiddenField('order_pcode', $this->orderPCode);
//add order pinfo
if (is_null($this->orderPInfo))
$htmlCode = "<!-- PayU ERROR: Invalid product info. -->";
elseif (!empty($this->orderPInfo))
$htmlCode .= $this->createHiddenField('order_pinfo', $this->orderPInfo);
//add order prices
if (is_null($this->orderPrice) || empty($this->orderPrice))
$htmlCode = "<!-- PayU ERROR: Invalid order prices. -->";
else
$htmlCode .= $this->createHiddenField('ORDER_PRICE', $this->orderPrice);
//add order price types
if (is_null($this->orderPType))
$htmlCode = "<!-- PayU ERROR: Invalid order price types. -->";
else
$htmlCode .= $this->createHiddenField('ORDER_PRICE_TYPE', $this->orderPType);
//add order qty
if (is_null($this->orderQty) || empty($this->orderQty))
$htmlCode = "<!-- PayU ERROR: Invalid quantity. -->";
else
$htmlCode .= $this->createHiddenField('order_qty', $this->orderQty);
//add order vat
if (is_null($this->orderVAT) || empty($this->orderVAT))
$htmlCode = "<!-- PayU ERROR: Invalid order vat. -->";
else
$htmlCode .= $this->createHiddenField('order_vat', $this->orderVAT);
//add order ver
if (is_null($this->orderVer))
$htmlCode = "<!-- PayU ERROR: Invalid product versions. -->";
elseif (!empty($this->orderVer))
$htmlCode .= $this->createHiddenField('order_ver', $this->orderVer);
} else {
return "<!-- PayU ERROR - sent arrays are not syncronized (variable length) -->";
}
//add shipping
if (is_null($this->orderShipping))
return "<!-- PayU ERROR: Invalid shipping value. -->";
elseif ((is_numeric($this->orderShipping)) && ($this->orderShipping >= 0))
$htmlCode .= $this->createHiddenField('ORDER_SHIPPING', $this->orderShipping, false);
else
$htmlCode .= "";
//add currency
if (!empty($this->pricesCurrency))
$htmlCode .= $this->createHiddenField('PRICES_CURRENCY', $this->pricesCurrency, false);
//add discount
if (is_null($this->discount))
return "<!-- PayU ERROR: Invalid discount. -->";
elseif ($this->discount)
$htmlCode .= $this->createHiddenField('discount', $this->discount, false);
//add destination city
if (is_null($this->destinationCity))
$htmlCode = "<!-- PayU ERROR: Invalid destination city. -->";
elseif (!empty($this->destinationCity))
$htmlCode .= $this->createHiddenField('DESTINATION_CITY', $this->destinationCity, false);
//add destination state
if (is_null($this->destinationState))
return "<!-- PayU ERROR: Invalid destination state. -->";
elseif (!empty($this->destinationState))
$htmlCode .= $this->createHiddenField('DESTINATION_STATE', $this->destinationState, false);
//add destination country
if (is_null($this->destinationCountry))
return "<!-- PayU ERROR: Invalid destination country code. -->";
elseif (!empty($this->destinationCountry))
$htmlCode .= $this->createHiddenField('DESTINATION_COUNTRY', $this->destinationCountry, false);
//add pay method
if (!empty($this->payMethod))
$htmlCode .= $this->createHiddenField('PAY_METHOD', $this->payMethod, false);
//add installments
if (!empty($this->installments))
$htmlCode .= $this->createHiddenField('SELECTED_INSTALLMENTS_NO', $this->installments, false);
//add order hash
$hmacHash = $this->hmac($this->secretKey, $this->getHmacString());
$htmlCode .= $this->createHiddenField('ORDER_HASH', $hmacHash, false);
//add test mode
if ($this->testMode)
$htmlCode .= "<input name=\"TESTORDER\" type=\"hidden\" value=\"TRUE\">\n";
//add billing information if it is available
if ($this->billingSet) {
$billingFields = array(
"billFName" => 'BILL_FNAME',
"billLName" => 'BILL_LNAME',
"billCISerial" => 'BILL_CISERIAL',
"billCINumber" => 'BILL_CINUMBER',
"billCIIssuer" => 'BILL_CIISSUER',
"billCNP" => 'BILL_CNP',
"billCompany" => 'BILL_COMPANY',
"billFiscalCode" => 'BILL_FISCALCODE',
"billRegNumber" => 'BILL_REGNUMBER',
"billBank" => 'BILL_BANK',
"billBankAccount" => 'BILL_BANKACCOUNT',
"billEmail" => 'BILL_EMAIL',
"billPhone" => 'BILL_PHONE',
"billFax" => 'BILL_FAX',
"billAddress1" => 'BILL_ADDRESS',
"billAddress2" => 'BILL_ADDRESS2',
"billZipCode" => 'BILL_ZIPCODE',
"billCity" => 'BILL_CITY',
"billState" => 'BILL_STATE',
"billCountryCode" => 'BILL_COUNTRYCODE'
);
foreach ($this->billing as $key => $val)
$htmlCode .= $this->createHiddenField($billingFields[$key], $this->billing[$key], false);
}
//add delivery information if it is available
if ($this->deliverySet) {
$deliveryFields = array(
"deliveryFName" => 'DELIVERY_FNAME',
"deliveryLName" => 'DELIVERY_LNAME',
"deliveryCompany" => 'DELIVERY_COMPANY',
"deliveryPhone" => 'DELIVERY_PHONE',
"deliveryAddress1" => 'DELIVERY_ADDRESS',
"deliveryAddress2" => 'DELIVERY_ADDRESS2',
"deliveryZipCode" => 'DELIVERY_ZIPCODE',
"deliveryCity" => 'DELIVERY_CITY',
"deliveryState" => 'DELIVERY_STATE',
"deliveryCountryCode" => 'DELIVERY_COUNTRYCODE'
);
foreach ($this->delivery as $key => $val)
$htmlCode .= $this->createHiddenField($deliveryFields[$key], $this->delivery[$key], false);
}
if (is_string($this->language) && !empty($this->language))
$htmlCode .= $this->createHiddenField('LANGUAGE', $this->language, false);
return $htmlCode;
}
/**
* createHiddenField
*
* @access private
* @param $fieldName string name/id of the hidden field in html code
* @param $fieldValue string field/fields value/values
* @param $isArray bool specifies if it should generate an array or not
* @return string output html code
*/
function createHiddenField ($fieldName, $fieldValue, $isArray = true) {
$fieldName = strtoupper($fieldName);
$retval = "";
if ($isArray) {
for ($i = 0; $i < count($fieldValue); $i++) {
$fieldValue[$i] = htmlspecialchars($fieldValue[$i]);
$retval .= "<input name=\"".$fieldName."[]\" type=\"hidden\" value=\"".$fieldValue[$i]."\" id=\"$fieldName\">\n";
//$retval .= "<input name=\"".$fieldName."[]\" type=\"text\" value=\"".$fieldValue[$i]."\" id=\"$fieldName\">\n";
}
} else {
$fieldValue = htmlspecialchars($fieldValue);
$retval = "<input name=\"$fieldName\" type=\"hidden\" value=\"$fieldValue\" id=\"$fieldName\">\n";
//$retval = "<input name=\"$fieldName\" type=\"text\" value=\"$fieldValue\" id=\"$fieldName\">\n";
}
return $retval;
}
/**
* getHmacString
*
* Creates source string for hmac hash
* THIS FUNCTION SHOULD NOT BE MODIFIED.
*
* @access private
* @return string
*/
function getHmacString () {
$retval = "";
$retval .= $this->expandString($this->merchant);
$retval .= $this->expandString($this->orderRef);
$retval .= $this->expandString($this->orderDate);
$retval .= $this->expandArray($this->orderPName);
$retval .= $this->expandArray($this->orderPCode);
if (is_array($this->orderPInfo) && !empty($this->orderPInfo))
$retval .= $this->expandArray($this->orderPInfo);
$retval .= $this->expandArray($this->orderPrice);
$retval .= $this->expandArray($this->orderQty);
$retval .= $this->expandArray($this->orderVAT);
if (is_array($this->orderVer) && !empty($this->orderVer))
$retval .= $this->expandArray($this->orderVer);
if (is_numeric($this->orderShipping) && $this->orderShipping >= 0)
$retval .= $this->expandString($this->orderShipping);
if (is_string($this->pricesCurrency) && !empty($this->pricesCurrency))
$retval .= $this->expandString($this->pricesCurrency);
if (is_numeric($this->discount) && !empty($this->discount))
$retval .= $this->expandString($this->discount);
if (is_string($this->destinationCity) && !empty($this->destinationCity))
$retval .= $this->expandString($this->destinationCity);
if (is_string($this->destinationState) && !empty($this->destinationState))
$retval .= $this->expandString($this->destinationState);
if (is_string($this->destinationCountry) && !empty($this->destinationCountry))
$retval .= $this->expandString($this->destinationCountry);
if (is_string($this->payMethod) && !empty($this->payMethod))
$retval .= $this->expandString($this->payMethod);
if (is_array($this->orderPGroup) && count($this->orderPGroup))
$retval .= $this->expandArray($this->orderPGroup);
if (is_array($this->orderPType) && count($this->orderPType))
$retval .= $this->expandArray($this->orderPType);
if (is_int($this->installments) && !empty($this->installments))
$retval .= $this->expandString($this->installments);
if (!empty($this->testMode)) {
$retval .= $this->expandString('TRUE');
}
return $retval;
}
/**
* expandString
*
* Outputs a string for hmac format. For a string like 'a' it will return '1a'.
*
* @access private
* @param $string string
* @return string
*/
function expandString ($string) {
$retval = "";
//$string = htmlspecialchars($string);
$size = strlen($string);
$retval = $size . $string;
return $retval;
}
/**
* expandArray
*
* The same as expandString except that it receives an array of strings and
* returns the string from all values within the array.
*
* @param $array array
* @return string
*/
function expandArray($array) {
$retval = "";
for ($i = 0; $i < count($array); $i++)
$retval .= $this->expandString($array[$i]);
return $retval;
}
/**
* hmac
*
* Build HMAC key. THIS FUNCTION SHOULD NOT BE MODIFIED.
*
* @param $array string secret key
* @param @data string the source string that will be converted into hmac hash
* @return string hmac hash
*/
function hmac ($key, $data) {
$b = 64; // byte length for md5
if (strlen($key) > $b) {
$key = pack("H*",md5($key));
}
$key = str_pad($key, $b, chr(0x00));
$ipad = str_pad('', $b, chr(0x36));
$opad = str_pad('', $b, chr(0x5c));
$k_ipad = $key ^ $ipad ;
$k_opad = $key ^ $opad;
return md5($k_opad . pack("H*",md5($k_ipad . $data)));
}
}
?>
<?php
// Application middleware
// e.g: $app->add(new \Slim\Csrf\Guard);
<?php
$app->get('/', function ($request, $response, $args) {
if($this->session->exists('user_id')){
$args['loggedIn'] = true;
$api = new Api($this);
$args['admin'] = $api->CheckAdmin();
$args['jenuPublication'] = $this->jenuPublication;
}
return $this->renderer->render($response, 'index.phtml', $args);
})->setName('home');
$app->get('/contul-meu', function($request, $response, $args){
if($this->session->exists('user_id')){
$api = new Api($this);
$params = $request->getQueryParams();
$quotes = $api->GetUserQuotes($params);
$args["quotes"] = $quotes["quotes"];
$args["total"] = $quotes["total"];
$args["loggedIn"] = true;
$args["statuses"] = $api->QuoteStatuses();
$args["adTypes"] = $api->AdTypes();
$args['admin'] = $api->CheckAdmin();
return $this->renderer->render($response, 'cotatii.phtml', $args);
}
return $response->withRedirect($this->router->pathFor('home'), 303);
})->setName('profile');
$app->get('/admin/cotatii', function($request, $response, $args){
if($this->session->exists('user_id')){
$api = new Api($this);
$isAdmin = $api->CheckAdmin();
if($isAdmin){
$params = $request->getQueryParams();
$quotes = $api->GetAdminQuotes($params);
$args["quotes"] = $quotes["quotes"];
$args["total"] = $quotes["total"];
$args["loggedIn"] = true;
$args["statuses"] = $api->QuoteStatuses();
$args["adTypes"] = $api->AdTypes();
$args['admin'] = $api->CheckAdmin();
return $this->renderer->render($response, 'cotatii-admin.phtml', $args);
}
return $response->withRedirect($this->router->pathFor('home'), 303);
}
return $response->withRedirect($this->router->pathFor('home'), 303);
})->setName('profile');
$app->post('/quote/{id}/update', function($request, $response, $args){
if($this->session->exists('user_id')){
$api = new Api($this);
$params = $request->getParsedBody();
$fields = [
"id" => $request->getAttribute('id'),
"status" => 2
];
if(!empty($params["price"])){
$fields["price"] = $params["price"];
}
if(!empty($params["status"])){
$fields["status"] = $params["status"];
}
if(!empty($params["adText"])){
$fields["adText"] = $params["adText"];
}
$fields["fromUser"] = true;
$updated = $api->UpdateQuote($fields);
if($updated){
return $response->withJson(['success' => 'Updated']);
}
return $response->withJson(['error' => 'Failed']);
}
return $response->withJson(['error' => 'Unauthenticated']);
});
$app->get('/uploads/{id}', function($request, $response, $args) {
if($this->session->exists('user_id')){
$api = new Api($this);
$quote = $api->GetQuote($request->getAttribute('id'));
if($quote){
$file = __DIR__ . '/../uploads/' . $quote['file'];
$fh = fopen($file, 'rb');
if($fh){
$stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body
return $response->withHeader('Content-Type', 'application/force-download')
->withHeader('Content-Type', 'application/octet-stream')
->withHeader('Content-Type', 'application/download')
->withHeader('Content-Description', 'File Transfer')
->withHeader('Content-Transfer-Encoding', 'binary')
->withHeader('Content-Disposition', 'attachment; filename="' . basename($file) . '"')
->withHeader('Expires', '0')
->withHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0')
->withHeader('Pragma', 'public')
->withBody($stream); // all stream contents will be sent to the response
}
return $response->withRedirect($this->router->pathFor('profile'), 303);
}
return $response->withRedirect($this->router->pathFor('profile'), 303);
}
return $response->withRedirect($this->router->pathFor('home'), 303);
});
$app->delete('/quotation/{id}', function($request, $response, $args) {
if($this->session->exists('user_id')){
$api = new Api($this);
$quoteDeleted = $api->DeleteQuote($request->getAttribute('id'));
if($quoteDeleted){
return $response->withJson(['success' => true]);
}
return $response->withJson(['error' => false]);
}
return $response->withJson(['error' => 'not logged in']);
});
$app->post('/quotation', function($request, $response, $args){
if($this->session->exists('user_id')){
$params = $request->getParsedBody();
$files = $request->getUploadedFiles();
if (empty($files['quoteFile'])) {
throw new Exception('Image file expected');
}
$api = new Api($this);
// print_r($params);
// die();
$quoteSaved = $api->AddQuote($params, $files["quoteFile"]);
return $response->withJson(['success' => true]);
}
return $response->withJson(['error' => 'not logged in']);
});
$app->get('/logout', function($request, $response, $args){
if($this->session->exists("user_id")){
$this->session->delete('user_id');
return $response->withRedirect($this->router->pathFor('autentificare'), 303);
}
return $response->withRedirect($this->router->pathFor('home'), 303);
});
$app->get('/users/profile', function($request, $response, $args) {
if ($this->session->exists('user_id')){
$api = new Api($this);
$profile = $api->FetchUserProfile();
return $response->withJson($profile);
}
return $response->withJson(['error' => 'not logged in']);
});
$app->get('/autentificare', function($request, $response, $args){
if(!$this->session->exists('user_id')){
$args["errors"] = $this->flash->getMessages();
return $this->renderer->render($response, 'autentificare.phtml', $args);
}
return $response->withRedirect($this->router->pathFor('home'), 303);
})->setName('autentificare');
$app->post('/autentificare', function($request, $response, $args){
$api = new API($this);
if(empty($args)){
$args = array();
}
$params = $request->getParsedBody();
if(!empty($params)){
$res = $api->AuthenticateUser($params);
if(!empty($res)){
if($res['info']['http_code'] !== 200){
$this->flash->addMessage("error", "Credentiale invalide");
return $response->withRedirect($this->router->pathFor('autentificare'), 303);
} else {
return $response->withRedirect($this->router->pathFor('home'), 303);
}
}
}
});
$app->post('/confirm-payment', function($request, $response, $args){
require_once 'Mobilpay/Payment/Request/Abstract.php';
require_once 'Mobilpay/Payment/Request/Card.php';
require_once 'Mobilpay/Payment/Request/Notify.php';
require_once 'Mobilpay/Payment/Invoice.php';
require_once 'Mobilpay/Payment/Address.php';
$errorCode = 0;
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_NONE;
$errorMessage = '';
if (strcasecmp($_SERVER['REQUEST_METHOD'], 'post') == 0)
{
if(isset($_POST['env_key']) && isset($_POST['data']))
{
#calea catre cheia privata
#cheia privata este generata de mobilpay, accesibil in Admin -> Conturi de comerciant -> Detalii -> Setari securitate
$params = $request->getParsedBody();
global $settings;
$paymentSettings = $settings['settings']['payments'];
$privateKeyFilePath = $paymentSettings["privateCertificate"];
try
{
$objPmReq = Mobilpay_Payment_Request_Abstract::factoryFromEncrypted($params['env_key'], $params['data'], $privateKeyFilePath);
#uncomment the line below in order to see the content of the request
// print_r($objPmReq);
$rrn = $objPmReq->objPmNotify->rrn;
$api = new API($this);
$id = $objPmReq->params["ad"];
if(!empty($objPmReq->params["quote"])){
$quoteId = $objPmReq->params["quote"];
}
$amount = $objPmReq->invoice->amount;
$transaction = $objPmReq->orderId;
// action = status only if the associated error code is zero
if ($objPmReq->objPmNotify->errorCode == 0) {
switch($objPmReq->objPmNotify->action)
{
#orice action este insotit de un cod de eroare si de un mesaj de eroare. Acestea pot fi citite folosind $cod_eroare = $objPmReq->objPmNotify->errorCode; respectiv $mesaj_eroare = $objPmReq->objPmNotify->errorMessage;
#pentru a identifica ID-ul comenzii pentru care primim rezultatul platii folosim $id_comanda = $objPmReq->orderId;
case 'confirmed':
#cand action este confirmed avem certitudinea ca banii au plecat din contul posesorului de card si facem update al starii comenzii si livrarea produsului
//update DB, SET status = "confirmed/captured"
$api->MarkPayment($id, $amount, $transaction);
if(isset($quoteId)){
$api->UpdateQuote([
"status" => 4,
"id" => $quoteId,
"payment" => true
]);
}
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
case 'confirmed_pending':
#cand action este confirmed_pending inseamna ca tranzactia este in curs de verificare antifrauda. Nu facem livrare/expediere. In urma trecerii de aceasta verificare se va primi o noua notificare pentru o actiune de confirmare sau anulare.
//update DB, SET status = "pending"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
case 'paid_pending':
#cand action este paid_pending inseamna ca tranzactia este in curs de verificare. Nu facem livrare/expediere. In urma trecerii de aceasta verificare se va primi o noua notificare pentru o actiune de confirmare sau anulare.
//update DB, SET status = "pending"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
case 'paid':
#cand action este paid inseamna ca tranzactia este in curs de procesare. Nu facem livrare/expediere. In urma trecerii de aceasta procesare se va primi o noua notificare pentru o actiune de confirmare sau anulare.
//update DB, SET status = "open/preauthorized"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
case 'canceled':
#cand action este canceled inseamna ca tranzactia este anulata. Nu facem livrare/expediere.
//update DB, SET status = "canceled"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
$api->CancelDraft($id);
if(isset($quoteId)){
$api->UpdateQuote([
"status" => 8,
"id" => $quoteId,
"payment" => true
]);
}
break;
case 'credit':
#cand action este credit inseamna ca banii sunt returnati posesorului de card. Daca s-a facut deja livrare, aceasta trebuie oprita sau facut un reverse.
//update DB, SET status = "refunded"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
default:
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
$errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_ACTION;
$errorMessage = 'mobilpay_refference_action paramaters is invalid';
break;
}
}
else {
//update DB, SET status = "rejected"
$api->CancelDraft($id);
if(isset($quoteId)){
$api->UpdateQuote([
"status" => 5,
"id" => $quoteId,
"payment" => true
]);
}
$errorMessage = $objPmReq->objPmNotify->errorMessage;
}
}
catch(Exception $e)
{
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_TEMPORARY;
$errorCode = $e->getCode();
$errorMessage = $e->getMessage();
}
}
else
{
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
$errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_POST_PARAMETERS;
$errorMessage = 'mobilpay.ro posted invalid parameters';
}
}
else
{
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
$errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_POST_METHOD;
$errorMessage = 'invalid request metod for payment confirmation';
}
header('Content-type: application/xml');
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
if($errorCode == 0)
{
echo "<crc>{$errorMessage}</crc>";
}
else
{
echo "<crc error_type=\"{$errorType}\" error_code=\"{$errorCode}\">{$errorMessage}</crc>";
}
});
$app->map(array('GET', 'POST'), '/finalizare', function ($request, $response, $args) {
if (empty($args)) {
$args = array();
}
$args['ok'] = true;
$api = new API();
$params = array();
$params = $request->getQueryParams();
if (empty($params)) {
$args['ok'] = false;
$api->CancelDraft($params['ad']);
}
// $id = $params['ad'];
// $amount = $params['Amount'];
// $transaction = $params['RefNo'];
// if (empty($api->MarkPayment($id, $amount, $transaction))) {
// $args['ok'] = false;
// $api->CancelDraft($id);
// }
return $this->renderer->render($response, 'finalizare.phtml', $args);
});
$app->post('/payment-quote', function ($request, $response, $args) {
$api = new API();
$params = $request->getParsedBody();
if (empty($params['ad_id'])) {
throw new Exception('Must provide ad id');
}
if (empty($params['quote_id'])) {
throw new Exception('Must provide quote id');
}
$data = $api->GetAd($params['ad_id']);
if (empty($data['data'])) {
throw new Exception('Could not get ad');
}
if (empty($data['data']['id'])) {
throw new Exception('Could not get ad id');
}
$order = $data['data']['id'];
if (empty($data['data']['invoiceValue']['total'])) {
throw new Exception('Could not get ad price');
}
$amount = $data['data']['invoiceValue']['total'];
if (empty($data['data']['contact'])) {
throw new Exception('Could not get ad contact');
}
$contact = $data['data']['contact'];
global $settings;
$paymentSettings = $settings['settings']['payments'];
$billing = array(
'billFName' => $contact['firstName'],
'billLName' => $contact['lastName'],
'billEmail' => $contact['email'],
'billPhone' => $contact['phone'],
'billAddress1' => $contact['address'],
'billCountryCode' => 'RO'
);
if ($contact['type'] == 2) {
$billing['billCompany'] = $contact['name'];
$billing['billFiscalCode'] = $contact['vat'];
$billing['billRegNumber'] = $contact['crn'];
$billing['billBank'] = $contact['bank'];
$billing['billBankAccount'] = $contact['iban'];
} else {
$billing['billCNP'] = $contact['nin'];
}
$data = array(
'paymentSettings' => $paymentSettings,
// 'debug' => false,
// 'language' => 'ro',
'billing' => $billing,
'order' => array(
'date' => date('Y-m-d H:i:s'),
'name' => sprintf('Publicare anunt %d', $order),
'reference' => $order,
'amount' => $amount,
)
);
if(!empty($params['quote_id'])){
$data['order']['quote_id'] = $params['quote_id'];
}
$args['data'] = $data;
return $this->renderer->render($response, 'payment.phtml', $args);
});
$app->post('/payment', function ($request, $response, $args) {
$api = new API();
$params = $request->getParsedBody();
if (empty($params['ad_id'])) {
throw new Exception('Must provide ad id');
}
$data = $api->GetAd($params['ad_id']);
if (empty($data['data'])) {
throw new Exception('Could not get ad');
}
if (empty($data['data']['id'])) {
throw new Exception('Could not get ad id');
}
$order = $data['data']['id'];
if (empty($data['data']['invoiceValue']['total'])) {
throw new Exception('Could not get ad price');
}
$amount = $data['data']['invoiceValue']['total'];
if (empty($data['data']['contact'])) {
throw new Exception('Could not get ad contact');
}
$contact = $data['data']['contact'];
global $settings;
$paymentSettings = $settings['settings']['payments'];
$billing = array(
'billFName' => $contact['firstName'],
'billLName' => $contact['lastName'],
'billEmail' => $contact['email'],
'billPhone' => $contact['phone'],
'billAddress1' => $contact['address'],
'billCountryCode' => 'RO'
);
if ($contact['type'] == 2) {
$billing['billCompany'] = $contact['name'];
$billing['billFiscalCode'] = $contact['vat'];
$billing['billRegNumber'] = $contact['crn'];
$billing['billBank'] = $contact['bank'];
$billing['billBankAccount'] = $contact['iban'];
} else {
$billing['billCNP'] = $contact['nin'];
}
$data = array(
'paymentSettings' => $paymentSettings,
// 'debug' => false,
// 'language' => 'ro',
'billing' => $billing,
'order' => array(
'date' => date('Y-m-d H:i:s'),
'name' => sprintf('Publicare anunt %d', $order),
'reference' => $order,
'amount' => $amount,
)
);
$args['data'] = $data;
return $this->renderer->render($response, 'payment.phtml', $args);
});
$app->get('/listing', function ($request, $response, $args) {
$api = new API();
$pubs = $api->GetPublications();
return $response->withJson($pubs['data'], $pubs['info']['http_code']);
});
$app->get('/columns/{id}', function ($request, $response) {
$api = new API();
$pubs = $api->GetPublicationsExt($request->getAttribute('id'));
return $response->withJson($pubs['data'], $pubs['info']['http_code']);
});
$app->post('/summary', function ($request, $response, $args) {
$api = new API();
$price = $api->GetPrice($request->getParsedBody());
return $response->withJson($price['data'], $price['info']['http_code']);
});
$app->post('/createDraft', function($request, $response, $args) {
$api = new API();
$data = $api->CreateDraft($request->getParsedBody());
if (empty($data['data']['id'])) {
throw new Exception('Could not create ad');
}
$ret = array('ad_id' => $data['data']['id']);
return $response->withJson($ret, $data['info']['http_code']);
});
$app->post('/uploadImage', function($request, $response, $args) {
$id = $request->getParam('id', false);
if (empty($id)) {
throw new Exception('Ad id expected');
}
$files = $request->getUploadedFiles();
if (empty($files['file'])) {
throw new Exception('Image file expected');
}
$file = $files['file'];
$path = '/tmp/'.uniqid('', true).'_'.$file->getClientFilename();
$file->moveTo($path);
$curlFile = curl_file_create($path,
$file->getClientMediaType(), $file->getClientFilename());
$api = new API();
$resp = $api->UploadImage($id, ['file' => $curlFile,
'readyDTP' => 'false']);
unlink($path);
return $response->withJson($resp['data'], $resp['info']['http_code']);
});
<?php
require(__DIR__.'/../config.php');
require(__DIR__.'/live-update.php');
$config = appConfig();
return [
'settings' => [
'displayErrorDetails' => $config['displayErrorDetails'],
'renderer' => [
'template_path' => __DIR__.'/../templates/',
],
'logger' => $config['logger'],
'api' => $config['api'],
'payments' => $config['payments'],
'db' => $config['db'],
'upload' => $config['upload'],
'admin' => $config['admin'],
'smtp' => $config['smtp'],
'jenuPublication' => $config['jenuPublication']
]
];
<!DOCTYPE html>
<html lang="ro-RO">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<title>Anunturi mica publicitate - Anuțuri presa scrisă - Rofusion Advertising Srl</title>
<link href="css/materialize.css" type="text/css" rel="stylesheet">
<link href="css/styleadd.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>
<div class="navbar-fixed">
<nav role="navigation">
<div class="container">
<div class="row">
<div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg" alt="Anunturi mica publicitate"></a>
</div>
</div>
</div>
</nav>
</div>
<div class="section loginForm">
<div class="container">
<div class="row">
<div class="col s4 offset-s4">
<?php
if (!empty($errors)) {
?>
<strong class="error">Credentiale incorecte</strong>
<?php
}
?>
<div class="card">
<div class="card-content login-card-content">
<div class="row">
<form action="/autentificare" method="POST">
<div class="input-field col s12">
<input placeholder="Email" id="email" name="email" type="email" />
<label for="email">Email</label>
</div>
<div class="input-field col s12">
<input placeholder="Parola" name="password" id="password" type="password" />
<label for="password">Parola</label>
</div>
<div class="col s12">
<button class="btn waves-effect waves-light" type="submit" name="action">Autentificare
<i class="material-icons right">send</i>
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="page-footer default_color scrollspy" >
<div class="container">
<div class="row">
<div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<ul>
<li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni și Condiții</a></li>
</ul>
</div>
<div class="col l6 s12 right-align">
<h5 class="white-text" id="contact">Contact</h5>
<ul class="white-text">
<li>Bd. Ion Mihalache nr. 140 S<br>Sector 1, București</li>
<li>Telefon </li>
</ul>
</div>
</div>
</div>
<div class="footer-copyright z-depth-1">
<div class="container">
<b>&copy; Rofusion Advertising Srl</b>
<span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank" title="activemall.ro">activemall.ro</a></span>
</div>
</div>
</footer>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="js/materialize.js"></script>
<script src="js/modernizr.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="ro-RO">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<title>Manager Cotatii - Anunturi mica publicitate - Anuțuri presa scrisă - Rofusion Advertising Srl</title>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<link href="/css/materialize.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="/css/kalendae.css" type="text/css" rel="stylesheet">
<link href="/css/styleadd.css" type="text/css" rel="stylesheet">
</head>
<body id="top" class="scrollspy">
<div id="loader-wrapper">
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
</div>
<div class="navbar-fixed">
<nav role="navigation">
<div class="container">
<div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="../img/logo.svg" alt="Anunturi mica publicitate"></a>
<ul id="nav-mobile" class="right">
<li>
<?php if(!$loggedIn) { ?>
<li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li>
<?php } else { ?>
<?php if(!$admin){ ?>
<li><a href="/contul-meu" class="waves-effect waves-light btn-large btnmo">Contul meu</a></li>
<?php } else { ?>
<li><a href="/admin/cotatii" class="waves-effect waves-light btn-large btnmo pink darken-4">Manager Cotatii</a></li>
<?php } ?>
<li><a href="/logout" class="waves-effect waves-light btn-large btnmo">Logout</a></li>
<?php } ?>
</li>
</ul>
</div>
</div>
</nav>
</div>
<div class="container cotatii">
<h1>Manager Cotatii</h1>
<table class="striped highlight responsive-table">
<thead>
<tr>
<th>ID</th>
<th>Id anunt</th>
<th>Nume client</th>
<th>Companie</th>
<th>Data</th>
<th>Tip anunt</th>
<th>Publicatii</th>
<th>Fisier</th>
<th>Pret</th>
<th>Status</th>
<th>Actiuni</th>
</tr>
</thead>
<tbody>
<?php
foreach($quotes as $quote){
$quoteDetails = json_decode($quote['details'], true);
$statusClass = $quote["status"] == 7 ? 'red':'cyan darken-3';
$quoteContact = $quoteDetails["contact"];
if(is_string($quoteDetails["contact"])){
$quoteContact = json_decode($quoteDetails["contact"], true);
}
$adDetails = $quoteDetails["columns"];
if(is_string($quoteDetails["columns"])){
$adDetails = json_decode($quoteDetails["columns"], true);
}
?>
<tr>
<td><?= $quote['id'] ?></td>
<td>
<?php echo !empty($quoteDetails['ad_id']) ? $quoteDetails['ad_id']:'-'?>
</td>
<td><?= $quoteContact["firstName"] . " " . $quoteContact["lastName"] ?></td>
<td><?= $quoteContact["name"] ?></td>
<td>
<?php
$date = date_create_from_format('Y-m-d H:i:s',$quote['created_at']);
$fDate = date_format($date, "H:i d-m-Y");
?>
<?= $fDate; ?></td>
<td>
<?php echo $adTypes[$quoteDetails['selectedKind']] ?>
</td>
<td>
<?php
foreach($adDetails as $column){
?>
<?php if(!empty($column["publicationName"])){ ?>
<p>
Publicatie: <?= $column["publicationName"] ?> <br>
Categorie:
<?= $column["columnName"] ?> <br>
</p>
<?php } ?>
<?php } ?>
</td>
<td>
<?php
if(!empty($quote['file'])){
?>
<!-- <a href="<?php echo '/uploads/' . $quote['id']; ?>"><?= $quote['file'] ?></a> -->
<a href="<?php echo '/uploads/' . $quote['id']; ?>">Descarca</a>
<?php } ?>
</td>
<td class="right-align blue-grey darken-1 white-text">
<?php
if(empty($quote['price'])){
?>
<!-- <input min="0" step="0.01" placeholder="Pret" name="price" type="number" id="price-quote-<?php echo $quote['id']; ?>" value=""/> -->
-
<?php
} else {
?>
<?= $quote['price'] ?> lei
<?php
}
?>
</td>
<td>
<span class="new badge <?php echo $statusClass ?>" data-badge-caption="">
<?= $statuses[$quote['status']] ?>
</span>
</td>
<td>
<?php
if( $quote['status'] == 1 ){
?>
<a class="waves-effect waves-light btn btn-small modal-trigger" href="#modal-send-<?php echo $quote['id']; ?>" data-quote="<?php echo $quote['id'] ?>">Trimite</a>
<div id="modal-send-<?php echo $quote['id'] ?>" class="modal">
<div class="modal-content">
<div>
<b>Trimite cotatia cu id: <?php echo $quote['id'] ?></b><br><br>
</div>
<div class="input-field">
<textarea id="textarea1"
placeholder="Scrie anunțul aici."
class="materialize-textarea "
></textarea>
<label for="textarea1">Text Anunț</label>
</div>
</div>
<div class="modal-footer">
<a class=" send-quote-price waves-effect waves-light btn btn-small action-btn" data-quote="<?php echo $quote['id'] ?>">Trimite</a>
</div>
</div>
<?php } ?>
</td>
</tr>
<?php } ?>
</tbody>
</table>
<?php
$limit = 10;
$numberOfPages = ($total/$limit) > 1 ? $total/$limit:1;
if(!empty($_GET['offset'])){
$currentOffset = $_GET['offset'];
$currentPage = ($_GET['offset']/$limit) + 1;
}else{
$currentPage = 1;
$currentOffset = 0;
}
?>
<ul class="pagination">
<li <?php if($currentOffset/$limit - 1 < 0) { ?> style="pointer-events: none;" <?php } ?> class="<?php echo ($currentPage == 1) ? 'disabled':''; ?> waves-effect"><a href="/admin/cotatii?limit=<?php echo $limit; ?>&offset=<?php echo $currentOffset-$limit; ?>"><i class="material-icons">chevron_left</i></a></li>
<?php for($i = 1; $i <= $numberOfPages; $i++){ ?>
<?php $offset = ($i - 1) * $limit;
?>
<li class="<?php echo ($currentPage == $i) ? 'active':''; ?>"><a href="/admin/cotatii?limit=<?php echo $limit;?>&offset=<?php echo $offset; ?>"><?php echo $i; ?></a></li>
<?php } ?>
<li <?php if($currentOffset/$limit + 1 == $numberOfPages){ ?> style="pointer-events: none;" <?php } ?> class="waves-effect <?php echo ($currentPage == $numberOfPages) ? 'disabled' : '' ;?>"><a href="/admin/cotatii?limit=<?php echo $limit; ?>&offset=<?php echo $currentOffset+$limit; ?>"><i class="material-icons">chevron_right</i></a></li>
</ul>
</div>
<footer class="page-footer default_color scrollspy" >
<div class="container">
<div class="row">
<div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<ul>
<li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni și Condiții</a></li>
</ul>
</div>
<div class="col l6 s12 right-align">
<h5 class="white-text" id="contact">Contact</h5>
<ul class="white-text">
<li>Bd. Ion Mihalache nr. 140 S<br>Sector 1, București</li>
<li>Telefon </li>
</ul>
</div>
</div>
</div>
<div class="footer-copyright z-depth-1">
<div class="container">
<b>&copy; Rofusion Advertising Srl</b>
<span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank" title="activemall.ro">activemall.ro</a></span>
</div>
</div>
</footer>
<div id="reguli" class="modal">
<div class="modal-content">
<h4>Reguli de redactare a unui anunț</h4>
<p>1. Nu scrieți cuvinte jignitoare sau ofensatoare.<br>2. Nu scrieți cuvintele legate între ele.<br>3. Numărul minim de cuvinte taxate este de 10, indiferent de lungimea anunțului dvs.</p>
</div>
<div class="modal-footer">
<a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">OK</a>
</div>
</div>
<script src="/js/jquery-3.1.0.min.js"></script>
<script src="/js/materialize.js"></script>
<script src="/js/quotes.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="ro-RO">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<title>Cotatii - Anunturi mica publicitate - Anuțuri presa scrisă - Rofusion Advertising Srl</title>
<link href="css/materialize.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="css/kalendae.css" type="text/css" rel="stylesheet">
<link href="css/styleadd.css" type="text/css" rel="stylesheet">
</head>
<body id="top" class="scrollspy">
<div id="loader-wrapper">
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
</div>
<div class="navbar-fixed">
<nav role="navigation">
<div class="container">
<div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg" alt="Anunturi mica publicitate"></a>
<ul id="nav-mobile" class="right">
<li>
<?php if(!$loggedIn) { ?>
<li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li>
<?php } else { ?>
<?php if(!$admin){ ?>
<li><a href="/contul-meu" class="waves-effect waves-light btn-large pink darken-4 btnmo">Contul meu</a></li>
<?php } else { ?>
<li><a href="/admin/cotatii" class="waves-effect waves-light btn-large btnmo">Manager Cotatii</a></li>
<?php } ?>
<li><a href="/logout" class="waves-effect waves-light btn-large btnmo">Logout</a></li>
<?php } ?>
</li>
</ul>
</div>
</div>
</nav>
</div>
<div class="container cotatii">
<h1>Cotatii mele</h1>
<table class="striped highlight responsive-table">
<thead>
<tr>
<th>ID</th>
<th>Data</th>
<th>Tip anunt</th>
<th>Fisier</th>
<th>Pret</th>
<th>Status</th>
<th>Actiuni</th>
</tr>
</thead>
<tbody>
<?php
foreach($quotes as $quote){
$quoteDetails = json_decode($quote['details'], true);
$statusClass = $quote["status"] == 7 ? 'red':'cyan darken-3';
?>
<tr>
<td><?= $quote['id'] ?></td>
<td>
<?php
$date = date_create_from_format('Y-m-d H:i:s',$quote['created_at']);
$fDate = date_format($date, "H:i d-m-Y");
?>
<?= $fDate; ?></td>
<td>
<?php echo $adTypes[$quoteDetails['selectedKind']] ?>
</td>
<td>
<?php
if(!empty($quote['file'])){
?>
<a href="<?php echo '/uploads/' . $quote['id']; ?>"><?= $quote['file'] ?></a>
<?php } ?>
</td>
<td class="right-align blue-grey darken-1 white-text">
<?= empty($quote['price']) ? '':$quote['price'] . ' lei' ?>
</td>
<td>
<span class="new badge <?php echo $statusClass ?>" data-badge-caption="">
<?= $statuses[$quote['status']] ?>
</span>
</td>
<td class="right-align">
<?php
if( $quote['status'] == 2 ){
?>
<a class="waves-effect waves-light btn btn-small modal-trigger" href="#modal-accept-<?php echo $quote['id']; ?>" data-quote="<?php echo $quote['id'] ?>">Accepta</a>
<a class="waves-effect waves-light btn btn-small red modal-trigger" href="#modal-decline-<?php echo $quote['id'] ?>">Refuza</a>
<div id="modal-accept-<?php echo $quote['id'] ?>" class="modal">
<div class="modal-content">
<h4>Accepta cotatia cu id: <?php echo $quote['id'] ?></h4>
</div>
<div class="modal-footer">
<a class="accept-quote waves-effect waves-light btn btn-small" data-quote="<?php echo $quote['id'] ?>">Accepta</a>
</div>
</div>
<div id="modal-decline-<?php echo $quote['id'] ?>" class="modal">
<div class="modal-content">
<h4>Refuzati cotatia cu id: <?php echo $quote['id'] ?></h4>
</div>
<div class="modal-footer">
<a class="deny-quote waves-effect waves-light btn btn-small red" data-quote="<?php echo $quote['id'] ?>">Refuza</a>
</div>
</div>
<?php } else if($quote['status'] == 3 && $quoteDetails['invoicePerAd'] == 0){ ?>
<a class=" waves-effect waves-light btn pay-quote" data-quote="<?php echo $quote['id'] ?>">Plateste</a>
<form action="/payment-quote" method="POST">
<input name="ad_id" type="hidden" value="<?php echo $quoteDetails['ad_id']; ?>"/>
<input name="quote_id" type="hidden" value="<?php echo $quote['id']; ?>"/>
</form>
<?php } else if($quote['status'] == 7) { ?>
<a class=" waves-effect waves-light btn btn-small modal-trigger red" href="#modal-delete-<?php echo $quote['id']; ?>" >Sterge</a>
<div id="modal-delete-<?php echo $quote['id'] ?>" class="modal">
<div class="modal-content">
<h4>Sterge cotatia cu id: <?php echo $quote['id'] ?></h4>
</div>
<div class="modal-footer">
<a class=" waves-effect waves-light btn btn-small red delete-quote" data-quote="<?php echo $quote['id'] ?>">Sterge</a>
</div>
</div>
<?php } ?>
</td>
</tr>
<?php } ?>
</tbody>
</table>
<?php
$limit = !empty($_GET['limit']) ? $_GET['limit']:10;
$numberOfPages = ($total/$limit) > 1 ? $total/$limit:1;
if(!empty($_GET['offset'])){
$currentOffset = $_GET['offset'];
$currentPage = ($_GET['offset']/$limit) + 1;
}else{
$currentPage = 1;
$currentOffset = 0;
}
?>
<ul class="pagination">
<li <?php if($currentOffset/$limit - 1 < 0) { ?> style="pointer-events: none;" <?php } ?> class="<?php echo ($currentPage == 1) ? 'disabled':''; ?> waves-effect"><a href="/contul-meu?limit=<?php echo $limit; ?>&offset=<?php echo $currentOffset-$limit; ?>"><i class="material-icons">chevron_left</i></a></li>
<?php for($i = 1; $i <= $numberOfPages; $i++){ ?>
<?php $offset = ($i - 1) * $limit;
?>
<li class="<?php echo ($currentPage == $i) ? 'active':''; ?>"><a href="/contul-meu?limit=<?php echo $limit;?>&offset=<?php echo $offset; ?>"><?php echo $i; ?></a></li>
<?php } ?>
<li <?php if($currentOffset/$limit + 1 == $numberOfPages){ ?> style="pointer-events: none;" <?php } ?> class="waves-effect <?php echo ($currentPage == $numberOfPages) ? 'disabled' : '' ;?>"><a href="/contul-meu?limit=<?php echo $limit; ?>&offset=<?php echo $currentOffset+$limit; ?>"><i class="material-icons">chevron_right</i></a></li>
</ul>
</div>
<footer class="page-footer default_color scrollspy" >
<div class="container">
<div class="row">
<div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<ul>
<li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni și Condiții</a></li>
</ul>
</div>
<div class="col l6 s12 right-align">
<h5 class="white-text" id="contact">Contact</h5>
<ul class="white-text">
<li>Bd. Ion Mihalache nr. 140 S<br>Sector 1, București</li>
<li>Telefon </li>
</ul>
</div>
</div>
</div>
<div class="footer-copyright z-depth-1">
<div class="container">
<b>&copy; Rofusion Advertising Srl</b>
<span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank" title="activemall.ro">activemall.ro</a></span>
</div>
</div>
</footer>
<div id="reguli" class="modal">
<div class="modal-content">
<h4>Reguli de redactare a unui anunț</h4>
<p>1. Nu scrieți cuvinte jignitoare sau ofensatoare.<br>2. Nu scrieți cuvintele legate între ele.<br>3. Numărul minim de cuvinte taxate este de 10, indiferent de lungimea anunțului dvs.</p>
</div>
<div class="modal-footer">
<a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">OK</a>
</div>
</div>
<script src="js/jquery-3.1.0.min.js"></script>
<script src="js/materialize.js"></script>
<script src="js/quotes.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="ro-RO">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<title>mica24.ro - Anunțuri Presa Scrisă - România Liberă</title>
<link href="css/materialize.css" type="text/css" rel="stylesheet">
<link href="css/styleadd.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>
<div class="navbar-fixed">
<nav role="navigation">
<div class="container">
<div class="row">
<div class="nav-wrapper">
<a href="/" class="brand-logo" title="mica24.ro - Anunțuri Presa Scrisă - România Liberă"><img src="img/logo-mica24.png" alt="mica24.ro - Anunțuri Presa Scrisă - România Liberă"></a>
</div>
</div>
</div>
</nav>
</div>
<div class="section">
<div class="container">
<br><br>
<?php if ($ok): ?>
<h1><b>Plata a fost finalizată cu succes!</b></h1>
<b>Veți primi un email cu detaliile comenzii dvs.<br>Vă mulțumim.</b>
<br><br><hr><br>
<a href="/" title="" class="btn">Adaugă un anunț nou</a>
<br><br>
<?php else: ?>
<h1><b>Plata nu a fost efectuată!<br>Eroare de procesare.</b></h1>
<b>Ne cerem scuze și vă rugăm să încercați din nou.<br>Vă mulțumim.</b>
<br><br><hr><br>
<a href="/" title="" class="btn">Adaugă anunț</a>
<br><br>
<?php endif; ?>
</div>
</div>
<footer class="page-footer default_color scrollspy z-depth-2">
<div class="container">
<div class="row">
<div class="col l6 s12">
<h5 class="white-text">mica24.ro - Magazinul de Mică Publicitate România Liberă</h5>
<p class="white-text text-lighten-4">mica24.ro - Magazinul de Mică Publicitate este un produs al Grupului de Presă Român, parte a Medien Holding, din portofoliul căruia mai fac parte: cotidianul România Liberă, bilunarul Academia Cațavencu, revista Casa Mea, revistele TAROM (Insight, SkyLady), website-urile www.romanialibera.ro, www.casamea.ro, www.academiacatavencu.info și tipografia Sigma Media.</p>
</div>
<div class="col l3 s12">
<h5 class="white-text">Info</h5>
<ul>
<li><a href="contact-mica24.html" class="white-text">Listă Agenții România Liberă</a></li>
<li><a href="http://publicitate.romanialibera.ro/" class="white-text" target="_blank" title="Mica Publicitate">Mica Publicitate</a></li>
<li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni și Condiții</a></li>
</ul>
</div>
<div class="col l3 s12">
<h5 class="white-text" id="contact">Contact</h5>
<ul class="white-text">
<li>Bd. Theodor Pallady nr. 54-56<br>32266 Sector 3, București</li>
<li>Telefon +40 21 202.82.02</li>
<li>Fax +40 21 223.09.96</li>
</ul>
</div>
</div>
</div>
<div class="footer-copyright z-depth-1">
<div class="container">
<b>&copy; România Liberă SA / Grupul de Presă Român / Medien Holding</b>
<span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank" title="activemall.ro">activemall.ro</a></span>
</div>
</div>
</footer>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="js/materialize.js"></script>
<script src="js/modernizr.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="ro-RO">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<title>Anunturi mica publicitate - Anuțuri presa scrisă - Rofusion Advertising Srl</title>
<meta name="keywords" content="anuțuri presa scrisă, anunturi mica publicitate"/>
<meta name="description" content="anuțuri presa scrisă, anunturi mica publicitate"/>
<meta name="subject" content="anuțuri presa scrisă, anunturi mica publicitate"/>
<meta name="copyright" content="Rofusion Advertising Srl"/>
<meta name="language" content="RO"/>
<meta name="robots" content="index,follow" />
<meta name="abstract" content="anuțuri presa scrisă, anunturi mica publicitate">
<meta name="topic" content="Ads">
<meta name="summary" content="anuțuri presa scrisă, anunturi mica publicitate">
<meta name="Classification" content="Business">
<meta name="author" content="Rofusion Advertising Srl, anuturi@rofusion.ro">
<meta name="designer" content="Activemall SRL">
<meta name="copyright" content="Rofusion Advertising Srl">
<meta name="reply-to" content="office@rofusion.ro">
<meta name="owner" content="Rofusion Advertising Srl">
<meta name="url" content="https://www.rofusion.ro">
<meta name="identifier-URL" content="https://www.rofusion.ro">
<meta name="directory" content="submission">
<meta name="category" content="Ads">
<meta name="coverage" content="Worldwide">
<meta name="distribution" content="Global">
<meta name="rating" content="General">
<meta name="revisit-after" content="7 days">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<link href="css/materialize.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="css/kalendae.css" type="text/css" rel="stylesheet">
<link href="css/styleadd.css" type="text/css" rel="stylesheet">
</head>
<body id="top" class="scrollspy">
<div id="loader-wrapper">
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
</div>
<div class="navbar-fixed">
<nav role="navigation">
<div class="container">
<div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg" alt="Anunturi mica publicitate"></a>
<ul id="nav-mobile" class="right">
<li>
<?php if(!isset($loggedIn)) { ?>
<li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li>
<?php } else { ?>
<?php if(!$admin){ ?>
<li><a href="/contul-meu" class="waves-effect waves-light btn-large pink darken-4 btnmo">Contul meu</a></li>
<?php } else { ?>
<li><a href="/admin/cotatii" class="waves-effect waves-light btn-large pink darken-4 btnmo">Manager Cotatii</a></li>
<?php } ?>
<li><a href="/logout" class="waves-effect waves-light btn-large btnmo">Logout</a></li>
<?php } ?>
</li>
</ul>
</div>
</div>
</nav>
</div>
<div class="slider">
<ul class="slides">
<li>
<img src="img/slide/slide1.jpg">
<div class="caption left-align container">
<h1>Anunțuri Mică Publicitate</h1>
<h2>în Presa Scrisă</h2>
</div>
</li>
<li>
<img src="img/slide/slide2.jpg">
<div class="caption left-align container">
<h1>Anunțuri Mică Publicitate</h1>
<h2>în Presa Scrisă</h2>
</div>
</li>
</ul>
</div>
<?php if(isset($loggedIn) && $loggedIn) { ?>
<input id="loggedInUser" type="text" value="true" style="display:none" />
<?php } ?>
<div class="section no-pad" data-bind="visible: !finalStep()">
<div class="container">
<div class="row">
<div class="col s12 m12 l9">
<ul class="collapsible" data-collapsible="accordion">
<li data-bind="visible: publications().length > 1">
<div class="collapsible-header" data-bind="css: {active: publications().length > 1" }">
<i class="material-icons">playlist_add</i>
<span class="step">Pasul 1</span>Alege Publicațiile în care dorești să apară anunțul tău</div>
<div class="collapsible-body">
<div class="row">
<div class="pubs" data-bind="template: {foreach:publications}, css: {disabled: selectedKind() == 3 }">
<div class="col s12 m3 l25">
<div class="card">
<div class="card-image" data-bind="style: { backgroundImage: 'url(\'' + image() + '\')'}"></div>
<div class="card-action">
<input data-bind="attr: {id: 'p' + id()}, checked: selected" type="checkbox" data-bind="checked: selected" class="filled-in" >
<label data-bind="attr: {for: 'p' + id()}, text: name"></label>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col s12">
<button class="btn waves-effect waves-light right btn-next" onclick="gotostep('list_publicatii');">Pasul următor</button>
</div>
</div>
</div>
</li>
<li>
<div class="collapsible-header"
id="list_publicatii"
data-bind="css: {active: publications().length ==1 }"
>
<i class="material-icons">today</i>
<span class="step" data-bind="text: publications().length > 1 ? 'Pasul 2':'Pasul 1'">Pasul 2</span>Adaugă textul Anunțului și Zilele de publicare</div>
<div class="collapsible-body" id="detalii_anunt">
<div class="row">
<div class="col s12 m12 l12">
<ul class="tabs" data-bind="if: isLoggedIn">
<li class="tab col"><a class="active" href="#anunt-simplu" id="simple-ad-link" data-bind="click: changeAdType.bind($data, 1)">Anunt Simplu</a></li>
<li class="tab col"><a href="#cotatie" data-bind="click: changeAdType.bind($data, 2)">Cere o Cotatie</a></li>
</ul>
<div id="cotatie" data-bind="if: isLoggedIn">
<div class="row">
<div class="col s12">
<div class="info-contatie">
Alege tipul și încarcă un fisier cu anuțul.<br>
Vom analiza fișierul și veți găsi cotația de preț în meniul de sus COTAȚII sau pe email.<br>
<b> Dacă acceptați cotația anuțul va fi publicat.</b> Dacă refuzați îl puteți șterge.
</div>
</div>
</div>
<div class="row">
<div class="input-field input-field col s12 mb20 select-ad-type">
<select data-bind="options: kinds,
optionsText: 'name',
optionsValue: 'id',
value: selectedKind" class="kind-select">
</select>
<label for="" class="active select-label">Tip anunt</label>
</div>
<div class="file-field input-field col s12 m10 l11">
<div class="btn">
<span class="tooltipped" data-position="top"
data-delay="50" data-tooltip="Alege o Imagine">Imagine</span>
<button class="btn-floating btn-delete-image waves-effect waves-light red lighten-1 tooltipped"
data-position="top" data-delay="50" data-tooltip="Șterge Imaginea">
<i class="large material-icons">delete</i>
</button>
<input name="file" id="image-upload-quote" type="file">
</div>
<div class="file-path-wrapper">
<input id="file-path-name" class="file-path validate" type="text">
</div>
</div>
<div class="col s12 m2 l1 hide-on-small-only">
<button data-target="reguli" class="btn-floating waves-effect waves-light right"><i class="material-icons">info_outline</i></button>
</div>
</div>
</div>
<div id="anunt-simplu" class="active">
<div class="input-field">
<textarea id="textarea1"
placeholder="Scrie anunțul tău aici."
class="materialize-textarea tooltipped"
data-position="bottom" data-delay="50"
data-bind="value: text"
data-tooltip="Scrie anunțul tău aici. Apasă pe INFO pentru regulament."
length="5000"></textarea>
<label for="textarea1">Text Anunț</label>
</div>
<div class="row">
<div class="file-field input-field col s12 m10 l11">
<div class="btn">
<span class="tooltipped" data-position="top"
data-delay="50" data-tooltip="Alege o Imagine">Imagine</span>
<button class="btn-floating btn-delete-image waves-effect waves-light red lighten-1 tooltipped"
data-position="top" data-delay="50" data-tooltip="Șterge Imaginea">
<i class="large material-icons">delete</i>
</button>
<input name="file" id="image-upload" type="file">
</div>
<div class="file-path-wrapper">
<input id="file-path-name" class="file-path validate" type="text">
</div>
</div>
<div class="col s12 m2 l1 hide-on-small-only">
<button data-target="reguli" class="btn-floating waves-effect waves-light right"><i class="material-icons">info_outline</i></button>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col s12" data-bind="foreach: publications">
<div data-bind="visible: selected">
<div class="row">
<div class="col s12 m12 l12">
<div class="card-select">
<div class="row">
<div class="col s1">
<img data-bind="attr: {src: image}" class="circle responsive-img">
</div>
<div class="col s11">
<h3 class="title" data-bind="text: name"></h3>
</div>
<div class="clr"></div>
<div class="col s12 m3">
<label>Alege o Categorie</label>
</div>
<div class="col s12 m9">
<select data-bind="options: columns, optionsValue: 'id', value: columnID, uniqueName: true, optionsText: 'name'">
</select>
</div>
</div>
</div>
<ul class="options-list1" data-bind="visible: options">
<div class="row">
<div class="col s12 m3 card-select">
<label>Opționale</label>
</div>
<div class="col s12 m9">
<div class="row" data-bind="template: {foreach: options}">
<div class="col s12 m4">
<li class="options-item" data-bind="template: {afterRender: app.addTooltip}">
<input data-bind="checked: $parent.optionIDs, value: id, attr: {id: 'o' + id}" type="checkbox" class="filled-in">
<label class="tooltipped"
data-bind="text: name, attr: {'data-tooltip': description, 'for': 'o' + id}"
data-position="bottom" data-delay="50"></label>
</li>
</div>
</div>
</div>
</div>
</ul>
<div data-bind="attr:{id: 'cal' + id()}" class="tooltipped"
data-position="bottom" data-delay="50"
data-tooltip="Alege zilele de publicare">
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col s12">
<button class="btn waves-effect waves-light right btn-next" onclick="gotostep('date_personale');">Pasul următor</button>
</div>
</div>
</div>
</li>
<li>
<div class="collapsible-header" id="date_personale">
<i class="material-icons">person_pin</i>
<span class="step" data-bind="text: publications().length > 1 ? 'Pasul 3':'Pasul 2'">Pasul 3</span>Completează datele personale</div>
<div class="collapsible-body">
<div class="row">
<form id="date_persoana">
<div class="col s6">
<div class="row">
<div class="col s12">
<blockquote>
<h5>Persoană Contact</h5>
<b>Pentru Persoanele Fizice și Juridice</b>
</blockquote>
</div>
<div class="input-field col s12">
<input placeholder="Nume (de familie)" id="first_name" type="text" data-bind="value: firstName"
data-sanitize="trim upper"
data-validation="required length custom"
data-validation-regexp="^([A-Za-zăîâșțĂÎÂȘȚ \-]+)$"
data-validation-length="3-20" data-suggestions="White, Green, Blue, Black, Brown"
data-validation-error-msg="Numele trebuie să conțină doar litere (min 3, max 20 caractere)">
<label for="first_name">Nume</label>
</div>
<div class="input-field col s12">
<input placeholder="Prenume" id="last_name" type="text" data-bind="value: lastName"
data-sanitize="trim upper"
data-validation="required length custom"
data-validation-regexp="^([A-Za-zăîâșțĂÎÂȘȚ \-]+)$"
data-validation-length="3-20"
data-validation-error-msg="Prenumele trebuie să conțină doar litere (min 3, max 20 caractere)">
<label for="last_name">Prenume</label>
</div>
<div class="input-field col s12">
<input placeholder="Adresă completă" id="adresa" type="text" data-bind="value: address"
data-sanitize="trim"
data-validation="required length alphanumeric"
data-validation-allowing=" -.ăîâșțĂÎÂȘȚ"
data-validation-length="10-100"
data-validation-error-msg="Adresa trebuie să conțină litere, cifre și caractere speciale (min 10, max 100 caractere)">
<label for="adresa">Adresă</label>
</div>
<div class="input-field col s12">
<input placeholder="Telefon (mobil/fix)" id="telefon" type="text" data-bind="value: phone"
data-sanitize="trim"
data-validation="required length number"
data-validation-length="9-15"
data-validation-error-msg="Telefonul trebuie să conțină doar cifre (min 9, max 15 caractere)">
<label for="telefon">Telefon</label>
</div>
<div class="input-field col s12">
<input placeholder="Email" id="email" type="email" data-bind="value: email"
data-sanitize="trim lower"
data-validation="required length email alphanumeric"
data-validation-allowing="@-_."
data-validation-length="5-100"
data-validation-error-msg="Email-ul trebuie să conțină doar litere, cifre și @ - _ . (min 7, max 100 caractere)">
<label for="email">Email</label>
</div>
<div class="input-field col s12">
<input placeholder="CNP" id="nin" type="text" data-bind="value: nin"
data-sanitize="trim"
data-validation="length number"
data-validation-length="13"
data-validation-optional="true"
data-validation-error-msg="CNP-ul trebuie să conțină doar cifre (13 caractere)">
<label for="nin">CNP - opțional, dacă doriți factură fiscală</label>
</div>
</div>
</div>
<div class="col s6 tooltipped" data-position="top" data-delay="50" data-tooltip="Completați numai dacă sunteți Persoană Juridică">
<div class="col s12">
<blockquote>
<h5>Companie / Instituție (opțional)</h5>
<b>Numai pentru Persoanele Juridice</b>
</blockquote>
</div>
<div class="input-field col s12">
<input placeholder="Denumire Societate / Instituție" id="societate_denumire" type="text" data-bind="value: company"
data-sanitize="trim"
data-validation="length alphanumeric"
data-validation-length="3-100"
data-validation-allowing=" -.ăîâșțĂÎÂȘȚ"
data-validation-optional="true"
data-validation-error-msg="Trebuie să conțină doar caractere alfanumerice (min 3, max 100 caractere)">
<label for="societate_denumire">Denumire Societate / Instituție</label>
</div>
<div class="input-field col s12">
<input placeholder="Codul Unic de Înregistrare" id="societate_cui" type="text" data-bind="value: vat"
data-sanitize="trim upper"
data-validation="custom"
data-validation-regexp="^(RO)?[0-9]{2,10}$"
data-validation-optional="true"
data-validation-error-msg="CUI-ul trebuie să conțină doar cifre și secvența RO (min 2, max 10 caractere)">
<label for="societate_cui">C.U.I.</label>
</div>
<div class="input-field col s12">
<input placeholder="Număr Registrul Comerțului" id="societate_nrc" type="text" data-bind="value: crn"
data-sanitize="trim upper"
data-validation="length alphanumeric"
data-validation-allowing="/"
data-validation-length="10-15"
data-validation-optional="true"
data-validation-error-msg="Nr.Reg.Com. trebuie să conțină doar litere, cifre și / (min 10, max 15 caractere)">
<label for="societate_nrc">Nr.Reg.Com.</label>
</div>
<div class="input-field col s12">
<input placeholder="Adresă completă" id="adresa_firma" type="text" data-bind="value: address"
data-sanitize="trim upper"
data-validation="length alphanumeric"
data-validation-allowing=" -.ăîâșțĂÎÂȘȚ"
data-validation-length="10-100"
data-validation-optional="true"
data-validation-error-msg="Adresa trebuie să conțină doar litere (min 10, max 100 caractere)">
<label for="adresa_firma">Adresă Companie</label>
</div>
<div class="input-field col s12">
<input placeholder="Cont Bancar" id="societate_cont" type="text" data-bind="value: iban"
data-sanitize="trim upper"
data-validation="length alphanumeric iban"
data-validation-length="24"
data-validation-optional="true"
data-validation-error-msg="Cont Bancar trebuie să conțină doar litere, cifre și / (24 caractere)">
<label for="societate_cont">Cont Bancar</label>
</div>
<div class="input-field col s12">
<input placeholder="Nume Bancă" id="societate_banca" type="text" data-bind="value: bank"
data-sanitize="trim upper"
data-validation="length alphanumeric"
data-validation-allowing=" -.ăîâșțĂÎÂȘȚ"
data-validation-length="3-50"
data-validation-optional="true"
data-validation-error-msg="Numele băncii trebuie să conțină doar litere (min 3, max 50 caractere)">
<label for="societate_banca">Bancă</label>
</div>
</div>
</form>
</div>
</div>
</li>
</ul>
</div>
<div class="col s12 m12 l3" id="right-column">
<div class="block-pin" id="total">
<div class="card image-preview-container" data-bind="if: adType() == 1">
<div class="card-content white-text">
<span class="card-title">Imagine Anunț</span>
</div>
<div class="card-image image-preview-summary"></div>
</div>
<ul class="collection with-header z-depth-1">
<li class="collection-header">
<b>Sumar Anunț</b>
</li>
<li class="no-publication-message">
Nu există nici o publicație selectată.
</li>
<div data-bind="foreach: publications">
<li class="collection-item avatar" data-bind="visible: selected">
<img data-bind="attr: {src: image}" class="circle" >
<span class="title" data-bind="text: name"></span>
<div class="subtotal-item">Zile aparitii <span data-bind="text: dates().length"></span></div>
<div data-bind="if: $parent.adType() == 1" class="subtotal-item">Total de plata <span data-bind=" text: price().total"></span></div>
<a href="#!" class="secondary-content tooltipped" data-position="left" data-delay="50" data-tooltip="Șterge" data-bind="click: function(pub) {pub.selected(false);}"><i class="material-icons">delete_forever</i></a>
</li>
</div>
</ul>
<div class="card cyan darken-3">
<div class="card-content white-text">
<span class="card-title" data-bind="text: adType() == 1 ? 'Total General':'Info'"></span>
<div data-bind="if: adType() == '1'">
<div class="total-item">Cuvinte <span data-bind="text: words"></span></div>
<div class="total-item">Total fară TVA <span data-bind="text: price().base"></span></div>
<div class="total-item">TVA <span data-bind="text: price().vat"></span></div>
<div class="total-item">Total cu TVA <span data-bind="text: price().total"></span></div>
</div>
<div data-bind="if: adType() == 2">
<div class="total-item">
Tip anunt: <span data-bind="text: kindNames[selectedKind()]"></span>
</div>
</div>
</div>
<div class="card-action">
<span data-bind="if: adType() == 1">
<button type="button" id="do-payment" disabled="disabled"
class="waves-effect waves-light btn btn-full"
data-bind="enable: isPristine(), click: doFinal">Finalizează</button>
</span>
<span data-bind="if: adType() == 2">
<button type="button" id="do-quote" disabled="disabled"
class="waves-effect waves-light btn btn-full quote-btn-create"
data-bind="enable: isPristineQuote(), click: doFinalQuote">Cotatie</button>
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="section no-pad-bot" data-bind="visible: finalStep">
<div class="container">
<div class="row">
<div class="col s12 m12 l9">
<div class="row">
<ul class="collection final">
<li class="collection-item">
<b>Sumar Anunț</b>
<a href="#" data-bind="click: finalStep(false);"
class="waves-effect waves-light btn-link btn-ad-edit">Modifică Anunțul</a>
</li>
<div data-bind="foreach: publications">
<li class="collection-item avatar" data-bind="visible: isPristine() && selected">
<img alt="" class="circle" data-bind="attr: {src: image}">
<span class="title" data-bind="text: name"></span>
<p>Categorie: <span data-bind="text: columnStr()"></span></p>
<p>Date Apariție: <span data-bind="text: datesStr"></span></p>
<p data-bind="visible: optionStr().length > 0">Optionale:
<span data-bind="text: optionStr"></span>
</p>
<p>Total de Plată: <span class="ron badge" data-bind="text: price().total"></span></p>
</li>
</div>
<li class="collection-item avatar finalize-ad-text">
<p><b>Text Anunț: </b><span data-bind="text: text"></span></p>
</li>
</ul>
</div>
</div>
<div class="col s12 m12 l3">
<div class="card card-final">
<div class="card-image image-preview-finalize"></div>
<div class="card-content white finalize-sidebar">
<ul class="collection">
<li class="collection-item">Cuvinte <span class="right" data-bind="text: words"></span></li>
<li class="collection-item">Total fară TVA <span class="right" data-bind="text: price().base"></span></li>
<li class="collection-item">TVA <span class="right" data-bind="text: price().vat"></span></li>
<li class="collection-item"><b>Total de Plată: </b><b><span class="right" data-bind="text: price().total"></span></b></li>
</ul>
</div>
<div class="card-action">
<a href="#" data-bind="click: createDraft" class="pay-ad waves-effect waves-light btn btn-full">Plătește</a>
<div class="clr"></div>
</div>
<form action="/payment" id="payForm" method="post" style="display: none;">
<input type="hidden" name="ad_id" value="">
</form>
</div>
</div>
</div>
</div>
</div>
<footer class="page-footer default_color scrollspy" >
<div class="container">
<div class="row">
<div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<ul>
<li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni și Condiții</a></li>
</ul>
</div>
<div class="col l6 s12 right-align">
<h5 class="white-text" id="contact">Contact</h5>
<ul class="white-text">
<li>Bd. Ion Mihalache nr. 140 S<br>Sector 1, București</li>
<li>Telefon </li>
</ul>
</div>
</div>
</div>
<div class="footer-copyright z-depth-1">
<div class="container">
<b>&copy; Rofusion Advertising Srl</b>
<span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank" title="activemall.ro">activemall.ro</a></span>
</div>
</div>
</footer>
<div id="reguli" class="modal">
<div class="modal-content">
<h4>Reguli de redactare a unui anunț</h4>
<p>1. Nu scrieți cuvinte jignitoare sau ofensatoare.<br>2. Nu scrieți cuvintele legate între ele.<br>3. Numărul minim de cuvinte taxate este de 10, indiferent de lungimea anunțului dvs.</p>
</div>
<div class="modal-footer">
<a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">OK</a>
</div>
</div>
<script src="js/jquery-3.1.0.min.js"></script>
<script src="js/materialize.js"></script>
<script src="js/modernizr.js"></script>
<script src="js/kalendae.standalone.js"></script>
<script src="js/moment.js"></script>
<script src="js/knockout-min.js"></script>
<script src="js/knockout.mapping-latest.js"></script>
<script src="js/form-validator/jquery.form-validator.min.js"></script>
<script src="js/jquery.filer.min.js"></script>
<script>
var jenuPublication = <?php echo $jenuPublication; ?>;
</script>
<script src="js/main.js"></script>
<!--Start of Tawk.to Script-->
<!-- <script type="text/javascript">
var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date();
(function(){
var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0];
s1.async=true;
s1.src='https://embed.tawk.to/582af69a397ff569a3cddddd/default';
s1.charset='UTF-8';
s1.setAttribute('crossorigin','*');
s0.parentNode.insertBefore(s1,s0);
})();
</script> -->
<!--End of Tawk.to Script-->
</body>
</html>
<!DOCTYPE html>
<html lang="ro-RO">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<title>mica24.ro - Anunțuri Presa Scrisă - România Liberă</title>
<script src="js/jquery-3.1.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#payForm').submit();
});
</script>
</head>
<body>
<?php
if (!empty($data) && !empty($data['order']) && !empty($data['billing'])) {
$order = $data['order'];
$paymentSettings = $data["paymentSettings"];
require_once '../src/Mobilpay/Payment/Request/Abstract.php';
require_once '../src/Mobilpay/Payment/Request/Card.php';
require_once '../src/Mobilpay/Payment/Invoice.php';
require_once '../src/Mobilpay/Payment/Address.php';
#for testing purposes, all payment requests will be sent to the sandbox server. Once your account will be active you must switch back to the live server https://secure.mobilpay.ro
#in order to display the payment form in a different language, simply add the language identifier to the end of the paymentUrl, i.e https://secure.mobilpay.ro/en for English
$paymentUrl = $paymentSettings["url"];
//$paymentUrl = 'https://secure.mobilpay.ro';
// this is the path on your server to the public certificate. You may download this from Admin -> Conturi de comerciant -> Detalii -> Setari securitate
// $x509FilePath = 'i.e: /ome/certificates/public.cer';
$x509FilePath = $paymentSettings["publicCertificate"];
// if(file_exists($x509FilePath)){
// var_dump($x509FilePath);
// die();
// }
try
{
srand((double) microtime() * 1000000);
$objPmReqCard = new Mobilpay_Payment_Request_Card();
#merchant account signature - generated by mobilpay.ro for every merchant account
#semnatura contului de comerciant - mergi pe www.mobilpay.ro Admin -> Conturi de comerciant -> Detalii -> Setari securitate
$objPmReqCard->signature = $paymentSettings["signature"];
#you should assign here the transaction ID registered by your application for this commercial operation
#order_id should be unique for a merchant account
$objPmReqCard->orderId = md5(uniqid(rand()));
$objPmReqCard->params = [
"ad" => $order["reference"]
];
if(!empty($order['quote_id'])){
$objPmReqCard->params["quote"] = $order["quote_id"];
}
#below is where mobilPay will send the payment result. This URL will always be called first; mandatory
$objPmReqCard->confirmUrl = $paymentSettings["backref"];
#below is where mobilPay redirects the client once the payment process is finished. Not to be mistaken for a "successURL" nor "cancelURL"; mandatory
$objPmReqCard->returnUrl = $paymentSettings["redirectUrl"] . '?ad=' . $order["reference"];
#detalii cu privire la plata: moneda, suma, descrierea
#payment details: currency, amount, description
$objPmReqCard->invoice = new Mobilpay_Payment_Invoice();
#payment currency in ISO Code format; permitted values are RON, EUR, USD, MDL; please note that unless you have mobilPay permission to
#process a currency different from RON, a currency exchange will occur from your currency to RON, using the official BNR exchange rate from that moment
#and the customer will be presented with the payment amount in a dual currency in the payment page, i.e N.NN RON (e.ee EUR)
$objPmReqCard->invoice->currency = $paymentSettings["currency"];
$objPmReqCard->invoice->amount = $order["amount"];
#available installments number; if this parameter is present, only its value(s) will be available
//$objPmReqCard->invoice->installments= '2,3';
#selected installments number; its value should be within the available installments defined above
//$objPmReqCard->invoice->selectedInstallments= '3';
//platile ulterioare vor contine in request si informatiile despre token. Prima plata nu va contine linia de mai jos.
$objPmReqCard->invoice->tokenId = 'token_id';
$objPmReqCard->invoice->details = $order["name"];
#detalii cu privire la adresa posesorului cardului
#details on the cardholder address (optional)
$billingAddress = new Mobilpay_Payment_Address();
$billingAddress->type = "person"; //should be "person"
// $billingAddress->type = $_POST['billing_type']; //should be "person"
$billingAddress->firstName = $data["billing"]["billFName"];
$billingAddress->lastName = $data["billing"]["billLName"];
$billingAddress->address = $data["billing"]["billAddress1"];
$billingAddress->email = $data["billing"]["billEmail"];
$billingAddress->mobilePhone = $data["billing"]["billPhone"];
$objPmReqCard->invoice->setBillingAddress($billingAddress);
#detalii cu privire la adresa de livrare
#details on the shipping address
// $shippingAddress = new Mobilpay_Payment_Address();
// $shippingAddress->type = "ziar";
// $shippingAddress->firstName = "";
// $shippingAddress->lastName = "";
// $shippingAddress->address = "";
// $shippingAddress->email = "";
// $shippingAddress->mobilePhone = "";
// $objPmReqCard->invoice->setShippingAddress($shippingAddress);
#uncomment the line below in order to see the content of the request
// echo "<pre>";print_r($objPmReqCard);echo "</pre>";
$objPmReqCard->encrypt($x509FilePath);
}
catch(Exception $e)
{
}
// die();
?>
<form name="payForm" id="payForm" action="<?php echo $paymentUrl; ?>" method="post">
<input type="hidden" name="env_key" value="<?php echo $objPmReqCard->getEnvKey();?>"/>
<input type="hidden" name="data" value="<?php echo $objPmReqCard->getEncData();?>"/>
<input type="submit" style="display: none;">
</form>
<?php
}
?>
</body>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment