# files

name: POP3.php
mime: unavailable
path:
D:\websites\domains\a.sds.sh\public_html\dev\composer\phpmailer\vendor\phpmailer\phpmailer\src\POP3.php

content:
<?php

/**
 * PHPMailer POP-Before-SMTP Authentication Class.
 * PHP Version 5.5.
 *
 * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
 *
 * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>
 * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 * @author    Brent R. Matzelle (original founder)
 * @copyright 2012 - 2020 Marcus Bointon
 * @copyright 2010 - 2012 Jim Jagielski
 * @copyright 2004 - 2009 Andy Prevost
 * @license   http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 * @note      This program is distributed in the hope that it will be useful - WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 */

namespace PHPMailer\PHPMailer;

/**
 * PHPMailer POP-Before-SMTP Authentication Class.
 * Specifically for PHPMailer to use for RFC1939 POP-before-SMTP authentication.
 * 1) This class does not support APOP authentication.
 * 2) Opening and closing lots of POP3 connections can be quite slow. If you need
 *   to send a batch of emails then just perform the authentication once at the start,
 *   and then loop through your mail sending script. Providing this process doesn't
 *   take longer than the verification period lasts on your POP3 server, you should be fine.
 * 3) This is really ancient technology; you should only need to use it to talk to very old systems.
 * 4) This POP3 class is deliberately lightweight and incomplete, implementing just
 *   enough to do authentication.
 *   If you want a more complete class there are other POP3 classes for PHP available.
 *
 * @author Richard Davey (original author) <rich@corephp.co.uk>
 * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
 * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 */
class POP3
{
    /**
     * The POP3 PHPMailer Version number.
     *
     * @var string
     */
    const VERSION = '6.9.1';

    /**
     * Default POP3 port number.
     *
     * @var int
     */
    const DEFAULT_PORT = 110;

    /**
     * Default timeout in seconds.
     *
     * @var int
     */
    const DEFAULT_TIMEOUT = 30;

    /**
     * POP3 class debug output mode.
     * Debug output level.
     * Options:
     * @see POP3::DEBUG_OFF: No output
     * @see POP3::DEBUG_SERVER: Server messages, connection/server errors
     * @see POP3::DEBUG_CLIENT: Client and Server messages, connection/server errors
     *
     * @var int
     */
    public $do_debug = self::DEBUG_OFF;

    /**
     * POP3 mail server hostname.
     *
     * @var string
     */
    public $host;

    /**
     * POP3 port number.
     *
     * @var int
     */
    public $port;

    /**
     * POP3 Timeout Value in seconds.
     *
     * @var int
     */
    public $tval;

    /**
     * POP3 username.
     *
     * @var string
     */
    public $username;

    /**
     * POP3 password.
     *
     * @var string
     */
    public $password;

    /**
     * Resource handle for the POP3 connection socket.
     *
     * @var resource
     */
    protected $pop_conn;

    /**
     * Are we connected?
     *
     * @var bool
     */
    protected $connected = false;

    /**
     * Error container.
     *
     * @var array
     */
    protected $errors = [];

    /**
     * Line break constant.
     */
    const LE = "\r\n";

    /**
     * Debug level for no output.
     *
     * @var int
     */
    const DEBUG_OFF = 0;

    /**
     * Debug level to show server -> client messages
     * also shows clients connection errors or errors from server
     *
     * @var int
     */
    const DEBUG_SERVER = 1;

    /**
     * Debug level to show client -> server and server -> client messages.
     *
     * @var int
     */
    const DEBUG_CLIENT = 2;

    /**
     * Simple static wrapper for all-in-one POP before SMTP.
     *
     * @param string   $host        The hostname to connect to
     * @param int|bool $port        The port number to connect to
     * @param int|bool $timeout     The timeout value
     * @param string   $username
     * @param string   $password
     * @param int      $debug_level
     *
     * @return bool
     */
    public static function popBeforeSmtp(
        $host,
        $port = false,
        $timeout = false,
        $username = '',
        $password = '',
        $debug_level = 0
    ) {
        $pop = new self();

        return $pop->authorise($host, $port, $timeout, $username, $password, $debug_level);
    }

    /**
     * Authenticate with a POP3 server.
     * A connect, login, disconnect sequence
     * appropriate for POP-before SMTP authorisation.
     *
     * @param string   $host        The hostname to connect to
     * @param int|bool $port        The port number to connect to
     * @param int|bool $timeout     The timeout value
     * @param string   $username
     * @param string   $password
     * @param int      $debug_level
     *
     * @return bool
     */
    public function authorise($host, $port = false, $timeout = false, $username = '', $password = '', $debug_level = 0)
    {
        $this->host = $host;
        //If no port value provided, use default
        if (false === $port) {
            $this->port = static::DEFAULT_PORT;
        } else {
            $this->port = (int) $port;
        }
        //If no timeout value provided, use default
        if (false === $timeout) {
            $this->tval = static::DEFAULT_TIMEOUT;
        } else {
            $this->tval = (int) $timeout;
        }
        $this->do_debug = $debug_level;
        $this->username = $username;
        $this->password = $password;
        //Reset the error log
        $this->errors = [];
        //Connect
        $result = $this->connect($this->host, $this->port, $this->tval);
        if ($result) {
            $login_result = $this->login($this->username, $this->password);
            if ($login_result) {
                $this->disconnect();

                return true;
            }
        }
        //We need to disconnect regardless of whether the login succeeded
        $this->disconnect();

        return false;
    }

    /**
     * Connect to a POP3 server.
     *
     * @param string   $host
     * @param int|bool $port
     * @param int      $tval
     *
     * @return bool
     */
    public function connect($host, $port = false, $tval = 30)
    {
        //Are we already connected?
        if ($this->connected) {
            return true;
        }

        //On Windows this will raise a PHP Warning error if the hostname doesn't exist.
        //Rather than suppress it with @fsockopen, capture it cleanly instead
        set_error_handler([$this, 'catchWarning']);

        if (false === $port) {
            $port = static::DEFAULT_PORT;
        }

        //Connect to the POP3 server
        $errno = 0;
        $errstr = '';
        $this->pop_conn = fsockopen(
            $host, //POP3 Host
            $port, //Port #
            $errno, //Error Number
            $errstr, //Error Message
            $tval
        ); //Timeout (seconds)
        //Restore the error handler
        restore_error_handler();

        //Did we connect?
        if (false === $this->pop_conn) {
            //It would appear not...
            $this->setError(
                "Failed to connect to server $host on port $port. errno: $errno; errstr: $errstr"
            );

            return false;
        }

        //Increase the stream time-out
        stream_set_timeout($this->pop_conn, $tval, 0);

        //Get the POP3 server response
        $pop3_response = $this->getResponse();
        //Check for the +OK
        if ($this->checkResponse($pop3_response)) {
            //The connection is established and the POP3 server is talking
            $this->connected = true;

            return true;
        }

        return false;
    }

    /**
     * Log in to the POP3 server.
     * Does not support APOP (RFC 2828, 4949).
     *
     * @param string $username
     * @param string $password
     *
     * @return bool
     */
    public function login($username = '', $password = '')
    {
        if (!$this->connected) {
            $this->setError('Not connected to POP3 server');
            return false;
        }
        if (empty($username)) {
            $username = $this->username;
        }
        if (empty($password)) {
            $password = $this->password;
        }

        //Send the Username
        $this->sendString("USER $username" . static::LE);
        $pop3_response = $this->getResponse();
        if ($this->checkResponse($pop3_response)) {
            //Send the Password
            $this->sendString("PASS $password" . static::LE);
            $pop3_response = $this->getResponse();
            if ($this->checkResponse($pop3_response)) {
                return true;
            }
        }

        return false;
    }

    /**
     * Disconnect from the POP3 server.
     */
    public function disconnect()
    {
        // If could not connect at all, no need to disconnect
        if ($this->pop_conn === false) {
            return;
        }

        $this->sendString('QUIT' . static::LE);

        // RFC 1939 shows POP3 server sending a +OK response to the QUIT command.
        // Try to get it.  Ignore any failures here.
        try {
            $this->getResponse();
        } catch (Exception $e) {
            //Do nothing
        }

        //The QUIT command may cause the daemon to exit, which will kill our connection
        //So ignore errors here
        try {
            @fclose($this->pop_conn);
        } catch (Exception $e) {
            //Do nothing
        }

        // Clean up attributes.
        $this->connected = false;
        $this->pop_conn  = false;
    }

    /**
     * Get a response from the POP3 server.
     *
     * @param int $size The maximum number of bytes to retrieve
     *
     * @return string
     */
    protected function getResponse($size = 128)
    {
        $response = fgets($this->pop_conn, $size);
        if ($this->do_debug >= self::DEBUG_SERVER) {
            echo 'Server -> Client: ', $response;
        }

        return $response;
    }

    /**
     * Send raw data to the POP3 server.
     *
     * @param string $string
     *
     * @return int
     */
    protected function sendString($string)
    {
        if ($this->pop_conn) {
            if ($this->do_debug >= self::DEBUG_CLIENT) { //Show client messages when debug >= 2
                echo 'Client -> Server: ', $string;
            }

            return fwrite($this->pop_conn, $string, strlen($string));
        }

        return 0;
    }

    /**
     * Checks the POP3 server response.
     * Looks for for +OK or -ERR.
     *
     * @param string $string
     *
     * @return bool
     */
    protected function checkResponse($string)
    {
        if (strpos($string, '+OK') !== 0) {
            $this->setError("Server reported an error: $string");

            return false;
        }

        return true;
    }

    /**
     * Add an error to the internal error store.
     * Also display debug output if it's enabled.
     *
     * @param string $error
     */
    protected function setError($error)
    {
        $this->errors[] = $error;
        if ($this->do_debug >= self::DEBUG_SERVER) {
            echo '<pre>';
            foreach ($this->errors as $e) {
                print_r($e);
            }
            echo '</pre>';
        }
    }

    /**
     * Get an array of error messages, if any.
     *
     * @return array
     */
    public function getErrors()
    {
        return $this->errors;
    }

    /**
     * POP3 connection error handler.
     *
     * @param int    $errno
     * @param string $errstr
     * @param string $errfile
     * @param int    $errline
     */
    protected function catchWarning($errno, $errstr, $errfile, $errline)
    {
        $this->setError(
            'Connecting to the POP3 server raised a PHP warning:' .
            "errno: $errno errstr: $errstr; errfile: $errfile; errline: $errline"
        );
    }
}


name: SMTP.php
mime: unavailable
path:
D:\websites\domains\a.sds.sh\public_html\dev\composer\phpmailer\vendor\phpmailer\phpmailer\src\SMTP.php

content:
<?php

/**
 * PHPMailer RFC821 SMTP email transport class.
 * PHP Version 5.5.
 *
 * @see       https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
 *
 * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
 * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>
 * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
 * @author    Brent R. Matzelle (original founder)
 * @copyright 2012 - 2020 Marcus Bointon
 * @copyright 2010 - 2012 Jim Jagielski
 * @copyright 2004 - 2009 Andy Prevost
 * @license   http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 * @note      This program is distributed in the hope that it will be useful - WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 */

namespace PHPMailer\PHPMailer;

/**
 * PHPMailer RFC821 SMTP email transport class.
 * Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server.
 *
 * @author Chris Ryan
 * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
 */
class SMTP
{
    /**
     * The PHPMailer SMTP version number.
     *
     * @var string
     */
    const VERSION = '6.9.1';

    /**
     * SMTP line break constant.
     *
     * @var string
     */
    const LE = "\r\n";

    /**
     * The SMTP port to use if one is not specified.
     *
     * @var int
     */
    const DEFAULT_PORT = 25;

    /**
     * The SMTPs port to use if one is not specified.
     *
     * @var int
     */
    const DEFAULT_SECURE_PORT = 465;

    /**
     * The maximum line length allowed by RFC 5321 section 4.5.3.1.6,
     * *excluding* a trailing CRLF break.
     *
     * @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.6
     *
     * @var int
     */
    const MAX_LINE_LENGTH = 998;

    /**
     * The maximum line length allowed for replies in RFC 5321 section 4.5.3.1.5,
     * *including* a trailing CRLF line break.
     *
     * @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.5
     *
     * @var int
     */
    const MAX_REPLY_LENGTH = 512;

    /**
     * Debug level for no output.
     *
     * @var int
     */
    const DEBUG_OFF = 0;

    /**
     * Debug level to show client -> server messages.
     *
     * @var int
     */
    const DEBUG_CLIENT = 1;

    /**
     * Debug level to show client -> server and server -> client messages.
     *
     * @var int
     */
    const DEBUG_SERVER = 2;

    /**
     * Debug level to show connection status, client -> server and server -> client messages.
     *
     * @var int
     */
    const DEBUG_CONNECTION = 3;

    /**
     * Debug level to show all messages.
     *
     * @var int
     */
    const DEBUG_LOWLEVEL = 4;

    /**
     * Debug output level.
     * Options:
     * * self::DEBUG_OFF (`0`) No debug output, default
     * * self::DEBUG_CLIENT (`1`) Client commands
     * * self::DEBUG_SERVER (`2`) Client commands and server responses
     * * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status
     * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages.
     *
     * @var int
     */
    public $do_debug = self::DEBUG_OFF;

    /**
     * How to handle debug output.
     * Options:
     * * `echo` Output plain-text as-is, appropriate for CLI
     * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
     * * `error_log` Output to error log as configured in php.ini
     * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
     *
     * ```php
     * $smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
     * ```
     *
     * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug`
     * level output is used:
     *
     * ```php
     * $mail->Debugoutput = new myPsr3Logger;
     * ```
     *
     * @var string|callable|\Psr\Log\LoggerInterface
     */
    public $Debugoutput = 'echo';

    /**
     * Whether to use VERP.
     *
     * @see http://en.wikipedia.org/wiki/Variable_envelope_return_path
     * @see http://www.postfix.org/VERP_README.html Info on VERP
     *
     * @var bool
     */
    public $do_verp = false;

    /**
     * The timeout value for connection, in seconds.
     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.
     * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure.
     *
     * @see http://tools.ietf.org/html/rfc2821#section-4.5.3.2
     *
     * @var int
     */
    public $Timeout = 300;

    /**
     * How long to wait for commands to complete, in seconds.
     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.
     *
     * @var int
     */
    public $Timelimit = 300;

    /**
     * Patterns to extract an SMTP transaction id from reply to a DATA command.
     * The first capture group in each regex will be used as the ID.
     * MS ESMTP returns the message ID, which may not be correct for internal tracking.
     *
     * @var string[]
     */
    protected $smtp_transaction_id_patterns = [
        'exim' => '/[\d]{3} OK id=(.*)/',
        'sendmail' => '/[\d]{3} 2.0.0 (.*) Message/',
        'postfix' => '/[\d]{3} 2.0.0 Ok: queued as (.*)/',
        'Microsoft_ESMTP' => '/[0-9]{3} 2.[\d].0 (.*)@(?:.*) Queued mail for delivery/',
        'Amazon_SES' => '/[\d]{3} Ok (.*)/',
        'SendGrid' => '/[\d]{3} Ok: queued as (.*)/',
        'CampaignMonitor' => '/[\d]{3} 2.0.0 OK:([a-zA-Z\d]{48})/',
        'Haraka' => '/[\d]{3} Message Queued \((.*)\)/',
        'ZoneMTA' => '/[\d]{3} Message queued as (.*)/',
        'Mailjet' => '/[\d]{3} OK queued as (.*)/',
    ];

    /**
     * Allowed SMTP XCLIENT attributes.
     * Must be allowed by the SMTP server. EHLO response is not checked.
     *
     * @see https://www.postfix.org/XCLIENT_README.html
     *
     * @var array
     */
    public static $xclient_allowed_attributes = [
        'NAME', 'ADDR', 'PORT', 'PROTO', 'HELO', 'LOGIN', 'DESTADDR', 'DESTPORT'
    ];

    /**
     * The last transaction ID issued in response to a DATA command,
     * if one was detected.
     *
     * @var string|bool|null
     */
    protected $last_smtp_transaction_id;

    /**
     * The socket for the server connection.
     *
     * @var ?resource
     */
    protected $smtp_conn;

    /**
     * Error information, if any, for the last SMTP command.
     *
     * @var array
     */
    protected $error = [
        'error' => '',
        'detail' => '',
        'smtp_code' => '',
        'smtp_code_ex' => '',
    ];

    /**
     * The reply the server sent to us for HELO.
     * If null, no HELO string has yet been received.
     *
     * @var string|null
     */
    protected $helo_rply;

    /**
     * The set of SMTP extensions sent in reply to EHLO command.
     * Indexes of the array are extension names.
     * Value at index 'HELO' or 'EHLO' (according to command that was sent)
     * represents the server name. In case of HELO it is the only element of the array.
     * Other values can be boolean TRUE or an array containing extension options.
     * If null, no HELO/EHLO string has yet been received.
     *
     * @var array|null
     */
    protected $server_caps;

    /**
     * The most recent reply received from the server.
     *
     * @var string
     */
    protected $last_reply = '';

    /**
     * Output debugging info via a user-selected method.
     *
     * @param string $str   Debug string to output
     * @param int    $level The debug level of this message; see DEBUG_* constants
     *
     * @see SMTP::$Debugoutput
     * @see SMTP::$do_debug
     */
    protected function edebug($str, $level = 0)
    {
        if ($level > $this->do_debug) {
            return;
        }
        //Is this a PSR-3 logger?
        if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) {
            $this->Debugoutput->debug($str);

            return;
        }
        //Avoid clash with built-in function names
        if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) {
            call_user_func($this->Debugoutput, $str, $level);

            return;
        }
        switch ($this->Debugoutput) {
            case 'error_log':
                //Don't output, just log
                error_log($str);
                break;
            case 'html':
                //Cleans up output a bit for a better looking, HTML-safe output
                echo gmdate('Y-m-d H:i:s'), ' ', htmlentities(
                    preg_replace('/[\r\n]+/', '', $str),
                    ENT_QUOTES,
                    'UTF-8'
                ), "<br>\n";
                break;
            case 'echo':
            default:
                //Normalize line breaks
                $str = preg_replace('/\r\n|\r/m', "\n", $str);
                echo gmdate('Y-m-d H:i:s'),
                "\t",
                    //Trim trailing space
                trim(
                    //Indent for readability, except for trailing break
                    str_replace(
                        "\n",
                        "\n                   \t                  ",
                        trim($str)
                    )
                ),
                "\n";
        }
    }

    /**
     * Connect to an SMTP server.
     *
     * @param string $host    SMTP server IP or host name
     * @param int    $port    The port number to connect to
     * @param int    $timeout How long to wait for the connection to open
     * @param array  $options An array of options for stream_context_create()
     *
     * @return bool
     */
    public function connect($host, $port = null, $timeout = 30, $options = [])
    {
        //Clear errors to avoid confusion
        $this->setError('');
        //Make sure we are __not__ connected
        if ($this->connected()) {
            //Already connected, generate error
            $this->setError('Already connected to a server');

            return false;
        }
        if (empty($port)) {
            $port = self::DEFAULT_PORT;
        }
        //Connect to the SMTP server
        $this->edebug(
            "Connection: opening to $host:$port, timeout=$timeout, options=" .
            (count($options) > 0 ? var_export($options, true) : 'array()'),
            self::DEBUG_CONNECTION
        );

        $this->smtp_conn = $this->getSMTPConnection($host, $port, $timeout, $options);

        if ($this->smtp_conn === false) {
            //Error info already set inside `getSMTPConnection()`
            return false;
        }

        $this->edebug('Connection: opened', self::DEBUG_CONNECTION);

        //Get any announcement
        $this->last_reply = $this->get_lines();
        $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);
        $responseCode = (int)substr($this->last_reply, 0, 3);
        if ($responseCode === 220) {
            return true;
        }
        //Anything other than a 220 response means something went wrong
        //RFC 5321 says the server will wait for us to send a QUIT in response to a 554 error
        //https://tools.ietf.org/html/rfc5321#section-3.1
        if ($responseCode === 554) {
            $this->quit();
        }
        //This will handle 421 responses which may not wait for a QUIT (e.g. if the server is being shut down)
        $this->edebug('Connection: closing due to error', self::DEBUG_CONNECTION);
        $this->close();
        return false;
    }

    /**
     * Create connection to the SMTP server.
     *
     * @param string $host    SMTP server IP or host name
     * @param int    $port    The port number to connect to
     * @param int    $timeout How long to wait for the connection to open
     * @param array  $options An array of options for stream_context_create()
     *
     * @return false|resource
     */
    protected function getSMTPConnection($host, $port = null, $timeout = 30, $options = [])
    {
        static $streamok;
        //This is enabled by default since 5.0.0 but some providers disable it
        //Check this once and cache the result
        if (null === $streamok) {
            $streamok = function_exists('stream_socket_client');
        }

        $errno = 0;
        $errstr = '';
        if ($streamok) {
            $socket_context = stream_context_create($options);
            set_error_handler([$this, 'errorHandler']);
            $connection = stream_socket_client(
                $host . ':' . $port,
                $errno,
                $errstr,
                $timeout,
                STREAM_CLIENT_CONNECT,
                $socket_context
            );
        } else {
            //Fall back to fsockopen which should work in more places, but is missing some features
            $this->edebug(
                'Connection: stream_socket_client not available, falling back to fsockopen',
                self::DEBUG_CONNECTION
            );
            set_error_handler([$this, 'errorHandler']);
            $connection = fsockopen(
                $host,
                $port,
                $errno,
                $errstr,
                $timeout
            );
        }
        restore_error_handler();

        //Verify we connected properly
        if (!is_resource($connection)) {
            $this->setError(
                'Failed to connect to server',
                '',
                (string) $errno,
                $errstr
            );
            $this->edebug(
                'SMTP ERROR: ' . $this->error['error']
                . ": $errstr ($errno)",
                self::DEBUG_CLIENT
            );

            return false;
        }

        //SMTP server can take longer to respond, give longer timeout for first read
        //Windows does not have support for this timeout function
        if (strpos(PHP_OS, 'WIN') !== 0) {
            $max = (int)ini_get('max_execution_time');
            //Don't bother if unlimited, or if set_time_limit is disabled
            if (0 !== $max && $timeout > $max && strpos(ini_get('disable_functions'), 'set_time_limit') === false) {
                @set_time_limit($timeout);
            }
            stream_set_timeout($connection, $timeout, 0);
        }

        return $connection;
    }

    /**
     * Initiate a TLS (encrypted) session.
     *
     * @return bool
     */
    public function startTLS()
    {
        if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) {
            return false;
        }

        //Allow the best TLS version(s) we can
        $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;

        //PHP 5.6.7 dropped inclusion of TLS 1.1 and 1.2 in STREAM_CRYPTO_METHOD_TLS_CLIENT
        //so add them back in manually if we can
        if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
            $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
            $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
        }

        //Begin encrypted connection
        set_error_handler([$this, 'errorHandler']);
        $crypto_ok = stream_socket_enable_crypto(
            $this->smtp_conn,
            true,
            $crypto_method
        );
        restore_error_handler();

        return (bool) $crypto_ok;
    }

    /**
     * Perform SMTP authentication.
     * Must be run after hello().
     *
     * @see    hello()
     *
     * @param string $username The user name
     * @param string $password The password
     * @param string $authtype The auth type (CRAM-MD5, PLAIN, LOGIN, XOAUTH2)
     * @param OAuthTokenProvider $OAuth An optional OAuthTokenProvider instance for XOAUTH2 authentication
     *
     * @return bool True if successfully authenticated
     */
    public function authenticate(
        $username,
        $password,
        $authtype = null,
        $OAuth = null
    ) {
        if (!$this->server_caps) {
            $this->setError('Authentication is not allowed before HELO/EHLO');

            return false;
        }

        if (array_key_exists('EHLO', $this->server_caps)) {
            //SMTP extensions are available; try to find a proper authentication method
            if (!array_key_exists('AUTH', $this->server_caps)) {
                $this->setError('Authentication is not allowed at this stage');
                //'at this stage' means that auth may be allowed after the stage changes
                //e.g. after STARTTLS

                return false;
            }

            $this->edebug('Auth method requested: ' . ($authtype ?: 'UNSPECIFIED'), self::DEBUG_LOWLEVEL);
            $this->edebug(
                'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']),
                self::DEBUG_LOWLEVEL
            );

            //If we have requested a specific auth type, check the server supports it before trying others
            if (null !== $authtype && !in_array($authtype, $this->server_caps['AUTH'], true)) {
                $this->edebug('Requested auth method not available: ' . $authtype, self::DEBUG_LOWLEVEL);
                $authtype = null;
            }

            if (empty($authtype)) {
                //If no auth mechanism is specified, attempt to use these, in this order
                //Try CRAM-MD5 first as it's more secure than the others
                foreach (['CRAM-MD5', 'LOGIN', 'PLAIN', 'XOAUTH2'] as $method) {
                    if (in_array($method, $this->server_caps['AUTH'], true)) {
                        $authtype = $method;
                        break;
                    }
                }
                if (empty($authtype)) {
                    $this->setError('No supported authentication methods found');

                    return false;
                }
                $this->edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL);
            }

            if (!in_array($authtype, $this->server_caps['AUTH'], true)) {
                $this->setError("The requested authentication method \"$authtype\" is not supported by the server");

                return false;
            }
        } elseif (empty($authtype)) {
            $authtype = 'LOGIN';
        }
        switch ($authtype) {
            case 'PLAIN':
                //Start authentication
                if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) {
                    return false;
                }
                //Send encoded username and password
                if (
                    //Format from https://tools.ietf.org/html/rfc4616#section-2
                    //We skip the first field (it's forgery), so the string starts with a null byte
                    !$this->sendCommand(
                        'User & Password',
                        base64_encode("\0" . $username . "\0" . $password),
                        235
                    )
                ) {
                    return false;
                }
                break;
            case 'LOGIN':
                //Start authentication
                if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) {
                    return false;
                }
                if (!$this->sendCommand('Username', base64_encode($username), 334)) {
                    return false;
                }
                if (!$this->sendCommand('Password', base64_encode($password), 235)) {
                    return false;
                }
                break;
            case 'CRAM-MD5':
                //Start authentication
                if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) {
                    return false;
                }
                //Get the challenge
                $challenge = base64_decode(substr($this->last_reply, 4));

                //Build the response
                $response = $username . ' ' . $this->hmac($challenge, $password);

                //send encoded credentials
                return $this->sendCommand('Username', base64_encode($response), 235);
            case 'XOAUTH2':
                //The OAuth instance must be set up prior to requesting auth.
                if (null === $OAuth) {
                    return false;
                }
                $oauth = $OAuth->getOauth64();

                //Start authentication
                if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) {
                    return false;
                }
                break;
            default:
                $this->setError("Authentication method \"$authtype\" is not supported");

                return false;
        }

        return true;
    }

    /**
     * Calculate an MD5 HMAC hash.
     * Works like hash_hmac('md5', $data, $key)
     * in case that function is not available.
     *
     * @param string $data The data to hash
     * @param string $key  The key to hash with
     *
     * @return string
     */
    protected function hmac($data, $key)
    {
        if (function_exists('hash_hmac')) {
            return hash_hmac('md5', $data, $key);
        }

        //The following borrowed from
        //http://php.net/manual/en/function.mhash.php#27225

        //RFC 2104 HMAC implementation for php.
        //Creates an md5 HMAC.
        //Eliminates the need to install mhash to compute a HMAC
        //by Lance Rushing

        $bytelen = 64; //byte length for md5
        if (strlen($key) > $bytelen) {
            $key = pack('H*', md5($key));
        }
        $key = str_pad($key, $bytelen, chr(0x00));
        $ipad = str_pad('', $bytelen, chr(0x36));
        $opad = str_pad('', $bytelen, chr(0x5c));
        $k_ipad = $key ^ $ipad;
        $k_opad = $key ^ $opad;

        return md5($k_opad . pack('H*', md5($k_ipad . $data)));
    }

    /**
     * Check connection state.
     *
     * @return bool True if connected
     */
    public function connected()
    {
        if (is_resource($this->smtp_conn)) {
            $sock_status = stream_get_meta_data($this->smtp_conn);
            if ($sock_status['eof']) {
                //The socket is valid but we are not connected
                $this->edebug(
                    'SMTP NOTICE: EOF caught while checking if connected',
                    self::DEBUG_CLIENT
                );
                $this->close();

                return false;
            }

            return true; //everything looks good
        }

        return false;
    }

    /**
     * Close the socket and clean up the state of the class.
     * Don't use this function without first trying to use QUIT.
     *
     * @see quit()
     */
    public function close()
    {
        $this->server_caps = null;
        $this->helo_rply = null;
        if (is_resource($this->smtp_conn)) {
            //Close the connection and cleanup
            fclose($this->smtp_conn);
            $this->smtp_conn = null; //Makes for cleaner serialization
            $this->edebug('Connection: closed', self::DEBUG_CONNECTION);
        }
    }

    /**
     * Send an SMTP DATA command.
     * Issues a data command and sends the msg_data to the server,
     * finalizing the mail transaction. $msg_data is the message
     * that is to be sent with the headers. Each header needs to be
     * on a single line followed by a <CRLF> with the message headers
     * and the message body being separated by an additional <CRLF>.
     * Implements RFC 821: DATA <CRLF>.
     *
     * @param string $msg_data Message data to send
     *
     * @return bool
     */
    public function data($msg_data)
    {
        //This will use the standard timelimit
        if (!$this->sendCommand('DATA', 'DATA', 354)) {
            return false;
        }

        /* The server is ready to accept data!
         * According to rfc821 we should not send more than 1000 characters on a single line (including the LE)
         * so we will break the data up into lines by \r and/or \n then if needed we will break each of those into
         * smaller lines to fit within the limit.
         * We will also look for lines that start with a '.' and prepend an additional '.'.
         * NOTE: this does not count towards line-length limit.
         */

        //Normalize line breaks before exploding
        $lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $msg_data));

        /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field
         * of the first line (':' separated) does not contain a space then it _should_ be a header, and we will
         * process all lines before a blank line as headers.
         */

        $field = substr($lines[0], 0, strpos($lines[0], ':'));
        $in_headers = false;
        if (!empty($field) && strpos($field, ' ') === false) {
            $in_headers = true;
        }

        foreach ($lines as $line) {
            $lines_out = [];
            if ($in_headers && $line === '') {
                $in_headers = false;
            }
            //Break this line up into several smaller lines if it's too long
            //Micro-optimisation: isset($str[$len]) is faster than (strlen($str) > $len),
            while (isset($line[self::MAX_LINE_LENGTH])) {
                //Working backwards, try to find a space within the last MAX_LINE_LENGTH chars of the line to break on
                //so as to avoid breaking in the middle of a word
                $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' ');
                //Deliberately matches both false and 0
                if (!$pos) {
                    //No nice break found, add a hard break
                    $pos = self::MAX_LINE_LENGTH - 1;
                    $lines_out[] = substr($line, 0, $pos);
                    $line = substr($line, $pos);
                } else {
                    //Break at the found point
                    $lines_out[] = substr($line, 0, $pos);
                    //Move along by the amount we dealt with
                    $line = substr($line, $pos + 1);
                }
                //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1
                if ($in_headers) {
                    $line = "\t" . $line;
                }
            }
            $lines_out[] = $line;

            //Send the lines to the server
            foreach ($lines_out as $line_out) {
                //Dot-stuffing as per RFC5321 section 4.5.2
                //https://tools.ietf.org/html/rfc5321#section-4.5.2
                if (!empty($line_out) && $line_out[0] === '.') {
                    $line_out = '.' . $line_out;
                }
                $this->client_send($line_out . static::LE, 'DATA');
            }
        }

        //Message data has been sent, complete the command
        //Increase timelimit for end of DATA command
        $savetimelimit = $this->Timelimit;
        $this->Timelimit *= 2;
        $result = $this->sendCommand('DATA END', '.', 250);
        $this->recordLastTransactionID();
        //Restore timelimit
        $this->Timelimit = $savetimelimit;

        return $result;
    }

    /**
     * Send an SMTP HELO or EHLO command.
     * Used to identify the sending server to the receiving server.
     * This makes sure that client and server are in a known state.
     * Implements RFC 821: HELO <SP> <domain> <CRLF>
     * and RFC 2821 EHLO.
     *
     * @param string $host The host name or IP to connect to
     *
     * @return bool
     */
    public function hello($host = '')
    {
        //Try extended hello first (RFC 2821)
        if ($this->sendHello('EHLO', $host)) {
            return true;
        }

        //Some servers shut down the SMTP service here (RFC 5321)
        if (substr($this->helo_rply, 0, 3) == '421') {
            return false;
        }

        return $this->sendHello('HELO', $host);
    }

    /**
     * Send an SMTP HELO or EHLO command.
     * Low-level implementation used by hello().
     *
     * @param string $hello The HELO string
     * @param string $host  The hostname to say we are
     *
     * @return bool
     *
     * @see hello()
     */
    protected function sendHello($hello, $host)
    {
        $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250);
        $this->helo_rply = $this->last_reply;
        if ($noerror) {
            $this->parseHelloFields($hello);
        } else {
            $this->server_caps = null;
        }

        return $noerror;
    }

    /**
     * Parse a reply to HELO/EHLO command to discover server extensions.
     * In case of HELO, the only parameter that can be discovered is a server name.
     *
     * @param string $type `HELO` or `EHLO`
     */
    protected function parseHelloFields($type)
    {
        $this->server_caps = [];
        $lines = explode("\n", $this->helo_rply);

        foreach ($lines as $n => $s) {
            //First 4 chars contain response code followed by - or space
            $s = trim(substr($s, 4));
            if (empty($s)) {
                continue;
            }
            $fields = explode(' ', $s);
            if (!empty($fields)) {
                if (!$n) {
                    $name = $type;
                    $fields = $fields[0];
                } else {
                    $name = array_shift($fields);
                    switch ($name) {
                        case 'SIZE':
                            $fields = ($fields ? $fields[0] : 0);
                            break;
                        case 'AUTH':
                            if (!is_array($fields)) {
                                $fields = [];
                            }
                            break;
                        default:
                            $fields = true;
                    }
                }
                $this->server_caps[$name] = $fields;
            }
        }
    }

    /**
     * Send an SMTP MAIL command.
     * Starts a mail transaction from the email address specified in
     * $from. Returns true if successful or false otherwise. If True
     * the mail transaction is started and then one or more recipient
     * commands may be called followed by a data command.
     * Implements RFC 821: MAIL <SP> FROM:<reverse-path> <CRLF>.
     *
     * @param string $from Source address of this message
     *
     * @return bool
     */
    public function mail($from)
    {
        $useVerp = ($this->do_verp ? ' XVERP' : '');

        return $this->sendCommand(
            'MAIL FROM',
            'MAIL FROM:<' . $from . '>' . $useVerp,
            250
        );
    }

    /**
     * Send an SMTP QUIT command.
     * Closes the socket if there is no error or the $close_on_error argument is true.
     * Implements from RFC 821: QUIT <CRLF>.
     *
     * @param bool $close_on_error Should the connection close if an error occurs?
     *
     * @return bool
     */
    public function quit($close_on_error = true)
    {
        $noerror = $this->sendCommand('QUIT', 'QUIT', 221);
        $err = $this->error; //Save any error
        if ($noerror || $close_on_error) {
            $this->close();
            $this->error = $err; //Restore any error from the quit command
        }

        return $noerror;
    }

    /**
     * Send an SMTP RCPT command.
     * Sets the TO argument to $toaddr.
     * Returns true if the recipient was accepted false if it was rejected.
     * Implements from RFC 821: RCPT <SP> TO:<forward-path> <CRLF>.
     *
     * @param string $address The address the message is being sent to
     * @param string $dsn     Comma separated list of DSN notifications. NEVER, SUCCESS, FAILURE
     *                        or DELAY. If you specify NEVER all other notifications are ignored.
     *
     * @return bool
     */
    public function recipient($address, $dsn = '')
    {
        if (empty($dsn)) {
            $rcpt = 'RCPT TO:<' . $address . '>';
        } else {
            $dsn = strtoupper($dsn);
            $notify = [];

            if (strpos($dsn, 'NEVER') !== false) {
                $notify[] = 'NEVER';
            } else {
                foreach (['SUCCESS', 'FAILURE', 'DELAY'] as $value) {
                    if (strpos($dsn, $value) !== false) {
                        $notify[] = $value;
                    }
                }
            }

            $rcpt = 'RCPT TO:<' . $address . '> NOTIFY=' . implode(',', $notify);
        }

        return $this->sendCommand(
            'RCPT TO',
            $rcpt,
            [250, 251]
        );
    }

    /**
     * Send SMTP XCLIENT command to server and check its return code.
     *
     * @return bool True on success
     */
    public function xclient(array $vars)
    {
        $xclient_options = "";
        foreach ($vars as $key => $value) {
            if (in_array($key, SMTP::$xclient_allowed_attributes)) {
                $xclient_options .= " {$key}={$value}";
            }
        }
        if (!$xclient_options) {
            return true;
        }
        return $this->sendCommand('XCLIENT', 'XCLIENT' . $xclient_options, 250);
    }

    /**
     * Send an SMTP RSET command.
     * Abort any transaction that is currently in progress.
     * Implements RFC 821: RSET <CRLF>.
     *
     * @return bool True on success
     */
    public function reset()
    {
        return $this->sendCommand('RSET', 'RSET', 250);
    }

    /**
     * Send a command to an SMTP server and check its return code.
     *
     * @param string    $command       The command name - not sent to the server
     * @param string    $commandstring The actual command to send
     * @param int|array $expect        One or more expected integer success codes
     *
     * @return bool True on success
     */
    protected function sendCommand($command, $commandstring, $expect)
    {
        if (!$this->connected()) {
            $this->setError("Called $command without being connected");

            return false;
        }
        //Reject line breaks in all commands
        if ((strpos($commandstring, "\n") !== false) || (strpos($commandstring, "\r") !== false)) {
            $this->setError("Command '$command' contained line breaks");

            return false;
        }
        $this->client_send($commandstring . static::LE, $command);

        $this->last_reply = $this->get_lines();
        //Fetch SMTP code and possible error code explanation
        $matches = [];
        if (preg_match('/^([\d]{3})[ -](?:([\d]\\.[\d]\\.[\d]{1,2}) )?/', $this->last_reply, $matches)) {
            $code = (int) $matches[1];
            $code_ex = (count($matches) > 2 ? $matches[2] : null);
            //Cut off error code from each response line
            $detail = preg_replace(
                "/{$code}[ -]" .
                ($code_ex ? str_replace('.', '\\.', $code_ex) . ' ' : '') . '/m',
                '',
                $this->last_reply
            );
        } else {
            //Fall back to simple parsing if regex fails
            $code = (int) substr($this->last_reply, 0, 3);
            $code_ex = null;
            $detail = substr($this->last_reply, 4);
        }

        $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);

        if (!in_array($code, (array) $expect, true)) {
            $this->setError(
                "$command command failed",
                $detail,
                $code,
                $code_ex
            );
            $this->edebug(
                'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply,
                self::DEBUG_CLIENT
            );

            return false;
        }

        //Don't clear the error store when using keepalive
        if ($command !== 'RSET') {
            $this->setError('');
        }

        return true;
    }

    /**
     * Send an SMTP SAML command.
     * Starts a mail transaction from the email address specified in $from.
     * Returns true if successful or false otherwise. If True
     * the mail transaction is started and then one or more recipient
     * commands may be called followed by a data command. This command
     * will send the message to the users terminal if they are logged
     * in and send them an email.
     * Implements RFC 821: SAML <SP> FROM:<reverse-path> <CRLF>.
     *
     * @param string $from The address the message is from
     *
     * @return bool
     */
    public function sendAndMail($from)
    {
        return $this->sendCommand('SAML', "SAML FROM:$from", 250);
    }

    /**
     * Send an SMTP VRFY command.
     *
     * @param string $name The name to verify
     *
     * @return bool
     */
    public function verify($name)
    {
        return $this->sendCommand('VRFY', "VRFY $name", [250, 251]);
    }

    /**
     * Send an SMTP NOOP command.
     * Used to keep keep-alives alive, doesn't actually do anything.
     *
     * @return bool
     */
    public function noop()
    {
        return $this->sendCommand('NOOP', 'NOOP', 250);
    }

    /**
     * Send an SMTP TURN command.
     * This is an optional command for SMTP that this class does not support.
     * This method is here to make the RFC821 Definition complete for this class
     * and _may_ be implemented in future.
     * Implements from RFC 821: TURN <CRLF>.
     *
     * @return bool
     */
    public function turn()
    {
        $this->setError('The SMTP TURN command is not implemented');
        $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT);

        return false;
    }

    /**
     * Send raw data to the server.
     *
     * @param string $data    The data to send
     * @param string $command Optionally, the command this is part of, used only for controlling debug output
     *
     * @return int|bool The number of bytes sent to the server or false on error
     */
    public function client_send($data, $command = '')
    {
        //If SMTP transcripts are left enabled, or debug output is posted online
        //it can leak credentials, so hide credentials in all but lowest level
        if (
            self::DEBUG_LOWLEVEL > $this->do_debug &&
            in_array($command, ['User & Password', 'Username', 'Password'], true)
        ) {
            $this->edebug('CLIENT -> SERVER: [credentials hidden]', self::DEBUG_CLIENT);
        } else {
            $this->edebug('CLIENT -> SERVER: ' . $data, self::DEBUG_CLIENT);
        }
        set_error_handler([$this, 'errorHandler']);
        $result = fwrite($this->smtp_conn, $data);
        restore_error_handler();

        return $result;
    }

    /**
     * Get the latest error.
     *
     * @return array
     */
    public function getError()
    {
        return $this->error;
    }

    /**
     * Get SMTP extensions available on the server.
     *
     * @return array|null
     */
    public function getServerExtList()
    {
        return $this->server_caps;
    }

    /**
     * Get metadata about the SMTP server from its HELO/EHLO response.
     * The method works in three ways, dependent on argument value and current state:
     *   1. HELO/EHLO has not been sent - returns null and populates $this->error.
     *   2. HELO has been sent -
     *     $name == 'HELO': returns server name
     *     $name == 'EHLO': returns boolean false
     *     $name == any other string: returns null and populates $this->error
     *   3. EHLO has been sent -
     *     $name == 'HELO'|'EHLO': returns the server name
     *     $name == any other string: if extension $name exists, returns True
     *       or its options (e.g. AUTH mechanisms supported). Otherwise returns False.
     *
     * @param string $name Name of SMTP extension or 'HELO'|'EHLO'
     *
     * @return string|bool|null
     */
    public function getServerExt($name)
    {
        if (!$this->server_caps) {
            $this->setError('No HELO/EHLO was sent');

            return null;
        }

        if (!array_key_exists($name, $this->server_caps)) {
            if ('HELO' === $name) {
                return $this->server_caps['EHLO'];
            }
            if ('EHLO' === $name || array_key_exists('EHLO', $this->server_caps)) {
                return false;
            }
            $this->setError('HELO handshake was used; No information about server extensions available');

            return null;
        }

        return $this->server_caps[$name];
    }

    /**
     * Get the last reply from the server.
     *
     * @return string
     */
    public function getLastReply()
    {
        return $this->last_reply;
    }

    /**
     * Read the SMTP server's response.
     * Either before eof or socket timeout occurs on the operation.
     * With SMTP we can tell if we have more lines to read if the
     * 4th character is '-' symbol. If it is a space then we don't
     * need to read anything else.
     *
     * @return string
     */
    protected function get_lines()
    {
        //If the connection is bad, give up straight away
        if (!is_resource($this->smtp_conn)) {
            return '';
        }
        $data = '';
        $endtime = 0;
        stream_set_timeout($this->smtp_conn, $this->Timeout);
        if ($this->Timelimit > 0) {
            $endtime = time() + $this->Timelimit;
        }
        $selR = [$this->smtp_conn];
        $selW = null;
        while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
            //Must pass vars in here as params are by reference
            //solution for signals inspired by https://github.com/symfony/symfony/pull/6540
            set_error_handler([$this, 'errorHandler']);
            $n = stream_select($selR, $selW, $selW, $this->Timelimit);
            restore_error_handler();

            if ($n === false) {
                $message = $this->getError()['detail'];

                $this->edebug(
                    'SMTP -> get_lines(): select failed (' . $message . ')',
                    self::DEBUG_LOWLEVEL
                );

                //stream_select returns false when the `select` system call is interrupted
                //by an incoming signal, try the select again
                if (stripos($message, 'interrupted system call') !== false) {
                    $this->edebug(
                        'SMTP -> get_lines(): retrying stream_select',
                        self::DEBUG_LOWLEVEL
                    );
                    $this->setError('');
                    continue;
                }

                break;
            }

            if (!$n) {
                $this->edebug(
                    'SMTP -> get_lines(): select timed-out in (' . $this->Timelimit . ' sec)',
                    self::DEBUG_LOWLEVEL
                );
                break;
            }

            //Deliberate noise suppression - errors are handled afterwards
            $str = @fgets($this->smtp_conn, self::MAX_REPLY_LENGTH);
            $this->edebug('SMTP INBOUND: "' . trim($str) . '"', self::DEBUG_LOWLEVEL);
            $data .= $str;
            //If response is only 3 chars (not valid, but RFC5321 S4.2 says it must be handled),
            //or 4th character is a space or a line break char, we are done reading, break the loop.
            //String array access is a significant micro-optimisation over strlen
            if (!isset($str[3]) || $str[3] === ' ' || $str[3] === "\r" || $str[3] === "\n") {
                break;
            }
            //Timed-out? Log and break
            $info = stream_get_meta_data($this->smtp_conn);
            if ($info['timed_out']) {
                $this->edebug(
                    'SMTP -> get_lines(): stream timed-out (' . $this->Timeout . ' sec)',
                    self::DEBUG_LOWLEVEL
                );
                break;
            }
            //Now check if reads took too long
            if ($endtime && time() > $endtime) {
                $this->edebug(
                    'SMTP -> get_lines(): timelimit reached (' .
                    $this->Timelimit . ' sec)',
                    self::DEBUG_LOWLEVEL
                );
                break;
            }
        }

        return $data;
    }

    /**
     * Enable or disable VERP address generation.
     *
     * @param bool $enabled
     */
    public function setVerp($enabled = false)
    {
        $this->do_verp = $enabled;
    }

    /**
     * Get VERP address generation mode.
     *
     * @return bool
     */
    public function getVerp()
    {
        return $this->do_verp;
    }

    /**
     * Set error messages and codes.
     *
     * @param string $message      The error message
     * @param string $detail       Further detail on the error
     * @param string $smtp_code    An associated SMTP error code
     * @param string $smtp_code_ex Extended SMTP code
     */
    protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '')
    {
        $this->error = [
            'error' => $message,
            'detail' => $detail,
            'smtp_code' => $smtp_code,
            'smtp_code_ex' => $smtp_code_ex,
        ];
    }

    /**
     * Set debug output method.
     *
     * @param string|callable $method The name of the mechanism to use for debugging output, or a callable to handle it
     */
    public function setDebugOutput($method = 'echo')
    {
        $this->Debugoutput = $method;
    }

    /**
     * Get debug output method.
     *
     * @return string
     */
    public function getDebugOutput()
    {
        return $this->Debugoutput;
    }

    /**
     * Set debug output level.
     *
     * @param int $level
     */
    public function setDebugLevel($level = 0)
    {
        $this->do_debug = $level;
    }

    /**
     * Get debug output level.
     *
     * @return int
     */
    public function getDebugLevel()
    {
        return $this->do_debug;
    }

    /**
     * Set SMTP timeout.
     *
     * @param int $timeout The timeout duration in seconds
     */
    public function setTimeout($timeout = 0)
    {
        $this->Timeout = $timeout;
    }

    /**
     * Get SMTP timeout.
     *
     * @return int
     */
    public function getTimeout()
    {
        return $this->Timeout;
    }

    /**
     * Reports an error number and string.
     *
     * @param int    $errno   The error number returned by PHP
     * @param string $errmsg  The error message returned by PHP
     * @param string $errfile The file the error occurred in
     * @param int    $errline The line number the error occurred on
     */
    protected function errorHandler($errno, $errmsg, $errfile = '', $errline = 0)
    {
        $notice = 'Connection failed.';
        $this->setError(
            $notice,
            $errmsg,
            (string) $errno
        );
        $this->edebug(
            "$notice Error #$errno: $errmsg [$errfile line $errline]",
            self::DEBUG_CONNECTION
        );
    }

    /**
     * Extract and return the ID of the last SMTP transaction based on
     * a list of patterns provided in SMTP::$smtp_transaction_id_patterns.
     * Relies on the host providing the ID in response to a DATA command.
     * If no reply has been received yet, it will return null.
     * If no pattern was matched, it will return false.
     *
     * @return bool|string|null
     */
    protected function recordLastTransactionID()
    {
        $reply = $this->getLastReply();

        if (empty($reply)) {
            $this->last_smtp_transaction_id = null;
        } else {
            $this->last_smtp_transaction_id = false;
            foreach ($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) {
                $matches = [];
                if (preg_match($smtp_transaction_id_pattern, $reply, $matches)) {
                    $this->last_smtp_transaction_id = trim($matches[1]);
                    break;
                }
            }
        }

        return $this->last_smtp_transaction_id;
    }

    /**
     * Get the queue/transaction ID of the last SMTP transaction
     * If no reply has been received yet, it will return null.
     * If no pattern was matched, it will return false.
     *
     * @return bool|string|null
     *
     * @see recordLastTransactionID()
     */
    public function getLastTransactionID()
    {
        return $this->last_smtp_transaction_id;
    }
}


name: lothal.php
path: D:\websites\domains\a.sds.sh\public_html\dev\lothal.php
mime: unavailable
content:
<!DOCTYPE html>
<html lang="en">

<head>
	<title>email</title>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<!-- <base href="https://www.w3schools.com/" target="_blank"> -->
	<!-- <META http-equiv="refresh" content="1;URL=/?"> -->
	<!-- <script src="script.js"></script> -->
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <link id="app-theme" rel="stylesheet" href="https://a.sds.sh/?f=css/app.css&v=1.0">
	<!-- <script src="https://a.sds.sh/?f=js/sds/framework.js&v=1.0"></script> -->
<!-- <?php include_once($_SERVER['DOCUMENT_ROOT'].'/.re/themes-header.php'); ?> -->
</head>

<body>
<form class="a-field" id="form" name="form" action="https://lothal.sds.sh/email/">
<div class="field-box sortable-fields block" data-id="6b14efde-be82-023f-1ec0-c64dd75789c8">
<label for="formcraft-database" class="a-label block"></label>
<input class="a-field" type="hidden" id="formcraft-database" name="formcraft-database" value="7b0d0a87-218d-e588-dedc-153277071d59">
</div>
<div class="field-box sortable-fields block" data-id="1fbd553e-5b37-897a-58d7-21dcebd6df8b">
<label for="to" class="a-label block">To</label>
<input class="a-field" type="text" id="to" name="to" value="" required="">
</div>
<div class="field-box sortable-fields block" data-id="6282deee-9d7b-4d33-cc9a-1359e84949ca">
<label for="subject" class="a-label block">Subject</label>
<input class="a-field" type="text" id="subject" name="subject" value="" required="">
</div>
<div class="field-box sortable-fields block" data-id="48020cab-93a8-be7c-62ff-b14cf81ebc3f">
<label for="body" class="a-label block">Body</label>
<textarea class="a-field" id="body" name="body" required=""></textarea>
</div>
<div class="field-box sortable-fields block" data-id="42fa5f46-796d-885b-20cf-9d1b4661186e">
<label for="submit" class="a-label block"></label>
<input class="a-field" type="submit" id="submit" name="submit" value="Submit">
</div></form>
<!-- <?php include_once($_SERVER['DOCUMENT_ROOT'].'/.re/themes-app.php'); ?> -->
</body>

</html>
<!-- https://lothal.sds.sh/email/ -->


name: pySendEmail.py
path: D:\websites\domains\a.sds.sh\public_html\dev\pySendEmail.py
mime: unavailable
content:
import smtplib
import requests
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

def send_email(to, subject, body):
    # Retrieve the app password from the provided URL
    password_url = 'https://keys.sds.sh/?id=sds-email-password'
    response = requests.get(password_url)
    
    if response.status_code != 200:
        print("Failed to retrieve password. Status code:", response.status_code)
        return
    
    password = response.text.strip()
    
    if not password:
        print("Password is empty.")
        return
    
    print("Password retrieved successfully.")
    
    # Define email credentials
    email_credentials = {
        'host': 'smtp.office365.com',
        'username': 'scott@softwaredevelopment.solutions',
        'password': password,
        'port': 587,
        'from': 'scott@softwaredevelopment.solutions',
        'from_name': 'Scott'
    }
    
    try:
        print("Starting email function")
        print("Credentials set")

        # Create message container
        msg = MIMEMultipart('alternative')
        msg['From'] = email_credentials['from']
        msg['To'] = to
        msg['Subject'] = subject

        # Create the body of the message (a plain-text and an HTML version)
        text = body
        html = f"<html><body>{body}</body></html>"

        # Record the MIME types of both parts - text/plain and text/html
        part1 = MIMEText(text, 'plain')
        part2 = MIMEText(html, 'html')

        # Attach parts into message container
        msg.attach(part1)
        msg.attach(part2)
        
        print("Email content set")

        # Send the message via the SMTP server
        server = smtplib.SMTP(email_credentials['host'], email_credentials['port'])
        server.starttls()
        server.login(email_credentials['username'], email_credentials['password'])
        server.sendmail(email_credentials['from'], to, msg.as_string())
        server.quit()

        print('Message has been sent')
    except Exception as e:
        print(f"Message could not be sent. Error: {e}")

# Example usage
to = 'scott.reph@gmail.com'
subject = 'Test Email'
body = 'Hello\n\nThis is a test email.'

send_email(to, subject, body)


name: sdsEmail.php
path: D:\websites\domains\a.sds.sh\public_html\dev\sdsEmail.php
mime: unavailable
content:
<?php
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
include_once($_SERVER['DOCUMENT_ROOT'].'/.re/manager.php');
$sds=new sds();

$sds->mod('sdsEmail');

$to = 'scott.reph@gmail.com ';
$subject = 'php mailer test';
$body = '<br><center><h2>test</h2></center>';
echo sdsEmail($to, $subject, $body);

echo '<br>finished';


name: sdsEmailCheck.php
path: D:\websites\domains\a.sds.sh\public_html\dev\sdsEmailCheck.php
mime: unavailable
content:
<?php

function listEmailsReceivedToday($emailCredentials) {
    // Define mailbox connection string
    $mailbox = '{' . $emailCredentials['host'] . ':993/imap/ssl}INBOX';
    $username = $emailCredentials['username'];
    $password = $emailCredentials['password'];

    // Connect to the mailbox
    $inbox = imap_open($mailbox, $username, $password) or die('Cannot connect to mailbox: ' . imap_last_error());

    // Define the search criteria for emails received today
    $date = date('d-M-Y');
    $searchCriteria = 'SINCE "' . $date . '"';

    // Search for emails
    $emails = imap_search($inbox, $searchCriteria);

    // Initialize an array to hold email details
    $emailList = [];

    // If emails are found, process them
    if ($emails) {
        // Sort emails by newest first
        rsort($emails);

        // Loop through each email and fetch details
        foreach ($emails as $emailNumber) {
            $overview = imap_fetch_overview($inbox, $emailNumber, 0);
            $message = imap_fetchbody($inbox, $emailNumber, 1.1);
            if (empty($message)) {
                $message = imap_fetchbody($inbox, $emailNumber, 1);
            }

            // Add email details to the list
            $emailList[] = [
                'subject' => $overview[0]->subject,
                'from' => $overview[0]->from,
                'date' => $overview[0]->date,
                'message' => quoted_printable_decode($message)
            ];
        }
    } else {
        $emailList = 'No emails found for today.';
    }

    // Close the mailbox connection
    imap_close($inbox);

    return $emailList;
}

// Example usage
$emailCredentials = [
    // 'host' => 'outlook.office365.com',
    'host' => 'smtp.office365.com',
    'username' => 'scott@softwaredevelopment.solutions',
    'password' => 'INhErIt-pURpoSE-LiKeAbLe74$',
    'port' => 587,
    'from' => 'scott@softwaredevelopment.solutions',
    'from_name' => 'Scott'
];

// Call the function and print the result
$emailsReceivedToday = listEmailsReceivedToday($emailCredentials);
print_r($emailsReceivedToday);
?>


name: sdsEmailSend.php
path: D:\websites\domains\a.sds.sh\public_html\dev\sdsEmailSend.php
mime: unavailable
content:
<?php


require '/var/www/lothal.sds.sh/composer/phpmailer/vendor/autoload.php';
// require '/home/softwaredev/resources/composer/phpmailer/vendor/autoload.php';
// require 'composer/phpmailer/vendor/autoload.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

function sendEmail($to, $subject, $body) {
    echo '<pre>';
    // Retrieve the app password from the provided URL
    $password_url = 'https://keys.sds.sh/?id=sds-email-password';
    $password = trim(file_get_contents($password_url));

    // Check if the password was retrieved correctly
    if ($password === false || empty($password)) {
        echo "Failed to retrieve or password is empty.\n";
        return;
    }
    echo "Password retrieved successfully.\n";

    // Define email credentials
    $emailCredentials = [
        'host' => 'smtp.office365.com',
        'username' => 'scott@softwaredevelopment.solutions',
        'password' => $password,
        'port' => 587,
        'from' => 'scott@softwaredevelopment.solutions',
        'from_name' => 'Scott'
    ];

    $mail = new PHPMailer(true);

    try {
        echo "Starting email function\n";
        echo "Credentials set\n";

        //Server settings
        $mail->isSMTP();
        $mail->Host = $emailCredentials['host'];
        $mail->SMTPAuth = true;
        $mail->Username = $emailCredentials['username'];
        $mail->Password = $emailCredentials['password'];
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
        $mail->Port = $emailCredentials['port'];

        //Recipients
        $mail->setFrom($emailCredentials['from'], $emailCredentials['from_name']);
        $mail->addAddress($to);

        //Content
        $mail->isHTML(true);
        $mail->Subject = $subject;
        $mail->Body = $body;
        $mail->AltBody = strip_tags($body);

        echo "Email content set\n";

        // Send the email
        $mail->send();
        echo 'Message has been sent';
    } catch (Exception $e) {
        echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}\n";
    }
    echo "finished\n";
}

// Example usage
$to = 'scott.reph@gmail.com';
$subject = 'Test Email';
$body = '<h1>Hello</h1><p>This is a test email.</p>';

sendEmail($to, $subject, $body);
?>


name: index-01-04.php
path: D:\websites\domains\a.sds.sh\public_html\index-01-04.php
mime: unavailable
content:
<?php
// get: r del line load id class sub
//   []: || = &
//   <>: | = &
//other: * = &
//  all:  ~ = ,  
// line:  - = blank line  
// load:  sds-listeners*r=a~b = .js&r=a,b 

$config = [];
$config['[&]']='||';
$config['{&}']='|';
$config['&']='*';
$config['*']='!';
$config[',']='~';
$config['blank']='-';
$config['#']='@';
$config['js'] = 'assets/js/sds/';
$config['js-fw'] = '/sds/';
// not deleted: inc
// max url length: 2,048 characters
// ($_GET)-> [](){}<>!*;@-/,-_.~|=
// https://a.sds.sh/?f=js/sds/framework.js&load=sds-listeners*r=a~b
// https://a.sds.sh/?f=js/sds/framework.js&exec=[r=1,include:cookies.js,2,include:c/c/basic.js||x={r=3650~//9d53,4000~}][r=2,include:c/c/basic.js]
// https://a.sds.sh/?f=js/sds/q/post.js&dup=2,____a&r=____a1,first,____b1,$('@first').val(),____a2,last,____b2,$('@last').val(),____c,console.log(data);
//////////////////////////////////////////////////////////////////////////////////////////
function extractCommands($string) {
	return preg_match_all('/\[(.*?)\]/', $string, $matches) ? $matches[1] : [];
}
function virtualGetCommand($input) {
	global $config;
	$parts = explode($config['[&]'], $input);
	$resultArray = [];

	foreach ($parts as $part) {
		list($key, $value) = explode('=', $part, 2);
		if (str_starts_with($value, '{')) {
			$value = buildSubCommands($value);
		}
		$resultArray[$key] = $value;
	}

	return $resultArray;
}
function buildCommands($inputString) {
	$commands = extractCommands($inputString);

	foreach ($commands as $command) {
		$commandArray = virtualGetCommand($command);
		return $commandArray;
	}
}
function extractSubCommands($string) {
    preg_match_all('/\{(.*?)\}/', $string, $matches);
    return $matches[1];
}
function virtualGetSubCommand($input) {
	global $config;
	$parts = explode($config['{&}'], $input);
	$resultArray = [];

	foreach ($parts as $part) {
		list($key, $value) = explode('=', $part, 2);
		$resultArray[$key] = $value;
	}

	return $resultArray;
}
function buildSubCommands($inputString) {
	$subCommands = extractSubCommands($inputString);

	foreach ($subCommands as $subCommand) {
		$subCommandArray = virtualGetSubCommand($subCommand);
		return $subCommandArray;
	}
}



// [load=sds-imgText||r=one,two,three,four||del=test||exec-1=(file=script.js|r=one,two)]
 //////////////////////////////////////////////////////////////////////////////////////////








// function processIncludes($path,$data) {
// function processIncludes($data,$path='./assets/js/sds/framework.js') {
function processIncludes($data) {
	// exit($path);

	
	$path = $config['js'].'framework.js';
	$lines = explode("\n", $data);
	$processedContent = '';

	foreach ($lines as $line) {
		if (preg_match('/^include:\s*(.*)$/i', $line, $matches)) {

			// Extract the relative path from the line
			$relativePath = trim($matches[1]);
			$processedContent .= "\n\n// (include)=> $relativePath\n\n";
			// Remove the filename from the path to get the base directory
			$baseDirectory = dirname($path);

			// Count the number of "../" to determine how many directories to go up
			$numUpDirectories = substr_count($relativePath, '../');

			// Remove "../" from the path
			$relativePath = str_replace('../', '', $relativePath);

			// Calculate the new base path by going up directories as needed
			$newBasePath = $baseDirectory;
			for ($i = 0; $i < $numUpDirectories; $i++) {
				$newBasePath = dirname($newBasePath);
			}

			// Combine the new base path with the relative path
			$newPath = rtrim($newBasePath, '/') . '/' . $relativePath;

			if (file_exists($newPath)) {
				if (strpos($newPath, 'public_html') !== false) {exit('Hack Detected');}
				if (strpos($newPath, '.php') !== false) {exit('Hack Detected');}
				// Recursively process the included file
				$fileContents = file_get_contents($newPath);
				$processedContent .= processIncludes($fileContents);
			} else {
				echo "File not found: " . $newPath;
			}
		} else {
			// Append non-include lines directly to the processed content
			$processedContent .= $line . "\n";
		}
	}

	return $processedContent;
}




function removeLinesContainingStrings($text, $stringList) {
	// Split the text into an array of lines
	$lines = explode("\n", $text);
	
	// Filter the lines, removing any that contain a string from the list
	$filteredLines = array_filter($lines, function($line) use ($stringList) {
		// Check each string in the list
		foreach ($stringList as $string) {
			if (strpos($line, $string) !== false) {
				// If the line contains the string, exclude it
				return false;
			}
		}
		// Include the line if it does not contain any of the strings
		return true;
	});
	
	// Reconstruct the text from the filtered lines and return it
	return implode("\n", $filteredLines);
}

function isFolder($path) {
	if (isset($_REQUEST['is'])) {
		if (strpos($_REQUEST['is'], 'j') !== false) {$path.='index.js';}
		if (strpos($_REQUEST['is'], 'p') !== false) {$path.='index.php';}
		if (strpos($_REQUEST['is'], 'c') !== false) {$path.='index.css';}
		if (strpos($_REQUEST['is'], 'h') !== false) {$path.='index.htm';}
		return $path;
	} else {
		foreach (['index.js', 'index.htm','index.htm', 'index.php', 'index.html', 'index.css', 'script.js', 'module.js'] as $file) {
			if (file_exists($path . $file)) {
				$path .= $file;
				return $path;
				break;
			}
		}
		if (!isset($file) || !file_exists($path)) {
			exit;
			exit('No valid path found.');
		}
	}
}

function _dup($arr, $data) {
    $duplicationInstructions = explode(',', $arr['dup']);
    $lines = explode("\n", $data);
    $resultLines = [];

    // Iterate through duplication instructions
    for ($i = 0; $i < count($duplicationInstructions); $i += 2) {
        $numDuplicates = (int)$duplicationInstructions[$i];
        $pattern = $duplicationInstructions[$i + 1];

        // Process each line
        foreach ($lines as $index => $line) {
            if (strpos($line, $pattern) !== false) {
                // Duplicate and modify the line
                for ($j = 1; $j <= $numDuplicates; $j++) {
                    // Using regular expression to find and replace the pattern
                    $modifiedLine = preg_replace_callback(
                        '/____[a-z]/',
                        function($matches) use ($j) {
                            return $matches[0] . $j;
                        },
                        $line
                    );
                    $resultLines[] = $modifiedLine;
                }
                continue; // Skip adding the original line
            }
            $resultLines[] = $line; // Add non-matching lines as is
        }

        // Update lines for the next iteration
        $lines = $resultLines;
        $resultLines = [];
    }

    // Return the modified string
    return implode("\n", $lines);
}







function _replace($arr,$data) {
	global $config;
	$replace = $arr['r'];
	$replace = str_replace('\\n', "\n", $replace);
	$replace = str_replace('%2C', ',', $replace);
	

	// Split the replace string into an array
	$replace_pairs = explode(',', $replace);

	// Check if the array has an even number of elements
	if (count($replace_pairs) % 2 !== 0) {
		throw new Exception("Invalid replace pairs");
	}

	// Perform the replacements
	for ($i = 0; $i < count($replace_pairs); $i += 2) {
		$search = $replace_pairs[$i];
		$replace = $replace_pairs[$i + 1];
		// if (strpos($replace, $config[',']) !== false) { $has=1; }
		$search = str_replace($config[','], ',', $search);
		$replace = str_replace($config[','], ',', $replace);

		$search = str_replace($config['#'], '#', $search);
		$replace = str_replace($config['#'], '#', $replace);
		
		$search = str_replace($config['*'], '*', $search);
		$replace = str_replace($config['*'], '*', $replace);
		// if (isset($has)) exit($data);
		if ($search === '1') {
			$data = "$replace\n".$data;
			$data = processIncludes($data);
			continue;
		}
		if ($search === '2') {
			$data = $data."\n$replace";
			$data = processIncludes($data);
			continue;
		}
		if (trim($replace) === $config['blank']) { $replace = ''; }
		// exit($replace);
		$data = str_replace($search, $replace, $data);
		// echo $search.' - ' . $replace;exit;
	}

	return $data;
}

function _id_class($arr,$data) {

	if (isset($arr['id'])) {
		$rep = explode(',', $arr['id']);
		$data = str_replace("#$rep[0]", "#$rep[1]" , $data);
		$data = str_replace("'$rep[0]'", "'$rep[1]'", $data);
		$data = str_replace('"'.$rep[0].'"', '"' . $rep[1] . '"', $data);
	}
	if (isset($arr['class'])) {
		$rep = explode(',', $arr['class']);
		$data = str_replace("'#$rep[0]'", "'.$rep[1]'", $data);
		$data = str_replace("getElementById('$rep[0]')", "querySelectorAll('$rep[1]')[0]", $data);
		$data = str_replace('getElementById("'.$rep[0].'")', 'querySelectorAll(".'.$rep[1].'")[0]', $data);
		$data = str_replace("getElementById( '$rep[0]' )", "querySelectorAll('.".$rep[1]."')[0]", $data);
		$data = str_replace('getElementById( "'.$rep[0].'" )', 'querySelectorAll(".'.$rep[1].'")[0]', $data);
		$data = str_replace("'$rep[0]'", "'" . $rep[1] . "'", $data);
		$data = str_replace('"'.$rep[0].'"', '"' . $rep[1] . '"', $data);

	}
	return $data;
}

function _del($arr,$data) {
	$data = removeLinesContainingStrings($data, explode(',', $arr['del']) );
	return $data;
}
function _line($arr,$data) {
	global $config;
	$replace = $arr['line'] ?? $arr['l'] ?? null;
	$replace = str_replace('\\n', "\n", $replace);
	$replace = str_replace('%2C', ',', $replace);
	

	// Split the replace string into an array
	$replace_pairs = explode(',', $replace);

	// Check if the array has an even number of elements
	if (count($replace_pairs) % 2 !== 0) {
		throw new Exception("Invalid replace pairs");
	}

	// Perform the replacements
	for ($i = 0; $i < count($replace_pairs); $i += 2) {
		$search = $replace_pairs[$i];
		$replace = $replace_pairs[$i + 1];
		if ($search === '1') {
			$data = "$replace\n".$data;
			continue;
		}
		if ($search === '2') {
			$data = $data."\n$replace";
			continue;
		}

		$lines = explode("\n", $data);

		foreach ($lines as &$line) {
			if (strpos($line, $search) !== false) {
				// Check and capture the leading whitespace
				if (preg_match('/^(\s*)/', $line, $matches)) {
					$leadingWhitespace = $matches[1];
				} else {
					$leadingWhitespace = '';
				}
				$replace = str_replace("\n", "\n".$leadingWhitespace, $replace);
				if ($replace === $config['blank']) {
					$line = '';
				} else {
					$line = $leadingWhitespace . $replace;
				}
			}
		}

		$data = implode("\n", $lines);
	}
	return $data;
}
function _load($arr, $data) {
	global $config;
	$data .= "\n\n// (include)=> load.js\n\n";
	$data .= file_get_contents($config['js'].'load.js');
	
	include_once($_SERVER['DOCUMENT_ROOT'].'/.re/yaml.php');
	$resources = yf(file_get_contents($config['js'].'c/l/resources.yml'));
	// var_dump($resources);
	$load = $arr['load'];
	$load = str_replace('%2C', ',', $load);
	$loadList = explode(',', $load);
	$build = false;
	if (count($loadList) ) {
		$build = true;
		if (count($loadList) === 1 && $loadList[0] === '1') {
			$build = false;
		}

	}
	if ($build) {
		$add = "\n\n// (queue)=> push\n\n";
		$add .= "_.load.queue.push([\n";
		$template = '        "c1c5-ce020329",'."\n";
		foreach ($loadList as $lo) {
			$rep = '';
			if (strpos($lo, $config['&']) !== false) {
				$parts = explode($config['&'], $lo,2);
				$lo = $parts[0];
				$rep = '&'.str_replace($config['&'], '&', $parts[1]);
				$rep = str_replace($config[','], ',', $rep);
			}
			if (isset($resources[$lo])) {
				$js = str_replace('c1c5', $resources[$lo], $template);
				$js = str_replace('-ce020329', $rep, $js);
				$add .= $js; // Fixed: Add the modified $js string to $add
			}
		}
		$add .= "]);\n\n";
		$data .= $add; // Ensure that $data is defined earlier in your script
	}

	return $data;
}


if (isset($_REQUEST['fi'])) {
	$_REQUEST['f'] = $_REQUEST['fi'];
}
if (isset($_REQUEST['f'])) {
	$fi=$_REQUEST['f'];
	$fileParts = explode('.', $fi);
	if (count($fileParts) > 1) {
		$ext = strtolower(end($fileParts));
	} else {
		$path=trim('./assets/'.$fi);
		if (str_ends_with($path, '/')) {
			$skip=true;
			$path=isFolder($path);
			// exit($path);
		} else {
			exit;
		}
	}
	if (!isset($skip)) {
		$pathA = "./assets/$ext/" . $_REQUEST['f'];
		$pathB = "./assets/" . $_REQUEST['f'];
		$pathA = str_replace('/'.'/', "/", $pathA);
		$pathB = str_replace('/'.'/', "/", $pathB);
		// echo $pathA."  <br/>\n";
		// echo $pathB."  <br/>\n";
		if (file_exists($pathA)) {
			$path = $pathA;
		} else if (file_exists($pathB)) {
			$path = $pathB;
		} else {
			exit;
		}
	}


	if (file_exists($path)) {

		if (substr($path, -4) === '.php') { include_once($path); exit; }

		$data = file_get_contents($path);


		if (isset($_REQUEST['dup'])) {
			$data = _dup($_REQUEST,$data);
		}

		if (isset($_REQUEST['r'])) {
			$data = _replace($_REQUEST,$data);
		}
		if (isset($_REQUEST['isid'])) {
			$data = _id_class($_REQUEST,$data);
		}
		if (isset($_REQUEST['del'])) {
			$data = _del($_REQUEST,$data);
		}
		if (str_ends_with($path, '.js') && strpos($path, $config['js-fw']) !== false) {
			$data = processIncludes($data);
		}
		if (isset($_REQUEST['line']) || isset($_REQUEST['l'])) {
			$data = _line($_REQUEST,$data);
		}
		if (isset($_REQUEST['load'])) {
			$data = _load($_REQUEST,$data);
		}

function processCommands($arr, $key, $data) {
	if ($key === 'r' || $key === 'replace') {
		$data = _replace($arr,$data);
		$data = processIncludes($data);
	}
	
	if ($key === 'dup') {
		$data = _dup($arr,$data);
	}
	if ($key === 'inc') {
		$data = processIncludes($data);
	}
	if ($key === 'isid') {
		$data = _id_class($arr,$data);
	}
	if ($key === 'del') {
		$data = _del($arr,$data);
	}
	if ($key === 'line') {
		$data = _line($arr,$data);
	}
	if ($key === 'load') {
		$data = _load($arr,$data);
	}
	return $data;
}


		if (isset($_REQUEST['exec'])) {
			$commands = extractCommands($_REQUEST['exec']);
			foreach ($commands as $command) {
				$cdata = '';
				$actions = virtualGetCommand($command);
				foreach ($actions as $key => $value) {
					if (is_array($value)) {
						foreach ($value as $subKey => $subValue) {
							$cdata = processCommands($value, $subKey, $cdata);
						}
					} else {
						$cdata = processCommands($actions, $key, $cdata);
					}
				}
				$data .= $cdata;
			}
		}

		include_once($_SERVER['DOCUMENT_ROOT'].'/.re/fi.php');
		fiH($path,0);
		echo $data;
		// echo file_get_contents($path);
	} else {
		exit;
	}

}

// $_REQUEST['fi']


name: index-bk.php
path: D:\websites\domains\a.sds.sh\public_html\index-bk.php
mime: unavailable
content:
<?php
// get: r del line load id class sub
//   []: || = &
//   <>: | = &
//other: * = &
//  all:  ~ = ,  
// line:  - = blank line  
// load:  sds-listeners*r=a~b = .js&r=a,b 

$config = [];
$config['[&]']='||';
$config['{&}']='|';
$config['&']='*';
$config[',']='~';
$config['blank']='-';
$config['#']='@';

// not deleted: inc
// max url length: 2,048 characters
// ($_GET)-> [](){}<>!*;@-/,-_.~|=
// https://a.sds.sh/?f=js/sds/framework.js&load=sds-listeners*r=a~b
// https://a.sds.sh/?f=js/sds/framework.js&exec=[r=1,include:cookies.js,2,include:c/c/basic.js||x={r=3650~//9d53,4000~}][r=2,include:c/c/basic.js]
// https://a.sds.sh/?f=js/sds/q/post.js&dup=2,____a&r=____a1,first,____b1,$('@first').val(),____a2,last,____b2,$('@last').val(),____c,console.log(data);
//////////////////////////////////////////////////////////////////////////////////////////
function extractCommands($string) {
	return preg_match_all('/\[(.*?)\]/', $string, $matches) ? $matches[1] : [];
}
function virtualGetCommand($input) {
	global $config;
	$parts = explode($config['[&]'], $input);
	$resultArray = [];

	foreach ($parts as $part) {
		list($key, $value) = explode('=', $part, 2);
		if (str_starts_with($value, '{')) {
			$value = buildSubCommands($value);
		}
		$resultArray[$key] = $value;
	}

	return $resultArray;
}
function buildCommands($inputString) {
	$commands = extractCommands($inputString);

	foreach ($commands as $command) {
		$commandArray = virtualGetCommand($command);
		return $commandArray;
	}
}
function extractSubCommands($string) {
    preg_match_all('/\{(.*?)\}/', $string, $matches);
    return $matches[1];
}
function virtualGetSubCommand($input) {
	global $config;
	$parts = explode($config['{&}'], $input);
	$resultArray = [];

	foreach ($parts as $part) {
		list($key, $value) = explode('=', $part, 2);
		$resultArray[$key] = $value;
	}

	return $resultArray;
}
function buildSubCommands($inputString) {
	$subCommands = extractSubCommands($inputString);

	foreach ($subCommands as $subCommand) {
		$subCommandArray = virtualGetSubCommand($subCommand);
		return $subCommandArray;
	}
}



// [load=sds-imgText||r=one,two,three,four||del=test||exec-1=(file=script.js|r=one,two)]
 //////////////////////////////////////////////////////////////////////////////////////////








// function processIncludes($path,$data) {
// function processIncludes($data,$path='./assets/js/sds/framework.js') {
function processIncludes($data) {
	// exit($path);
	$path = './assets/js/sds/framework.js';
	$lines = explode("\n", $data);
	$processedContent = '';

	foreach ($lines as $line) {
		if (preg_match('/^include:\s*(.*)$/i', $line, $matches)) {

			// Extract the relative path from the line
			$relativePath = trim($matches[1]);
			$processedContent .= "\n\n// (include)=> $relativePath\n\n";
			// Remove the filename from the path to get the base directory
			$baseDirectory = dirname($path);

			// Count the number of "../" to determine how many directories to go up
			$numUpDirectories = substr_count($relativePath, '../');

			// Remove "../" from the path
			$relativePath = str_replace('../', '', $relativePath);

			// Calculate the new base path by going up directories as needed
			$newBasePath = $baseDirectory;
			for ($i = 0; $i < $numUpDirectories; $i++) {
				$newBasePath = dirname($newBasePath);
			}

			// Combine the new base path with the relative path
			$newPath = rtrim($newBasePath, '/') . '/' . $relativePath;

			if (file_exists($newPath)) {
				if (strpos($newPath, 'public_html') !== false) {exit('Hack Detected');}
				if (strpos($newPath, '.php') !== false) {exit('Hack Detected');}
				// Recursively process the included file
				$fileContents = file_get_contents($newPath);
				$processedContent .= processIncludes($fileContents);
			} else {
				echo "File not found: " . $newPath;
			}
		} else {
			// Append non-include lines directly to the processed content
			$processedContent .= $line . "\n";
		}
	}

	return $processedContent;
}




function removeLinesContainingStrings($text, $stringList) {
	// Split the text into an array of lines
	$lines = explode("\n", $text);
	
	// Filter the lines, removing any that contain a string from the list
	$filteredLines = array_filter($lines, function($line) use ($stringList) {
		// Check each string in the list
		foreach ($stringList as $string) {
			if (strpos($line, $string) !== false) {
				// If the line contains the string, exclude it
				return false;
			}
		}
		// Include the line if it does not contain any of the strings
		return true;
	});
	
	// Reconstruct the text from the filtered lines and return it
	return implode("\n", $filteredLines);
}

function isFolder($path) {
	if (isset($_REQUEST['is'])) {
		if (strpos($_REQUEST['is'], 'j') !== false) {$path.='index.js';}
		if (strpos($_REQUEST['is'], 'p') !== false) {$path.='index.php';}
		if (strpos($_REQUEST['is'], 'c') !== false) {$path.='index.css';}
		if (strpos($_REQUEST['is'], 'h') !== false) {$path.='index.htm';}
		return $path;
	} else {
		foreach (['index.js', 'index.htm','index.htm', 'index.php', 'index.html', 'index.css', 'script.js', 'module.js'] as $file) {
			if (file_exists($path . $file)) {
				$path .= $file;
				return $path;
				break;
			}
		}
		if (!isset($file) || !file_exists($path)) {
			exit;
			exit('No valid path found.');
		}
	}
}

function _dup($arr, $data) {
    $duplicationInstructions = explode(',', $arr['dup']);
    $lines = explode("\n", $data);
    $resultLines = [];

    // Iterate through duplication instructions
    for ($i = 0; $i < count($duplicationInstructions); $i += 2) {
        $numDuplicates = (int)$duplicationInstructions[$i];
        $pattern = $duplicationInstructions[$i + 1];

        // Process each line
        foreach ($lines as $index => $line) {
            if (strpos($line, $pattern) !== false) {
                // Duplicate and modify the line
                for ($j = 1; $j <= $numDuplicates; $j++) {
                    // Using regular expression to find and replace the pattern
                    $modifiedLine = preg_replace_callback(
                        '/____[a-z]/',
                        function($matches) use ($j) {
                            return $matches[0] . $j;
                        },
                        $line
                    );
                    $resultLines[] = $modifiedLine;
                }
                continue; // Skip adding the original line
            }
            $resultLines[] = $line; // Add non-matching lines as is
        }

        // Update lines for the next iteration
        $lines = $resultLines;
        $resultLines = [];
    }

    // Return the modified string
    return implode("\n", $lines);
}







function _replace($arr,$data) {
	global $config;
	$replace = $arr['r'];
	$replace = str_replace('\\n', "\n", $replace);
	$replace = str_replace('%2C', ',', $replace);
	

	// Split the replace string into an array
	$replace_pairs = explode(',', $replace);

	// Check if the array has an even number of elements
	if (count($replace_pairs) % 2 !== 0) {
		throw new Exception("Invalid replace pairs");
	}

	// Perform the replacements
	for ($i = 0; $i < count($replace_pairs); $i += 2) {
		$search = $replace_pairs[$i];
		$replace = $replace_pairs[$i + 1];
		if (strpos($replace, $config[',']) !== false) { $has=1; }
		$search = str_replace($config[','], ',', $search);
		$replace = str_replace($config[','], ',', $replace);
		$search = str_replace($config['#'], '#', $search);
		$replace = str_replace($config['#'], '#', $replace);
		// if (isset($has)) exit($data);
		if ($search === '1') {
			$data = "$replace\n".$data;
			$data = processIncludes($data);
			continue;
		}
		if ($search === '2') {
			$data = $data."\n$replace";
			$data = processIncludes($data);
			continue;
		}
		$data = str_replace($search, $replace, $data);
		// echo $search.' - ' . $replace;exit;
	}

	return $data;
}

function _id_class($arr,$data) {

	if (isset($arr['id'])) {
		$rep = explode(',', $arr['id']);
		$data = str_replace("#$rep[0]", "#$rep[1]" , $data);
		$data = str_replace("'$rep[0]'", "'$rep[1]'", $data);
		$data = str_replace('"'.$rep[0].'"', '"' . $rep[1] . '"', $data);
	}
	if (isset($arr['class'])) {
		$rep = explode(',', $arr['class']);
		$data = str_replace("'#$rep[0]'", "'.$rep[1]'", $data);
		$data = str_replace("getElementById('$rep[0]')", "querySelectorAll('$rep[1]')[0]", $data);
		$data = str_replace('getElementById("'.$rep[0].'")', 'querySelectorAll(".'.$rep[1].'")[0]', $data);
		$data = str_replace("getElementById( '$rep[0]' )", "querySelectorAll('.".$rep[1]."')[0]", $data);
		$data = str_replace('getElementById( "'.$rep[0].'" )', 'querySelectorAll(".'.$rep[1].'")[0]', $data);
		$data = str_replace("'$rep[0]'", "'" . $rep[1] . "'", $data);
		$data = str_replace('"'.$rep[0].'"', '"' . $rep[1] . '"', $data);

	}
	return $data;
}

function _del($arr,$data) {
	$data = removeLinesContainingStrings($data, explode(',', $arr['del']) );
	return $data;
}
function _line($arr,$data) {
	global $config;
	$replace = $arr['line'] ?? $arr['l'] ?? null;
	$replace = str_replace('\\n', "\n", $replace);
	$replace = str_replace('%2C', ',', $replace);
	

	// Split the replace string into an array
	$replace_pairs = explode(',', $replace);

	// Check if the array has an even number of elements
	if (count($replace_pairs) % 2 !== 0) {
		throw new Exception("Invalid replace pairs");
	}

	// Perform the replacements
	for ($i = 0; $i < count($replace_pairs); $i += 2) {
		$search = $replace_pairs[$i];
		$replace = $replace_pairs[$i + 1];
		if ($search === '1') {
			$data = "$replace\n".$data;
			continue;
		}
		if ($search === '2') {
			$data = $data."\n$replace";
			continue;
		}

		$lines = explode("\n", $data);

		foreach ($lines as &$line) {
			if (strpos($line, $search) !== false) {
				// Check and capture the leading whitespace
				if (preg_match('/^(\s*)/', $line, $matches)) {
					$leadingWhitespace = $matches[1];
				} else {
					$leadingWhitespace = '';
				}
				$replace = str_replace("\n", "\n".$leadingWhitespace, $replace);
				if ($replace === $config['blank']) {
					$line = '';
				} else {
					$line = $leadingWhitespace . $replace;
				}
			}
		}

		$data = implode("\n", $lines);
	}
	return $data;
}
function _load($arr, $data) {
	global $config;
	$data .= "\n\n// (include)=> load.js\n\n";
	$data .= file_get_contents('assets/js/sds/load.js');
	
	include_once($_SERVER['DOCUMENT_ROOT'].'/.re/yaml.php');
	$resources = yf(file_get_contents('assets/js/sds/c/l/resources.yml'));
	// var_dump($resources);
	$load = $arr['load'];
	$load = str_replace('%2C', ',', $load);
	$loadList = explode(',', $load);
	$build = false;
	if (count($loadList) ) {
		$build = true;
		if (count($loadList) === 1 && $loadList[0] === '1') {
			$build = false;
		}

	}
	if ($build) {
		$add = "\n\n// (queue)=> push\n\n";
		$add .= "_.load.queue.push([\n";
		$template = '        "c1c5-ce020329",'."\n";
		foreach ($loadList as $lo) {
			$rep = '';
			if (strpos($lo, $config['&']) !== false) {
				$parts = explode($config['&'], $lo,2);
				$lo = $parts[0];
				$rep = '&'.str_replace($config['&'], '&', $parts[1]);
				$rep = str_replace($config[','], ',', $rep);
			}
			if (isset($resources[$lo])) {
				$js = str_replace('c1c5', $resources[$lo], $template);
				$js = str_replace('-ce020329', $rep, $js);
				$add .= $js; // Fixed: Add the modified $js string to $add
			}
		}
		$add .= "]);\n\n";
		$data .= $add; // Ensure that $data is defined earlier in your script
	}

	return $data;
}


if (isset($_REQUEST['fi'])) {
	$_REQUEST['f'] = $_REQUEST['fi'];
}
if (isset($_REQUEST['f'])) {
	$fi=$_REQUEST['f'];
	$fileParts = explode('.', $fi);
	if (count($fileParts) > 1) {
		$ext = strtolower(end($fileParts));
	} else {
		$path=trim('./assets/'.$fi);
		if (str_ends_with($path, '/')) {
			$skip=true;
			$path=isFolder($path);
			// exit($path);
		} else {
			exit;
		}
	}
	if (!isset($skip)) {
		$pathA = "./assets/$ext/" . $_REQUEST['f'];
		$pathB = "./assets/" . $_REQUEST['f'];
		$pathA = str_replace('/'.'/', "/", $pathA);
		$pathB = str_replace('/'.'/', "/", $pathB);
		// echo $pathA."  <br/>\n";
		// echo $pathB."  <br/>\n";
		if (file_exists($pathA)) {
			$path = $pathA;
		} else if (file_exists($pathB)) {
			$path = $pathB;
		} else {
			exit;
		}
	}


	if (file_exists($path)) {

		if (substr($path, -4) === '.php') { include_once($path); exit; }

		$data = file_get_contents($path);


		if (isset($_REQUEST['dup'])) {
			$data = _dup($_REQUEST,$data);
		}

		if (isset($_REQUEST['r'])) {
			$data = _replace($_REQUEST,$data);
		}
		if (isset($_REQUEST['isid'])) {
			$data = _id_class($_REQUEST,$data);
		}
		if (isset($_REQUEST['del'])) {
			$data = _del($_REQUEST,$data);
		}
		if (str_ends_with($path, '.js') && strpos($path, '/sds/') !== false) {
			$data = processIncludes($data);
		}
		if (isset($_REQUEST['line']) || isset($_REQUEST['l'])) {
			$data = _line($_REQUEST,$data);
		}
		if (isset($_REQUEST['load'])) {
			$data = _load($_REQUEST,$data);
		}

function processCommands($arr, $key, $data) {
	if ($key === 'r' || $key === 'replace') {
		$data = _replace($arr,$data);
		$data = processIncludes($data);
	}
	
	if ($key === 'dup') {
		$data = _dup($arr,$data);
	}
	if ($key === 'inc') {
		$data = processIncludes($data);
	}
	if ($key === 'isid') {
		$data = _id_class($arr,$data);
	}
	if ($key === 'del') {
		$data = _del($arr,$data);
	}
	if ($key === 'line') {
		$data = _line($arr,$data);
	}
	if ($key === 'load') {
		$data = _load($arr,$data);
	}
	return $data;
}


		if (isset($_REQUEST['exec'])) {
			$commands = extractCommands($_REQUEST['exec']);
			foreach ($commands as $command) {
				$cdata = '';
				$actions = virtualGetCommand($command);
				foreach ($actions as $key => $value) {
					if (is_array($value)) {
						foreach ($value as $subKey => $subValue) {
							$cdata = processCommands($value, $subKey, $cdata);
						}
					} else {
						$cdata = processCommands($actions, $key, $cdata);
					}
				}
				$data .= $cdata;
			}
		}

		include_once($_SERVER['DOCUMENT_ROOT'].'/.re/fi.php');
		fiH($path,0);
		echo $data;
		// echo file_get_contents($path);
	} else {
		exit;
	}

}


name: check.php
path: D:\websites\domains\a.sds.sh\public_html\s\check.php
mime: unavailable
content:
<?php
$fo = './s/';
if (isset($_REQUEST['s'])) {
    $_REQUEST['s'] = trim($_REQUEST['s']);
    $_REQUEST['s'] = str_replace('\\', '/', $_REQUEST['s']);
    $_REQUEST['s'] = trim($_REQUEST['s'], '../');
    $_REQUEST['s'] = trim($_REQUEST['s'], '/');
    while (strpos($_REQUEST['s'], '//') !== false) {
        $_REQUEST['s'] = str_replace('//', '/', $_REQUEST['s']);
    }
    $fi = $_REQUEST['s'];
    if (file_exists($fo . $fi)) {
        $data = file_get_contents($fo . $fi);
        if (strpos($fi, '.') !== false) {
            include_once($_SERVER['DOCUMENT_ROOT'].'/.re/fi.php');
            fiH($fi,0);
        } else {
            header('Content-Type: text/plain');
        }
        echo $data;
        exit;
    }
}


name: save.php
path: D:\websites\domains\a.sds.sh\public_html\s\save.php
mime: unavailable
content:
<?php
if (isset($_REQUEST['save'])) {
    $_REQUEST['save'] = trim($_REQUEST['save']);
    $_REQUEST['save'] = str_replace('\\', '/', $_REQUEST['save']);
    $_REQUEST['save'] = trim($_REQUEST['save'], '../');
    $_REQUEST['save'] = trim($_REQUEST['save'], '/');
    while (strpos($_REQUEST['save'], '//') !== false) {
        $_REQUEST['save'] = str_replace('//', '/', $_REQUEST['save']);
    }
    $filePath = './s/' . $_REQUEST['save'];


    // Create the directory structure if it does not exist
    $directory = dirname($filePath);
    if (!is_dir($directory)) {
        mkdir($directory, 0777, true);
    }

    // Save the data to the specified file path
    file_put_contents($filePath, $data);
    header('Content-Type: text/html');
    echo 'saved:<br/>';
    echo 'https://a.sds.sh/?s='.$_REQUEST['save'].'<br/>';
    echo 'https://a.sds.sh/s/'.$_REQUEST['save'].'<br/>';
    exit;
}


name: .folder.meta
path: D:\websites\domains\ai.sds.sh\public_html\.folder.meta
mime: unavailable
content:
url: https://ai.sds.sh
sftp:
  server: sullust.m-eta.app
  user: softwaredev
  password: LgVCeImnVnh+Vux/ffWv/8KrtrsmidicrB/nweMJ+9E=
  path: /home/softwaredev/public_html/ai.sds.sh/public_html


name: .htaccess
path: D:\websites\domains\ai.sds.sh\public_html\.htaccess
mime: unavailable
content:
<IfModule mime_module>
	AddHandler application/x-httpd-ea-php80 .php .php8 .phtml .srv.js .php.js
</IfModule>
#Rewrite everything to https
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

<IfModule mod_headers.c>
	SetEnvIf Origin "^http(s)?://(.+\.)?(efm\.cx|git.rightthumb\.com|h.sds\.sh|gatekeeper.thumb\.cx|apps.ai.softwaredevelopment\.solutions|ephemeral.softwaredevelopment\.solutions|git.etc\.ac|sms.softwaredevelopment\.solutions|t.sds\.sh|assets.softwaredevelopment\.solutions|fo.etc\.ac|eyeformeta\.com|js.etc\.ac|ai.sds\.sh|notify.sds\.sh|biblicalheart\.com|mostardently.relationshipideas\.xyz|relationshipideas\.xyz|bible.biblicalheart\.com|local.sds\.sh|wallet.eyeformeta\.com|sds\.sh|php.sds\.sh|assets.eyeformeta\.com|login.softwaredevelopment\.solutions|secure.softwaredevelopment\.solutions|ai.softwaredevelopment\.solutions|apps.eyeformeta\.com|icosahedron\.quest|sms.sds\.sh|softwaredevelopment\.solutions|a.sds\.sh|luke.theprogramming\.guru|l.sds\.sh|luketheawesomeone\.com|chrome.sds\.sh|chrome.softwaredevelopment\.solutions|terminal.softwaredevelopment\.solutions|ronanwins\.com|bot.eyeformeta\.com|config.softwaredevelopment\.solutions|pof.eyeformeta\.com|rightthumb\.com|orchards.softwaredevelopment\.solutions|xan\.guru|thumb\.cx|keychain.softwaredevelopment\.solutions|s.etc\.ac|ext.eyeformeta\.com|load.eyeformeta\.com|react.etc\.ac|s.sds\.sh|keys.sds\.sh|apps.ai.sds\.sh|etc\.ac|fw.eyeformeta\.com|hoth.eyeformeta\.com|emloisevil\.com|billing.softwaredevelopment\.solutions|o.sds\.sh|d100.icosahedron\.quest|a.etc\.ac|scott.theprogramming\.guru|heimdall.softwaredevelopment\.solutions|meta.eyeformeta\.com|c.sds\.sh)$" origin_is=$0
	Header always set Access-Control-Allow-Origin %{origin_is}e env=origin_is
</IfModule>


name: .htaccess.site
path: D:\websites\domains\ai.sds.sh\public_html\.htaccess.site
mime: unavailable
content:
efm.cx
git.rightthumb.com
h.sds.sh
gatekeeper.thumb.cx
apps.ai.softwaredevelopment.solutions
ephemeral.softwaredevelopment.solutions
git.etc.ac
sms.softwaredevelopment.solutions
t.sds.sh
assets.softwaredevelopment.solutions
fo.etc.ac
eyeformeta.com
js.etc.ac
ai.sds.sh
notify.sds.sh
biblicalheart.com
mostardently.relationshipideas.xyz
relationshipideas.xyz
bible.biblicalheart.com
local.sds.sh
wallet.eyeformeta.com
sds.sh
php.sds.sh
assets.eyeformeta.com
login.softwaredevelopment.solutions
secure.softwaredevelopment.solutions
ai.softwaredevelopment.solutions
apps.eyeformeta.com
icosahedron.quest
sms.sds.sh
softwaredevelopment.solutions
a.sds.sh
luke.theprogramming.guru
l.sds.sh
luketheawesomeone.com
chrome.sds.sh
chrome.softwaredevelopment.solutions
terminal.softwaredevelopment.solutions
ronanwins.com
bot.eyeformeta.com
config.softwaredevelopment.solutions
pof.eyeformeta.com
rightthumb.com
orchards.softwaredevelopment.solutions
xan.guru
thumb.cx
keychain.softwaredevelopment.solutions
s.etc.ac
ext.eyeformeta.com
load.eyeformeta.com
react.etc.ac
s.sds.sh
keys.sds.sh
apps.ai.sds.sh
etc.ac
fw.eyeformeta.com
hoth.eyeformeta.com
emloisevil.com
billing.softwaredevelopment.solutions
o.sds.sh
d100.icosahedron.quest
a.etc.ac
scott.theprogramming.guru
heimdall.softwaredevelopment.solutions
meta.eyeformeta.com
c.sds.sh


name: biblicalheart.prompt
path: D:\websites\domains\ai.sds.sh\public_html\4\biblicalheart.prompt
mime: unavailable
content:
Craft a detailed and engaging Biblical blog post on the topic of [topic]. Follow these guidelines:
- Base the content heavily on scripture.
- Use HTML formatting compatible with WordPress.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
<p>[Introductory Content]</p>
Continue with verse breakdowns:
<ol>
<li><p><strong>[Verse Topic]</strong> (verse)</p>
<ul><li>[Deep analysis and reflection on the verse]</li></ul></li>
... [Continue for at least four verses]
</ol>
Conclude with a reflection or practical application:
<p>[Concluding insights]</p>


name: index.php
path: D:\websites\domains\ai.sds.sh\public_html\4\index.php
mime: unavailable
content:
<?php
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
// https://chat.openai.com/c/04a28b02-9c12-4980-91a3-b13808e7e2f5
require_once 'guzzle/vendor/autoload.php';
require_once 'tectalic/vendor/autoload.php';
// require_once 'Tectalic/OpenAi/Manager.php';
function chatGPTRequest($prompt) {
    $apiKey = file_get_contents('https://keys.sds.sh/?id=gpt');
    $openaiClient = \Tectalic\OpenAi\Manager::build(
        new \GuzzleHttp\Client(),
        new \Tectalic\OpenAi\Authentication($apiKey)
    );

    /** @var \Tectalic\OpenAi\Models\ChatCompletions\CreateResponse $response */
    $response = $openaiClient->chatCompletions()->create(
        new \Tectalic\OpenAi\Models\ChatCompletions\CreateRequest([
            'model' => 'gpt-4',
            'messages' => [
                [
                    'role' => 'user',
                    'content' => $prompt
                ],
            ],
        ])
    )->toModel();

    return $response->choices[0]->message->content;
}
$prompt = $_REQUEST['prompt'] ?? $_REQUEST['prompt2'] ?? $_REQUEST['p'] ?? $_REQUEST['ask'] ?? $_REQUEST['ai'] ?? null;
$view = $_REQUEST['view'] ?? $_REQUEST['v'] ?? null;

if (isset($_REQUEST['biblicalheart'])) {
    $harcoded='?biblicalheart=1';
} else {
    $harcoded='';    
}
if ($prompt) {

    if (isset($_REQUEST['biblicalheart'])) {
        $biblicalheartPrompt = file_get_contents('../biblicalheart.prompt');
        $biblicalheartPrompt = str_replace('[topic]', $prompt, $biblicalheartPrompt);
        file_put_contents('prompts-'.time().'.log', $biblicalheartPrompt);
        file_put_contents('prompts-last.log', $biblicalheartPrompt);
        // exit($biblicalheartPrompt);
        $answer = chatGPTRequest($biblicalheartPrompt);
        echo "<div id=\"preview\">$answer</div>";
        file_put_contents('article.htm', $answer);
    } else {
        // exit('err');
        $answer = chatGPTRequest($prompt);
    }

	
	$subject = 'AI';
	$code = '
<form action="./'.$harcoded.'" method="post" id="gpt">
	<!-- <label for="prompt">Request:</label> -->
	<textarea id="prompt" name="prompt" oninput="autoGrow(this)">'.$prompt."\n\n\n".$answer.'</textarea>
    <!-- <button type="submit">Submit</button> -->
    <!-- send(that) -->
    <button onclick="send(this);">Submit</button>
</form>
<form action="./'.$harcoded.'" method="post" id="gpt">
    <textarea style="display: none !important;" id="prompt2" name="prompt2">'.$prompt.'</textarea>
    <button onclick="send(this);">Submit last request again for different results</button>
    
    <!-- <button type="submit">Submit last request again for different results</button> -->
</form>
	';
} else {
	$subject = 'AI';
	$code = '
<form action="./'.$harcoded.'" method="post" id="gpt">
	<!-- <label for="prompt">Request:</label> -->
	<textarea id="prompt" name="prompt" oninput="autoGrow(this)"></textarea>
	<button onclick="send(this);">Submit</button>
</form>

	';

}
if ( isset($answer) && $view ) {
	echo $answer;
	exit;
}
?><!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>AI 4</title>
    <style>
        :root {
            --bg-color: #282c34;
            --text-color: #e5e5e5;
            --form-bg-color: #3a3f4b;
            --form-text-color: #ffffff;
            --form-border-color: #505660;
            --btn-bg-color: #4a90e2;
            --btn-text-color: #ffffff;
            --btn-hover-color: #357ABD;
        }

        body {
            font-family: Arial, sans-serif;
            background-color: var(--bg-color);
            color: var(--text-color);
            margin: 0;
            min-height: 100vh;
            display: flex;
            flex-direction: column;
            align-items: center;
            padding: 20px;
        }

        #subject {
            margin-top: 20px;
            font-size: xx-large;
        }

        #content {
            background-color: var(--form-bg-color);
            padding: 20px;
            border-radius: 10px;
            width: 90%;
            margin-top: 20px;
        }
        #preview {
            text-align: left;
            width: 80%;
        }

        label,
        input,
        textarea,
        button {
            width: 100%;
            box-sizing: border-box;
            margin-bottom: 15px;
        }

        textarea {
            overflow: hidden;
            resize: none;
            min-height: 60vh;
        }

        label {
            display: block;
            margin-bottom: 5px;
        }

        input,
        textarea {
            background-color: var(--bg-color);
            border: 1px solid var(--form-border-color);
            border-radius: 5px;
            padding: 10px;
            color: var(--form-text-color);
            outline: none;
            transition: border-color 0.3s;
        }

        input:focus,
        textarea:focus {
            border-color: var(--btn-bg-color);
        }

        button {
            background-color: var(--btn-bg-color);
            color: var(--btn-text-color);
            border: none;
            border-radius: 5px;
            padding: 10px;
            cursor: pointer;
            transition: background-color 0.3s;
        }

        button:hover {
            background-color: var(--btn-hover-color);
        }
        #gears {
            position: fixed;
            top: 50%;
            left: 50%;
            max-width: 90vw;   /* Use 90% of the viewport width */
            max-height: 90vh;  /* Use 90% of the viewport height */
            transform: translate(-50%, -50%);
            z-index: 9999;
            width: auto;       /* Maintain aspect ratio when scaling */
            height: auto;      /* Maintain aspect ratio when scaling */
        }

    </style>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>

<body>
    <div id="gears" style="display:none;">
        <center>
            <p id="message">thinking...</p>
            <img src="../gears.gif"style="width:25%; height:25%;" />
        </center>
    </div>
    <div id="subject"><?= $subject ?></div>

    <div id="content">
    	<?= $code ?>
    </div>
<script type="text/javascript">
  function send(that){
    $('#gears').css('display','block');
    that.submit();
  };
</script>
  <script>
    function autoGrow(textarea) {
      textarea.style.height = 'auto';
      textarea.style.height = textarea.scrollHeight + 'px';
    }
    document.addEventListener('DOMContentLoaded', function() {
        // Call autoGrow after the DOM has fully loaded
        var textarea = document.getElementById('prompt');
        autoGrow(textarea);
    });
  </script>
</body>

</html>


name: index.php
path: D:\websites\domains\ai.sds.sh\public_html\ai\index.php
mime: unavailable
content:
<?php
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
include_once(explode('public_html', __DIR__)[0].'resources/ai.php');
if (isset($_REQUEST['prompt'])) {
	$prompt=$_REQUEST['prompt'];
	if (isset($_REQUEST['gpt'])) {$gpt=$_REQUEST['gpt'];}
	if (isset($_REQUEST['tokens'])) {$tokens=intval($_REQUEST['tokens']);}
	if (isset($_REQUEST['t'])) {$tokens=intval($_REQUEST['t']);}
	if (isset($tokens)) {$gpt='3';}

	if (isset($gpt) && $gpt==='3' && !isset($tokens)) {$tokens=1024;} 
	if (isset($gpt) && isset($tokens) && $gpt=='3') {
		echo GPT3($prompt,$tokens);
	} else {
		echo GPT4($prompt);
	} 
}


name: index-before-accordion-removal.php
path: D:\websites\domains\ai.sds.sh\public_html\index-before-accordion-removal.php
mime: unavailable
content:
<?php
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
include_once(explode('public_html', __DIR__)[0].'resources/apps.php');
eval(file_get_contents('https://php.sds.sh/ck'));
$cookie=c();
sdsApp('accordion');
$menuCode = new GenHTML();
$menuCode->accordion('AI Settings','menu.yml');


function getFullURL() {
    $protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') ? "https" : "http";
    $domainName = $_SERVER['HTTP_HOST'];
    $path = $_SERVER['REQUEST_URI'];
    return $protocol . "://" . $domainName . $path;
}
function getGet() {
    $url=getFullURL();
    $parsed_url = parse_url($url);
    if (isset($parsed_url['query'])) {
        return '?' . $parsed_url['query'];
    }
    return '';
}
function getArr() {
    $params = array();
    foreach ($_GET as $key => $value) {
        $params[$key] = $value;
    }
    return $params;
}
function getFirst() {
    return !empty($_GET) ? key($_GET) : null;
}
// var_dump(getFirst()); exit;


// echo $menuCode->html('AI Settings')->style;
// exit;
// https://chat.openai.com/c/04a28b02-9c12-4980-91a3-b13808e7e2f5
require_once '4/guzzle/vendor/autoload.php';
require_once '4/tectalic/vendor/autoload.php';
// require_once 'Tectalic/OpenAi/Manager.php';
function chatGPT3Request($prompt,$tokens=2048) {

    $apiKey = file_get_contents('https://keys.sds.sh/?id=gpt');
    // GPT3
    $url = 'https://api.openai.com/v1/engines/text-davinci-002/completions';
    // GPT4
    // $url = 'https://api.openai.com/v1/engines/gpt-4/completions';
    $headers = [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ];
    // $body = json_encode([
    //     'prompt' => $prompt,
    //     'max_tokens' => 150,
    //     'n' => 1,
    //     'stop' => null,
    //     'temperature' => 0.7
    // ]);
	$body = json_encode([
	    'prompt' => $prompt,
	    'max_tokens' => $tokens,
	    'n' => 1,
	    'stop' => null,
	    'temperature' => 0.7,
	    'top_p' => 1.0,
	    'frequency_penalty' => 0,
	    'presence_penalty' => 0,
	    'best_of' => 1,
	    'logit_bias' => [
	        '50256' => -100
	    ]
	]);

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($curl);
    if ($response === false) {
        $error = curl_error($curl);
        curl_close($curl);
        return "cURL error occurred: " . $error;
    }
    $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    if ($httpCode >= 400) {
        $error = "HTTP error occurred: " . $httpCode . " - " . $response;
        curl_close($curl);
        return $error;
    }
    curl_close($curl);
    $result = json_decode($response, true);
    return $result['choices'][0]['text'];
}
function chatGPT4Request($prompt) {
	$apiKey = file_get_contents('https://keys.sds.sh/?id=gpt');
	$openaiClient = \Tectalic\OpenAi\Manager::build(
		new \GuzzleHttp\Client(),
		new \Tectalic\OpenAi\Authentication($apiKey)
	);

	/** @var \Tectalic\OpenAi\Models\ChatCompletions\CreateResponse $response */
	$response = $openaiClient->chatCompletions()->create(
		new \Tectalic\OpenAi\Models\ChatCompletions\CreateRequest([
			'model' => 'gpt-4',
			'messages' => [
				[
					'role' => 'user',
					'content' => $prompt
				],
			],
		])
	)->toModel();

	return $response->choices[0]->message->content;
}
$prompt = $_REQUEST['prompt'] ?? $_REQUEST['prompt2'] ?? $_REQUEST['p'] ?? $_REQUEST['ask'] ?? $_REQUEST['ai'] ?? null;
$view = $_REQUEST['view'] ?? $_REQUEST['v'] ?? null;
$ai_settings = $_COOKIE['ai_settings'] ?? 'fast';

if (isset($_REQUEST['biblicalheart'])) {
	$harcoded='?biblicalheart='.$_REQUEST['biblicalheart'];
	$pageTitle='AI Bible Study '.$_REQUEST['biblicalheart'];
} else {
	$harcoded=getGet();
	$pageTitle='AI';
}

function chatGPT($prompt) {
	$cookie=c();
	// best better good fast
	// var_dump($_REQUEST); exit;
	if ($_REQUEST['aisettings'] === 'best') {
		$cookie->set('ai','gpt4','1y');
		$answer = chatGPT4Request($prompt);
	} else if ($_REQUEST['aisettings'] === 'better') {
		$cookie->set('ai','gpt3-2048','1y');
		$answer = chatGPT3Request($prompt,2048);
	} else if ($_REQUEST['aisettings'] === 'good') {
		$cookie->set('ai','gpt3-1024','1y');
		$answer = chatGPT3Request($prompt,1024);
	} else if ($_REQUEST['aisettings'] === 'fast') {
		$cookie->set('ai','gpt3-150','1y');
		$answer = chatGPT3Request($prompt,150);
	} else {
		$cookie->set('ai','gpt3-1024','1y');
		$cookie->set('ai_settings','Good','1y');
		$answer = chatGPT3Request($prompt,1024);
	}
	return $answer;
}

if ($prompt) {
	if (getFirst()) {
		// exit( 'prompt.'.getFirst().'.'.$_REQUEST[getFirst()] );
		$biblicalheartPrompt = file_get_contents(  'prompt.'.getFirst().'.'.$_REQUEST[getFirst()]  );
		$biblicalheartPrompt = str_replace('[topic]', $prompt, $biblicalheartPrompt);
		// file_put_contents('prompts-'.time().'.log', $biblicalheartPrompt);
		// file_put_contents('prompts-last.log', $biblicalheartPrompt);
		// exit($biblicalheartPrompt);

		$promptText=$biblicalheartPrompt;
		$answer = chatGPT($promptText);
		if ($_REQUEST[getFirst()] === 'htm') {
			echo "<div id=\"preview\">$answer</div>";
		}
		// file_put_contents('article.htm', $answer);
	} else {
		// exit('err');
		$answer = chatGPT($prompt);
		$promptText=$prompt;
	}
	if (isset($_SERVER['REMOTE_ADDR'])){
	    $ip=$_SERVER['REMOTE_ADDR']."\n";
	} else {
	    $ip="";
	}
	file_put_contents('./results/'.time(),$ip.$promptText."\n\n\n\n".$answer);


	$prompt=trim($prompt);
	$answer=trim($answer);
	$subject = 'AI';
	$code = '
<form action="./'.$harcoded.'" method="post" id="gpt">
	<!-- <label for="prompt">Request:</label> -->
	<textarea id="prompt" name="prompt" oninput="autoGrow(this)">'.$prompt."\n\n\n".$answer.'</textarea>
	<!-- <button type="submit">Submit</button> -->
	<!-- send(that) -->
	<input type="hidden" class="aisettings" name="aisettings" value="">
	'.$menuCode->html('AI Settings')->html.'
	<button onclick="send(this);">Submit</button>
</form>
<form action="./'.$harcoded.'" method="post" id="gpt">
	<textarea style="display: none !important;" id="prompt2" name="prompt2">'.$prompt.'</textarea>
	<button onclick="send(this);">Submit last request again for different results</button>
	<input type="hidden" class="aisettings" name="aisettings" value="">
	<!-- <button type="submit">Submit last request again for different results</button> -->
</form>
	';
} else {
	$subject = 'AI';
	$code = '
<form action="./'.$harcoded.'" method="post" id="gpt">
	<!-- <label for="prompt">Request:</label> -->
	<textarea id="prompt" name="prompt" oninput="autoGrow(this)"></textarea>
	'.$menuCode->html('AI Settings')->html.'
	<button onclick="send(this);">Submit</button>
	<input type="hidden" class="aisettings" name="aisettings" value="">
</form>

	';

}
if ( isset($answer) && $view ) {
	echo $answer;
	exit;
}
?><!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title><?= $pageTitle ?></title>

    <!-- Favicons -->
    <link href="https://softwaredevelopment.solutions/logo/logo-48.png" rel="icon">
    <link href="https://softwaredevelopment.solutions/logo/logo-48.png" rel="apple-touch-icon">


	<style>
		:root {
			--bg-color: #282c34;
			--text-color: #e5e5e5;
			--form-bg-color: #3a3f4b;
			--form-text-color: #ffffff;
			--form-border-color: #505660;
			--btn-bg-color: #4a90e2;
			--btn-text-color: #ffffff;
			--btn-hover-color: #357ABD;
		}

		body {
			font-family: Arial, sans-serif;
			background-color: var(--bg-color);
			color: var(--text-color);
			margin: 0;
			min-height: 100vh;
			display: flex;
			flex-direction: column;
			align-items: center;
			padding: 20px;
		}

		#subject {
			margin-top: 20px;
			font-size: xx-large;
		}

		#content {
			background-color: var(--form-bg-color);
			padding: 20px;
			border-radius: 10px;
			width: 90%;
			margin-top: 20px;
		}
		#preview {
			text-align: left;
			width: 80%;
		}

		label,
		input,
		textarea,
		button {
			width: 100%;
			box-sizing: border-box;
			margin-bottom: 15px;
		}

		textarea {
			overflow: hidden;
			resize: none;
			min-height: 60vh;
		}

		label {
			display: block;
			margin-bottom: 5px;
		}

		input,
		textarea {
			background-color: var(--bg-color);
			border: 1px solid var(--form-border-color);
			border-radius: 5px;
			padding: 10px;
			color: var(--form-text-color);
			outline: none;
			transition: border-color 0.3s;
		}

		input:focus,
		textarea:focus {
			border-color: var(--btn-bg-color);
		}

		button {
			background-color: var(--btn-bg-color);
			color: var(--btn-text-color);
			border: none;
			border-radius: 5px;
			padding: 10px;
			cursor: pointer;
			transition: background-color 0.3s;
		}

		button:hover {
			background-color: var(--btn-hover-color);
		}
		#gears {
			position: fixed;
			top: 50%;
			left: 50%;
			max-width: 90vw;   /* Use 90% of the viewport width */
			max-height: 90vh;  /* Use 90% of the viewport height */
			transform: translate(-50%, -50%);
			z-index: 9999;
			width: auto;       /* Maintain aspect ratio when scaling */
			height: auto;      /* Maintain aspect ratio when scaling */
		}

	</style>
	<style type="text/css">
		<?= $menuCode->html('AI Settings')->style; ?>
	</style>

    <style type="text/css">
        .container {
            height: 400px;
            width: 400px;
            position: relative;
            border: none;
        }

        .sun {
            width: 100px;
            height: 100px;
            background-color: yellow;
            border-radius: 50%;
            box-shadow: 0px 0px 10px white;
            position: absolute;
            top: 150px;
            left: 150px;
            border: none;
        }

        .globe.earth {
            background: aqua;
            height: 30px;
            width: 30px;
            position: absolute;
            right: 28px;
            top: 28px;
            border-radius: 50%;
            border: none;
        }

        .globe.moon {
            width: 12px;
            height: 12px;
            background-color: #d6d6d6;
            position: absolute;
            right: 2px;
            top: 8px;
            border-radius: 50%;
            border: none;
        }

        .orbit.earth {
            position: relative;
            animation: orbit-earth 36.5s linear infinite;
            height: 300px;
            width: 300px;
            top: 50px;
            left: 50px;
            border-radius: 50%;
            border: none;
        }

        .orbit.moon {
            animation: orbit-moon 2.7s linear infinite;
            height: 80px;
            width: 80px;
            position: absolute;
            top: -25px;
            left: -25px;
            border: none;
        }

        .orbit {
            border: 1px solid white;
            border-radius: 50%;
            box-sizing: border-box;
        }

        @keyframes orbit-earth {
            to {
                transform: rotate(360deg);
            }
        }

        @keyframes orbit-moon {
            to {
                transform: rotate(360deg);
            }
        }
    </style>
    <style type="text/css">
		#gears-bk {
			background-color: var(--bg-color);
			background: var(--bg-color);
			height: 100%;
			width: 100%;
			position: fixed;
		}
    </style>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
	<script src="https://a.sds.sh/?v=1.0&f=js/jquery.cookie.js"></script>
</head>

<body>
	<div id="gears-bk" style="display:none;">
		<div id="gears" style="display:none;">
			<center>
				<p id="message">thinking...</p>
				<img src="gears.gif"style="width:25%; height:25%;" />
				<div class="container">
					<div class="sun"></div>
					<div class="orbit earth">
						<div class="globe earth">
							<div class="orbit moon">
								<div class="globe moon"></div>
							</div>
						</div>
					</div>
				</div>
			</center>
		</div>
	</div>
	<div id="subject"><?= $subject ?></div>

	<div id="content">
		<?= $code ?>
	</div>
<script type="text/javascript">
	function send(that){
	$('#gears-bk').css('display','block');
	$('#gears').css('display','block');
	that.submit();
	};
</script>
	<script>
	function autoGrow(textarea) {
		textarea.style.height = 'auto';
		textarea.style.height = textarea.scrollHeight + 'px';
	}
	document.addEventListener('DOMContentLoaded', function() {
		// Call autoGrow after the DOM has fully loaded
		var textarea = document.getElementById('prompt');
		autoGrow(textarea);
	});
	</script>
	<script type="text/javascript">
		<?= $menuCode->html('AI Settings')->js; ?>
	</script>
</body>

</html>


name: index.php
path: D:\websites\domains\ai.sds.sh\public_html\index.php
mime: unavailable
content:
<?php
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
include_once(explode('public_html', __DIR__)[0].'resources/apps.php');
eval(file_get_contents('https://php.sds.sh/ck'));
$cookie=c();
sdsApp('accordion');


function getFullURL() {
    $protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') ? "https" : "http";
    $domainName = $_SERVER['HTTP_HOST'];
    $path = $_SERVER['REQUEST_URI'];
    return $protocol . "://" . $domainName . $path;
}
function getGet() {
    $url=getFullURL();
    $parsed_url = parse_url($url);
    if (isset($parsed_url['query'])) {
        return '?' . $parsed_url['query'];
    }
    return '';
}
function getArr() {
    $params = array();
    foreach ($_GET as $key => $value) {
        $params[$key] = $value;
    }
    return $params;
}
function getFirst() {
    return !empty($_GET) ? key($_GET) : null;
}
// var_dump(getFirst()); exit;


// exit;
// https://chat.openai.com/c/04a28b02-9c12-4980-91a3-b13808e7e2f5
require_once '4/guzzle/vendor/autoload.php';
require_once '4/tectalic/vendor/autoload.php';
// require_once 'Tectalic/OpenAi/Manager.php';
function chatGPT3Request($prompt,$tokens=2048) {

    $apiKey = file_get_contents('https://keys.sds.sh/?id=gpt');
    // GPT3
    $url = 'https://api.openai.com/v1/engines/text-davinci-002/completions';
    // GPT4
    // $url = 'https://api.openai.com/v1/engines/gpt-4/completions';
    $headers = [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ];
    // $body = json_encode([
    //     'prompt' => $prompt,
    //     'max_tokens' => 150,
    //     'n' => 1,
    //     'stop' => null,
    //     'temperature' => 0.7
    // ]);
	$body = json_encode([
	    'prompt' => $prompt,
	    'max_tokens' => $tokens,
	    'n' => 1,
	    'stop' => null,
	    'temperature' => 0.7,
	    'top_p' => 1.0,
	    'frequency_penalty' => 0,
	    'presence_penalty' => 0,
	    'best_of' => 1,
	    'logit_bias' => [
	        '50256' => -100
	    ]
	]);

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($curl);
    if ($response === false) {
        $error = curl_error($curl);
        curl_close($curl);
        return "cURL error occurred: " . $error;
    }
    $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    if ($httpCode >= 400) {
        $error = "HTTP error occurred: " . $httpCode . " - " . $response;
        curl_close($curl);
        return $error;
    }
    curl_close($curl);
    $result = json_decode($response, true);
    return $result['choices'][0]['text'];
}
function chatGPT4Request($prompt) {
	$apiKey = file_get_contents('https://keys.sds.sh/?id=gpt');
	$openaiClient = \Tectalic\OpenAi\Manager::build(
		new \GuzzleHttp\Client(),
		new \Tectalic\OpenAi\Authentication($apiKey)
	);

	/** @var \Tectalic\OpenAi\Models\ChatCompletions\CreateResponse $response */
	$response = $openaiClient->chatCompletions()->create(
		new \Tectalic\OpenAi\Models\ChatCompletions\CreateRequest([
			'model' => 'gpt-4',
			'messages' => [
				[
					'role' => 'user',
					'content' => $prompt
				],
			],
		])
	)->toModel();

	return $response->choices[0]->message->content;
}
$prompt = $_REQUEST['prompt'] ?? $_REQUEST['prompt2'] ?? $_REQUEST['p'] ?? $_REQUEST['ask'] ?? $_REQUEST['ai'] ?? null;
$view = $_REQUEST['view'] ?? $_REQUEST['v'] ?? null;
$ai_settings = $_COOKIE['ai_settings'] ?? 'fast';

if (isset($_REQUEST['biblicalheart'])) {
	$harcoded='?biblicalheart='.$_REQUEST['biblicalheart'];
	$pageTitle='AI Bible Study '.$_REQUEST['biblicalheart'];
} else {
	$harcoded=getGet();
	$pageTitle='AI';
}

function chatGPT($prompt) {
	$cookie=c();
	// best better good fast
	// var_dump($_REQUEST); exit;

	$cookie->set('ai','gpt4','1y');
	return chatGPT4Request($prompt);
	if ($_REQUEST['aisettings'] === 'best') {
		$cookie->set('ai','gpt4','1y');
		$answer = chatGPT4Request($prompt);
	} else if ($_REQUEST['aisettings'] === 'better') {
		$cookie->set('ai','gpt3-2048','1y');
		$answer = chatGPT3Request($prompt,2048);
	} else if ($_REQUEST['aisettings'] === 'good') {
		$cookie->set('ai','gpt3-1024','1y');
		$answer = chatGPT3Request($prompt,1024);
	} else if ($_REQUEST['aisettings'] === 'fast') {
		$cookie->set('ai','gpt3-150','1y');
		$answer = chatGPT3Request($prompt,150);
	} else {
		$cookie->set('ai','gpt3-1024','1y');
		$cookie->set('ai_settings','Good','1y');
		$answer = chatGPT3Request($prompt,1024);
	}
	return $answer;
}

if ($prompt) {
	if (getFirst()) {
		// exit( 'prompt.'.getFirst().'.'.$_REQUEST[getFirst()] );
		$biblicalheartPrompt = file_get_contents(  'prompt.'.getFirst().'.'.$_REQUEST[getFirst()]  );
		$biblicalheartPrompt = str_replace('[topic]', $prompt, $biblicalheartPrompt);
		// file_put_contents('prompts-'.time().'.log', $biblicalheartPrompt);
		// file_put_contents('prompts-last.log', $biblicalheartPrompt);
		// exit($biblicalheartPrompt);

		$promptText=$biblicalheartPrompt;
		$answer = chatGPT($promptText);
		if ($_REQUEST[getFirst()] === 'htm') {
			echo "<div id=\"preview\">$answer</div>";
		}
		// file_put_contents('article.htm', $answer);
	} else {
		// exit('err');
		$answer = chatGPT($prompt);
		$promptText=$prompt;
	}
	if (isset($_SERVER['REMOTE_ADDR'])){
	    $ip=$_SERVER['REMOTE_ADDR']."\n";
	} else {
	    $ip="";
	}
	file_put_contents('./results/'.time(),$ip.$promptText."\n\n\n\n".$answer);


	$prompt=trim($prompt);
	$answer=trim($answer);
	$subject = 'AI';
	$code = '
<form action="./'.$harcoded.'" method="post" id="gpt">
	<!-- <label for="prompt">Request:</label> -->
	<textarea id="prompt" name="prompt" oninput="autoGrow(this)">'.$prompt."\n\n\n".$answer.'</textarea>
	<!-- <button type="submit">Submit</button> -->
	<!-- send(that) -->
	<input type="hidden" class="aisettings" name="aisettings" value="">
	<button onclick="send(this);">Submit</button>
</form>
<form action="./'.$harcoded.'" method="post" id="gpt">
	<textarea style="display: none !important;" id="prompt2" name="prompt2">'.$prompt.'</textarea>
	<button onclick="send(this);">Submit last request again for different results</button>
	<input type="hidden" class="aisettings" name="aisettings" value="">
	<!-- <button type="submit">Submit last request again for different results</button> -->
</form>
	';
} else {
	$subject = 'AI';
	$code = '
<form action="./'.$harcoded.'" method="post" id="gpt">
	<!-- <label for="prompt">Request:</label> -->
	<textarea id="prompt" name="prompt" oninput="autoGrow(this)"></textarea>
	<button onclick="send(this);">Submit</button>
	<input type="hidden" class="aisettings" name="aisettings" value="">
</form>

	';

}
if ( isset($answer) && $view ) {
	echo $answer;
	exit;
}
?><!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title><?= $pageTitle ?></title>

    <!-- Favicons -->
    <link href="https://softwaredevelopment.solutions/logo/logo-48.png" rel="icon">
    <link href="https://softwaredevelopment.solutions/logo/logo-48.png" rel="apple-touch-icon">


	<style>
		:root {
			--bg-color: #282c34;
			--text-color: #e5e5e5;
			--form-bg-color: #3a3f4b;
			--form-text-color: #ffffff;
			--form-border-color: #505660;
			--btn-bg-color: #4a90e2;
			--btn-text-color: #ffffff;
			--btn-hover-color: #357ABD;
		}

		body {
			font-family: Arial, sans-serif;
			background-color: var(--bg-color);
			color: var(--text-color);
			margin: 0;
			min-height: 100vh;
			display: flex;
			flex-direction: column;
			align-items: center;
			padding: 20px;
		}

		#subject {
			margin-top: 20px;
			font-size: xx-large;
		}

		#content {
			background-color: var(--form-bg-color);
			padding: 20px;
			border-radius: 10px;
			width: 90%;
			margin-top: 20px;
		}
		#preview {
			text-align: left;
			width: 80%;
		}

		label,
		input,
		textarea,
		button {
			width: 100%;
			box-sizing: border-box;
			margin-bottom: 15px;
		}

		textarea {
			overflow: hidden;
			resize: none;
			min-height: 60vh;
		}

		label {
			display: block;
			margin-bottom: 5px;
		}

		input,
		textarea {
			background-color: var(--bg-color);
			border: 1px solid var(--form-border-color);
			border-radius: 5px;
			padding: 10px;
			color: var(--form-text-color);
			outline: none;
			transition: border-color 0.3s;
		}

		input:focus,
		textarea:focus {
			border-color: var(--btn-bg-color);
		}

		button {
			background-color: var(--btn-bg-color);
			color: var(--btn-text-color);
			border: none;
			border-radius: 5px;
			padding: 10px;
			cursor: pointer;
			transition: background-color 0.3s;
		}

		button:hover {
			background-color: var(--btn-hover-color);
		}
		#gears {
			position: fixed;
			top: 50%;
			left: 50%;
			max-width: 90vw;   /* Use 90% of the viewport width */
			max-height: 90vh;  /* Use 90% of the viewport height */
			transform: translate(-50%, -50%);
			z-index: 9999;
			width: auto;       /* Maintain aspect ratio when scaling */
			height: auto;      /* Maintain aspect ratio when scaling */
		}

	</style>
	<style type="text/css">
	</style>

    <style type="text/css">
        .container {
            height: 400px;
            width: 400px;
            position: relative;
            border: none;
        }

        .sun {
            width: 100px;
            height: 100px;
            background-color: yellow;
            border-radius: 50%;
            box-shadow: 0px 0px 10px white;
            position: absolute;
            top: 150px;
            left: 150px;
            border: none;
        }

        .globe.earth {
            background: aqua;
            height: 30px;
            width: 30px;
            position: absolute;
            right: 28px;
            top: 28px;
            border-radius: 50%;
            border: none;
        }

        .globe.moon {
            width: 12px;
            height: 12px;
            background-color: #d6d6d6;
            position: absolute;
            right: 2px;
            top: 8px;
            border-radius: 50%;
            border: none;
        }

        .orbit.earth {
            position: relative;
            animation: orbit-earth 36.5s linear infinite;
            height: 300px;
            width: 300px;
            top: 50px;
            left: 50px;
            border-radius: 50%;
            border: none;
        }

        .orbit.moon {
            animation: orbit-moon 2.7s linear infinite;
            height: 80px;
            width: 80px;
            position: absolute;
            top: -25px;
            left: -25px;
            border: none;
        }

        .orbit {
            border: 1px solid white;
            border-radius: 50%;
            box-sizing: border-box;
        }

        @keyframes orbit-earth {
            to {
                transform: rotate(360deg);
            }
        }

        @keyframes orbit-moon {
            to {
                transform: rotate(360deg);
            }
        }
    </style>
    <style type="text/css">
		#gears-bk {
			background-color: var(--bg-color);
			background: var(--bg-color);
			height: 100%;
			width: 100%;
			position: fixed;
		}
    </style>
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
	<script src="https://a.sds.sh/?v=1.0&f=js/jquery.cookie.js"></script>
</head>

<body>
	<div id="gears-bk" style="display:none;">
		<div id="gears" style="display:none;">
			<center>
				<p id="message">thinking...</p>
				<img src="gears.gif"style="width:25%; height:25%;" />
				<div class="container">
					<div class="sun"></div>
					<div class="orbit earth">
						<div class="globe earth">
							<div class="orbit moon">
								<div class="globe moon"></div>
							</div>
						</div>
					</div>
				</div>
			</center>
		</div>
	</div>
	<div id="subject"><?= $subject ?></div>

	<div id="content">
		<?= $code ?>
	</div>
<script type="text/javascript">
	function send(that){
	$('#gears-bk').css('display','block');
	$('#gears').css('display','block');
	that.submit();
	};
</script>
	<script>
	function autoGrow(textarea) {
		textarea.style.height = 'auto';
		textarea.style.height = textarea.scrollHeight + 'px';
	}
	document.addEventListener('DOMContentLoaded', function() {
		// Call autoGrow after the DOM has fully loaded
		var textarea = document.getElementById('prompt');
		autoGrow(textarea);
	});
	</script>
	<script type="text/javascript">
	</script>
</body>

</html>


name: menu.yml
path: D:\websites\domains\ai.sds.sh\public_html\menu.yml
mime: unavailable
content:
label: 'AI Settings'
id: 'ai_settings'
items:
  Best: '$(''.aisettings'').val(''best'');'
  Better: '$(''.aisettings'').val(''better'');'
  Good: '$(''.aisettings'').val(''good'');'
  Fast: '$(''.aisettings'').val(''fast'');'


name: prompt.biblicalheart.md
path: D:\websites\domains\ai.sds.sh\public_html\prompt.biblicalheart.md
mime: unavailable
content:
Craft a detailed and engaging Biblical blog post on the topic of [topic]. Follow these guidelines:
- Base the content heavily on scripture.
- Use markdown formatting compatible with WordPress.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
# [Title]
[Introductory Content]
Continue with verse breakdowns:

1. [Verse Topic](verse)
    - [Deep analysis and reflection on the verse]
        - [Continue for at least four verses]

Conclude with a reflection or practical application:
[Concluding insights]


name: first
path: D:\websites\domains\ai.sds.sh\public_html\query\first
mime: unavailable
content:
This app will list all the files in the current folder.

import os

for filename in os.listdir():
    print(filename)

This app will recursively list all the files in the current folder and its subfolders.

import os

for dirname, dirnames, filenames in os.walk('.'):
    # print path to all subdirectories first.
    for subdirname in dirnames:
        print(os.path.join(dirname, subdirname))

    # print path to all filenames.
    for filename in filenames:
        print(os.path.join(dirname, filename))

    # Advanced usage:
    # editing the 'dirnames' list will stop os.walk() from recursing into there.
    if '.git' in dirnames:
        # don't go into any .git directories.
        dirnames.remove('.git')

This app will list all the files in the current folder, sorted by modification time.

import os

for filename in sorted(os.listdir(), key=os.path.getmtime):
    print(filename)

This app will list all the files in the current folder, sorted by file size.

import os

for filename in sorted(os.listdir(), key=os.path.getsize):
    print(filename)

This app will list all the files in the current folder, sorted alphabetically.

import os

for filename in sorted(os.listdir()):
    print(filename)

This app will list all the files in the current folder, sorted by extension.

import os

for filename in sorted(os.listdir(), key=lambda x: x.lower()):
    if filename.endswith('.py'):
        print(filename)

This app will list all the files in the current folder, sorted by file size, in reverse order.

import os

for filename in sorted(os.listdir(), key=os.path.getsize, reverse=True):
    print(filename)

This app will list all the files in the current folder, sorted alphabetically, in reverse order.

import os

for filename in sorted(os.listdir(), reverse=True):
    print(filename)

This app will list all the files in the current folder, sorted by modification time, in reverse order.

import os

for filename in sorted(os.listdir(), key=os.path.getmtime, reverse=True):
    print(filename)

This app will list all the files in the current folder, sorted by extension, in reverse order.

import os

for filename in sorted(os.listdir(), key=lambda x: x.lower(), reverse=True):
    if filename.endswith('.py'):
        print(filename)

This app will list all the .py files in the current folder, sorted by modification time.

import os

for filename in sorted(os.listdir(), key=os.path.getmtime):
    if filename.endswith('.py'):
        print(filename)

This app will list all the .py files in the current folder, sorted by file size.

import os

for filename in sorted(os.listdir(), key=os.path.getsize):
    if filename.endswith('.py'):
        print(filename)

This app will list all the .py files in the current folder, sorted alphabetically.

import os

for filename in sorted(os.listdir()):
    if filename.endswith('.py'):
        print(filename)

This app will list all the .py files in the current folder, sorted by extension.

import os

for filename in sorted(os.listdir(), key=lambda x: x.lower()):
    if filename.endswith('.py'):
        print(filename)

This app will list all the .py files in the current folder, sorted by file size, in reverse order.

import os

for filename in sorted(os.listdir(), key=os.path.getsize, reverse=True):
    if filename.endswith('.py'):
        print(filename)

This app will list all the .py files in the current folder, sorted alphabetically, in reverse order.

import os

for filename in sorted(os.listdir(), reverse=True):


name: index.php
path: D:\websites\domains\ai.sds.sh\public_html\query\index.php
mime: unavailable
content:
<?php
eval(file_get_contents('https://heimdall.softwaredevelopment.solutions/1/HeimdallClientAPI.php?H=1&t='.file_get_contents('https://keys.sds.sh/?id=sds-api')));
if(class_exists('HeimdallClientAPI',true)){$heimdall=new HeimdallClientAPI($_SERVER['SCRIPT_URI'],array('813-690-1260'=>['admin']),file_get_contents('https://keys.sds.sh/?id=sds-api'));}else{echo'api key revoked';exit;}
?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html lang="en">

<head>
    <title>AI Results</title>
    <meta charset="utf-8">
    <style type="text/css">
li {
  margin-bottom: 10px; /* Adjust the value as needed */
}

    </style>
    <link href="https://softwaredevelopment.solutions/logo/logo-48.png" rel="icon">
    <link href="https://softwaredevelopment.solutions/logo/logo-48.png" rel="apple-touch-icon">
</head>

<body>
<?php
$directory = "./"; // Replace with the correct directory path

// Check if a file is selected
if (isset($_GET['file'])) {
    header('Content-Type: text/html');
    $selectedFile = $_GET['file'];

    // Validate the file name
    if (strpos($selectedFile, '.') === false && file_exists($directory . '/' . $selectedFile)) {
        


    // $parts = explode("\n\n\n", $content, 2);
    // $parts = explode("\n\n\n", str_replace("\r", "", $content), 2);

$content = file_get_contents($directory . '/' . $selectedFile);
$normalizedContent = str_replace("\r", "", $content);
$lastPos = strrpos($normalizedContent, "\n\n\n");
if ($lastPos !== false) {
    $parts = [substr($normalizedContent, 0, $lastPos), substr($normalizedContent, $lastPos + 3)];
} else {
    $parts = [$normalizedContent];
}



    if (strpos($content, '<p>') !== false) {
        

        if (count($parts) == 2) {
            if (isset($_GET['raw'])) {
                echo "<pre>" . htmlspecialchars($parts[1]) . "</pre>";
            } else {
                $doc=htmlspecialchars($parts[0]);
                echo '<div style="font-size: xx-small;">'.str_replace("\n", "<br/>", $doc).'</div>';
                echo '<hr/>';
                // echo "<pre>" . htmlspecialchars($parts[0]) . "</pre>";
                echo $parts[1];
            }
        } else {
            echo $content;
        }
    } else {
        if (count($parts) == 2) {

            $doc=htmlspecialchars($parts[0]);
            echo '<div style="font-size: xx-small;">'.str_replace("\n", "<br/>", $doc).'</div>';
            echo '<hr/>';
            // echo "<pre>" . htmlspecialchars($parts[0]) . "</pre>";
            $doc=htmlspecialchars(trim($parts[1]));
            echo str_replace("\n", "<br/>", $doc);
            // echo $parts[1]; // Assuming this part is safe HTML
        } else {
            $doc=htmlspecialchars(trim($content));
            echo str_replace("\n", "<br/>", $doc);
            // echo $content;
        }
        // $doc=htmlspecialchars($content);
        // echo str_replace("\n", "<br/>", $doc);
        // echo "<pre>" . $doc . "</pre>";
    }

    } else {
        echo "Invalid file selected.";
    }

    return;
}

// Read files from directory
$files = scandir($directory);

// Check if $files is an array before sorting
if (is_array($files)) {
    sort($files);

echo "<ul>";
foreach ($files as $file) {
    // Skip '.' and '..' entries and files with a dot in their names
    if ($file === '.' || $file === '..' || strpos($file, '.') !== false) continue;

    // Create a link for each file
    $date = date("Y-m-d H:i:s", $file);

$content = file_get_contents($directory . '/' . $file);
$normalizedContent = str_replace("\r", "", $content);
$lines=explode("\n", $normalizedContent);
$subject=$lines[1];
$remove_1='Craft a detailed and engaging Biblical blog post on the topic of ';
$remove_2='. Follow these guidelines:';
if (strpos($content, '<p>') !== false) {
    $isHTML='-';
} else {
    $isHTML='';
}
$subject=str_replace($remove_1, 'BH -'.$isHTML.' ', $subject);
$subject=str_replace($remove_2, "", $subject);
$subject=trim($subject);

    // Create a link for each file
if ($subject) {
    if ($isHTML) {
        echo "<li><a href='?file=" . urlencode($file) . "'>" . htmlspecialchars($file) . " - " . $date . "</a><br/><a href='?file=" . urlencode($file) . "&raw=1'>"."((".$subject."))"."</a><br/></li>";
    } else {
        echo "<li><a href='?file=" . urlencode($file) . "'>" . htmlspecialchars($file) . " - " . $date . "  <br/>(".$subject.")</a><br/></li>";
    }
}
    // echo "<li><a href='" . htmlspecialchars($directory . '/' . $file) . "'>" . htmlspecialchars($file) . " - " . $date . "</a></li>";

    // echo "<li><a href='?file=" . urlencode($file) . "'>" . htmlspecialchars($file) . "</a></li>";
}
echo "</ul>";
} else {
    echo "Unable to read directory.";
}
?>
</body>

</html>


name: query.php
path: D:\websites\domains\ai.sds.sh\public_html\query.php
mime: unavailable
content:
<?php
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
require_once '4/guzzle/vendor/autoload.php';
require_once '4/tectalic/vendor/autoload.php';
// require_once 'Tectalic/OpenAi/Manager.php';
function chatGPT3Request($prompt,$tokens=2048) {

    $apiKey = file_get_contents('https://keys.sds.sh/?id=gpt');
    // GPT3
    $url = 'https://api.openai.com/v1/engines/text-davinci-002/completions';
    // GPT4
    // $url = 'https://api.openai.com/v1/engines/gpt-4/completions';
    $headers = [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ];
    // $body = json_encode([
    //     'prompt' => $prompt,
    //     'max_tokens' => 150,
    //     'n' => 1,
    //     'stop' => null,
    //     'temperature' => 0.7
    // ]);
	$body = json_encode([
	    'prompt' => $prompt,
	    'max_tokens' => $tokens,
	    'n' => 1,
	    'stop' => null,
	    'temperature' => 0.7,
	    'top_p' => 1.0,
	    'frequency_penalty' => 0,
	    'presence_penalty' => 0,
	    'best_of' => 1,
	    'logit_bias' => [
	        '50256' => -100
	    ]
	]);

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($curl);
    if ($response === false) {
        $error = curl_error($curl);
        curl_close($curl);
        return "cURL error occurred: " . $error;
    }
    $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    if ($httpCode >= 400) {
        $error = "HTTP error occurred: " . $httpCode . " - " . $response;
        curl_close($curl);
        return $error;
    }
    curl_close($curl);
    $result = json_decode($response, true);
    return $result['choices'][0]['text'];
}
function chatGPT4Request($prompt) {
	$apiKey = file_get_contents('https://keys.sds.sh/?id=gpt');
	$openaiClient = \Tectalic\OpenAi\Manager::build(
		new \GuzzleHttp\Client(),
		new \Tectalic\OpenAi\Authentication($apiKey)
	);

	/** @var \Tectalic\OpenAi\Models\ChatCompletions\CreateResponse $response */
	$response = $openaiClient->chatCompletions()->create(
		new \Tectalic\OpenAi\Models\ChatCompletions\CreateRequest([
			'model' => 'gpt-4',
			'messages' => [
				[
					'role' => 'user',
					'content' => $prompt
				],
			],
		])
	)->toModel();

	return $response->choices[0]->message->content;
}
$prompt = $_REQUEST['prompt'] ?? $_REQUEST['prompt2'] ?? $_REQUEST['p'] ?? $_REQUEST['ask'] ?? $_REQUEST['ai'] ?? null;
$ai_settings = $_REQUEST['ai_settings'] ?? $_REQUEST['quality'] ?? $_REQUEST['q'] ?? $_REQUEST['settings'] ?? $_REQUEST['s'] ?? 'best';
$text = $_REQUEST['text'] ?? false;

function chatGPT($prompt,$ai_settings) {
	// best better good fast
	// var_dump($_REQUEST); exit;
	if ($ai_settings === 'best') {
		$answer = chatGPT4Request($prompt);
	} else if ($ai_settings === 'better') {
		$answer = chatGPT3Request($prompt,2048);
	} else if ($ai_settings === 'good') {
		$answer = chatGPT3Request($prompt,1024);
	} else if ($ai_settings === 'fast') {
		$answer = chatGPT3Request($prompt,150);
	} else {
		$answer = chatGPT3Request($prompt,1024);
	}
	return $answer;
}
// var_dump($text);

if ($prompt) {
	$directory = "./query";
	$fi = "$directory/".time();
	if (!file_exists($directory)) {
	    mkdir($directory, 0755, true);
	}
	if (isset($_SERVER['REMOTE_ADDR'])){
	    $ip=$_SERVER['REMOTE_ADDR']."\n";
	} else {
	    $ip="";
	}
	$answer=chatGPT($prompt,$ai_settings);
	file_put_contents($fi,$ip.$prompt."\n\n\n\n".$answer);
	if ($text) {
		echo $answer;
	} else {
		echo str_replace("\n", "<br/>", $answer);
	}
}
// best
// better
// good
// fast


name: 1696635569
path: D:\websites\domains\ai.sds.sh\public_html\results\1696635569
mime: unavailable
content:
47.198.22.190
Craft a detailed and engaging Biblical blog post on the topic of Verses on wealth 
. Follow these guidelines:
- Base the content heavily on scripture.
- Use text compatible.
- Do not use markdown formatting.
- Do not precede sections with [Title] or other instructions.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
[Title]
[Introductory Content]
Continue with verse breakdowns:

1. [Verse Topic](verse)
    - [Deep analysis and reflection on the verse]
        - [Continue for at least four verses]

Conclude with a reflection or practical application:
[Concluding insights]




Title: Bountiful Blessings: Unveiling Bible Verses on Wealth

One of the most captivating elements of the Bible is undoubtedly its timeless wisdom on matters that affect our day-to-day life. Whether it be about faith, love, peace, struggle, or wealth, there's a bounty of wisdom available for anyone hungry enough to seek them. In today's discussion, we will delve into the realm of wealth as depicted in Holy Scriptures. We'll seek to decode these biblical presses precisely to help us shape a healthy perspective of wealth in our lives.

1. Ecclesiastes 5:10 - "Whoever loves money never has enough; whoever loves wealth is never satisfied with their income. This too is vanity."

It's fascinating to kick off with one of the most profound verses on wealth in the Bible. Penned by Solomon, one of the wealthiest men of his time, the verse informs us about the deceitful nature of wealth. When we become infatuated with wealth, it becomes like a mirage, ever alluring but never satisfying. This verse advocates for a balance, reminding us not to place our ultimate happiness or satisfaction in material wealth, thus encouraging us to maintain a grounded perspective on wealth and its limitations.

2. 1 Timothy 6:10 - "For the love of money is a root of all kinds of evils. It is through this craving that some have wandered away from the faith and pierced themselves with many pangs."

Once again, we see a reflection depicting money as not the evil itself, but rather the love for it as the root of all kinds of evil. The Apostle Paul, in his letter to Timothy, pointed out how an inappropriate relationship with money can lead people astray, causing spiritual, emotional, and even physical suffering. It seems to establish the principle that what we do with our wealth is far more critical than merely having it. 

3. Proverbs 13:22 - "A good person leaves an inheritance for their children's children, but a sinner's wealth is stored up for the righteous."

Solomon, in this verse, introduces the concept of a generational blessing. It reveals the value of not just accumulating wealth for our own needs but considering the well-being of future generations. However, it isn't a mere encouragement for us to build an inheritance for our grandchildren but also an appeal for us to be 'good' - a character trait that encompasses wisdom, righteousness, and love.

4. Matthew 6:24 - "No one can serve two masters, for either he will hate the one and love the other, or he will be devoted to the one and despise the other. You cannot serve God and money."

Spoken by Jesus in his Sermon on the Mount, this piece of wisdom reminds us of an uncompromising choice we must make: God or money. Are we willing to let our pursuit of wealth take precedence over our relationship with God? Jesus challenges us here to reassess our priorities and make a conscious decision to serve God first.

The Bible's multifaceted approach to wealth provides a balanced and healthy perspective that we can apply in our lives today. It doesn't demonize wealth but encourages us to maintain a godly attitude toward it. Understanding that wealth isn't inherently evil and that the love of it is what often leads to trouble sets us on the right path.

Moreover, these verses remind us to trust God as our ultimate provider above and beyond our wealth. They prompt us to use wealth as a tool to bless others, not as a master that rules us. In essence, wealth should not be our end goal, but a resource from God to fulfill His purposes in our lives and the lives of others. Let's reflect on these truths and ensure our relationship with wealth aligns with biblical principles.


name: 1696692735
path: D:\websites\domains\ai.sds.sh\public_html\results\1696692735
mime: unavailable
content:
47.198.22.190
Make 2 php functions obe to add "// " to the front of every line and one to remove it



Sure, Here are the two functions:

```php
// function to add "// " to the front of every line
function addComment($text) {
    $lines = explode("\n", $text);
    $lines = array_map(function($line) { return '// ' . $line; }, $lines);
    return implode("\n", $lines);
}

// function to remove "// " from the front of every line
function removeComment($text) {
    $lines = explode("\n", $text);
    $lines = array_map(function($line) { return preg_replace('/^\/\/\s/', '', $line); }, $lines);
    return implode("\n", $lines);
}
```

The `addComment` function splits the given text into lines, prepends "// " to each line and then joins them back together.

The `removeComment` function does the opposite - it removes "// " from the start of each line. We use a regular expression to match "// " at the start of the line and replace it with nothing.


name: 1696742155
path: D:\websites\domains\ai.sds.sh\public_html\results\1696742155
mime: unavailable
content:
47.198.22.190
Craft a detailed and engaging Biblical blog post on the topic of How do I seek God?. Follow these guidelines:
- Base the content heavily on scripture.
- Use text compatible.
- Do not use markdown formatting.
- Do not precede sections with [Title] or other instructions.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
[Title]
[Introductory Content]
Continue with verse breakdowns:

1. [Verse Topic](verse)
    - [Deep analysis and reflection on the verse]
        - [Continue for at least four verses]

Conclude with a reflection or practical application:
[Concluding insights]




Lost and Searching: The Journey to Seeking God

Our hearts were created with an indescribable longing, an insatiable thirst for the divine. We try to quench that thirst with different things, but ultimately, God is the only one who can satiate that spiritual hunger within us. In those moments when we feel helpless, wandering aimlessly through the wilderness of life, comes the question: How can we indeed seek God?

Let's examine several Bible verses that suggest ways of how to seek God. Each one offers us a roadmap to the divineâ€”one that crosses through time, space, and our deepest heart's desires.

**Seek God Wholeheartedly:**
The first verse we dive into is Jeremiah 29:13 (NIV), "You will seek me and find me when you seek me with all your heart." This verse was given by Jeremiah to the people of Israel while they were in Babylon exiled, away from their homeland. God promises that if they seek Him wholeheartedly, they will find Him. This is a universal truth, as relevant and true today as it was then. Seeking God requires our whole hearts, leaving no room for half-heartedness. We are called upon to turn every leaf within us, ensuring no part of our lives remains hidden from our pursuit of God. 

**Live Righteously:** 
The next direction is from the Book of Psalms. Psalm 34:14 (NIV) tells us to "Turn from evil and do good; seek peace and pursue it." The Psalmist suggests our lifestyle directly impacts our capacity to seek God. It's not enough to shun evil; we must also actively perform acts of goodness. Further, we are prompted to seek peace. Here the peace implies tranquility within ourselves, harmony with others, and serenity with Godâ€”attainable only by authentic communion with the divine. 

**Through Scripture and Prayer:**
The wisdom of seeking God through scripture and prayer is reflected in Luke 11:10 (NIV), "For everyone who asks receives; the one who seeks finds; and to the one who knocks, the door will be opened." Historically, this verse was spoken by Jesus while teaching His disciples about prayer. The act of seeking here is warmly encouraged by God. Whenever we ask, seek, or knock through prayer, God promises He will respond. To seek God, we must plunge into the profound depths of scripture, praying for understanding and guidance.

**Through Worship and Obedience:**
Finally, 2 Chronicles 7:14 (NIV) exhorts us, "If my people, who are called by my name, will humble themselves and pray and seek my face and turn from their wicked ways, then I will hear from heaven, and I will forgive their sin and will heal their land." King Solomon, in the Old Testament, had just finished building and dedicating the temple when God gave him this command. Here, we learn that worship (seeking His face), obedience (turning from wicked ways), and prayer are essential elements to seek and connect with God. 

To conclude, how we seek God requires a heartfelt desire, righteous living, devouring the scripture, regular prayer, worship, and obedience to His word. This is not a solitary act. It is a journey, a process of transformation where we become more like Him as we learn to seek Him every day. And in our seeking, we have this confidence from Hebrews 11:6 (NIV), "And without faith it is impossible to please God, because anyone who comes to him must believe that he exists and that he rewards those who earnestly seek him." As we seek God, He rewards us with His presence, His love, and His unmatched peace.
The seeking itself becomes the reward, permitting us to live in the light of His love, casting out all darkness from our lives. As we continue this beautiful journey, may we always remember - seeking God isn't finding about Him; it's about knowing Him and forming an unbreakable bond with the Divine.


name: 1696743188
path: D:\websites\domains\ai.sds.sh\public_html\results\1696743188
mime: unavailable
content:
47.198.8.225
Create a Bible study plan to seek God



Week 1 - Creation and Original Sin
Day 1: Genesis 1-2 (Creation)
Day 2: Job 38-39 (God's Wisdom in Creation)
Day 3: Psalm 139 (God's Detail in Creation)
Day 4: Genesis 3 (Sin Enters the World)
Day 5: Romans 5:12-21 (The Impact of Original Sin)

Week 2 - God's Nature and Character
Day 1: Psalm 90 (God's Eternity)
Day 2: Exodus 34:5-7 (God's Justice and Mercy)
Day 3: Psalm 145 (God's Goodness and Love)
Day 4: 1 John 4:7-16 (God is Love)
Day 5: Job 42 (God's Sovereignty)

Week 3 - The Commandments 
Day 1: Exodus 20:1-17 (The Ten Commandments)
Day 2: Matthew 22:34-40 (The Greatest Commandments)
Day 3: 1 Corinthians 13 (Love as the Fulfillment of the Law)
Day 4: James 2:8-13 (Living out the Royal Law)
Day 5: Romans 13:8-14 (Love Meets every Requirement of God's Law)

Week 4 - Faith, Repentance, and Salvation
Day 1: Ephesians 2:1-10 (Salvation by Grace through Faith)
Day 2: Luke 15:11-32 (The Prodigal Son)
Day 3: Acts 2:37-47 (Repentance and Baptism)
Day 4: Romans 10:9-17 (Confession and Faith)
Day 5: John 3:1-21 (Being Born Again)

Week 5 - The Life of Jesus
Day 1: Luke 1-2 (Birth of Jesus)
Day 2: Mark 10:35-45 (Jesus as a Servant)
Day 3: Matthew 5-7 (Sermon on the Mount)
Day 4: John 11 (Jesus' Power over Death)
Day 5: Luke 23-24 (Crucifixion and Resurrection)

Week 6 - The Holy Spirit & Living a Godly Life
Day 1: Acts 1:1-11 (Promise of the Holy Spirit)
Day 2: Romans 8:1-17 (Life in the Spirit)
Day 3: Galatians 5:16-26 (Fruit of the Spirit)
Day 4: Colossians 3:1-17 (Setting our Minds on Things Above)
Day 5: James 1:1-27 (Facing Trials and Living out True Religion)

Week 7 - End times and Eternity
Day 1: Matthew 24 (Signs of the End Times)
Day 2: Revelation 20-21 (The Final Judgment and Heavenly City)
Day 3: 1 Thessalonians 4:13-18 (The Return of Christ)
Day 4: 2 Peter 3 (Waiting for and Hastening the Day of God)
Day 5: John 14:1-7 (Jesus is the Way, the Truth and the Life)
  
Take the weekends to review the key points and reflect on what you've learned during the week. Remember to pray before each study session and ask God to open your heart and mind to His Word.


name: 1696743193
path: D:\websites\domains\ai.sds.sh\public_html\results\1696743193
mime: unavailable
content:
47.198.8.225
Create a Bible study plan to seek God



Week 1: Introduction & Foundation
Day 1: Read Genesis 1-2, Understand the creation of the world 
Day 2: Read Genesis 3-4, Learn how sin entered the world
Day 3: Read Exodus 20, Understand God's laws 
Day 4: Read Job 1-2, Recognize faith in tribulations
Day 5: Read Psalms 23, Learn about God's protection
Day 6: Read Isaiah 40, Learn about God's power
Day 7: Reflection and review

Week 2: Introduction to the Life of Jesus
Day 8: Read Matthew 1-2, Jesus' birth
Day 9: Read Matthew 3-4, Jesus' temptation
Day 10: Read Mark 5, Jesus' miracles 
Day 11: Read Luke 15, Jesus' parables 
Day 12: Read John 1-2, Jesus as the Word
Day 13: Read John 14, Jesus as the Way, the Truth, and the Life
Day 14: Reflection and review

Week 3: Teaching and Ministry of Jesus
Day 15: Read Matthew 5-7, The Sermon on the Mount
Day 16: Read Mark 6, The miracles and teachings
Day 17: Read Luke 9, The Transfiguration
Day 18: Read John 13, Jesus Washes the Disciples' Feet
Day 19: Read Matthew 26, Last Supper and arrest
Day 20: Read John 17, Jesus' prayer for His disciples
Day 21: Reflection and review

Week 4: Death, Resurrection, and Ascension of Jesus
Day 22: Read Matthew 27, Crucifixion
Day 23: Read Mark 16, Resurrection
Day 24: Read Luke 24, Emmaus Road
Day 25: Read John 20, Doubting Thomas
Day 26: Read Acts 1, Ascension
Day 27: Read 1 Corinthians 15, Resurrection explained
Day 28: Reflection and review

Week 5: The Early Church and the Apostles
Day 29: Read Acts 2-3, Pentecost and healing
Day 30: Read 1 Corinthians 12, Spiritual gifts
Day 31: Read 2 Corinthians 4-5, Ministry of reconciliation
Day 32: Read Ephesians 2-3, Unity in Christ
Day 33: Read Philippians 2, Christ's example of humility
Day 34: Read Revelation 1-3, Letters to the churches
Day 35: Reflection and review

Commit to prayer each day before and after reading. Consider journaling your thoughts, inspirations, and any questions that may arise to discuss with a spiritual advisor or Bible study group.


name: 1696798536
path: D:\websites\domains\ai.sds.sh\public_html\results\1696798536
mime: unavailable
content:
174.218.242.100
Indoor outdoor treated fabric hiw to remove grease stains



Here's a step-by-step guide on how to remove grease stains from indoor outdoor treated fabric:

What you need:
1. A small bowl
2. Liquid dish soap
3. Water
4. A clean white cloth 
5. Absorbent towel or paper towels
6. Soft scrub brush or old toothbrush

Steps:
1. If the stain is fresh and still has grease on top of the fabric, use a paper towel or absorbent towel to blot away as much of the grease as possible without rubbing it in. Be careful not to spread the stain.
   
2. In a small bowl, combine a few drops of liquid dish soap and water. Stir until it is well mixed. Dish soap is designed to cut through grease and is safe for most fabrics.
   
3. Dampen the clean white cloth in the soapy water solution and lightly blot the grease stain.
   
4. After blotting, gently scrub the stain with the cloth, working from the outside of the stain towards the center to prevent spreading. If the stain is stubborn, you can use a soft brush or an old toothbrush to scrub.
   
5. Rinfer the cloth, wring it out, apply more soapy water and continue to gently scrub until the stain begins to fade. Remember to frequently rinse and change the soapy water solution if it gets too dirty.  
   
6. Once the stain is gone, blot the treated area with a dry white towel until itâ€™s as dry as possible.
   
7. Let the fabric air dry completely. If the stain is stubborn and still visible, repeat the process until it is completely removed.
   
Remember, test this method on an inconspicuous area first to ensure it does not cause any discoloration.


name: 1696799453
path: D:\websites\domains\ai.sds.sh\public_html\results\1696799453
mime: unavailable
content:
174.218.242.100
Craft a detailed and engaging Biblical blog post on the topic of How do I seek God. Follow these guidelines:
- Base the content heavily on scripture.
- Use text compatible.
- Do not use markdown formatting.
- Do not precede sections with [Title] or other instructions.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
[Title]
[Introductory Content]
Continue with verse breakdowns:

1. [Verse Topic](verse)
    - [Deep analysis and reflection on the verse]
        - [Continue for at least four verses]

Conclude with a reflection or practical application:
[Concluding insights]




Title: Seeking God: A Transformative Journey Towards Divine Connection 

Introduction

Seeking God is at the heart of the human yearning for purpose, love, and fulfillment. However, many of us struggle with how to go about it. Understanding the Bible's teachings is crucial for anyone who wishes to deepen their relationship with the Divine. Here's a look at four pivotal verses that provide invaluable guidance on seeking God. 

1. "You will seek me and find me when you seek me with all your heart." (Jeremiah 29:13)

In this cherished verse, God communicates through the prophet Jeremiah that true connection with the Divine is possible only when it is a heartfelt pursuit. The context of this verse comes at a time when the Israelites were in Babylonian exile, struggling to find their way back to God. It serves as a reminder that in the midst of our life's desolation and confusion, if we sincerely engross all our heart into seeking God, we will surely find him.

2. "Ask and it will be given to you; seek and you will find; knock and the door will be opened to you." (Matthew 7:7)

This verse from Jesus' Sermon on the Mount is often quoted, but to fully grasp its meaning, we must appreciate its depth. The act of asking, seeking, and knocking is not merely about physical actions but about developing spiritual humility and persistence. It's a call to longing, to passionate pursuit, reminding us never to lose heart in our quest for God's divine presence.

3. "But seek first his kingdom and his righteousness, and all these things will be given to you as well." (Matthew 6:33)

Jesus taught his disciples this as part of His teaching about worrying over earthly needs. It counsels believers to focus primarily on seeking God's kingdom and righteousness, rather than getting lost in worldly pursuits. Not only does it promise the fulfillment of earthly needs but it emphatically directs us towards making God and His righteousness our utmost desire.

4. "Whoever would draw near to God must believe that he exists and that he rewards those who seek him." (Hebrews 11:6)

This verse emphasizes faith's pivotal role. Without faith that God exists and responds to our seeking, any attempt to draw close to Him will be fruitless. The verse is part of a larger discourse on faith where the writer of Hebrews showcases the faith of various Bible characters who strongly believed in divine vision, even amidst adversity.

Concluding Insights

Seeking God isn't a one-off event; instead, it's a lifelong journey to pursue His presence, connect intimately with Him, and align our lives with His kingdom and righteousness. As we pursue this divine connection, let us be drawn in with complete faith and sincere hearts, knowing that we will find His doors open when we knock. As these verses remind us, our seeking will not be in vain â€“ God rewards the faithful seekers.


name: 1696823251
path: D:\websites\domains\ai.sds.sh\public_html\results\1696823251
mime: unavailable
content:
47.198.22.190
what is a lawyer 





A lawyer is someone who represents another person in a legal matter. Lawyers can represent clients in criminal and civil cases. They can also provide advice on legal matters to their clients. Lawyers must be licensed to practice law in the state where they work. 

There are many different types of lawyers, including personal injury lawyers, criminal defense lawyers, and corporate lawyers. Each type of lawyer has their own area of expertise. 

 Lawyers typically charge by the hour, although some may charge a flat fee. Some lawyers also work on a contingency basis, which means they only get paid if their client wins their case. 

If you have a legal problem, you should consult with a lawyer to see if they can help you.


name: 1696823429
path: D:\websites\domains\ai.sds.sh\public_html\results\1696823429
mime: unavailable
content:
47.198.22.190
prompt.



get_end_cursor_position())
                self.line_buffer = self.prompt.get_line_buffer()
                self.history.append(self.line_buffer)
                self.prompt.clear_line()
                self.prompt.write(self.prompt_text)
                self.prompt.write(self.line_buffer)
                self.prompt.write('\n')
            except EOFError:
                self.prompt.write('\n')
                self.prompt_text = ''
                self.line_buffer = ''
                break


def main():
    """
    Main function.


name: 1696823496
path: D:\websites\domains\ai.sds.sh\public_html\results\1696823496
mime: unavailable
content:
47.198.22.190




/*******************************************************************************
 * Copyright (c) 2005, 2007 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 
 *******************************************************************************/
package org.eclipse.dltk.internal.debug.ui.logicalstructures;

import org.eclipse.debug.core.model.IVariable;
import org.eclipse.dltk.debug.core.model.IScriptStackFrame


name: 1696823752
path: D:\websites\domains\ai.sds.sh\public_html\results\1696823752
mime: unavailable
content:
47.198.22.190
Craft a detailed and engaging Biblical blog post on the topic of love . Follow these guidelines:
- Base the content heavily on scripture.
- Use text compatible.
- Do not use markdown formatting.
- Do not precede sections with [Title] or other instructions.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
[Title]
[Introductory Content]
Continue with verse breakdowns:

1. [Verse Topic](verse)
    - [Deep analysis and reflection on the verse]
        - [Continue for at least four verses]

Conclude with a reflection or practical application:
[Concluding insights]





Love is one of the most talked about topics in the Bible. There are whole books dedicated to it, like 1 Corinthians 13. So what does the Bible have to say about love?

1. Love is patient and kind (1 Corinthians 13:4-5a)
    - Love is patient, meaning it is not easily angered. It is also kind, meaning it does not envy or boast. It is not rude or self-seeking.
        - This is a powerful definition of love. So often, we think of love as a feeling. But the Bible tells us that love is an action. It is something we do, not something we feel.
2. Love does not delight


name: 1696823824
path: D:\websites\domains\ai.sds.sh\public_html\results\1696823824
mime: unavailable
content:
47.198.22.190
Craft a detailed and engaging Biblical blog post on the topic of love . Follow these guidelines:
- Base the content heavily on scripture.
- Use text compatible.
- Do not use markdown formatting.
- Do not precede sections with [Title] or other instructions.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
[Title]
[Introductory Content]
Continue with verse breakdowns:

1. [Verse Topic](verse)
    - [Deep analysis and reflection on the verse]
        - [Continue for at least four verses]

Conclude with a reflection or practical application:
[Concluding insights]




Title: Unveiling Love: A Biblical Perspective

Introduction 

Love is a universal language that transcends cultural barriers and time. It is an emotion so profound and powerful that it has been the inspiration for countless poetry, songs, and stories. In the Bible, love stands at the very heart of God's nature and his relationship with humanity. But what exactly is love from a biblical standpoint? How does God express love to mankind? And how are we, as believers, commanded to love in return? Let's delve into Scripture to unearth these answers.

1. Love Defined: 1 Corinthians 13:4-7 

"Love is patient, love is kind. It does not envy, it does not boast, it is not proud. It does not dishonor others, it is not self-seeking, it is not easily angered, it keeps no record of wrongs. Love does not delight in evil but rejoices with the truth. It always protects, always trusts, always hopes, always perseveres."

This beautifully poetic passage from Apostle Paul's letter to the Corinthians is one of the most quoted verses regarding love. Here, love is not presented merely as an emotional state but is described through practical, everyday actionsâ€”patience, humility, kindness, and truthfulness. In this context, love becomes a virtue to be nurtured, a decision to act selflessly in a world that often urges the opposite.

2. Love as the Greatest Commandment: Matthew 22:37-39 

"Jesus replied: 'Love the Lord your God with all your heart and with all your soul and with all your mind.' This is the first and greatest commandment. And the second is like it: 'Love your neighbor as yourself.'"

In this dialogue between Jesus and a Pharisee, lays the greatest commandmentâ€”love. Going beyond feelings, Jesus propounds that our love for God should be total and complete, engaged in our heart, soul, and mind. And parallel to this, we must also love our neighborsâ€”signifying everyone we interact withâ€”as we love ourselves. The two commandments are twinned, suggesting our love for God is incomplete if it does not spill over into love for others. 

3. God's Unconditional Love: Romans 5:8

"But God demonstrates His own love for us in this: While we were still sinners, Christ died for us."

Romans 5:8 is a powerful proclamation of the enormity of Godâ€™s love for humanity. Despite our fallibility, sin, and rebellion, Godâ€™s love remained steadfast. It underscores the essence of divine love which seeks us out, even when we are caught in sin, and offers redemption through the sacrifice of Jesus Christ.

4. Fruit of the Spirit: Galatians 5:22

"But the fruit of the Spirit is love, joy, peace, patience, kindness, goodness, faithfulness..."

In Paulâ€™s letter to the Galatians, he describes love as the first fruit of the Spirit. This indicates that love is not just a human endeavor, but a divine gift. As we yield to the Holy Spirit, His love should be evident in how we live - in promoting peace, demonstrating patience, manifesting kindness, and embracing goodness. Love here is portrayed as both a starting point and an end product, linking human and divine love.

Conclusion

In the Bible, love is beautifully multifaceted. It is a command, an action, a divine gift, and a reflection of the character of God. To fully understand love, we should look to Christ as our ultimate exemplar, who loved unconditionally, sacrificially, and completely.

As followers of Christ, let's strive to display this kind of love in our lives â€“ a love that is patient and kind, that loves the unlovable, that forgives, and above all, that is centered and grounded in God himself. For as the apostle John succinctly states, "God is love" (1 John 4:8).


name: 1696824076
path: D:\websites\domains\ai.sds.sh\public_html\results\1696824076
mime: unavailable
content:
47.198.22.190
Craft a detailed and engaging Biblical blog post on the topic of love. Follow these guidelines:
- Base the content heavily on scripture.
- Use text compatible.
- Do not use markdown formatting.
- Do not precede sections with [Title] or other instructions.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
[Title]
[Introductory Content]
Continue with verse breakdowns:

1. [Verse Topic](verse)
    - [Deep analysis and reflection on the verse]
        - [Continue for at least four verses]

Conclude with a reflection or practical application:
[Concluding insights]





Love is one of the most talked about topics in the Bible. There are entire books dedicated to it, like Song of Songs. Jesus even said that love is the most important commandment. So what does the Bible have to say about love?

1. Love is patient and kind. It does not envy or boast. It is not arrogant or rude. It does not insist on its own way. It is not irritable or resentful. It does not rejoice at wrongdoing, but rejoices with the truth. Love bears all things, believes all things, hopes all things, endures all things. (1 Corinthians 13:4-7)

Patience and kindness are two of the most important qualities in love. Love is not jealous or boastful. It is not rude or self-seeking. Love is not easily angered and it keeps no record of wrongs. Love does not delight in evil, but rejoices with the truth. Love always protects, always trusts, always hopes, and always perseveres.

2. For God so loved the world, that he gave his only Son, that whoever believes in him should not perish but have eternal life. (John 3:16)

This is perhaps the most famous verse about love in the Bible. God loved the world so much that he was willing to sacrifice his only Son for our sake. Whoever believes in Jesus will not perish, but have eternal life.

3. But I say to you, Love your enemies and pray for those who persecute you. (Matthew 5:44)

This verse goes against everything our human nature tells us. We are naturally inclined to hate our enemies. But Jesus tells us to love them. Not only that, but we are to pray for those who persecute us. This is true love.

4. Greater love has no one than this, that someone lay down his life for his friends. (John 15:13)

This verse is a continuation of the previous one. Jesus lays down his life for his friends. This is the ultimate act of love. He sacrificed himself for our sake.

The Bible has a lot to say about love. Love is patient and kind. It is not jealous or boastful. It is not rude or self-seeking. Love is not easily angered and it keeps no record of wrongs. Love does not delight in evil, but rejoices with the truth. Love always protects, always trusts, always hopes, and always perseveres. Greater love has no one than this, that someone lay down his life for his friends.


name: 1696824158
path: D:\websites\domains\ai.sds.sh\public_html\results\1696824158
mime: unavailable
content:
47.198.22.190
Craft a detailed and engaging Biblical blog post on the topic of love. Follow these guidelines:
- Base the content heavily on scripture.
- Use text compatible.
- Do not use markdown formatting.
- Do not precede sections with [Title] or other instructions.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
[Title]
[Introductory Content]
Continue with verse breakdowns:

1. [Verse Topic](verse)
    - [Deep analysis and reflection on the verse]
        - [Continue for at least four verses]

Conclude with a reflection or practical application:
[Concluding insights]





Love is a topic that is written about extensively in the Bible. In fact, the Bible has a lot to say about love - what it is, what it isn't, how we can show it, and how we can receive it. Here are four Bible verses about love that can help us better understand what this important concept really means.

"Love is patient, love is kind. It does not envy, it does not boast, it is not proud. It does not dishonor others, it is not self-seeking, it is not easily angered, it keeps no record of wrongs. Love does not delight in evil but rejoices with the truth. It always protects, always trusts, always hopes, always perseveres."
-1 Corinthians 13:4-7

This passage from 1 Corinthians is often referred to as the "Love Chapter" because it so thoroughly describes what love is - and what it isn't. Love is patient and kind, which means it isn't jealous or boastful. It also doesn't delight in evil, but instead rejoices in truth. This is just a small sampling of the many ways that the Bible says love behaves.

"Greater love has no one than this, that he lay down his life for his friends."
-John 15:13

This verse tells us that the highest form of love is sacrificial love - love that is willing to lay down its life for another. This is the kind of love that Jesus showed us when he died on the cross for our sins. He didn't have to do that, but he did it out of love for us.

"But God demonstrates his own love for us in this: While we were still sinners, Christ died for us."
-Romans 5:8

This verse goes hand-in-hand with the previous one. It tells us that even though we were sinners, Christ died for us. This is the ultimate demonstration of God's love for us. He didn't wait until we cleaned up our act to love us - he loved us even when we were at our worst.

"And we know that in all things God works for the good of those who love him, who have been called according to his purpose."
-Romans 8:28

This verse gives us hope that no matter what happens in our lives, God is working for our good. This is because he loves us and has a plan for our lives. Even when things are tough, we can trust that God is doing what is best for us.

These are just four of the many verses in the Bible that talk about love. As you can see, the Bible has a lot to say on this important topic. We hope that these verses have given you a better understanding of what love is and how we can show it to others.

How have these verses helped you to better understand love? What are some other verses about love that you have found helpful? We would love to hear from you in the comments!

Practical Application:

This week, try to show love in one of the ways that is described in 1 Corinthians 13:4-7. This could be by being patient with someone, being kind to someone, or rejoicing in truth. Whatever you do, do it out of love!

Bible verses about love are some of the most popular in the Bible. And for good reason! Love is such an important concept, and one that we all need more of in our lives. We hope that these four verses have helped you to better understand love and how you can show it to others.

If you want to learn more about love, check out our Bible study on 1 Corinthians 13. We dive deep into what the Bible has to say about love and how we can put it into practice in our lives. Click the link below to learn more!

[Link to Bible study]

Thanks for reading! We hope you have a great week!

[Your name]

[Your blog name]

[Your blog URL]


name: 1696824259
path: D:\websites\domains\ai.sds.sh\public_html\results\1696824259
mime: unavailable
content:
47.198.22.190
Craft a detailed and engaging Biblical blog post on the topic of love. Follow these guidelines:
- Base the content heavily on scripture.
- Use text compatible.
- Do not use markdown formatting.
- Do not precede sections with [Title] or other instructions.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
[Title]
[Introductory Content]
Continue with verse breakdowns:

1. [Verse Topic](verse)
    - [Deep analysis and reflection on the verse]
        - [Continue for at least four verses]

Conclude with a reflection or practical application:
[Concluding insights]





The Bible has a lot to say about love. In fact, the entire Bible can be seen as one big love story between God and humanity. Here are four Bible verses about love that can help us understand what love is and how we can love others.

1. "Love is patient, love is kind. It does not envy, it does not boast, it is not proud. It does not dishonor others, it is not self-seeking, it is not easily angered, it keeps no record of wrongs. Love does not delight in evil but rejoices with the truth. It always protects, always trusts, always hopes, always perseveres." (1 Corinthians 13:4-7)

This verse from 1 Corinthians is often called the "Love Chapter" because it describes love in such a beautiful way. Love is patient and kind; it is not jealous or boastful; it is not proud or rude. Love is not self-seeking; it is not easily angered; and it keeps no record of wrongs. Love delights in truth and always protects, trusts, hopes, and perseveres.

2. "Greater love has no one than this: to lay down oneâ€™s life for oneâ€™s friends." (John 15:13)

This verse from John 15 tells us that the greatest act of love is to lay down one's life for another. Jesus did this for us when he died on the cross. He showed us the ultimate act of love.

3. "For God so loved the world that he gave his one and only Son, that whoever believes in him shall not perish but have eternal life." (John 3:16)

This verse from John 3:16 tells us that God loved the world so much that he gave his only Son to die for us. This is the ultimate act of love. Whoever believes in Jesus will have eternal life.

4. "But I tell you, love your enemies and pray for those who persecute you." (Matthew 5:44)

This verse from Matthew 5:44 tells us to love our enemies and pray for those who persecute us. This is a hard command to follow, but it is important. When we love our enemies, we are showing them the love of Jesus.

These are just four of the many Bible verses about love. The Bible is full of love stories, commands to love others, and examples of love. As we read and study the Bible, we can learn more about what love is and how we can love others.


What does the Bible say about love?

The Bible has a lot to say about love. In fact, the entire Bible can be seen as one big love story between God and humanity. Here are four Bible verses about love that can help us understand what love is and how we can love others.

1. "Love is patient, love is kind. It does not envy, it does not boast, it is not proud. It does not dishonor others, it is not self-seeking, it is not easily angered, it keeps no record of wrongs. Love does not delight in evil but rejoices with the truth. It always protects, always trusts, always hopes, always perseveres." (1 Corinthians 13:4-7)

This verse from 1 Corinthians is often called the "Love Chapter" because it describes love in such a beautiful way. Love is patient and kind; it is not jealous or boastful; it is not proud or rude. Love is not self-seeking; it is not easily angered; and it keeps no record of wrongs. Love delights in truth and always protects, trusts, hopes, and perseveres.

2. "Greater love has no one than this: to lay down oneâ€™s life for oneâ€™s friends." (John 15:13)

This verse from John 15 tells us that the greatest act of love is to lay down one's life for another. Jesus did this for us when he died on the cross. He showed us the ultimate act of love.

3. "For God so loved the world that he gave his one and only Son, that whoever believes in him shall not perish but have eternal life." (John 3:16)

This verse from John 3:16 tells us that God loved the world so much that he gave his only Son to die for us. This is the ultimate act of love. Whoever believes in Jesus will have eternal life.

4. "But I tell you, love your enemies and pray for those who persecute you." (Matthew 5:44)

This verse from Matthew 5:


name: 1697124201
path: D:\websites\domains\ai.sds.sh\public_html\results\1697124201
mime: unavailable
content:
35.142.26.16
What can you do with horses 





There are many things that can be done with horses. They can be used for transportation, recreation, work, and even therapy. Many people enjoy riding horses for fun or competition, and others use them to help with farm work or other chores. Some horses are even trained to perform tricks or to participate in shows. There are many different ways to enjoy horses, and each person can find their own unique way to use them. therapeutic riding, working with therapy horses, and even competing in horse shows. There are many different ways to enjoy horses, and each person can find their own unique way to use them. 

Some people use horses for transportation, while others use them for recreation. Some people work with horses, and others use them for therapy. There are many different ways to enjoy horses, and each person can find their own unique way to use them. 

Horses can be used for transportation, recreation, work, therapy, or even competition. There are many different ways to enjoy horses, and each person can find their own unique way to use them. 

Each person can find their own unique way to use horses. Some people use horses for transportation, while others use them for recreation. Some people work with horses, and others use them for therapy. There are many different ways to enjoy horses, and each person can find their own unique way to use them. 

Some people use horses for transportation, while others use them for recreation. Some people work with horses, and others use them for therapy. There are many different ways to enjoy horses, and each person can find their own unique way to use them. Each person can find their own unique way to use horses. Some people use horses for transportation, while others use them for recreation. Some people work with horses, and others use them for therapy. There are many different ways to enjoy horses, and each person can find their own unique way to use them. 

Horses can be used for transportation, recreation, work, therapy, or even competition. There are many different ways to enjoy horses, and each person can find their own unique way to use them. Each person can find their own unique way to use horses. Some people use horses for transportation, while others use them for recreation. Some people work with horses, and others use them for therapy. There are many different ways to enjoy horses, and each person can find their own unique way to use them. 

Horses can be used for transportation, recreation, work, therapy, or even competition. There are many different ways to enjoy horses, and each person can find their own unique way to use them. Each person can find their own unique way to use horses. Some people use horses for transportation, while others use them for recreation. Some people work with horses, and others use them for therapy. There are many different ways to enjoy horses, and each person can find their own unique way to use them. 

Horses can be used for transportation, recreation, work, therapy, or even competition. There are many different ways to enjoy horses, and each person can find their own unique way to use them. Each person can find their own unique way to use horses. Some people use horses for transportation, while others use them for recreation. Some people work with horses, and others use them for therapy. There are many different ways to enjoy horses, and each person can find their own unique way to use them. 

Horses can be used for transportation, recreation, work, therapy, or even competition. There are many different ways to enjoy horses, and each person can find their own unique way to use them. Each person can find their own unique way to use horses. Some people use horses for transportation, while others use them for recreation. Some people work with horses, and others use them for therapy. There are many different ways to enjoy horses, and each person can find their own unique way to use them. 

Horses can be used for transportation, recreation, work, therapy, or even competition. There are many different ways to enjoy horses, and each person can find their own unique way to use them. Each person can find their own unique way to use horses. Some people use horses for transportation, while others use them for recreation. Some people work with horses, and others use them for therapy. There are many different ways to enjoy horses, and each person can find their own unique way to use them. 

Horses can be used for transportation, recreation, work, therapy, or even competition. There are many different ways to enjoy horses, and each person can find their own unique way to use them. Each person can find their own unique way to use horses. Some people use horses for transportation, while others use them for recreation. Some people work with horses, and others use them for therapy. There are many different ways to enjoy horses, and each person can find their own unique way to use them. 

H


name: 1697941743
path: D:\websites\domains\ai.sds.sh\public_html\results\1697941743
mime: unavailable
content:
174.231.87.94
Craft a detailed and engaging Biblical blog post on the topic of Love . Follow these guidelines:
- Base the content heavily on scripture.
- Use text compatible.
- Do not use markdown formatting.
- Do not precede sections with [Title] or other instructions.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
[Title]
[Introductory Content]
Continue with verse breakdowns:

1. [Verse Topic](verse)
    - [Deep analysis and reflection on the verse]
        - [Continue for at least four verses]

Conclude with a reflection or practical application:
[Concluding insights]





Love is one of the most beautiful things in the world. It's also one of the most complicated and misunderstood concepts. The Bible has a lot to say about love, and it's often counter-cultural. Here are four Bible verses about love that will challenge and encourage you.

1. "Love is patient, love is kind. It does not envy, it does not boast, it is not proud. It does not dishonor others, it is not self-seeking, it is not easily angered, it keeps no record of wrongs. Love does not delight in evil but rejoices with the truth. It always protects, always trusts, always hopes, always perseveres." (1 Corinthians 13:4-7)

This well-known passage from 1 Corinthians is often read at weddings, but it's so much more than just a pretty love poem. It's a practical guide to what love looks like. Love is patient and kind, it's not self-seeking or easily angered, and it always protects and trusts. This is a high standard to live up to, but it's possible with God's help.

2. "Greater love has no one than this, that he lay down his life for his friends." (John 15:13)

This verse is a challenge to us to think about what we're willing to sacrifice for love. Jesus laid down his life for us, and that's the ultimate example of love. Are we willing to lay down our lives for our friends? That might look like sacrificing our time and energy to help them, or it might mean making a tough decision that's in their best interest.

3. "But I tell you, love your enemies and pray for those who persecute you." (Matthew 5:44)

This verse goes against everything our culture tells us. We're supposed to hate our enemies, right? But Jesus says to love them. That doesn't mean we condone their actions, but it does mean we see them as human beings who are loved by God. And when we pray for them, we're asking God to change their hearts and bring them to repentance.

4. "And now these three remain: faith, hope and love. But the greatest of these is love." (1 Corinthians 13:13)

This verse is a reminder that love is the most important thing. It's more important than faith or hope. And that's because love is what motivates us to have faith and hope. It's the driving force behind everything we do.

The Bible has a lot to say about love, and it's often counter-cultural. These four verses about love will challenge and encourage you. May they help you to better understand what love is and how to love others.



What does the Bible say about love?

The Bible has a lot to say about love, and it's often counter-cultural. Here are four Bible verses about love that will challenge and encourage you.

1. "Love is patient, love is kind. It does not envy, it does not boast, it is not proud. It does not dishonor others, it is not self-seeking, it is not easily angered, it keeps no record of wrongs. Love does not delight in evil but rejoices with the truth. It always protects, always trusts, always hopes, always perseveres." (1 Corinthians 13:4-7)

This well-known passage from 1 Corinthians is often read at weddings, but it's so much more than just a pretty love poem. It's a practical guide to what love looks like. Love is patient and kind, it's not self-seeking or easily angered, and it always protects and trusts. This is a high standard to live up to, but it's possible with God's help.

2. "Greater love has no one than this, that he lay down his life for his friends." (John 15:13)

This verse is a challenge to us to think about what we're willing to sacrifice for love. Jesus laid down his life for us, and that's the ultimate example of love. Are we willing to lay down our lives for our friends? That might look like sacrificing our time and energy to help them, or it might mean making a tough decision that's in their best interest.

3. "But I tell you, love your enemies and pray for those who persecute you." (Matthew 5:44)

This verse goes against everything our culture tells us. We're supposed to hate our enemies, right? But Jesus says to love them. That doesn't mean we condone their actions, but it does mean we see them as human beings who are loved by God.


name: 1698565597
path: D:\websites\domains\ai.sds.sh\public_html\results\1698565597
mime: unavailable
content:
73.78.117.98
Craft a detailed and engaging Biblical blog post on the topic of Struggling with faith after a had life and a lifetime of abuse. My sister adopted a diagnosed psychopath that messed up the entire family because she thought it was God's will. My family is struggling.. Follow these guidelines:
- Base the content heavily on scripture.
- Use text compatible.
- Do not use markdown formatting.
- Do not precede sections with [Title] or other instructions.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
[Title]
[Introductory Content]
Continue with verse breakdowns:

1. [Verse Topic](verse)
    - [Deep analysis and reflection on the verse]
        - [Continue for at least four verses]

Conclude with a reflection or practical application:
[Concluding insights]




Title: Finding Faith in The Midst of Battered Hope: A Reflection on Strength and Divine Guidance 

Introductory Content:

In life, we sometimes face devastating trials that shatter our confidence, and even our faith. Abuse, trauma, and disruptive family dynamics, such as those experienced when welcoming a challenging new member, can make us question God's benevolence. But it's during these turbulent times that we need to lean on the substantial wisdom and comfort found in the Scriptures. The Bible has much to say on struggling with faith, maintaining hope, and emerging from despair stronger than before. Let's delve into a selection of these verses for guidance and consolation.

Verse Topic: Faith under Tribulation
Verse: James 1:2-4

This passage encourages believers to count trials or tribulations as pure joy, knowing that the testing of our faith develops perseverance, enabling us to mature and complete, lacking nothing. James wrote this letter to Jewish Christians who were enduring intense persecution. They, like us, were grappling with their faithâ€”struggling to understand why pain and hardships were part of God's plan. The thought of meeting misfortune with celebration seems paradoxical. Yet, on a closer look, we understand that trials yield more steadfast faith and spiritual maturity.

Verse Topic: God's love in times of Distress
Verse: Romans 8:35-39 

Paul, in his letter to the Romans, assures us of Godâ€™s unwavering love, reminding us that no tribulation, distress, persecution, famine, or danger can separate us from the love of Christ. This love is not conditional on our circumstances, but is a constant, reassuring presence during every storm. Despite being a man familiar with suffering, Paul wrote these verses to encourage others; likewise, we can hold onto this steadfast promise during our own seasons of difficulty.

Verse Topic: God's Promise of Restoration
Verse: Joel 2:25-26 

Joel is a prophet who conveys Godâ€™s promise to restore what has been destroyed or damaged. Although originally directed at the Israelites following a devastating locust plague, this verse richly applies to our personal suffering today. Our Heavenly Father is not a God of loss and adoption doesn't have to be a story of regret and resentment. Whether we're dealing with a challenging adopted child or any other form of loss, we can lean on God's promise to restore usâ€”spiritually, emotionally, and physically.

Verse Topic: Divine Comfort
Verse: 2 Corinthians 1:3-4 

Through the guidance of the Holy Spirit, Paul in his letter to the Corinthians acknowledges God as the source of all comfort, who comfort us in our tribulations. Paul, a man who suffered literal and metaphorical shipwrecks, beatings, and more, knew suffering. The point of enduring these trials wasn't the pain they caused, but the resulting ability to comfort others experiencing similar hardships. Every struggle presents an opportunity for growth and a deeper capacity for empathy.

Concluding insights:

Biblical teachings assure us that our suffering is not in vain. Our struggles, no matter how severe, can produce perseverance, mature faith, and equip us with empathy to comfort others. God's promise to restore, to bring beauty from ashes, assures us that our family can emerge stronger from this challenge. Trusting in the love and comfort from our Heavenly Father is not always easyâ€”especially in periods of struggleâ€”but it is always worthwhile. 

Although faith can waver in times of trouble, remember: trials are not signs of God's abandonment but opportunities for growth. His love for us remains constant, and His power is mightiest when we feel at our lowest. If you feel your faith wavering under the weight of familial hardships, lean into His promises. He is trustworthy, and restoration can be a testament to His great love and mercy. Above all, remember Romans 8:28: "And we know that in all things God works for the good of those who love him, who have been called according to his purpose."


name: 1698566173
path: D:\websites\domains\ai.sds.sh\public_html\results\1698566173
mime: unavailable
content:
73.78.117.98
Craft a detailed and engaging Biblical blog post on the topic of How do I draw near to God when I am struggling with faith due to abuse and a lifetime od unending trials.. Follow these guidelines:
- Base the content heavily on scripture.
- Use text compatible.
- Do not use markdown formatting.
- Do not precede sections with [Title] or other instructions.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
[Title]
[Introductory Content]
Continue with verse breakdowns:

1. [Verse Topic](verse)
    - [Deep analysis and reflection on the verse]
        - [Continue for at least four verses]

Conclude with a reflection or practical application:
[Concluding insights]




Title: Drawing Near to God amidst Struggles and Trials

The journey of faith is not always an easy one. There are seasons of life where storms seem unending, where shadows of past abuses loom large, and where our faith in God wavers as a result. If you're in such a season, you might be asking, "How do I draw near to God when my faith is struggling due to a history of abuse and ongoing trials?" A profound exploration of Scripture provides us the path to draw nearer to God even in our deepest agony and tribulations.

1. Psalm 34:18: "The Lord is near to the brokenhearted and saves the crushed in spirit."
Psalmist David, no stranger to adversity, crafted these comforting words thousands of years ago. God, being omniscient and omnipresent, is not oblivious to our hurting hearts. David assures us that God is near the crushed and saves the broken-hearted. If you're experiencing pain from past abuse or ongoing trials, there's hope in David's words. He reminds us that God does not turn away from our anguish but draws close to alleviate our pain.

2. Matthew 11:28: "Come to me, all who labor and are heavy laden, and I will give you rest."
These are Christ's words, beckoning to those in trials and labor. Jesus Christ fully understands the depth of our human suffering. In the midst of your struggles, Christ offers relief and rest. No matter how wearisome your life's battles may be, Christ promises solace if we come to Him. This verse reinforces the idea that God cares deeply about our suffering, both mental and physical.

3. Hebrews 4:16: "Let us then with confidence draw near to the throne of grace, that we may receive mercy and find grace to help in time of need."
In Hebrew culture, the throne represents a place of authority, power, and judgment. But in this verse, the writer of Hebrews describes it as a 'throne of grace.' This is an invitation to approach God boldly, not timidly, because our heavenly Father offers mercy and grace, not condemnation. When we feel battered by the storms of life, we can take refuge beneath Godâ€™s protective and loving wings.

4. James 4:8: "Draw near to God, and he will draw near to you. Cleanse your hands, you sinners, and purify your hearts, you double-minded."
This verse from the book of James encapsulates our responsibility and God's promise in our efforts to draw near to Him. The principle here is action and reaction; when we take steps to draw closer to God, He reciprocates by coming closer to us.

In conclusion, these verses all point to one fact: God never abandons His children, particularly those in the throes of pain from past abuses or unending trials. While the path might be clouded with doubt, remember that God is ever-present. As you choose to draw near to God, He promises to be nearer to you.
Stay rooted in prayer, trust in His unfailing love, and allow His healing power to transform your wounds into wisdom. Even when faith seems impossible, remember, we have a God who makes all things possible. Your trials are not a burden to Him but opportunities for grace, healing, and transformation to occur. Ultimately, we find that in our weakest moments, God's strength becomes most evident. His grace is sufficient for our every need, and His power is made perfect in our human fraility. (2 Corinthians 12:9) The Lord is our refuge, our strength, and our ever-present help in trouble (Psalm 46:1). Allow your trials to draw you nearer to Him, and be reassured by His promise to walk with you throughout your journey of faith.


name: 1698603466
path: D:\websites\domains\ai.sds.sh\public_html\results\1698603466
mime: unavailable
content:
73.78.117.98
Craft a detailed and engaging Biblical blog post on the topic of How do I draw near to God when I am struggling with faith due to abuse and a lifetime od unending trials.. Follow these guidelines:
- Base the content heavily on scripture.
- Use HTML formatting compatible with WordPress.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
<p>[Introductory Content]</p>
Continue with verse breakdowns:
<ol>
<li><p><strong>[Verse Topic]</strong> (verse)</p>
<ul><li>[Deep analysis and reflection on the verse]</li></ul></li>
... [Continue for at least four verses]
</ol>
Conclude with a reflection or practical application:
<p>[Concluding insights]</p>




<p>Life isn't always a smooth journey. Sometimes, it feels like a never-ending cycle of trials, heartaches, struggles, and anguish. For those who have endured abuse and a lifetime of unending trials, even the very cornerstone of their faith can feel like it's shifting. Questions like "How can I draw near to God when I am struggling with faith?" become all too common. It's crucial to understand that struggling with faith during trying times is common and is something the Bible addresses directly.</p>

<ol>
<li><p><strong>Lean not on your own Understanding</strong> (Proverbs 3:5-6)</p>
<ul><li>Considering the trials you've been through, it's understandable to have doubts and questions. But in the book of Proverbs, we are instructed not to lean on our own understanding. Rather, we are to trust in God completely, acknowledging His sovereignty over our lives. This doesn't mean we should stop questioning or searching for understanding; instead, it means trusting God even in our pain and doubt. In the midst of our struggles, it's human nature to try to solve issues on our own, but God calls us to rely on Him.</li></ul></li>

<li><p><strong>Draw Near to God</strong> (James 4:8)</p>
<ul><li>James urges us to draw near to God, and in return, He will draw near to us. In the historical context, James wrote to early Christians who were struggling with internal divisions and external oppressions. His message is just as vital for anyone struggling today: drawing near to God, however difficult, is a step towards healing and peace. Keep in mind that this isn't about physical proximity, but about a deep, intimate relationship with Him.</li></ul></li>

<li><p><strong>Godâ€™s Comfort in Afflictions</strong> (2 Corinthians 1: 3-6)</p>
<ul><li>Paul, once a persecutor of Christians, found in his conversion a God of all comfort. Despite his numerous trials and suffering, his faith in God did not waver. He saw his afflictions not as punishments but as opportunities to experience God's comfort, which he could then share with others. This teaches us that in our deepest struggles, God not only provides comfort, but He also enables us to comfort others with the comfort we ourselves receive from Him.</li></ul></li>

<li><p><strong>Trust in His Unchanging Grace</strong> (Hebrews 13:8)</p>
<ul><li>This verse assures us of the constancy of Christ's love and care. Contextually, the writer of Hebrews was addressing believers who were becoming complacent and falling away from their faith. Amid our life's trials and tribulations, we can trust that Jesus Christ remains unchanged, unshaken, and steadfast in His love and grace towards us.</li></ul></li>
</ol>

<p>Struggles in life and crises of faith are undoubtedly challenging, but God's word consistently reassures us of His everlasting love, mercy, and readiness to draw near to us. Draw closer to Him in your struggles, lean not on your own understanding, embrace His comfort and trust in His unchanging grace. Your trials aren't a sign of God's absence or disapproval, but they might be opportunities for your faith to grow and for God's comfort to flow through you to others. Above all, remember not to isolate yourself during this time of struggle; find a community of believers to walk with you through this season of life. God indeed works in mysterious ways, and often His answers come through the hands and hearts of those who walk this earthly journey with us.</p>


name: 1698733983
path: D:\websites\domains\ai.sds.sh\public_html\results\1698733983
mime: unavailable
content:
73.78.117.98
Craft a detailed and engaging Biblical blog post on the topic of After a lifetime of abuse and over 20 years of trials, how do I give it to God?. Follow these guidelines:
- Base the content heavily on scripture.
- Use HTML formatting compatible with WordPress.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
<p>[Introductory Content]</p>
Continue with verse breakdowns:
<ol>
<li><p><strong>[Verse Topic]</strong> (verse)</p>
<ul><li>[Deep analysis and reflection on the verse]</li></ul></li>
... [Continue for at least four verses]
</ol>
Conclude with a reflection or practical application:
<p>[Concluding insights]</p>




<p>
The lifelong battle with abuse and sustained periods of trials can leave a person feeling desolate, hopeless, and often questioning, 'where is God in all this'. One could get lost in that abyss of despair but the Bible offers a refreshing perspective and groundbreaking hope, proclaiming that God is near to the broken-hearted, famishes the strength of those who are strong, and has plans to prosper us not to harm us. If you've been on a torturous journey of abuse and trials, no matter the lengthy journey, there is a way to give it all to God and find peace and healing. Let's embark on this spiritual journey to unearth the treasures of God's word together.
</p>

<ol>
<li><p><strong>Release your burdens to God </strong> (Psalm 55:22)</p>
<ul><li> 
"Casting your cares on the Lord, and He will sustain you; He will never let the righteous be shaken." This Psalm signifies releasing your hardships to God. It was penned during a time of great upheaval in David's life, where he was wrought by personal loss, death threats, and betrayal from a close friend. Davidâ€™s choice to give his burden to God provided him endurance throughout his trials. The same principle applies to us when we face life-changing trials. God's embracing arms are always open, ready to lighten our load.
</li></ul></li>

<li><p><strong>God values your tears </strong> (Psalm 56:8)</p>
<ul><li>
"You have kept count of my tossings; put my tears in your bottle. Are they not in your book?" Although penned during one of Davidâ€™s darkest hours when he was seized by the Philistines in Gath, this verse beautifully depicts God's overwhelming concern for us during our trials. The metaphor of God collecting our tears in a bottle exhibits His intimate awareness of our sorrows, affirming that every single tear shed in pain matters to Him.
</li></ul></li>

<li><p><strong>God is a refuge and strength </strong> (Psalm 46:1)</p>
<ul><li>
"God is our refuge and strength, a very present help in trouble." This verse consistently resonates with people undergoing intense trials. It was written during a distressing time when Jerusalem was under attack. These words reveal a promise that God is our sanctuary, a place of safety and rest during chaos. His strength carries us through painful trials, and His presence is unyielding.
</li></ul></li>

<li><p><strong>God is near to the broken-hearted </strong> (Psalm 34:18)</p>
<ul><li>
"The Lord is near to the broken-hearted and saves the crushed in spirit." The verse encapsulates the essence of God's understanding and closeness during our times of suffering. King David wrote this Psalm after he had been on the run to escape King Saul. It assures us that God is by our side, especially when we feel broken and crushed.
</li></ul></li>
</ol>

<p>
In threading through these verses, we are reminded that it is not about forgetting or dismissing the pain from abuse or trials. Rather, by giving them to God, we allow God's divine power to carry, heal, and transform our pain. No matter the length or depth of your trials, remember, you are not alone - God is walking with you. His desire is not merely to erase our pain but to help us grow, refine us, and mold us in it and beyond it. So cast your cares on Him, for He cares for you profoundly (1 Peter 5:7).
</p>


name: 1698889670
path: D:\websites\domains\ai.sds.sh\public_html\results\1698889670
mime: unavailable
content:
73.78.117.98
Craft a detailed and engaging Biblical blog post on the topic of How do I give hard things to God. Follow these guidelines:
- Base the content heavily on scripture.
- Use HTML formatting compatible with WordPress.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
<p>[Introductory Content]</p>
Continue with verse breakdowns:
<ol>
<li><p><strong>[Verse Topic]</strong> (verse)</p>
<ul><li>[Deep analysis and reflection on the verse]</li></ul></li>
... [Continue for at least four verses]
</ol>
Conclude with a reflection or practical application:
<p>[Concluding insights]</p>




<p>As we traverse life's arduous paths, we may from time to time, find ourselves burdened with trials, hardships and battles that seem insurmountable. However, the Bible assures us that we don't have to face these battles alone; we can give all our burdens to God. But how do we do this? In this blog post, we'll delve into four illuminating verses that provide guidance on how to surrender our worries to God.</p>

<ol>
<li><p><strong>Casting Our Cares</strong> (1 Peter 5:7)</p>
<ul><li>"Cast all your anxiety on him because he cares for you." This verse is an encouraging testament to God's unwavering love for us. The apostle Peter encourages the early Christian communities, who were facing numerous trials and persecutions, to release their anxieties onto God. The original Greek word for "cast" translates to "throw upon," suggesting we aren't merely to share our worries with God, but totally surrender them. This concept implies total reliance and complete trust in God's capability to handle our problems better than we can.</li></ul></li>

<li><p><strong>Trusting in God's Plans</strong> (Proverbs 3:5-6)</p>
<ul><li>"Trust in the LORD with all your heart and lean not on your own understanding; in all your ways submit to him, and he will make your paths straight." This wisdom from King Solomon suggests the counter-intuitive nature of giving our burdens to God. It requires not relying on our limited understanding but fully surrendering to God's wisdom and control. This trust allows us to acknowledge the sovereignty of God that surpasses our limited perception.</li></ul></li>

<li><p><strong>Finding Peace in Surrender</strong> (Philippians 4:6-7)</p>
<ul><li>"Do not be anxious about anything, but in every situation, by prayer and petition, with thanksgiving, present your requests to God. And the peace of God, which transcends all understanding, will guard your hearts and your minds in Christ Jesus." The Apostle Paul, while imprisoned, encourages the Philippians to find peace not in their circumstances but in God. This verse underscores the method through which we hand our problems to Godâ€”prayer. Paul hints that by giving thanks even in adverse circumstances, we align with God's perspective, allowing His peace to permeate our lives.</li></ul></li>

<li><p><strong>God as Our Refuge</strong> (Psalm 55:22)</p>
<ul><li>"Cast your cares on the LORD and he will sustain you; he will never let the righteous be shaken." King David, acquainted with hardship as he faced constant threats to his life, expresses trust in God as his ultimate refuge. The word "sustain" in the original Hebrew has connotations of nurturing, feeding, and supporting. This suggests that when we give our worries to God, He doesn't merely take them away; He supports, nurtures, and strengthens us through our trials.</li></ul></li>

</ol>

<p>In conclusion, handing our problems to God is not about avoiding our problems or denying reality. Instead, it's about acknowledging our limitations and recognizing God's unlimited power and unfathomable wisdom. It involves casting our cares, leaning not on our understanding, communing with God through prayer and gratitude, and entrusting Him as our ultimate refuge. When we do this, we align ourselves with His perspective, embarking on a transformative journey that fosters resilience, engenders peace, and fortifies our faith.</p>


name: 1698895036
path: D:\websites\domains\ai.sds.sh\public_html\results\1698895036
mime: unavailable
content:
73.78.117.98
Craft a detailed and engaging Biblical blog post on the topic of How do I give my heart more completely to Jesus. Follow these guidelines:
- Base the content heavily on scripture.
- Use HTML formatting compatible with WordPress.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
<p>[Introductory Content]</p>
Continue with verse breakdowns:
<ol>
<li><p><strong>[Verse Topic]</strong> (verse)</p>
<ul><li>[Deep analysis and reflection on the verse]</li></ul></li>
... [Continue for at least four verses]
</ol>
Conclude with a reflection or practical application:
<p>[Concluding insights]</p>




<p>The beauty of being in a relationship with Jesus Christ lies not only in the peace, love, and joy that He brings into our lives, but also in the deep and life-transforming journey that accompanies this connection. But how do we give our heart more completely to Him? Let's dive into scripture for profound insight and guidance.</p>

<ol>
<li><p><strong>Faith and Trust</strong> (Proverbs 3:5-6)</p>
<ul><li><em>"Trust in the LORD with all your heart and lean not on your own understanding; in all your ways submit to him, and he will make your paths straight."</em> This passage calls us to trust God completely, not relying solely on our understanding. Trust signifies total surrender, which leads to divine guidance. In historical context, the early Jewish community would often need to trust God amidst trying circumstances. Today, this verse is a timeless reminder that our faith and trust in God should be complete, acknowledging Him in all our undertakings.</li></ul></li>

<li><p><strong>Wholehearted Devotion</strong> (Matthew 22:37-38)</p>
<ul><li><em>"Jesus replied: 'Love the Lord your God with all your heart, with all your soul, and with all your mind.' This is the first and greatest commandment."</em> In this verse, Jesus outlines the level of devotion God seeks from us. The context is a conversation between Jesus and a Pharisee, wherein Jesus clarifies the utmost importance of loving God wholeheartedly. For us, it means that devoting our heart to Jesus should not be a half-hearted affair but an all-encompassing commitment involving our all - heart, soul, and mind.</li></ul></li>

<li><p><strong>Submission and Obedience</strong> (James 4:7)</p>
<ul><li><em>"Submit yourselves, then, to God. Resist the devil, and he will flee from you."</em> James writes to the early Christian community encouraging complete submission to God and resistance to evil. Similarly, we are called to submit our hearts willingly to Jesus and actively resist earthly temptations â€“ in doing so, we draw closer to God and push sin further away.</li></ul></li>

<li><p><strong>Humility and Openness</strong> (Psalm 51:17)</p>
<ul><li><em>"The sacrifices of God are a broken spirit; a broken and contrite heart, O God, you will not despise."</em> King David composed this Psalm after he was confronted about his sin with Bathsheba. He acknowledges that God values a humble and repentant heart more than ritual sacrifices. For us, it means that to give our hearts more fully to Jesus, we need to approach Him with humility, openness, and genuine repentance.</li></ul></li>
</ol>

<p>In conclusion, giving our heart more completely to Jesus involves leaning on Him with absolute trust, loving Him with all our heart, soul, and mind, submitting ourselves wholly to Him, and approaching Him with humility and contrition. It's a lifelong journey and there will be challenges, yet the peace and joy that come from a deeper relationship with Jesus make all efforts worthwhile. Let's take a step forward today by embracing these scriptural insights into our daily lives.</p>


name: 1698903898
path: D:\websites\domains\ai.sds.sh\public_html\results\1698903898
mime: unavailable
content:
73.78.117.98
Craft a detailed and engaging Biblical blog post on the topic of Intimacy with Jesus. Follow these guidelines:
- Base the content heavily on scripture.
- Use HTML formatting compatible with WordPress.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
<p>[Introductory Content]</p>
Continue with verse breakdowns:
<ol>
<li><p><strong>[Verse Topic]</strong> (verse)</p>
<ul><li>[Deep analysis and reflection on the verse]</li></ul></li>
... [Continue for at least four verses]
</ol>
Conclude with a reflection or practical application:
<p>[Concluding insights]</p>




<p>Intimacy with Jesus is the lifeblood of every Christian. It's the cord that connects us to the Vine, the path that takes us deeper into the heart of our Savior. In this blog post, we'll explore four powerful Bible verses that illuminate the beautiful capacity we have for cultivating a profound, rich, and personal relationship with Christ.

<ol>
<li><p><strong>Experiencing His Love</strong> (Ephesians 3:19) </p>
<ul><li>"... and to know this love that surpasses knowledgeâ€”that you may be filled to the measure of all the fullness of God."</li></ul></li>

<p>The Apostle Paul, in his letter to the Ephesians, prays that they would come to experience the love of Christâ€”a love that goes beyond knowledge. Here, intimacy with Jesus is framed in terms of a deep, experiential knowledge of His love, one that fills us with the fullness of God Himself. Historically, the church at Ephesus was known for their rich theological understanding, yet Paul emphasizes that knowledge alone is insufficient. It must be accompanied by a personal, experiential relationship with God, which is the core of intimacy with Jesus.</p>

<li><p><strong>Abiding in Him</strong> (John 15:4)</p>
<ul><li>"Abide in me, and I in you. As the branch cannot bear fruit by itself, unless it abides in the vine, neither can you, unless you abide in me."</li></ul></li>

<p>This verse is part of Jesus' Final Discourse with His disciples. The entire passage evokes a rich, agricultural imageâ€”a vine and its branchesâ€”to depict our relationship with Christ. To "abide" is to remain closely connected, akin to the picture of a biological dependency of a branch on the vine. Here, the path to fruitful living is presented as directly hinged on our intimacy with Jesus, our sustaining Vine.</p>

<li><p><strong>The Labor of Love</strong> (1 John 4:7-8)</p>
<ul><li>"Dear friends, let us love one another, for love comes from God. Everyone who loves has been born of God and knows God. Whoever does not love does not know God, because God is love."</li></ul></li>

<p>John, one of Jesus' closest disciples, emphasises the transformative power of knowing God intimately. This supernatural love births from our union with Jesus, refining our character towards agape love, a God-like, selfless love for others. Beyond a mere emotional or intellectual experience, John is underscoring a practical demonstration of this love in our interactions with others as a marker of our intimacy with Jesus.</p>

<li><p><strong>Prayer and Revelations</strong> (Jeremiah 33:3)</p>
<ul><li>"'Call to me and I will answer you and tell you great and unsearchable things you do not know.'</li></ul></li>

<p>This invitation from God through the prophet Jeremiah highlights another crucial aspect of our relationship with Jesusâ€”communication. God longs for us to call upon Him, to open up the channels of communication, and engage in a dialogical relationship with Him. In doing so, we stand to gain divine revelations and wisdom, deepening our intimacy with our Savior.</p>

</ol>

<p>Intimacy with Jesus is the cornerstone to our spiritual growth and fruitfulness in the Kingdom. It goes beyond a mere cognitive understanding of theological truths to a vibrant, life-giving and transformative relationship with Christ. So let's strive to deepen our connection with Him, to experience His love, abide in His presence, extend His love to others, and continue the conversation with Him through prayer. This is the beautifully woven tapestry of true intimacy with Jesus. </p>


name: 1698987477
path: D:\websites\domains\ai.sds.sh\public_html\results\1698987477
mime: unavailable
content:
73.78.117.98
Craft a detailed and engaging Biblical blog post on the topic of How do I prepare my heart and life for my future wife?. Follow these guidelines:
- Base the content heavily on scripture.
- Use HTML formatting compatible with WordPress.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
<p>[Introductory Content]</p>
Continue with verse breakdowns:
<ol>
<li><p><strong>[Verse Topic]</strong> (verse)</p>
<ul><li>[Deep analysis and reflection on the verse]</li></ul></li>
... [Continue for at least four verses]
</ol>
Conclude with a reflection or practical application:
<p>[Concluding insights]</p>




<p>Reflections on the path to finding your life partner, especially in the context of Christian faith, extend far beyond simple compatibility checks and matchmaking exercises. You are preparing yourself not just for a human relationship, but for a divine journey of understanding, patience, love, and spiritual growth intertwined with another human being, who is likewise a sublime creation of God. How can we prepare our hearts and lives for our future wives? The Bible guides us in myriad ways.</p>

<ol>
<li><p><strong>Purity & Integrity</strong> (1 Timothy 4:12)</p>
<ul><li>"Don't let anyone look down on you because you are young, but set an example for the believers in speech, in conduct, in love, in faith and in purity." This verse encourages believers, young or old, to live lives of purity and integrity, to set an example for others. The Apostle Paul addressed these words to young Timothy, and by implication, to every Christian. A life marked by purity in thoughts, words, and actions prepares a harmonious foundation for your future wife â€” a foundation rooted in trust and respect.</li></ul></li>

<li><p><strong>Love</strong> (1 Corinthians 13:4-7)</p>
<ul><li>"Love is patient, love is kind. It does not envy, it does not boast, it is not proud. It does not dishonor others, it is not self-seeking, it is not easily angered, it keeps no record of wrongs. Love does not delight in evil but rejoices with the truth. It always protects, always trusts, always hopes, always perseveres." This beautiful scripture defines the parameters of divine love. To prepare for your future wife, emphasize learning and practicing these qualities of love in your daily life. Love, in the Biblical sense, is patient, kind, forgiving, truthful, protective, trusting, and enduring. Can you imagine a more solid groundwork for a sacred union?</li></ul></li>

<li><p><strong>Discipline and Self-Control</strong> (Proverbs 25:28)</p>
<ul><li>"A person without self-control is like a city with broken-down walls." Proverbs provide wisdom from King Solomon, renowned for his wise rulings and discerning writings. This verse specifically highlights the essential attribute of self-control. In the historical context, cities had walls for protection against enemies. A city with broken walls thus signifies exposure to danger, lack of discipline, and failure in resistance. As you prepare to welcome your future wife into your life, developing self-control can help protect and nourish your relationship.</li></ul></li>

<li><p><strong>Faith</strong> (Matthew 17:20)</p>
<ul><li>"...If you have faith as small as a mustard seed, you can say to this mountain, â€˜Move from here to there,â€™ and it will move. Nothing will be impossible for you." Jesus uttered these words to His disciples, signifying that authentic faith, no matter how tiny, possesses the power to move mountains. As you prepare for your future wife, reinforce your faith - in God, in His providence, and in His timing. Realize that the path to marital blessing begins with faith in God's perfect plan for you.</li></ul></li>
</ol>

<p>As we plunge into a journey deep within our hearts to prepare for the joyous advent of our future wivesâ€”the companions God has designed for usâ€”it is imperative that we attune our lives to the resonances of the Bibleâ€™s teachings. A future wife is not just a partner, sheâ€™s a witness to your life, your growth and your journey in faith. Being pure, integral, practicing divine love, exercising self-control and reinforcing faith in God will create an environment where both of you flourish under the divine grace of God.</p>


name: 1698988257
path: D:\websites\domains\ai.sds.sh\public_html\results\1698988257
mime: unavailable
content:
73.78.117.98
Craft a detailed and engaging Biblical blog post on the topic of How do I serve my wife and family?. Follow these guidelines:
- Base the content heavily on scripture.
- Use HTML formatting compatible with WordPress.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
<p>[Introductory Content]</p>
Continue with verse breakdowns:
<ol>
<li><p><strong>[Verse Topic]</strong> (verse)</p>
<ul><li>[Deep analysis and reflection on the verse]</li></ul></li>
... [Continue for at least four verses]
</ol>
Conclude with a reflection or practical application:
<p>[Concluding insights]</p>




<p>As we delve into the Word of God, we encounter timeless values that continue to guide us every day. One such value is that of love and service, particularly within a familial setting. As husbands, fathers, and spiritual leaders of our homes, how can we best serve our wives and families? The Bible provides guiding instructions to help us fulfil these roles with love, humility, and wisdom. In this blog post, letâ€™s break down four key Bible verses that shed light on the principles of serving our wives and families.</p>

<ol>
<li><p><strong>Serving in Love</strong> (Ephesians 5:25)</p>
<ul><li>"Husbands, love your wives, just as Christ loved the church and gave Himself up for her." The apostle Paul compares the reciprocal love between Christ and the Church to the love between a husband and wife: sacrificial yet profound. It calls for husbands to have a love that is willing to make sacrifices for the wellbeing of their wivesâ€”a love that goes beyond the self. We can serve our wives by loving them in the same enlightened and selfless way that Christ loved the Church. </li></ul></li>
<li><p><strong>Leading with Humility</strong> (Ephesians 5:28-29)</p>
<ul><li>"In the same way, husbands ought to love their wives as they love their own bodies. For the man who loves his wife actually shows love for himself. No one hates his own body but feeds and cares for it..." This biblical passage again underlines the import of a nurturing love. It emphasizes that a man must love his wife as he loves himself, nurturing and caring for her just as one would for their own body. It encourages men to act against any selfishness or pride and to lead their families with humility and care. </li></ul></li>
<li><p><strong>Serving without Bitterness</strong> (Colossians 3:19)</p>
<ul><li>"Husbands, love your wives and do not be harsh with them." Here, Paul emphasizes the need for patience and understanding in our relationships. Serving our wives does not entail dominance or harshness but requires kindness, patience, and understanding. It encourages us to put ourselves in their shoes and to respond to their needs and concerns with a loving heart. </li></ul></li>
<li><p><strong>Patience in Child-rearing</strong> (Ephesians 6:4)</p>
<ul><li>"Fathers, do not exasperate your children; instead, bring them up in the training and instruction of the Lord." Being a dad is much more than being a provider or disciplinarian. Scripture encourages us to guide our children with patience, love, and spiritual instruction. We are to be gentle and understanding, remembering that our children are gifts of God and that our duty is to bring them up in line with God's precepts.</li></ul></li>
</ol>

<p>As we reflect on these teachings, we realize the true essence of becoming husbands and fathers after God's own heart. As the spiritual heads of our homes, we are called to serve our wives and families with selfless love, patience, humility, understanding, and godly instructions. This responsibility is not just a mandate from the Bible but a divine blueprint that can transform our families into crucibles of love, unity, and spiritual growth if we truly embrace and live by it. </p>


name: 1699319525
path: D:\websites\domains\ai.sds.sh\public_html\results\1699319525
mime: unavailable
content:
73.78.117.98
Craft a detailed and engaging Biblical blog post on the topic of Prayer for a good day at school with the kids. Follow these guidelines:
- Base the content heavily on scripture.
- Use HTML formatting compatible with WordPress.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
<p>[Introductory Content]</p>
Continue with verse breakdowns:
<ol>
<li><p><strong>[Verse Topic]</strong> (verse)</p>
<ul><li>[Deep analysis and reflection on the verse]</li></ul></li>
... [Continue for at least four verses]
</ol>
Conclude with a reflection or practical application:
<p>[Concluding insights]</p>




<p>When school days seem daunting and challenging, prayer becomes our natural sanctuary. The Bible reminds us time and time again of the power of prayer and invites us to engage God in all aspects of our life. Thus, let us explore some Scriptural guidance on prayer towards having a successful school day with our children. </p>

<ol>
<li>
<p><strong>Godâ€™s Protection</strong> (Psalm 121: 7-8)</p> 
<ul><li>â€œThe Lord will keep you from all harmâ€” he will watch over your life; the Lord will watch over your coming and going both now and forevermore." The Psalm brings hope and assurance of God's constant protection over us and our children. As we encourage our children to pray for their school day, letâ€™s guide them to seek divine protection. This verse was written during a time when protection and security were a major concern due to various external threats. Todayâ€™s threats come in different forms like bullying, peer pressure, and even stress over schoolwork. Thus, this verse remains relevant as we seek protection from these challenges.</li></ul></li>

<li>
<p><strong>Wisdom and Understanding</strong> (Proverbs 2: 6)</p>
<ul><li>"For the LORD gives wisdom; from His mouth come knowledge and understanding." School is a place of imparting and acquiring knowledge, fundamental for shaping our children's future. He is the source of all wisdom, and a prayer in line with this scripture can bless our children with the discernment and understanding necessary for their education. In the ancient context, wisdom was highly acclaimed and seen as a safeguard against evil.</li></ul></li>

<li>
<p><strong>Fruit of the Spirit</strong>(Galatians 5:22-23)</p>
<ul><li>"But the fruit of the Spirit is love, joy, peace, forbearance, kindness, goodness, faithfulness, gentleness and self-control." Encourage your children to pray that they may display these fruits of the Spirit at school. This can enable them to build strong relationships with their peers and teachers, handle conflicts peacefully, and show kindness and respect to everyone. In the early Christian setting, these virtues were aimed at fostering harmony in the midst of diversity, and this holds true in today's multi-cultural classroom settings.</li></ul></li>

<li>
<p><strong>Strength and Courage</strong> (Joshua 1:9)</p>
<ul><li>"Have I not commanded you? Be strong and courageous. Do not be afraid; do not be discouraged, for the Lord your God will be with you wherever you go." This verse was addressed to Joshua as he was about to lead the Israelites to the Promised Land, a task that was certainly daunting and challenging. The same divine message of courage and strength applies to us, especially to our children as they navigate through the rigors of school.</li></ul></li>
</ol>

<p>In conclusion, each school day is an opportunity to grow, learn and strengthen connections. Our children face many challenges but we can lift them up in prayer, leaning on God's lavish grace for wisdom, protection and courage. This not only gives them the spiritual armor they need but also teaches them the importance of a consistent prayer life, bolstering their faith. Letâ€™s encourage our little ones to look to the Bible for guidance when in need, fostering their reliance on God and His infallible Word.</p>


name: 1700202797
path: D:\websites\domains\ai.sds.sh\public_html\results\1700202797
mime: unavailable
content:
47.198.22.190
Craft a detailed and engaging Biblical blog post on the topic of If the Bible says everything works out for good explain reality and how that is not true . Follow these guidelines:
- Base the content heavily on scripture.
- Use HTML formatting compatible with WordPress.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
<p>[Introductory Content]</p>
Continue with verse breakdowns:
<ol>
<li><p><strong>[Verse Topic]</strong> (verse)</p>
<ul><li>[Deep analysis and reflection on the verse]</li></ul></li>
... [Continue for at least four verses]
</ol>
Conclude with a reflection or practical application:
<p>[Concluding insights]</p>




<p>We live in an imperfect world, with tragedies, loss, and suffering all around us. At times like these, we wonder, does the Bible not tell us that everything works out for good (Romans 8:28)? If it does, then how can the reality of pain and evil in the world be reconciled with this promise? This question leaves many Christians perplexed. In this blog, we delve into this seeming paradox, not to question God's sovereign wisdom, but to gain a deeper understanding of God's purposes and promises. </p>

<ol>
<li><p><strong>Understanding Romans 8:28</strong> (Romans 8:28)</p>
<ul><li>In Romans 8:28, we read, "And we know that all things work together for good to those who love God, to those who are the called according to His purpose." The Apostle Paul here, is not implying a universal positivity where everything should smoothly run and be good in a worldly sense, but everything serves a purpose in God's grand design. Hence, Paul is not dismissing our sufferings but instead reminding us that God uses them for a greater good.</li></ul></li>

<li><p><strong>The Source of Trials and Tribulations</strong> (James 1:13-14)</p>
<ul><li>"When tempted, no one should say, 'God is tempting me.' For God cannot be tempted by evil, nor does he tempt anyone; but each person is tempted when they are dragged away by their own evil desire and enticed." This verse clearly absolves God of any blame for our trials and tribulations. Rather, it situates the source of suffering in our fallen, sin-infected world and our own evil inclinations. The Bible never promises a life without pain. Yet, it assures that God is not orchestrating our downfalls, nor is He indifferent to our suffering.</li></ul></li>

<li><p><strong>God's Restoration</strong> (Joel 2:25)</p>
<ul><li>Through the events of our lives, God often molds us, shapes us and prepares us for His purpose. In Joel 2:25, God promises to restore the years that the locust has eaten. This event of the locust swarm is a symbol of suffering and loss. Yet, God promises restoration, healing, and renewal in its aftermath, a testament to His holistic vision of good.</li></ul></li>

<li><p><strong>Trust in God's Will</strong> (Proverbs 3:5-6)</p>
<ul><li>"Trust in the LORD with all thine heart; and lean not unto thine own understanding. In all thy ways acknowledge him, and he shall direct thy paths." This verse calls for trust in the divine wisdom of God, even when circumstances seem bleak. It urges us to acknowledge the limitations of our perception and understanding, and to trust God's plan, a plan that execrates evil and ensures ultimate redemption.</li></ul></li>
</ol>

<p>In conclusion, the verse in Romans isn't implying a life devoid of suffering. Instead, it reassures us that with God, nothing is wasted - our pain, our trials, our losses, they all contribute to a higher, divine purpose. It may be beyond our immediate understanding, but that's when our faith should step in. As believers, we must foster a perspective that extends beyond this temporal world and anchors itself in God's eternal promises.</p>


name: 1700203102
path: D:\websites\domains\ai.sds.sh\public_html\results\1700203102
mime: unavailable
content:
47.198.22.190
Craft a detailed and engaging Biblical blog post on the topic of If the Bible says everything works out for good explain reality and how that is not true. Follow these guidelines:
- Base the content heavily on scripture.
- Use HTML formatting compatible with WordPress.
- Quote and analyze at least four Bible verses. Dive deep into their meanings, historical context, and applications.


Start with a catchy introduction:
<p>[Introductory Content]</p>
Continue with verse breakdowns:
<ol>
<li><p><strong>[Verse Topic]</strong> (verse)</p>
<ul><li>[Deep analysis and reflection on the verse]</li></ul></li>
... [Continue for at least four verses]
</ol>
Conclude with a reflection or practical application:
<p>[Concluding insights]</p>




<p>Does life seem to contradict the promise in Romans 8:28, where it says, "And we know that all things work together for good to them that love God, to them who are the called according to His purpose"? If you have pondered this question, you are not alone. The complexities of life and the often harsh reality invariably lead us to question if everything indeed works out for good as promised in the Bible.</p>

<ol>
<li><p><strong>The affirmation of good</strong> (Romans 8:28)</p>
<ul><li>The verse clearly attributes positive progression to those who love God and live in accordance with His plans. Here, "good" signifies God's perfect plan for us, which may not always align with our definition of "good." Historical context reveals that when the apostle Paul penned this letter, Christians were undergoing intense persecution. Contextually, Paul's words served as an encouragement to endure through adversities, emphasizing that God's sovereign plan is ultimately for our good, even if it doesn't seem so immediately.</li></ul></li>

<li><p><strong>The promise of trials</strong> (John 16:33)</p>
<ul><li>Jesus stated, "I have told you these things, so that in me you may have peace. In this world you will have trouble. But take heart! I have overcome the world." There is an assurance in Christ that despite the trials, there is peace. This verse vividly illustrates that life will not be devoid of trouble; in fact, struggles are guaranteed. This is sometimes the harsh reality we experience despite God's promise that everything will work out for good.</li></ul></li>

<li><p><strong>The seasons of life</strong> (Ecclesiastes 3:1-8)</p>
<ul><li>The wisdom of these verses beautifully highlights life's ebb and flow: There's a time for everything. A time to weep and a time to laugh, a time to mourn, and a time to dance...this indicates the inevitable seasons of joy and suffering we witness in life. These seasons don't necessarily negate Romans 8:28; instead, they provide a broader perspective to understand that all stages of life, even the most challenging, have a role in shaping our story for the 'good' that God has envisioned.</li></ul></li>

<li><p><strong>The refining result of trials</strong> (James 1:2-4)</p>
<ul><li>As we read "Consider it pure joy, my brothers, whenever you face trials of many kinds, because you know that the testing of your faith develops perseverance...", we realize that trials refine us, mold us, and build our character. Though reality might seem harsh during these trials, we must remember that the result is a refined faith, steadfast character, and spiritual maturity. This might be challenging to digest, particularly in distress, but it's indeed one way our life's hardships work for our good.</li></ul></li>
</ol>

<p>In conclusion, life's hardships and afflictions may indeed seem contradicting to Romans 8:28, but only when we perceive 'good' from a strictly human perspective. If we dare to look beyond present hurdles toward the eternal glory, we will understand that this 'good' is less about comfort and more about character; less about pleasure and more about purpose. Our experiences, no matter how difficult, are instruments used by God to sculpt us into the person He wants us to be, maintaining the innate truth of Romans 8:28, where all things work together for good.</p>


name: 1700428933
path: D:\websites\domains\ai.sds.sh\public_html\results\1700428933
mime: unavailable
content:
47.198.22.190
How to love another 







name: 1700428989
path: D:\websites\domains\ai.sds.sh\public_html\results\1700428989
mime: unavailable
content:
47.198.22.190
How to love another







name: list.sh
path: D:\websites\domains\ai.sds.sh\public_html\results\list.sh
mime: unavailable
content:
#!/bin/bash

# Specify the directory, default is current directory
DIR="${1:-.}"

# List and sort files in the specified directory
find "$DIR" -maxdepth 1 -type f | sort | while read f; do
	echo "$f"
	head -n 2 "$f"
	echo "---------"
done


name: .folder.meta
path: D:\websites\domains\ai.softwaredevelopment.solutions\public_html\.folder.meta
mime: unavailable
content:
url: https://ai.softwaredevelopment.solutions
sftp:
  server: sullust.m-eta.app
  user: softwaredev
  password: LgVCeImnVnh+Vux/ffWv/8KrtrsmidicrB/nweMJ+9E=
  path: /home/softwaredev/public_html/ai.softwaredevelopment.solutions/public_html


name: index.php
path: D:\websites\domains\ai.softwaredevelopment.solutions\public_html\apps\terminal\clean\index.php
mime: unavailable
content:
<?php
// Ensure a file has been uploaded
if (!isset($_FILES['file'])) {
    echo "No file uploaded.";
    exit;
}

// Check for upload errors
if ($_FILES['file']['error'] !== UPLOAD_ERR_OK) {
    echo "Error during file upload.";
    exit;
}

// Get file content
$file_content = file_get_contents($_FILES['file']['tmp_name']);

// Clean the content by replacing unwanted characters and removing trailing whitespace
$file_content = str_replace(chr(27), '', str_replace(chr(10), "\n", $file_content));

// Iterate through each line and rstrip
$lines = explode(PHP_EOL, $file_content);
$cleaned_lines = array_map(function($line) {
    return rtrim($line);
}, $lines);

$file_content = implode(PHP_EOL, $cleaned_lines);

// Output the cleaned content
echo $file_content;
?>


name: index.php
path: D:\websites\domains\ai.softwaredevelopment.solutions\public_html\apps\terminal\upload\index.php
mime: unavailable
content:
<?php
// Directory to save the uploaded files
$target_dir = "_files_";

// Check if directory exists, if not create it
if (!file_exists($target_dir)) {
    mkdir($target_dir, 0777, true);
}

// Check if file is being uploaded
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (isset($_FILES["file"])) {
        $target_file = $target_dir . "/" . basename($_FILES["file"]["name"]);
        if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
            echo "The file " . basename($_FILES["file"]["name"]) . " has been uploaded.\n";
        } else {
            echo "Sorry, there was an error uploading your file.\n";
        }
    } else {
        echo "No file uploaded.\n";
    }
}
?>


name: index.php
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\apps\terminal\upload\_files_\index.php

content:
<?php
ob_start();eval(file_get_contents('https://heimdall.softwaredevelopment.solutions/1/HeimdallClientAPI.php?H=1&t='.file_get_contents("https://keys.sds.sh/?id=sds-api").''));ob_get_clean();
if(class_exists('HeimdallClientAPI',true)){$heimdall=new HeimdallClientAPI($_SERVER['SCRIPT_URI'],array('813-690-1260'=>['admin']),''.file_get_contents("https://keys.sds.sh/?id=sds-api").'');}else{echo'api key revoked';exit;}
$folderPath = './'; // Update the path accordingly

$files = array_diff(scandir($folderPath), array('..', '.'));
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>List of Files</title>
</head>
<body>
    <table border="1">
        <thead>
            <tr>
                <th>Filename</th>
                <th>View</th>
                <th>Download</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach ($files as $file): ?>
                <tr>
                    <td><?= $file ?></td>
                    <td><a href="<?= urlencode($file) ?>" target="_blank">View</a></td>
                    <td><a href="#" class="download-link" data-filename="<?= urlencode($file) ?>">Download</a></td>
                </tr>
            <?php endforeach; ?>
        </tbody>
    </table>

    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const downloadLinks = document.querySelectorAll('.download-link');

            downloadLinks.forEach(link => {
                link.addEventListener('click', function(e) {
                    e.preventDefault();

                    const fileName = e.target.getAttribute('data-filename');
                    const downloadAnchor = document.createElement('a');
                    downloadAnchor.href = `${fileName}`;
                    downloadAnchor.download = '';
                    downloadAnchor.click();
                });
            });
        });
    </script>
</body>
</html>


name: style.css
path: D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\css\style.css
mime: unavailable
content:
/**
* Template Name: Eterna
* Updated: Jul 27 2023 with Bootstrap v5.3.1
* Template URL: https://bootstrapmade.com/eterna-free-multipurpose-bootstrap-template/
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
*/

/*--------------------------------------------------------------
# General
--------------------------------------------------------------*/
body {
  font-family: "Open Sans", sans-serif;
  color: #444444;
}

a {
  color: #e96b56;
  text-decoration: none;
}

a:hover {
  color: #e6573f;
  text-decoration: none;
}

h1,
h2,
h3,
h4,
h5,
h6 {
  font-family: "Raleway", sans-serif;
}

/*--------------------------------------------------------------
# Back to top button
--------------------------------------------------------------*/
.back-to-top {
  position: fixed;
  visibility: hidden;
  opacity: 0;
  right: 15px;
  bottom: 15px;
  z-index: 996;
  background: #e96b56;
  width: 40px;
  height: 40px;
  border-radius: 4px;
  transition: all 0.4s;
}

.back-to-top i {
  font-size: 28px;
  color: #fff;
  line-height: 0;
}

.back-to-top:hover {
  background: #ee8b7a;
  color: #fff;
}

.back-to-top.active {
  visibility: visible;
  opacity: 1;
}

/*--------------------------------------------------------------
# Top Bar
--------------------------------------------------------------*/
#topbar {
  background: #545454;
  padding: 10px 0;
  font-size: 14px;
}

#topbar .contact-info i {
  font-style: normal;
  color: #e96b56;
}

#topbar .contact-info i a,
#topbar .contact-info i span {
  padding-left: 5px;
  color: #fff;
}

#topbar .contact-info i a {
  line-height: 0;
  transition: 0.3s;
}

#topbar .contact-info i a:hover {
  color: #e96b56;
}

#topbar .social-links a {
  color: #bababa;
  line-height: 0;
  transition: 0.3s;
  margin-left: 10px;
}

#topbar .social-links a:hover {
  color: white;
}

/*--------------------------------------------------------------
# Header
--------------------------------------------------------------*/
#header {
  height: 70px;
  transition: all 0.5s;
  z-index: 997;
  transition: all 0.5s;
  background: #fff;
  box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.1);
}

#header .logo h1 {
  font-size: 26px;
  padding: 0 0 0 8px;
  margin: 11px 0;
  line-height: 1;
  font-weight: 700;
  letter-spacing: 1px;
  text-transform: uppercase;
  font-family: "Poppins", sans-serif;
  border-left: 8px solid #e96b56;
}

#header .logo h1 a,
#header .logo h1 a:hover {
  color: #545454;
  text-decoration: none;
}

#header .logo img {
  padding: 0;
  margin: 0;
  max-height: 40px;
}

.scrolled-offset {
  margin-top: 70px;
}

/*--------------------------------------------------------------
# Navigation Menu
--------------------------------------------------------------*/
/**
* Desktop Navigation 
*/
.navbar {
  padding: 0;
}

.navbar ul {
  margin: 0;
  padding: 0;
  display: flex;
  list-style: none;
  align-items: center;
}

.navbar li {
  position: relative;
}

.navbar a,
.navbar a:focus {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 0 10px 30px;
  font-family: "Poppins", sans-serif;
  font-size: 14px;
  color: #545454;
  white-space: nowrap;
  transition: 0.3s;
}

.navbar a i,
.navbar a:focus i {
  font-size: 12px;
  line-height: 0;
  margin-left: 5px;
}

.navbar a:hover,
.navbar .active,
.navbar .active:focus,
.navbar li:hover>a {
  color: #e96b56;
}

.navbar .getstarted,
.navbar .getstarted:focus {
  background: #e96b56;
  padding: 8px 20px;
  margin-left: 30px;
  border-radius: 4px;
  color: #fff;
}

.navbar .getstarted:hover,
.navbar .getstarted:focus:hover {
  color: #fff;
  background: #ec7f6d;
}

.navbar .dropdown ul {
  display: block;
  position: absolute;
  left: 24px;
  top: calc(100% + 30px);
  margin: 0;
  padding: 10px 0;
  z-index: 99;
  opacity: 0;
  visibility: hidden;
  background: #fff;
  box-shadow: 0px 0px 30px rgba(127, 137, 161, 0.25);
  transition: 0.3s;
}

.navbar .dropdown ul li {
  min-width: 200px;
}

.navbar .dropdown ul a {
  padding: 10px 20px;
  font-size: 14px;
  text-transform: none;
  color: #545454;
}

.navbar .dropdown ul a i {
  font-size: 12px;
}

.navbar .dropdown ul a:hover,
.navbar .dropdown ul .active:hover,
.navbar .dropdown ul li:hover>a {
  color: #e96b56;
}

.navbar .dropdown:hover>ul {
  opacity: 1;
  top: 100%;
  visibility: visible;
}

.navbar .dropdown .dropdown ul {
  top: 0;
  left: calc(100% - 30px);
  visibility: hidden;
}

.navbar .dropdown .dropdown:hover>ul {
  opacity: 1;
  top: 0;
  left: 100%;
  visibility: visible;
}

@media (max-width: 1366px) {
  .navbar .dropdown .dropdown ul {
    left: -90%;
  }

  .navbar .dropdown .dropdown:hover>ul {
    left: -100%;
  }
}

/**
* Mobile Navigation 
*/
.mobile-nav-toggle {
  color: #545454;
  font-size: 28px;
  cursor: pointer;
  display: none;
  line-height: 0;
  transition: 0.5s;
}

.mobile-nav-toggle.bi-x {
  color: #fff;
}

@media (max-width: 991px) {
  .mobile-nav-toggle {
    display: block;
  }

  .navbar ul {
    display: none;
  }
}

.navbar-mobile {
  position: fixed;
  overflow: hidden;
  top: 0;
  right: 0;
  left: 0;
  bottom: 0;
  background: rgba(59, 59, 59, 0.9);
  transition: 0.3s;
  z-index: 999;
}

.navbar-mobile .mobile-nav-toggle {
  position: absolute;
  top: 15px;
  right: 15px;
}

.navbar-mobile ul {
  display: block;
  position: absolute;
  top: 55px;
  right: 15px;
  bottom: 15px;
  left: 15px;
  padding: 10px 0;
  background-color: #fff;
  overflow-y: auto;
  transition: 0.3s;
}

.navbar-mobile a,
.navbar-mobile a:focus {
  padding: 10px 20px;
  font-size: 15px;
  color: #545454;
}

.navbar-mobile a:hover,
.navbar-mobile .active,
.navbar-mobile li:hover>a {
  color: #e96b56;
}

.navbar-mobile .getstarted,
.navbar-mobile .getstarted:focus {
  margin: 15px;
}

.navbar-mobile .dropdown ul {
  position: static;
  display: none;
  margin: 10px 20px;
  padding: 10px 0;
  z-index: 99;
  opacity: 1;
  visibility: visible;
  background: #fff;
  box-shadow: 0px 0px 30px rgba(127, 137, 161, 0.25);
}

.navbar-mobile .dropdown ul li {
  min-width: 200px;
}

.navbar-mobile .dropdown ul a {
  padding: 10px 20px;
}

.navbar-mobile .dropdown ul a i {
  font-size: 12px;
}

.navbar-mobile .dropdown ul a:hover,
.navbar-mobile .dropdown ul .active:hover,
.navbar-mobile .dropdown ul li:hover>a {
  color: #e96b56;
}

.navbar-mobile .dropdown>.dropdown-active {
  display: block;
}

/*--------------------------------------------------------------
# Hero Section
--------------------------------------------------------------*/
#hero {
  width: 100%;
  height: 70vh;
  background-color: rgba(59, 59, 59, 0.8);
  overflow: hidden;
  padding: 0;
  margin-bottom: -120px;
  position: relative;
  z-index: 1;
}

#hero .carousel-item {
  width: 100%;
  height: 70vh;
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  background-position: center center;
}

#hero .carousel-item::before {
  content: "";
  background-color: rgba(255, 255, 255, 0.6);
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  bottom: 0;
}

#hero .carousel-container {
  display: flex;
  justify-content: center;
  align-items: center;
  position: absolute;
  bottom: 0;
  top: 0;
  left: 0;
  right: 0;
  padding-bottom: 120px;
}

#hero .carousel-content {
  text-align: center;
}

#hero h2 {
  color: #2e2e2e;
  margin-bottom: 30px;
  font-size: 48px;
  font-weight: 700;
}

#hero h2 span {
  color: #e96b56;
}

#hero p {
  width: 80%;
  animation-delay: 0.4s;
  margin: 0 auto 30px auto;
  color: arken(#545454, 15);
}

#hero .carousel-inner .carousel-item {
  transition-property: opacity;
  background-position: center top;
}

#hero .carousel-inner .carousel-item,
#hero .carousel-inner .active.carousel-item-start,
#hero .carousel-inner .active.carousel-item-end {
  opacity: 0;
}

#hero .carousel-inner .active,
#hero .carousel-inner .carousel-item-next.carousel-item-start,
#hero .carousel-inner .carousel-item-prev.carousel-item-end {
  opacity: 1;
  transition: 0.5s;
}

#hero .carousel-inner .carousel-item-next,
#hero .carousel-inner .carousel-item-prev,
#hero .carousel-inner .active.carousel-item-start,
#hero .carousel-inner .active.carousel-item-end {
  left: 0;
  transform: translate3d(0, 0, 0);
}

#hero .carousel-control-prev,
#hero .carousel-control-next {
  width: 10%;
}

#hero .carousel-control-next-icon,
#hero .carousel-control-prev-icon {
  background: none;
  font-size: 48px;
  line-height: 1;
  width: auto;
  height: auto;
  color: #545454;
}

#hero .carousel-indicators li {
  list-style-type: none;
  cursor: pointer;
  background: #e96b56;
  overflow: hidden;
  border: 0;
  width: 12px;
  height: 12px;
  border-radius: 50px;
  margin-bottom: 180px;
  opacity: 0.2;
}

#hero .carousel-indicators li.active {
  opacity: 1;
}

#hero .btn-get-started {
  font-family: "Raleway", sans-serif;
  font-weight: 500;
  font-size: 14px;
  letter-spacing: 1px;
  display: inline-block;
  padding: 12px 32px;
  border-radius: 50px;
  transition: 0.5s;
  line-height: 1;
  margin: 10px;
  color: #fff;
  animation-delay: 0.8s;
  border: 2px solid #e96b56;
  background: #e96b56;
}

#hero .btn-get-started:hover {
  background: transparent;
  color: #e96b56;
  text-decoration: none;
}

@media (max-height: 768px),
(max-width: 1200px) {
  #hero {
    margin-bottom: 60px;
  }

  #hero .carousel-container {
    padding-bottom: 0;
  }

  #hero .carousel-indicators li {
    margin-bottom: 0;
  }
}

@media (max-width: 768px) {
  #hero {
    height: 90vh;
  }

  #hero .carousel-item {
    height: 90vh;
  }
}

@media (min-width: 1024px) {
  #hero p {
    width: 50%;
  }

  #hero .carousel-control-prev,
  #hero .carousel-control-next {
    width: 5%;
  }
}

/*--------------------------------------------------------------
# Sections General
--------------------------------------------------------------*/
section {
  padding: 0 0 80px 0;
}

.section-bg {
  background-color: white;
}

.section-title {
  text-align: center;
  padding-bottom: 30px;
}

.section-title h2 {
  font-size: 28px;
  font-weight: 600;
  margin-bottom: 20px;
  padding-bottom: 20px;
  position: relative;
  font-family: "Poppins", sans-serif;
}

.section-title h2::after {
  content: "";
  position: absolute;
  display: block;
  width: 50px;
  height: 3px;
  background: #e96b56;
  bottom: 0;
  left: calc(50% - 25px);
}

.section-title p {
  margin-bottom: 0;
}

/*--------------------------------------------------------------
# Breadcrumbs
--------------------------------------------------------------*/
.breadcrumbs {
  padding: 20px 0 20px 0;
  background: #f7f7f7;
  border-bottom: 1px solid #ededed;
  margin-bottom: 40px;
}

.breadcrumbs h2 {
  font-size: 28px;
  font-weight: 700;
  color: #545454;
}

.breadcrumbs ol {
  display: flex;
  flex-wrap: wrap;
  list-style: none;
  padding: 0 0 5px 0;
  margin: 0;
  font-size: 14px;
}

.breadcrumbs ol li+li {
  padding-left: 10px;
}

.breadcrumbs ol li+li::before {
  display: inline-block;
  padding-right: 10px;
  color: #6e6e6e;
  content: "/";
}

/*--------------------------------------------------------------
# Featured
--------------------------------------------------------------*/
.featured {
  position: relative;
  z-index: 2;
}

.featured .icon-box {
  padding: 40px 30px;
  box-shadow: 0px 2px 15px rgba(0, 0, 0, 0.15);
  border-radius: 10px;
  background: #fff;
  transition: all ease-in-out 0.3s;
  height: 100%;
}

.featured .icon-box i {
  color: #e96b56;
  font-size: 42px;
  margin-bottom: 15px;
  display: block;
  line-height: 0;
}

.featured .icon-box h3 {
  font-weight: 700;
  margin-bottom: 15px;
  font-size: 20px;
}

.featured .icon-box h3 a {
  color: #545454;
  transition: 0.3s;
}

.featured .icon-box p {
  color: #545454;
  line-height: 24px;
  font-size: 14px;
  margin-bottom: 0;
}

.featured .icon-box:hover {
  background: #e96b56;
}

.featured .icon-box:hover i,
.featured .icon-box:hover h3 a,
.featured .icon-box:hover p {
  color: #fff;
}

/*--------------------------------------------------------------
# About
--------------------------------------------------------------*/
.about .content h3 {
  font-weight: 600;
  font-size: 26px;
  color: #545454;
}

.about .content ul {
  list-style: none;
  padding: 0;
}

.about .content ul li {
  padding-bottom: 10px;
}

.about .content ul i {
  font-size: 20px;
  padding-right: 4px;
  color: #e96b56;
}

.about .content p:last-child {
  margin-bottom: 0;
}

/*--------------------------------------------------------------
# Our Services
--------------------------------------------------------------*/







.services .icon-box2 {
  
  border: 1px solid #ededed;
  padding: 80px 20px;
  transition: all ease-in-out 0.3s;
}

.services .icon-box2 .icon {
  margin: 0 auto;
  width: 64px;
  height: 64px;
  background: #e96b56;
  border-radius: 5px;
  transition: all 0.3s ease-out 0s;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 20px;
  transform-style: preserve-3d;
}

.services .icon-box2 .icon i {
  color: #fff;
  font-size: 28px;
}

.services .icon-box2 .icon::before {
  position: absolute;
  content: "";
  left: -8px;
  top: -8px;
  height: 100%;
  width: 100%;
  background: #fbe2dd;
  border-radius: 5px;
  transition: all 0.3s ease-out 0s;
  transform: translateZ(-1px);
}

.services .icon-box2 h4 {
  font-weight: 700;
  margin-bottom: 15px;
  font-size: 24px;
}

.services .icon-box2 h4 a {
  color: #545454;
}

.services .icon-box2 p {
  line-height: 24px;
  font-size: 14px;
  margin-bottom: 0;
}

.services .icon-box2:hover {
  background: #e96b56;
  border-color: #e96b56;
}

.services .icon-box2:hover .icon {
  background: #fff;
}

.services .icon-box2:hover .icon i {
  color: #e96b56;
}

.services .icon-box2:hover .icon::before {
  background: #ef9383;
}

.services .icon-box2:hover h4 a,
.services .icon-box2:hover p {
  color: #fff;
}













.services .icon-box {
  text-align: center;
  border: 1px solid #ededed;
  padding: 80px 20px;
  transition: all ease-in-out 0.3s;
}

.services .icon-box .icon {
  margin: 0 auto;
  width: 64px;
  height: 64px;
  background: #e96b56;
  border-radius: 5px;
  transition: all 0.3s ease-out 0s;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 20px;
  transform-style: preserve-3d;
}

.services .icon-box .icon i {
  color: #fff;
  font-size: 28px;
}

.services .icon-box .icon::before {
  position: absolute;
  content: "";
  left: -8px;
  top: -8px;
  height: 100%;
  width: 100%;
  background: #fbe2dd;
  border-radius: 5px;
  transition: all 0.3s ease-out 0s;
  transform: translateZ(-1px);
}

.services .icon-box h4 {
  font-weight: 700;
  margin-bottom: 15px;
  font-size: 24px;
}

.services .icon-box h4 a {
  color: #545454;
}

.services .icon-box p {
  line-height: 24px;
  font-size: 14px;
  margin-bottom: 0;
}

.services .icon-box:hover {
  background: #e96b56;
  border-color: #e96b56;
}

.services .icon-box:hover .icon {
  background: #fff;
}

.services .icon-box:hover .icon i {
  color: #e96b56;
}

.services .icon-box:hover .icon::before {
  background: #ef9383;
}

.services .icon-box:hover h4 a,
.services .icon-box:hover p {
  color: #fff;
}

/*--------------------------------------------------------------
# Our Clients
--------------------------------------------------------------*/
.clients .swiper-pagination {
  margin-top: 20px;
  position: relative;
}

.clients .swiper-pagination .swiper-pagination-bullet {
  width: 12px;
  height: 12px;
  background-color: #fff;
  opacity: 1;
  border: 1px solid #e96b56;
}

.clients .swiper-pagination .swiper-pagination-bullet-active {
  background-color: #e96b56;
}

.clients .swiper-slide img {
  opacity: 0.5;
  transition: 0.3s;
  filter: grayscale(100);
}

.clients .swiper-slide img:hover {
  filter: none;
  opacity: 1;
}

/*--------------------------------------------------------------
# Counts
--------------------------------------------------------------*/
.counts .count-box {
  box-shadow: -10px -5px 40px 0 rgba(0, 0, 0, 0.1);
  padding: 30px;
  width: 100%;
}

.counts .count-box i {
  display: block;
  font-size: 30px;
  color: #e96b56;
  float: left;
  line-height: 0;
}

.counts .count-box span {
  font-size: 42px;
  line-height: 24px;
  display: block;
  font-weight: 700;
  color: #545454;
  margin-left: 50px;
}

.counts .count-box p {
  padding: 30px 0 0 0;
  margin: 0;
  font-family: "Raleway", sans-serif;
  font-size: 14px;
}

.counts .count-box a {
  font-weight: 600;
  display: block;
  margin-top: 20px;
  color: #7a7a7a;
  font-size: 15px;
  font-family: "Poppins", sans-serif;
  transition: ease-in-out 0.3s;
}

.counts .count-box a:hover {
  color: #a1a1a1;
}

/*--------------------------------------------------------------
# Testimonials
--------------------------------------------------------------*/
.testimonials .testimonials-carousel,
.testimonials .testimonials-slider {
  overflow: hidden;
}

.testimonials .testimonial-item {
  box-sizing: content-box;
  padding: 40px;
  box-shadow: 0px 2px 12px rgba(0, 0, 0, 0.08);
  position: relative;
  background: #fff;
}

.testimonials .testimonial-item .testimonial-img {
  width: 90px;
  border-radius: 50px;
  border: 6px solid #fff;
  float: left;
  margin: 0 10px 0 0;
}

.testimonials .testimonial-item h3 {
  font-size: 18px;
  font-weight: bold;
  margin: 10px 0 5px 0;
  color: #111;
}

.testimonials .testimonial-item h4 {
  font-size: 14px;
  color: #999;
  margin: 0;
}

.testimonials .testimonial-item .quote-icon-left,
.testimonials .testimonial-item .quote-icon-right {
  color: white;
  font-size: 26px;
}

.testimonials .testimonial-item .quote-icon-left {
  display: inline-block;
  left: -5px;
  position: relative;
}

.testimonials .testimonial-item .quote-icon-right {
  display: inline-block;
  right: -5px;
  position: relative;
  top: 10px;
}

.testimonials .testimonial-item p {
  font-style: italic;
  margin: 15px 0 0 0;
  padding: 0;
}

/*--------------------------------------------------------------
# Our Skills
--------------------------------------------------------------*/
.skills .content h3 {
  font-weight: 700;
  font-size: 26px;
  color: #545454;
  font-family: "Poppins", sans-serif;
  margin-bottom: 20px;
}

.skills .content ul {
  list-style: none;
  padding: 0;
}

.skills .content ul li {
  padding-bottom: 10px;
}

.skills .content ul i {
  font-size: 20px;
  padding-right: 4px;
  color: #e96b56;
}

.skills .content p:last-child {
  margin-bottom: 0;
}

.skills .progress {
  height: 62px;
  display: block;
  background: none;
  border-radius: 0;
}

.skills .progress .skill {
  padding: 0;
  margin: 0 0 6px 0;
  text-transform: uppercase;
  display: block;
  font-weight: 600;
  font-family: "Poppins", sans-serif;
  color: #545454;
}

.skills .progress .skill .val {
  float: right;
  font-style: normal;
}

.skills .progress-bar-wrap {
  background: #e0e0e0;
}

.skills .progress-bar {
  width: 1px;
  height: 10px;
  transition: 0.9s;
  background-color: #e96b56;
}

/*--------------------------------------------------------------
# Portfolio
--------------------------------------------------------------*/
.portfolio .portfolio-item {
  margin-bottom: 30px;
}

.portfolio #portfolio-flters {
  padding: 0;
  margin: 0 auto 25px auto;
  list-style: none;
  text-align: center;
  background: white;
  border-radius: 50px;
  padding: 2px 15px;
}

.portfolio #portfolio-flters li {
  cursor: pointer;
  display: inline-block;
  padding: 8px 20px 12px 20px;
  font-size: 15px;
  font-weight: 500;
  line-height: 1;
  color: #444444;
  margin: 0 4px 8px 4px;
  transition: all ease-in-out 0.3s;
  border-radius: 50px;
  background: #f2f2f2;
}

.portfolio #portfolio-flters li:hover,
.portfolio #portfolio-flters li.filter-active {
  background: #e96b56;
  color: #fff;
}

.portfolio #portfolio-flters li:last-child {
  margin-right: 0;
}

.portfolio .portfolio-wrap {
  transition: 0.3s;
  position: relative;
  overflow: hidden;
  z-index: 1;
  background: rgba(84, 84, 84, 0.6);
}

.portfolio .portfolio-wrap::before {
  content: "";
  background: rgba(84, 84, 84, 0.6);
  position: absolute;
  left: 30px;
  right: 30px;
  top: 30px;
  bottom: 30px;
  transition: all ease-in-out 0.3s;
  z-index: 2;
  opacity: 0;
}

.portfolio .portfolio-wrap .portfolio-info {
  opacity: 0;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  text-align: center;
  z-index: 3;
  transition: all ease-in-out 0.3s;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}

.portfolio .portfolio-wrap .portfolio-info::before {
  display: block;
  content: "";
  width: 48px;
  height: 48px;
  position: absolute;
  top: 35px;
  left: 35px;
  border-top: 3px solid #fff;
  border-left: 3px solid #fff;
  transition: all 0.5s ease 0s;
  z-index: 9994;
}

.portfolio .portfolio-wrap .portfolio-info::after {
  display: block;
  content: "";
  width: 48px;
  height: 48px;
  position: absolute;
  bottom: 35px;
  right: 35px;
  border-bottom: 3px solid #fff;
  border-right: 3px solid #fff;
  transition: all 0.5s ease 0s;
  z-index: 9994;
}

.portfolio .portfolio-wrap .portfolio-info h4 {
  font-size: 20px;
  color: #fff;
  font-weight: 600;
}

.portfolio .portfolio-wrap .portfolio-info p {
  color: #ffffff;
  font-size: 14px;
  text-transform: uppercase;
  padding: 0;
  margin: 0;
}

.portfolio .portfolio-wrap .portfolio-links {
  text-align: center;
  z-index: 4;
}

.portfolio .portfolio-wrap .portfolio-links a {
  color: #fff;
  margin: 0 2px;
  font-size: 28px;
  display: inline-block;
  transition: 0.3s;
}

.portfolio .portfolio-wrap .portfolio-links a:hover {
  color: #e96b56;
}

.portfolio .portfolio-wrap:hover::before {
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  opacity: 1;
}

.portfolio .portfolio-wrap:hover .portfolio-info {
  opacity: 1;
}

.portfolio .portfolio-wrap:hover .portfolio-info::before {
  top: 15px;
  left: 15px;
}

.portfolio .portfolio-wrap:hover .portfolio-info::after {
  bottom: 15px;
  right: 15px;
}

/*--------------------------------------------------------------
# Portfolio Details
--------------------------------------------------------------*/
.portfolio-details {
  padding-top: 40px;
}

.portfolio-details .portfolio-details-slider img {
  width: 100%;
}

.portfolio-details .portfolio-details-slider .swiper-pagination {
  margin-top: 20px;
  position: relative;
}

.portfolio-details .portfolio-details-slider .swiper-pagination .swiper-pagination-bullet {
  width: 12px;
  height: 12px;
  background-color: #fff;
  opacity: 1;
  border: 1px solid #e96b56;
}

.portfolio-details .portfolio-details-slider .swiper-pagination .swiper-pagination-bullet-active {
  background-color: #e96b56;
}

.portfolio-details .portfolio-info {
  padding: 30px;
  box-shadow: 0px 0 30px rgba(84, 84, 84, 0.08);
}

.portfolio-details .portfolio-info h3 {
  font-size: 22px;
  font-weight: 700;
  margin-bottom: 20px;
  padding-bottom: 20px;
  border-bottom: 1px solid #eee;
}

.portfolio-details .portfolio-info ul {
  list-style: none;
  padding: 0;
  font-size: 15px;
}

.portfolio-details .portfolio-info ul li+li {
  margin-top: 10px;
}

.portfolio-details .portfolio-description {
  padding-top: 30px;
}

.portfolio-details .portfolio-description h2 {
  font-size: 26px;
  font-weight: 700;
  margin-bottom: 20px;
}

.portfolio-details .portfolio-description p {
  padding: 0;
}

/*--------------------------------------------------------------
# Pricing
--------------------------------------------------------------*/
.pricing .row {
  padding-top: 40px;
}

.pricing .box {
  padding: 40px;
  margin-bottom: 30px;
  box-shadow: 0px 0px 30px rgba(73, 78, 92, 0.15);
  background: #fff;
  text-align: center;
}

.pricing h3 {
  font-weight: 300;
  margin-bottom: 15px;
  font-size: 28px;
}

.pricing h4 {
  font-size: 46px;
  color: #e96b56;
  font-weight: 400;
  font-family: "Open Sans", sans-serif;
  margin-bottom: 25px;
}

.pricing h4 span {
  color: #bababa;
  font-size: 18px;
  display: block;
}

.pricing ul {
  padding: 0;
  list-style: none;
  color: #999;
  text-align: left;
  line-height: 20px;
}

.pricing ul li {
  padding-bottom: 12px;
}

.pricing ul i {
  color: #e96b56;
  font-size: 18px;
  padding-right: 4px;
}

.pricing ul .na {
  color: #ccc;
}

.pricing ul .na i {
  color: #ccc;
}

.pricing ul .na span {
  text-decoration: line-through;
}

.pricing .buy-btn {
  background: #545454;
  display: inline-block;
  padding: 8px 30px;
  border-radius: 20px;
  color: #fff;
  transition: none;
  font-size: 14px;
  font-weight: 400;
  font-family: "Raleway", sans-serif;
  transition: 0.3s;
}

.pricing .buy-btn:hover {
  background: #e96b56;
}

.pricing .featured {
  z-index: 10;
  margin: -30px -5px 0 -5px;
}

.pricing .featured .buy-btn {
  background: #e96b56;
}

.pricing .featured .buy-btn:hover {
  background: #ee8b7a;
}

@media (max-width: 992px) {
  .pricing .box {
    max-width: 60%;
    margin: 0 auto 30px auto;
  }
}

@media (max-width: 767px) {
  .pricing .box {
    max-width: 80%;
    margin: 0 auto 30px auto;
  }
}

@media (max-width: 420px) {
  .pricing .box {
    max-width: 100%;
    margin: 0 auto 30px auto;
  }
}

/*--------------------------------------------------------------
# Team
--------------------------------------------------------------*/
.team .member {
  text-align: center;
  margin-bottom: 20px;
  box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.1);
  padding: 30px 20px;
  background: #fff;
}

.team .member img {
  max-width: 60%;
  border-radius: 50%;
  margin: 0 0 30px 0;
}

.team .member h4 {
  font-weight: 700;
  margin-bottom: 2px;
  font-size: 18px;
}

.team .member span {
  font-style: italic;
  display: block;
  font-size: 13px;
}

.team .member p {
  padding-top: 10px;
  font-size: 14px;
  font-style: italic;
  color: #aaaaaa;
}

.team .member .social {
  margin-top: 15px;
}

.team .member .social a {
  color: #919191;
  transition: 0.3s;
}

.team .member .social a:hover {
  color: #e96b56;
}

.team .member .social i {
  font-size: 18px;
  margin: 0 2px;
}

/*--------------------------------------------------------------
# Contact
--------------------------------------------------------------*/
.contact .info-box {
  color: #444444;
  text-align: center;
  box-shadow: 0 0 30px rgba(214, 215, 216, 0.6);
  padding: 20px 0 30px 0;
}

.contact .info-box i {
  font-size: 32px;
  color: #e96b56;
  border-radius: 50%;
  padding: 8px;
  border: 2px dotted #fef5f4;
}

.contact .info-box h3 {
  font-size: 20px;
  color: #777777;
  font-weight: 700;
  margin: 10px 0;
}

.contact .info-box p {
  padding: 0;
  line-height: 24px;
  font-size: 14px;
  margin-bottom: 0;
}

.contact .php-email-form {
  box-shadow: 0 0 30px rgba(214, 215, 216, 0.6);
  padding: 30px;
}

.contact .php-email-form .validate {
  display: none;
  color: red;
  margin: 0 0 15px 0;
  font-weight: 400;
  font-size: 13px;
}

.contact .php-email-form .error-message {
  display: none;
  color: #fff;
  background: #ed3c0d;
  text-align: left;
  padding: 15px;
  font-weight: 600;
}

.contact .php-email-form .error-message br+br {
  margin-top: 25px;
}

.contact .php-email-form .sent-message {
  display: none;
  color: #fff;
  background: #18d26e;
  text-align: center;
  padding: 15px;
  font-weight: 600;
}

.contact .php-email-form .loading {
  display: none;
  background: #fff;
  text-align: center;
  padding: 15px;
}

.contact .php-email-form .loading:before {
  content: "";
  display: inline-block;
  border-radius: 50%;
  width: 24px;
  height: 24px;
  margin: 0 10px -6px 0;
  border: 3px solid #18d26e;
  border-top-color: #eee;
  animation: animate-loading 1s linear infinite;
}

.contact .php-email-form input,
.contact .php-email-form textarea {
  border-radius: 0;
  box-shadow: none;
  font-size: 14px;
}

.contact .php-email-form input:focus,
.contact .php-email-form textarea:focus {
  border-color: #e96b56;
}

.contact .php-email-form input {
  padding: 10px 15px;
}

.contact .php-email-form textarea {
  padding: 12px 15px;
}

.contact .php-email-form button[type=submit] {
  background: #e96b56;
  border: 0;
  border-radius: 50px;
  padding: 10px 24px;
  color: #fff;
  transition: 0.4s;
}

.contact .php-email-form button[type=submit]:hover {
  background: #e6573f;
}

@keyframes animate-loading {
  0% {
    transform: rotate(0deg);
  }

  100% {
    transform: rotate(360deg);
  }
}

/*--------------------------------------------------------------
# Blog
--------------------------------------------------------------*/
.blog {
  padding: 40px 0 20px 0;
}

.blog .entry {
  padding: 30px;
  margin-bottom: 60px;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
}

.blog .entry .entry-img {
  max-height: 440px;
  margin: -30px -30px 20px -30px;
  overflow: hidden;
}

.blog .entry .entry-title {
  font-size: 28px;
  font-weight: bold;
  padding: 0;
  margin: 0 0 20px 0;
}

.blog .entry .entry-title a {
  color: #545454;
  transition: 0.3s;
}

.blog .entry .entry-title a:hover {
  color: #e96b56;
}

.blog .entry .entry-meta {
  margin-bottom: 15px;
  color: #bababa;
}

.blog .entry .entry-meta ul {
  display: flex;
  flex-wrap: wrap;
  list-style: none;
  align-items: center;
  padding: 0;
  margin: 0;
}

.blog .entry .entry-meta ul li+li {
  padding-left: 20px;
}

.blog .entry .entry-meta i {
  font-size: 16px;
  margin-right: 8px;
  line-height: 0;
}

.blog .entry .entry-meta a {
  color: #777777;
  font-size: 14px;
  display: inline-block;
  line-height: 1;
}

.blog .entry .entry-content p {
  line-height: 24px;
}

.blog .entry .entry-content .read-more {
  -moz-text-align-last: right;
  text-align-last: right;
}

.blog .entry .entry-content .read-more a {
  display: inline-block;
  background: #e96b56;
  color: #fff;
  padding: 6px 20px;
  transition: 0.3s;
  font-size: 14px;
  border-radius: 4px;
}

.blog .entry .entry-content .read-more a:hover {
  background: #ec7f6d;
}

.blog .entry .entry-content h3 {
  font-size: 22px;
  margin-top: 30px;
  font-weight: bold;
}

.blog .entry .entry-content blockquote {
  overflow: hidden;
  background-color: #fafafa;
  padding: 60px;
  position: relative;
  text-align: center;
  margin: 20px 0;
}

.blog .entry .entry-content blockquote p {
  color: #444444;
  line-height: 1.6;
  margin-bottom: 0;
  font-style: italic;
  font-weight: 500;
  font-size: 22px;
}

.blog .entry .entry-content blockquote::after {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background-color: #545454;
  margin-top: 20px;
  margin-bottom: 20px;
}

.blog .entry .entry-footer {
  padding-top: 10px;
  border-top: 1px solid #e6e6e6;
}

.blog .entry .entry-footer i {
  color: #a1a1a1;
  display: inline;
}

.blog .entry .entry-footer a {
  color: #616161;
  transition: 0.3s;
}

.blog .entry .entry-footer a:hover {
  color: #e96b56;
}

.blog .entry .entry-footer .cats {
  list-style: none;
  display: inline;
  padding: 0 20px 0 0;
  font-size: 14px;
}

.blog .entry .entry-footer .cats li {
  display: inline-block;
}

.blog .entry .entry-footer .tags {
  list-style: none;
  display: inline;
  padding: 0;
  font-size: 14px;
}

.blog .entry .entry-footer .tags li {
  display: inline-block;
}

.blog .entry .entry-footer .tags li+li::before {
  padding-right: 6px;
  color: #6c757d;
  content: ",";
}

.blog .entry .entry-footer .share {
  font-size: 16px;
}

.blog .entry .entry-footer .share i {
  padding-left: 5px;
}

.blog .entry-single {
  margin-bottom: 30px;
}

.blog .blog-author {
  padding: 20px;
  margin-bottom: 30px;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
}

.blog .blog-author img {
  width: 120px;
  margin-right: 20px;
}

.blog .blog-author h4 {
  font-weight: 600;
  font-size: 22px;
  margin-bottom: 0px;
  padding: 0;
  color: #545454;
}

.blog .blog-author .social-links {
  margin: 0 10px 10px 0;
}

.blog .blog-author .social-links a {
  color: rgba(84, 84, 84, 0.5);
  margin-right: 5px;
}

.blog .blog-author p {
  font-style: italic;
  color: #b7b7b7;
}

.blog .blog-comments {
  margin-bottom: 30px;
}

.blog .blog-comments .comments-count {
  font-weight: bold;
}

.blog .blog-comments .comment {
  margin-top: 30px;
  position: relative;
}

.blog .blog-comments .comment .comment-img {
  margin-right: 14px;
}

.blog .blog-comments .comment .comment-img img {
  width: 60px;
}

.blog .blog-comments .comment h5 {
  font-size: 16px;
  margin-bottom: 2px;
}

.blog .blog-comments .comment h5 a {
  font-weight: bold;
  color: #444444;
  transition: 0.3s;
}

.blog .blog-comments .comment h5 a:hover {
  color: #e96b56;
}

.blog .blog-comments .comment h5 .reply {
  padding-left: 10px;
  color: #545454;
}

.blog .blog-comments .comment h5 .reply i {
  font-size: 20px;
}

.blog .blog-comments .comment time {
  display: block;
  font-size: 14px;
  color: #6e6e6e;
  margin-bottom: 5px;
}

.blog .blog-comments .comment.comment-reply {
  padding-left: 40px;
}

.blog .blog-comments .reply-form {
  margin-top: 30px;
  padding: 30px;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
}

.blog .blog-comments .reply-form h4 {
  font-weight: bold;
  font-size: 22px;
}

.blog .blog-comments .reply-form p {
  font-size: 14px;
}

.blog .blog-comments .reply-form input {
  border-radius: 4px;
  padding: 10px 10px;
  font-size: 14px;
}

.blog .blog-comments .reply-form input:focus {
  box-shadow: none;
  border-color: #f5bab0;
}

.blog .blog-comments .reply-form textarea {
  border-radius: 4px;
  padding: 10px 10px;
  font-size: 14px;
}

.blog .blog-comments .reply-form textarea:focus {
  box-shadow: none;
  border-color: #f5bab0;
}

.blog .blog-comments .reply-form .form-group {
  margin-bottom: 25px;
}

.blog .blog-comments .reply-form .btn-primary {
  border-radius: 4px;
  padding: 10px 20px;
  border: 0;
  background-color: #545454;
}

.blog .blog-comments .reply-form .btn-primary:hover {
  background-color: #616161;
}

.blog .blog-pagination {
  color: #878787;
}

.blog .blog-pagination ul {
  display: flex;
  padding: 0;
  margin: 0;
  list-style: none;
}

.blog .blog-pagination li {
  margin: 0 5px;
  transition: 0.3s;
}

.blog .blog-pagination li a {
  color: #545454;
  padding: 7px 16px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.blog .blog-pagination li.active,
.blog .blog-pagination li:hover {
  background: #e96b56;
}

.blog .blog-pagination li.active a,
.blog .blog-pagination li:hover a {
  color: #fff;
}

.blog .sidebar {
  padding: 30px;
  margin: 0 0 60px 20px;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
}

.blog .sidebar .sidebar-title {
  font-size: 20px;
  font-weight: 700;
  padding: 0 0 0 0;
  margin: 0 0 15px 0;
  color: #545454;
  position: relative;
}

.blog .sidebar .sidebar-item {
  margin-bottom: 30px;
}

.blog .sidebar .search-form form {
  background: #fff;
  border: 1px solid #ddd;
  padding: 3px 10px;
  position: relative;
}

.blog .sidebar .search-form form input[type=text] {
  border: 0;
  padding: 4px;
  border-radius: 4px;
  width: calc(100% - 40px);
}

.blog .sidebar .search-form form button {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  border: 0;
  background: none;
  font-size: 16px;
  padding: 0 15px;
  margin: -1px;
  background: #e96b56;
  color: #fff;
  transition: 0.3s;
  border-radius: 0 4px 4px 0;
  line-height: 0;
}

.blog .sidebar .search-form form button i {
  line-height: 0;
}

.blog .sidebar .search-form form button:hover {
  background: #eb7b68;
}

.blog .sidebar .categories ul {
  list-style: none;
  padding: 0;
}

.blog .sidebar .categories ul li+li {
  padding-top: 10px;
}

.blog .sidebar .categories ul a {
  color: #545454;
  transition: 0.3s;
}

.blog .sidebar .categories ul a:hover {
  color: #e96b56;
}

.blog .sidebar .categories ul a span {
  padding-left: 5px;
  color: #aaaaaa;
  font-size: 14px;
}

.blog .sidebar .recent-posts .post-item+.post-item {
  margin-top: 15px;
}

.blog .sidebar .recent-posts img {
  width: 80px;
  float: left;
}

.blog .sidebar .recent-posts h4 {
  font-size: 15px;
  margin-left: 95px;
  font-weight: bold;
}

.blog .sidebar .recent-posts h4 a {
  color: #545454;
  transition: 0.3s;
}

.blog .sidebar .recent-posts h4 a:hover {
  color: #e96b56;
}

.blog .sidebar .recent-posts time {
  display: block;
  margin-left: 95px;
  font-style: italic;
  font-size: 14px;
  color: #aaaaaa;
}

.blog .sidebar .tags {
  margin-bottom: -10px;
}

.blog .sidebar .tags ul {
  list-style: none;
  padding: 0;
}

.blog .sidebar .tags ul li {
  display: inline-block;
}

.blog .sidebar .tags ul a {
  color: #949494;
  font-size: 14px;
  padding: 6px 14px;
  margin: 0 6px 8px 0;
  border: 1px solid white;
  display: inline-block;
  transition: 0.3s;
}

.blog .sidebar .tags ul a:hover {
  color: #fff;
  border: 1px solid #e96b56;
  background: #e96b56;
}

.blog .sidebar .tags ul a span {
  padding-left: 5px;
  color: #ededed;
  font-size: 14px;
}

/*--------------------------------------------------------------
# Footer
--------------------------------------------------------------*/
#footer {
  background: #404040;
  padding: 0 0 30px 0;
  color: #fff;
  font-size: 14px;
}

#footer .footer-newsletter {
  padding: 50px 0;
  background: #404040;
}

#footer .footer-newsletter h4 {
  font-size: 24px;
  margin: 0 0 20px 0;
  padding: 0;
  line-height: 1;
  font-weight: 600;
}

#footer .footer-newsletter form {
  margin-top: 30px;
  background: #fff;
  padding: 6px 10px;
  position: relative;
  border-radius: 50px;
}

#footer .footer-newsletter form input[type=email] {
  border: 0;
  padding: 8px;
  width: calc(100% - 140px);
}

#footer .footer-newsletter form input[type=submit] {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  border: 0;
  background: none;
  font-size: 16px;
  padding: 0 30px;
  margin: 3px;
  background: #e96b56;
  color: #fff;
  transition: 0.3s;
  border-radius: 50px;
}

#footer .footer-newsletter form input[type=submit]:hover {
  background: #e6573f;
}

#footer .footer-top {
  background: #3b3b3b;
  border-top: 1px solid #474747;
  border-bottom: 1px solid #474747;
  padding: 60px 0 30px 0;
}

#footer .footer-top .footer-info {
  margin-bottom: 30px;
}

#footer .footer-top .footer-info h3 {
  font-size: 18px;
  margin: 0 0 20px 0;
  padding: 2px 0 2px 0;
  line-height: 1;
  font-weight: 700;
}

#footer .footer-top .footer-info p {
  font-size: 14px;
  line-height: 24px;
  margin-bottom: 0;
  font-family: "Raleway", sans-serif;
  color: #fff;
}

#footer .footer-top .social-links a {
  font-size: 18px;
  display: inline-block;
  background: #545454;
  color: #fff;
  line-height: 1;
  padding: 8px 0;
  margin-right: 4px;
  border-radius: 50%;
  text-align: center;
  width: 36px;
  height: 36px;
  transition: 0.3s;
}

#footer .footer-top .social-links a:hover {
  background: #e96b56;
  color: #fff;
  text-decoration: none;
}

#footer .footer-top h4 {
  font-size: 16px;
  font-weight: bold;
  color: #fff;
  text-transform: uppercase;
  position: relative;
  padding-bottom: 12px;
}

#footer .footer-top .footer-links {
  margin-bottom: 30px;
}

#footer .footer-top .footer-links ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

#footer .footer-top .footer-links ul i {
  padding-right: 2px;
  color: #ec7f6d;
  font-size: 18px;
  line-height: 1;
}

#footer .footer-top .footer-links ul li {
  padding: 10px 0;
  display: flex;
  align-items: center;
}

#footer .footer-top .footer-links ul li:first-child {
  padding-top: 0;
}

#footer .footer-top .footer-links ul a {
  color: #fff;
  transition: 0.3s;
  display: inline-block;
  line-height: 1;
}

#footer .footer-top .footer-links ul a:hover {
  color: #e96b56;
}

#footer .footer-top .footer-contact {
  margin-bottom: 30px;
}

#footer .footer-top .footer-contact p {
  line-height: 26px;
}

#footer .copyright {
  text-align: center;
  padding-top: 30px;
}

#footer .credits {
  padding-top: 10px;
  text-align: center;
  font-size: 13px;
  color: #fff;
}

section a:hover {
  color: black;
}
section a {
  color: white;
}


name: blog-inside-post.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\blog\blog-inside-post.jpg


name: portfolio-1.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\portfolio\portfolio-1.jpg


name: portfolio-2.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\portfolio\portfolio-2.jpg


name: portfolio-3.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\portfolio\portfolio-3.jpg


name: portfolio-4.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\portfolio\portfolio-4.jpg


name: portfolio-5.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\portfolio\portfolio-5.jpg


name: portfolio-6.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\portfolio\portfolio-6.jpg


name: portfolio-7.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\portfolio\portfolio-7.jpg


name: portfolio-8.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\portfolio\portfolio-8.jpg


name: portfolio-9.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\portfolio\portfolio-9.jpg


name: testimonials-1.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\testimonials\testimonials-1.jpg


name: testimonials-2.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\testimonials\testimonials-2.jpg


name: testimonials-3.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\testimonials\testimonials-3.jpg


name: testimonials-4.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\testimonials\testimonials-4.jpg


name: testimonials-5.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\testimonials\testimonials-5.jpg


name: testimonials-6.jpg
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\img\testimonials\testimonials-6.jpg


name: main.js
path: D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\js\main.js
mime: unavailable
content:
/**
* Template Name: Eterna
* Updated: Jul 27 2023 with Bootstrap v5.3.1
* Template URL: https://bootstrapmade.com/eterna-free-multipurpose-bootstrap-template/
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
*/
(function() {
  "use strict";

  /**
   * Easy selector helper function
   */
  const select = (el, all = false) => {
    el = el.trim()
    if (all) {
      return [...document.querySelectorAll(el)]
    } else {
      return document.querySelector(el)
    }
  }

  /**
   * Easy event listener function
   */
  const on = (type, el, listener, all = false) => {
    let selectEl = select(el, all)
    if (selectEl) {
      if (all) {
        selectEl.forEach(e => e.addEventListener(type, listener))
      } else {
        selectEl.addEventListener(type, listener)
      }
    }
  }

  /**
   * Easy on scroll event listener 
   */
  const onscroll = (el, listener) => {
    el.addEventListener('scroll', listener)
  }

  /**
   * Scrolls to an element with header offset
   */
  const scrollto = (el) => {
    let header = select('#header')
    let offset = header.offsetHeight

    if (!header.classList.contains('header-scrolled')) {
      offset -= 16
    }

    let elementPos = select(el).offsetTop
    window.scrollTo({
      top: elementPos - offset,
      behavior: 'smooth'
    })
  }

  /**
   * Header fixed top on scroll
   */
  let selectHeader = select('#header')
  if (selectHeader) {
    let headerOffset = selectHeader.offsetTop
    let nextElement = selectHeader.nextElementSibling
    const headerFixed = () => {
      if ((headerOffset - window.scrollY) <= 0) {
        selectHeader.classList.add('fixed-top')
        nextElement.classList.add('scrolled-offset')
      } else {
        selectHeader.classList.remove('fixed-top')
        nextElement.classList.remove('scrolled-offset')
      }
    }
    window.addEventListener('load', headerFixed)
    onscroll(document, headerFixed)
  }

  /**
   * Back to top button
   */
  let backtotop = select('.back-to-top')
  if (backtotop) {
    const toggleBacktotop = () => {
      if (window.scrollY > 100) {
        backtotop.classList.add('active')
      } else {
        backtotop.classList.remove('active')
      }
    }
    window.addEventListener('load', toggleBacktotop)
    onscroll(document, toggleBacktotop)
  }

  /**
   * Mobile nav toggle
   */
  on('click', '.mobile-nav-toggle', function(e) {
    select('#navbar').classList.toggle('navbar-mobile')
    this.classList.toggle('bi-list')
    this.classList.toggle('bi-x')
  })

  /**
   * Mobile nav dropdowns activate
   */
  on('click', '.navbar .dropdown > a', function(e) {
    if (select('#navbar').classList.contains('navbar-mobile')) {
      e.preventDefault()
      this.nextElementSibling.classList.toggle('dropdown-active')
    }
  }, true)

  /**
   * Scrool with ofset on links with a class name .scrollto
   */
  on('click', '.scrollto', function(e) {
    if (select(this.hash)) {
      e.preventDefault()

      let navbar = select('#navbar')
      if (navbar.classList.contains('navbar-mobile')) {
        navbar.classList.remove('navbar-mobile')
        let navbarToggle = select('.mobile-nav-toggle')
        navbarToggle.classList.toggle('bi-list')
        navbarToggle.classList.toggle('bi-x')
      }
      scrollto(this.hash)
    }
  }, true)

  /**
   * Scroll with ofset on page load with hash links in the url
   */
  window.addEventListener('load', () => {
    if (window.location.hash) {
      if (select(window.location.hash)) {
        scrollto(window.location.hash)
      }
    }
  });

  /**
   * Hero carousel indicators
   */
  let heroCarouselIndicators = select("#hero-carousel-indicators")
  let heroCarouselItems = select('#heroCarousel .carousel-item', true)

  heroCarouselItems.forEach((item, index) => {
    (index === 0) ?
    heroCarouselIndicators.innerHTML += "<li data-bs-target='#heroCarousel' data-bs-slide-to='" + index + "' class='active'></li>":
      heroCarouselIndicators.innerHTML += "<li data-bs-target='#heroCarousel' data-bs-slide-to='" + index + "'></li>"
  });

  /**
   * Clients Slider
   */
  new Swiper('.clients-slider', {
    speed: 400,
    loop: true,
    autoplay: {
      delay: 5000,
      disableOnInteraction: false
    },
    slidesPerView: 'auto',
    pagination: {
      el: '.swiper-pagination',
      type: 'bullets',
      clickable: true
    },
    breakpoints: {
      320: {
        slidesPerView: 2,
        spaceBetween: 40
      },
      480: {
        slidesPerView: 3,
        spaceBetween: 60
      },
      640: {
        slidesPerView: 4,
        spaceBetween: 80
      },
      992: {
        slidesPerView: 6,
        spaceBetween: 120
      }
    }
  });

  /**
   * Skills animation
   */
  let skilsContent = select('.skills-content');
  if (skilsContent) {
    new Waypoint({
      element: skilsContent,
      offset: '80%',
      handler: function(direction) {
        let progress = select('.progress .progress-bar', true);
        progress.forEach((el) => {
          el.style.width = el.getAttribute('aria-valuenow') + '%'
        });
      }
    })
  }

  /**
   * Porfolio isotope and filter
   */
  window.addEventListener('load', () => {
    let portfolioContainer = select('.portfolio-container');
    if (portfolioContainer) {
      let portfolioIsotope = new Isotope(portfolioContainer, {
        itemSelector: '.portfolio-item',
        layoutMode: 'fitRows'
      });

      let portfolioFilters = select('#portfolio-flters li', true);

      on('click', '#portfolio-flters li', function(e) {
        e.preventDefault();
        portfolioFilters.forEach(function(el) {
          el.classList.remove('filter-active');
        });
        this.classList.add('filter-active');

        portfolioIsotope.arrange({
          filter: this.getAttribute('data-filter')
        });
      }, true);
    }

  });

  /**
   * Initiate portfolio lightbox 
   */
  const portfolioLightbox = GLightbox({
    selector: '.portfolio-lightbox'
  });

  /**
   * Portfolio details slider
   */
  new Swiper('.portfolio-details-slider', {
    speed: 400,
    loop: true,
    autoplay: {
      delay: 5000,
      disableOnInteraction: false
    },
    pagination: {
      el: '.swiper-pagination',
      type: 'bullets',
      clickable: true
    }
  });

  /**
   * Initiate Pure Counter 
   */
  new PureCounter();

})()


name: animate.compat.css
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\vendor\animate.css\animate.compat.css

content:
@charset "UTF-8";/*!
 * animate.css - https://animate.style/
 * Version - 4.1.1
 * Licensed under the MIT license - http://opensource.org/licenses/MIT
 *
 * Copyright (c) 2020 Animate.css
 */:root{--animate-duration:1s;--animate-delay:1s;--animate-repeat:1}.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-duration:var(--animate-duration);animation-duration:var(--animate-duration);-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.repeat-1{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-iteration-count:var(--animate-repeat);animation-iteration-count:var(--animate-repeat)}.animated.repeat-2{-webkit-animation-iteration-count:2;animation-iteration-count:2;-webkit-animation-iteration-count:calc(var(--animate-repeat)*2);animation-iteration-count:calc(var(--animate-repeat)*2)}.animated.repeat-3{-webkit-animation-iteration-count:3;animation-iteration-count:3;-webkit-animation-iteration-count:calc(var(--animate-repeat)*3);animation-iteration-count:calc(var(--animate-repeat)*3)}.animated.delay-1s{-webkit-animation-delay:1s;animation-delay:1s;-webkit-animation-delay:var(--animate-delay);animation-delay:var(--animate-delay)}.animated.delay-2s{-webkit-animation-delay:2s;animation-delay:2s;-webkit-animation-delay:calc(var(--animate-delay)*2);animation-delay:calc(var(--animate-delay)*2)}.animated.delay-3s{-webkit-animation-delay:3s;animation-delay:3s;-webkit-animation-delay:calc(var(--animate-delay)*3);animation-delay:calc(var(--animate-delay)*3)}.animated.delay-4s{-webkit-animation-delay:4s;animation-delay:4s;-webkit-animation-delay:calc(var(--animate-delay)*4);animation-delay:calc(var(--animate-delay)*4)}.animated.delay-5s{-webkit-animation-delay:5s;animation-delay:5s;-webkit-animation-delay:calc(var(--animate-delay)*5);animation-delay:calc(var(--animate-delay)*5)}.animated.faster{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-duration:calc(var(--animate-duration)/2);animation-duration:calc(var(--animate-duration)/2)}.animated.fast{-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-duration:calc(var(--animate-duration)*0.8);animation-duration:calc(var(--animate-duration)*0.8)}.animated.slow{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2)}.animated.slower{-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-duration:calc(var(--animate-duration)*3);animation-duration:calc(var(--animate-duration)*3)}@media (prefers-reduced-motion:reduce),print{.animated{-webkit-animation-duration:1ms!important;animation-duration:1ms!important;-webkit-transition-duration:1ms!important;transition-duration:1ms!important;-webkit-animation-iteration-count:1!important;animation-iteration-count:1!important}.animated[class*=Out]{opacity:0}}@-webkit-keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}@keyframes bounce{0%,20%,53%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0) scaleY(1.1);transform:translate3d(0,-30px,0) scaleY(1.1)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0) scaleY(1.05);transform:translate3d(0,-15px,0) scaleY(1.05)}80%{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0) scaleY(.95);transform:translateZ(0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-4px,0) scaleY(1.02);transform:translate3d(0,-4px,0) scaleY(1.02)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shakeX{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shakeX{-webkit-animation-name:shakeX;animation-name:shakeX}@-webkit-keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}@keyframes shakeY{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}20%,40%,60%,80%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}}.shakeY{-webkit-animation-name:shakeY;animation-name:shakeY}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.heartBeat{-webkit-animation-name:heartBeat;animation-name:heartBeat;-webkit-animation-duration:1.3s;animation-duration:1.3s;-webkit-animation-duration:calc(var(--animate-duration)*1.3);animation-duration:calc(var(--animate-duration)*1.3);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}@-webkit-keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInDown{0%{-webkit-transform:translateY(-1200px) scale(.7);transform:translateY(-1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.backInDown{-webkit-animation-name:backInDown;animation-name:backInDown}@-webkit-keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInLeft{0%{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.backInLeft{-webkit-animation-name:backInLeft;animation-name:backInLeft}@-webkit-keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInRight{0%{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}80%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.backInRight{-webkit-animation-name:backInRight;animation-name:backInRight}@-webkit-keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes backInUp{0%{-webkit-transform:translateY(1200px) scale(.7);transform:translateY(1200px) scale(.7);opacity:.7}80%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.backInUp{-webkit-animation-name:backInUp;animation-name:backInUp}@-webkit-keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}@keyframes backOutDown{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(700px) scale(.7);transform:translateY(700px) scale(.7);opacity:.7}}.backOutDown{-webkit-animation-name:backOutDown;animation-name:backOutDown}@-webkit-keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}@keyframes backOutLeft{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(-2000px) scale(.7);transform:translateX(-2000px) scale(.7);opacity:.7}}.backOutLeft{-webkit-animation-name:backOutLeft;animation-name:backOutLeft}@-webkit-keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}@keyframes backOutRight{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateX(0) scale(.7);transform:translateX(0) scale(.7);opacity:.7}to{-webkit-transform:translateX(2000px) scale(.7);transform:translateX(2000px) scale(.7);opacity:.7}}.backOutRight{-webkit-animation-name:backOutRight;animation-name:backOutRight}@-webkit-keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}@keyframes backOutUp{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}20%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:.7}to{-webkit-transform:translateY(-700px) scale(.7);transform:translateY(-700px) scale(.7);opacity:.7}}.backOutUp{-webkit-animation-name:backOutUp;animation-name:backOutUp}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0) scaleY(3);transform:translate3d(0,-3000px,0) scaleY(3)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0) scaleY(.9);transform:translate3d(0,25px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,-10px,0) scaleY(.95);transform:translate3d(0,-10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,5px,0) scaleY(.985);transform:translate3d(0,5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0) scaleX(3);transform:translate3d(-3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0) scaleX(1);transform:translate3d(25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(-10px,0,0) scaleX(.98);transform:translate3d(-10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(5px,0,0) scaleX(.995);transform:translate3d(5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0) scaleX(3);transform:translate3d(3000px,0,0) scaleX(3)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0) scaleX(1);transform:translate3d(-25px,0,0) scaleX(1)}75%{-webkit-transform:translate3d(10px,0,0) scaleX(.98);transform:translate3d(10px,0,0) scaleX(.98)}90%{-webkit-transform:translate3d(-5px,0,0) scaleX(.995);transform:translate3d(-5px,0,0) scaleX(.995)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0) scaleY(5);transform:translate3d(0,3000px,0) scaleY(5)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}75%{-webkit-transform:translate3d(0,10px,0) scaleY(.95);transform:translate3d(0,10px,0) scaleY(.95)}90%{-webkit-transform:translate3d(0,-5px,0) scaleY(.985);transform:translate3d(0,-5px,0) scaleY(.985)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0) scaleY(.985);transform:translate3d(0,10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0) scaleY(.9);transform:translate3d(0,-20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0) scaleY(3);transform:translate3d(0,2000px,0) scaleY(3)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0) scaleX(.9);transform:translate3d(20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0) scaleX(2);transform:translate3d(-2000px,0,0) scaleX(2)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0) scaleX(.9);transform:translate3d(-20px,0,0) scaleX(.9)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0) scaleX(2);transform:translate3d(2000px,0,0) scaleX(2)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0) scaleY(.985);transform:translate3d(0,-10px,0) scaleY(.985)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0) scaleY(.9);transform:translate3d(0,20px,0) scaleY(.9)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0) scaleY(3);transform:translate3d(0,-2000px,0) scaleY(3)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInTopLeft{-webkit-animation-name:fadeInTopLeft;animation-name:fadeInTopLeft}@-webkit-keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInTopRight{0%{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInTopRight{-webkit-animation-name:fadeInTopRight;animation-name:fadeInTopRight}@-webkit-keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInBottomLeft{-webkit-animation-name:fadeInBottomLeft;animation-name:fadeInBottomLeft}@-webkit-keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInBottomRight{0%{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInBottomRight{-webkit-animation-name:fadeInBottomRight;animation-name:fadeInBottomRight}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}@keyframes fadeOutTopLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,-100%,0);transform:translate3d(-100%,-100%,0)}}.fadeOutTopLeft{-webkit-animation-name:fadeOutTopLeft;animation-name:fadeOutTopLeft}@-webkit-keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}@keyframes fadeOutTopRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,-100%,0);transform:translate3d(100%,-100%,0)}}.fadeOutTopRight{-webkit-animation-name:fadeOutTopRight;animation-name:fadeOutTopRight}@-webkit-keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}@keyframes fadeOutBottomRight{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(100%,100%,0);transform:translate3d(100%,100%,0)}}.fadeOutBottomRight{-webkit-animation-name:fadeOutBottomRight;animation-name:fadeOutBottomRight}@-webkit-keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}@keyframes fadeOutBottomLeft{0%{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}to{opacity:0;-webkit-transform:translate3d(-100%,100%,0);transform:translate3d(-100%,100%,0)}}.fadeOutBottomLeft{-webkit-animation-name:fadeOutBottomLeft;animation-name:fadeOutBottomLeft}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-duration:calc(var(--animate-duration)*0.75);animation-duration:calc(var(--animate-duration)*0.75);-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInRight{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lightSpeedInRight{-webkit-animation-name:lightSpeedInRight;animation-name:lightSpeedInRight;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedInLeft{0%{-webkit-transform:translate3d(-100%,0,0) skewX(30deg);transform:translate3d(-100%,0,0) skewX(30deg);opacity:0}60%{-webkit-transform:skewX(-20deg);transform:skewX(-20deg);opacity:1}80%{-webkit-transform:skewX(5deg);transform:skewX(5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lightSpeedInLeft{-webkit-animation-name:lightSpeedInLeft;animation-name:lightSpeedInLeft;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOutRight{-webkit-animation-name:lightSpeedOutRight;animation-name:lightSpeedOutRight;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}@keyframes lightSpeedOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0) skewX(-30deg);transform:translate3d(-100%,0,0) skewX(-30deg);opacity:0}}.lightSpeedOutLeft{-webkit-animation-name:lightSpeedOutLeft;animation-name:lightSpeedOutLeft;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{opacity:1}to{-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{opacity:1}to{-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{opacity:1}to{-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft;-webkit-transform-origin:left bottom;transform-origin:left bottom}@-webkit-keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{opacity:1}to{-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight;-webkit-transform-origin:right bottom;transform-origin:right bottom}@-webkit-keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-duration:calc(var(--animate-duration)*2);animation-duration:calc(var(--animate-duration)*2);-webkit-animation-name:hinge;animation-name:hinge;-webkit-transform-origin:top left;transform-origin:top left}@-webkit-keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0)}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft;-webkit-transform-origin:left center;transform-origin:left center}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0)}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight;-webkit-transform-origin:right center;transform-origin:right center}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}


name: animate.css
mime: unavailable
path:
D:\websites\domains\ai.softwaredevelopment.solutions\public_html\assets\vendor\animate.css\animate.css

content:
@charset "UTF-8";/*!
 * animate.css - https://animate.style/
 * Version - 4.1.1
 * Licensed under the MIT license - http://opensource.org/licenses/MIT
 *
 * Copyright (c) 2020 Animate.css
 */
:root {
  --animate-duration: 1s;
  --animate-delay: 1s;
  --animate-repeat: 1;
}
.animate__animated {
  -webkit-animation-duration: 1s;
  animation-duration: 1s;
  -webkit-animation-duration: var(--animate-duration);
  animation-duration: var(--animate-duration);
  -webkit-animation-fill-mode: both;
  animation-fill-mode: both;
}
.animate__animated.animate__infinite {
  -webkit-animation-iteration-count: infinite;
  animation-iteration-count: infinite;
}
.animate__animated.animate__repeat-1 {
  -webkit-animation-iteration-count: 1;
  animation-iteration-count: 1;
  -webkit-animation-iteration-count: var(--animate-repeat);
  animation-iteration-count: var(--animate-repeat);
}
.animate__animated.animate__repeat-2 {
  -webkit-animation-iteration-count: calc(1 * 2);
  animation-iteration-count: calc(1 * 2);
  -webkit-animation-iteration-count: calc(var(--animate-repeat) * 2);
  animation-iteration-count: calc(var(--animate-repeat) * 2);
}
.animate__animated.animate__repeat-3 {
  -webkit-animation-iteration-count: calc(1 * 3);
  animation-iteration-count: calc(1 * 3);
  -webkit-animation-iteration-count: calc(var(--animate-repeat) * 3);
  animation-iteration-count: calc(var(--animate-repeat) * 3);
}
.animate__animated.animate__delay-1s {
  -webkit-animation-delay: 1s;
  animation-delay: 1s;
  -webkit-animation-delay: var(--animate-delay);
  animation-delay: var(--animate-delay);
}
.animate__animated.animate__delay-2s {
  -webkit-animation-delay: calc(1s * 2);
  animation-delay: calc(1s * 2);
  -webkit-animation-delay: calc(var(--animate-delay) * 2);
  animation-delay: calc(var(--animate-delay) * 2);
}
.animate__animated.animate__delay-3s {
  -webkit-animation-delay: calc(1s * 3);
  animation-delay: calc(1s * 3);
  -webkit-animation-delay: calc(var(--animate-delay) * 3);
  animation-delay: calc(var(--animate-delay) * 3);
}
.animate__animated.animate__delay-4s {
  -webkit-animation-delay: calc(1s * 4);
  animation-delay: calc(1s * 4);
  -webkit-animation-delay: calc(var(--animate-delay) * 4);
  animation-delay: calc(var(--animate-delay) * 4);
}
.animate__animated.animate__delay-5s {
  -webkit-animation-delay: calc(1s * 5);
  animation-delay: calc(1s * 5);
  -webkit-animation-delay: calc(var(--animate-delay) * 5);
  animation-delay: calc(var(--animate-delay) * 5);
}
.animate__animated.animate__faster {
  -webkit-animation-duration: calc(1s / 2);
  animation-duration: calc(1s / 2);
  -webkit-animation-duration: calc(var(--animate-duration) / 2);
  animation-duration: calc(var(--animate-duration) / 2);
}
.animate__animated.animate__fast {
  -webkit-animation-duration: calc(1s * 0.8);
  animation-duration: calc(1s * 0.8);
  -webkit-animation-duration: calc(var(--animate-duration) * 0.8);
  animation-duration: calc(var(--animate-duration) * 0.8);
}
.animate__animated.animate__slow {
  -webkit-animation-duration: calc(1s * 2);
  animation-duration: calc(1s * 2);
  -webkit-animation-duration: calc(var(--animate-duration) * 2);
  animation-duration: calc(var(--animate-duration) * 2);
}
.animate__animated.animate__slower {
  -webkit-animation-duration: calc(1s * 3);
  animation-duration: calc(1s * 3);
  -webkit-animation-duration: calc(var(--animate-duration) * 3);
  animation-duration: calc(var(--animate-duration) * 3);
}
@media print, (prefers-reduced-motion: reduce) {
  .animate__animated {
    -webkit-animation-duration: 1ms !important;
    animation-duration: 1ms !important;
    -webkit-transition-duration: 1ms !important;
    transition-duration: 1ms !important;
    -webkit-animation-iteration-count: 1 !important;
    animation-iteration-count: 1 !important;
  }

  .animate__animated[class*='Out'] {
    opacity: 0;
  }
}
/* Attention seekers  */
@-webkit-keyframes bounce {
  from,
  20%,
  53%,
  to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  40%,
  43% {
    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    -webkit-transform: translate3d(0, -30px, 0) scaleY(1.1);
    transform: translate3d(0, -30px, 0) scaleY(1.1);
  }

  70% {
    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    -webkit-transform: translate3d(0, -15px, 0) scaleY(1.05);
    transform: translate3d(0, -15px, 0) scaleY(1.05);
  }

  80% {
    -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    -webkit-transform: translate3d(0, 0, 0) scaleY(0.95);
    transform: translate3d(0, 0, 0) scaleY(0.95);
  }

  90% {
    -webkit-transform: translate3d(0, -4px, 0) scaleY(1.02);
    transform: translate3d(0, -4px, 0) scaleY(1.02);
  }
}
@keyframes bounce {
  from,
  20%,
  53%,
  to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  40%,
  43% {
    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    -webkit-transform: translate3d(0, -30px, 0) scaleY(1.1);
    transform: translate3d(0, -30px, 0) scaleY(1.1);
  }

  70% {
    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    -webkit-transform: translate3d(0, -15px, 0) scaleY(1.05);
    transform: translate3d(0, -15px, 0) scaleY(1.05);
  }

  80% {
    -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    -webkit-transform: translate3d(0, 0, 0) scaleY(0.95);
    transform: translate3d(0, 0, 0) scaleY(0.95);
  }

  90% {
    -webkit-transform: translate3d(0, -4px, 0) scaleY(1.02);
    transform: translate3d(0, -4px, 0) scaleY(1.02);
  }
}
.animate__bounce {
  -webkit-animation-name: bounce;
  animation-name: bounce;
  -webkit-transform-origin: center bottom;
  transform-origin: center bottom;
}
@-webkit-keyframes flash {
  from,
  50%,
  to {
    opacity: 1;
  }

  25%,
  75% {
    opacity: 0;
  }
}
@keyframes flash {
  from,
  50%,
  to {
    opacity: 1;
  }

  25%,
  75% {
    opacity: 0;
  }
}
.animate__flash {
  -webkit-animation-name: flash;
  animation-name: flash;
}
/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
@-webkit-keyframes pulse {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }

  50% {
    -webkit-transform: scale3d(1.05, 1.05, 1.05);
    transform: scale3d(1.05, 1.05, 1.05);
  }

  to {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}
@keyframes pulse {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }

  50% {
    -webkit-transform: scale3d(1.05, 1.05, 1.05);
    transform: scale3d(1.05, 1.05, 1.05);
  }

  to {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}
.animate__pulse {
  -webkit-animation-name: pulse;
  animation-name: pulse;
  -webkit-animation-timing-function: ease-in-out;
  animation-timing-function: ease-in-out;
}
@-webkit-keyframes rubberBand {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }

  30% {
    -webkit-transform: scale3d(1.25, 0.75, 1);
    transform: scale3d(1.25, 0.75, 1);
  }

  40% {
    -webkit-transform: scale3d(0.75, 1.25, 1);
    transform: scale3d(0.75, 1.25, 1);
  }

  50% {
    -webkit-transform: scale3d(1.15, 0.85, 1);
    transform: scale3d(1.15, 0.85, 1);
  }

  65% {
    -webkit-transform: scale3d(0.95, 1.05, 1);
    transform: scale3d(0.95, 1.05, 1);
  }

  75% {
    -webkit-transform: scale3d(1.05, 0.95, 1);
    transform: scale3d(1.05, 0.95, 1);
  }

  to {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}
@keyframes rubberBand {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }

  30% {
    -webkit-transform: scale3d(1.25, 0.75, 1);
    transform: scale3d(1.25, 0.75, 1);
  }

  40% {
    -webkit-transform: scale3d(0.75, 1.25, 1);
    transform: scale3d(0.75, 1.25, 1);
  }

  50% {
    -webkit-transform: scale3d(1.15, 0.85, 1);
    transform: scale3d(1.15, 0.85, 1);
  }

  65% {
    -webkit-transform: scale3d(0.95, 1.05, 1);
    transform: scale3d(0.95, 1.05, 1);
  }

  75% {
    -webkit-transform: scale3d(1.05, 0.95, 1);
    transform: scale3d(1.05, 0.95, 1);
  }

  to {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}
.animate__rubberBand {
  -webkit-animation-name: rubberBand;
  animation-name: rubberBand;
}
@-webkit-keyframes shakeX {
  from,
  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  10%,
  30%,
  50%,
  70%,
  90% {
    -webkit-transform: translate3d(-10px, 0, 0);
    transform: translate3d(-10px, 0, 0);
  }

  20%,
  40%,
  60%,
  80% {
    -webkit-transform: translate3d(10px, 0, 0);
    transform: translate3d(10px, 0, 0);
  }
}
@keyframes shakeX {
  from,
  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  10%,
  30%,
  50%,
  70%,
  90% {
    -webkit-transform: translate3d(-10px, 0, 0);
    transform: translate3d(-10px, 0, 0);
  }

  20%,
  40%,
  60%,
  80% {
    -webkit-transform: translate3d(10px, 0, 0);
    transform: translate3d(10px, 0, 0);
  }
}
.animate__shakeX {
  -webkit-animation-name: shakeX;
  animation-name: shakeX;
}
@-webkit-keyframes shakeY {
  from,
  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  10%,
  30%,
  50%,
  70%,
  90% {
    -webkit-transform: translate3d(0, -10px, 0);
    transform: translate3d(0, -10px, 0);
  }

  20%,
  40%,
  60%,
  80% {
    -webkit-transform: translate3d(0, 10px, 0);
    transform: translate3d(0, 10px, 0);
  }
}
@keyframes shakeY {
  from,
  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  10%,
  30%,
  50%,
  70%,
  90% {
    -webkit-transform: translate3d(0, -10px, 0);
    transform: translate3d(0, -10px, 0);
  }

  20%,
  40%,
  60%,
  80% {
    -webkit-transform: translate3d(0, 10px, 0);
    transform: translate3d(0, 10px, 0);
  }
}
.animate__shakeY {
  -webkit-animation-name: shakeY;
  animation-name: shakeY;
}
@-webkit-keyframes headShake {
  0% {
    -webkit-transform: translateX(0);
    transform: translateX(0);
  }

  6.5% {
    -webkit-transform: translateX(-6px) rotateY(-9deg);
    transform: translateX(-6px) rotateY(-9deg);
  }

  18.5% {
    -webkit-transform: translateX(5px) rotateY(7deg);
    transform: translateX(5px) rotateY(7deg);
  }

  31.5% {
    -webkit-transform: translateX(-3px) rotateY(-5deg);
    transform: translateX(-3px) rotateY(-5deg);
  }

  43.5% {
    -webkit-transform: translateX(2px) rotateY(3deg);
    transform: translateX(2px) rotateY(3deg);
  }

  50% {
    -webkit-transform: translateX(0);
    transform: translateX(0);
  }
}
@keyframes headShake {
  0% {
    -webkit-transform: translateX(0);
    transform: translateX(0);
  }

  6.5% {
    -webkit-transform: translateX(-6px) rotateY(-9deg);
    transform: translateX(-6px) rotateY(-9deg);
  }

  18.5% {
    -webkit-transform: translateX(5px) rotateY(7deg);
    transform: translateX(5px) rotateY(7deg);
  }

  31.5% {
    -webkit-transform: translateX(-3px) rotateY(-5deg);
    transform: translateX(-3px) rotateY(-5deg);
  }

  43.5% {
    -webkit-transform: translateX(2px) rotateY(3deg);
    transform: translateX(2px) rotateY(3deg);
  }

  50% {
    -webkit-transform: translateX(0);
    transform: translateX(0);
  }
}
.animate__headShake {
  -webkit-animation-timing-function: ease-in-out;
  animation-timing-function: ease-in-out;
  -webkit-animation-name: headShake;
  animation-name: headShake;
}
@-webkit-keyframes swing {
  20% {
    -webkit-transform: rotate3d(0, 0, 1, 15deg);
    transform: rotate3d(0, 0, 1, 15deg);
  }

  40% {
    -webkit-transform: rotate3d(0, 0, 1, -10deg);
    transform: rotate3d(0, 0, 1, -10deg);
  }

  60% {
    -webkit-transform: rotate3d(0, 0, 1, 5deg);
    transform: rotate3d(0, 0, 1, 5deg);
  }

  80% {
    -webkit-transform: rotate3d(0, 0, 1, -5deg);
    transform: rotate3d(0, 0, 1, -5deg);
  }

  to {
    -webkit-transform: rotate3d(0, 0, 1, 0deg);
    transform: rotate3d(0, 0, 1, 0deg);
  }
}
@keyframes swing {
  20% {
    -webkit-transform: rotate3d(0, 0, 1, 15deg);
    transform: rotate3d(0, 0, 1, 15deg);
  }

  40% {
    -webkit-transform: rotate3d(0, 0, 1, -10deg);
    transform: rotate3d(0, 0, 1, -10deg);
  }

  60% {
    -webkit-transform: rotate3d(0, 0, 1, 5deg);
    transform: rotate3d(0, 0, 1, 5deg);
  }

  80% {
    -webkit-transform: rotate3d(0, 0, 1, -5deg);
    transform: rotate3d(0, 0, 1, -5deg);
  }

  to {
    -webkit-transform: rotate3d(0, 0, 1, 0deg);
    transform: rotate3d(0, 0, 1, 0deg);
  }
}
.animate__swing {
  -webkit-transform-origin: top center;
  transform-origin: top center;
  -webkit-animation-name: swing;
  animation-name: swing;
}
@-webkit-keyframes tada {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }

  10%,
  20% {
    -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
    transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
  }

  30%,
  50%,
  70%,
  90% {
    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
  }

  40%,
  60%,
  80% {
    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
  }

  to {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}
@keyframes tada {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }

  10%,
  20% {
    -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
    transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
  }

  30%,
  50%,
  70%,
  90% {
    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
  }

  40%,
  60%,
  80% {
    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
  }

  to {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}
.animate__tada {
  -webkit-animation-name: tada;
  animation-name: tada;
}
/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
@-webkit-keyframes wobble {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  15% {
    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
  }

  30% {
    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
  }

  45% {
    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
  }

  60% {
    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
  }

  75% {
    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes wobble {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  15% {
    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
  }

  30% {
    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
  }

  45% {
    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
  }

  60% {
    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
  }

  75% {
    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__wobble {
  -webkit-animation-name: wobble;
  animation-name: wobble;
}
@-webkit-keyframes jello {
  from,
  11.1%,
  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  22.2% {
    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
    transform: skewX(-12.5deg) skewY(-12.5deg);
  }

  33.3% {
    -webkit-transform: skewX(6.25deg) skewY(6.25deg);
    transform: skewX(6.25deg) skewY(6.25deg);
  }

  44.4% {
    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
    transform: skewX(-3.125deg) skewY(-3.125deg);
  }

  55.5% {
    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
    transform: skewX(1.5625deg) skewY(1.5625deg);
  }

  66.6% {
    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
    transform: skewX(-0.78125deg) skewY(-0.78125deg);
  }

  77.7% {
    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
    transform: skewX(0.390625deg) skewY(0.390625deg);
  }

  88.8% {
    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
  }
}
@keyframes jello {
  from,
  11.1%,
  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  22.2% {
    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
    transform: skewX(-12.5deg) skewY(-12.5deg);
  }

  33.3% {
    -webkit-transform: skewX(6.25deg) skewY(6.25deg);
    transform: skewX(6.25deg) skewY(6.25deg);
  }

  44.4% {
    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
    transform: skewX(-3.125deg) skewY(-3.125deg);
  }

  55.5% {
    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
    transform: skewX(1.5625deg) skewY(1.5625deg);
  }

  66.6% {
    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
    transform: skewX(-0.78125deg) skewY(-0.78125deg);
  }

  77.7% {
    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
    transform: skewX(0.390625deg) skewY(0.390625deg);
  }

  88.8% {
    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
  }
}
.animate__jello {
  -webkit-animation-name: jello;
  animation-name: jello;
  -webkit-transform-origin: center;
  transform-origin: center;
}
@-webkit-keyframes heartBeat {
  0% {
    -webkit-transform: scale(1);
    transform: scale(1);
  }

  14% {
    -webkit-transform: scale(1.3);
    transform: scale(1.3);
  }

  28% {
    -webkit-transform: scale(1);
    transform: scale(1);
  }

  42% {
    -webkit-transform: scale(1.3);
    transform: scale(1.3);
  }

  70% {
    -webkit-transform: scale(1);
    transform: scale(1);
  }
}
@keyframes heartBeat {
  0% {
    -webkit-transform: scale(1);
    transform: scale(1);
  }

  14% {
    -webkit-transform: scale(1.3);
    transform: scale(1.3);
  }

  28% {
    -webkit-transform: scale(1);
    transform: scale(1);
  }

  42% {
    -webkit-transform: scale(1.3);
    transform: scale(1.3);
  }

  70% {
    -webkit-transform: scale(1);
    transform: scale(1);
  }
}
.animate__heartBeat {
  -webkit-animation-name: heartBeat;
  animation-name: heartBeat;
  -webkit-animation-duration: calc(1s * 1.3);
  animation-duration: calc(1s * 1.3);
  -webkit-animation-duration: calc(var(--animate-duration) * 1.3);
  animation-duration: calc(var(--animate-duration) * 1.3);
  -webkit-animation-timing-function: ease-in-out;
  animation-timing-function: ease-in-out;
}
/* Back entrances */
@-webkit-keyframes backInDown {
  0% {
    -webkit-transform: translateY(-1200px) scale(0.7);
    transform: translateY(-1200px) scale(0.7);
    opacity: 0.7;
  }

  80% {
    -webkit-transform: translateY(0px) scale(0.7);
    transform: translateY(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }
}
@keyframes backInDown {
  0% {
    -webkit-transform: translateY(-1200px) scale(0.7);
    transform: translateY(-1200px) scale(0.7);
    opacity: 0.7;
  }

  80% {
    -webkit-transform: translateY(0px) scale(0.7);
    transform: translateY(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }
}
.animate__backInDown {
  -webkit-animation-name: backInDown;
  animation-name: backInDown;
}
@-webkit-keyframes backInLeft {
  0% {
    -webkit-transform: translateX(-2000px) scale(0.7);
    transform: translateX(-2000px) scale(0.7);
    opacity: 0.7;
  }

  80% {
    -webkit-transform: translateX(0px) scale(0.7);
    transform: translateX(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }
}
@keyframes backInLeft {
  0% {
    -webkit-transform: translateX(-2000px) scale(0.7);
    transform: translateX(-2000px) scale(0.7);
    opacity: 0.7;
  }

  80% {
    -webkit-transform: translateX(0px) scale(0.7);
    transform: translateX(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }
}
.animate__backInLeft {
  -webkit-animation-name: backInLeft;
  animation-name: backInLeft;
}
@-webkit-keyframes backInRight {
  0% {
    -webkit-transform: translateX(2000px) scale(0.7);
    transform: translateX(2000px) scale(0.7);
    opacity: 0.7;
  }

  80% {
    -webkit-transform: translateX(0px) scale(0.7);
    transform: translateX(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }
}
@keyframes backInRight {
  0% {
    -webkit-transform: translateX(2000px) scale(0.7);
    transform: translateX(2000px) scale(0.7);
    opacity: 0.7;
  }

  80% {
    -webkit-transform: translateX(0px) scale(0.7);
    transform: translateX(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }
}
.animate__backInRight {
  -webkit-animation-name: backInRight;
  animation-name: backInRight;
}
@-webkit-keyframes backInUp {
  0% {
    -webkit-transform: translateY(1200px) scale(0.7);
    transform: translateY(1200px) scale(0.7);
    opacity: 0.7;
  }

  80% {
    -webkit-transform: translateY(0px) scale(0.7);
    transform: translateY(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }
}
@keyframes backInUp {
  0% {
    -webkit-transform: translateY(1200px) scale(0.7);
    transform: translateY(1200px) scale(0.7);
    opacity: 0.7;
  }

  80% {
    -webkit-transform: translateY(0px) scale(0.7);
    transform: translateY(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }
}
.animate__backInUp {
  -webkit-animation-name: backInUp;
  animation-name: backInUp;
}
/* Back exits */
@-webkit-keyframes backOutDown {
  0% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }

  20% {
    -webkit-transform: translateY(0px) scale(0.7);
    transform: translateY(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: translateY(700px) scale(0.7);
    transform: translateY(700px) scale(0.7);
    opacity: 0.7;
  }
}
@keyframes backOutDown {
  0% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }

  20% {
    -webkit-transform: translateY(0px) scale(0.7);
    transform: translateY(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: translateY(700px) scale(0.7);
    transform: translateY(700px) scale(0.7);
    opacity: 0.7;
  }
}
.animate__backOutDown {
  -webkit-animation-name: backOutDown;
  animation-name: backOutDown;
}
@-webkit-keyframes backOutLeft {
  0% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }

  20% {
    -webkit-transform: translateX(0px) scale(0.7);
    transform: translateX(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: translateX(-2000px) scale(0.7);
    transform: translateX(-2000px) scale(0.7);
    opacity: 0.7;
  }
}
@keyframes backOutLeft {
  0% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }

  20% {
    -webkit-transform: translateX(0px) scale(0.7);
    transform: translateX(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: translateX(-2000px) scale(0.7);
    transform: translateX(-2000px) scale(0.7);
    opacity: 0.7;
  }
}
.animate__backOutLeft {
  -webkit-animation-name: backOutLeft;
  animation-name: backOutLeft;
}
@-webkit-keyframes backOutRight {
  0% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }

  20% {
    -webkit-transform: translateX(0px) scale(0.7);
    transform: translateX(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: translateX(2000px) scale(0.7);
    transform: translateX(2000px) scale(0.7);
    opacity: 0.7;
  }
}
@keyframes backOutRight {
  0% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }

  20% {
    -webkit-transform: translateX(0px) scale(0.7);
    transform: translateX(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: translateX(2000px) scale(0.7);
    transform: translateX(2000px) scale(0.7);
    opacity: 0.7;
  }
}
.animate__backOutRight {
  -webkit-animation-name: backOutRight;
  animation-name: backOutRight;
}
@-webkit-keyframes backOutUp {
  0% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }

  20% {
    -webkit-transform: translateY(0px) scale(0.7);
    transform: translateY(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: translateY(-700px) scale(0.7);
    transform: translateY(-700px) scale(0.7);
    opacity: 0.7;
  }
}
@keyframes backOutUp {
  0% {
    -webkit-transform: scale(1);
    transform: scale(1);
    opacity: 1;
  }

  20% {
    -webkit-transform: translateY(0px) scale(0.7);
    transform: translateY(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    -webkit-transform: translateY(-700px) scale(0.7);
    transform: translateY(-700px) scale(0.7);
    opacity: 0.7;
  }
}
.animate__backOutUp {
  -webkit-animation-name: backOutUp;
  animation-name: backOutUp;
}
/* Bouncing entrances  */
@-webkit-keyframes bounceIn {
  from,
  20%,
  40%,
  60%,
  80%,
  to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  0% {
    opacity: 0;
    -webkit-transform: scale3d(0.3, 0.3, 0.3);
    transform: scale3d(0.3, 0.3, 0.3);
  }

  20% {
    -webkit-transform: scale3d(1.1, 1.1, 1.1);
    transform: scale3d(1.1, 1.1, 1.1);
  }

  40% {
    -webkit-transform: scale3d(0.9, 0.9, 0.9);
    transform: scale3d(0.9, 0.9, 0.9);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(1.03, 1.03, 1.03);
    transform: scale3d(1.03, 1.03, 1.03);
  }

  80% {
    -webkit-transform: scale3d(0.97, 0.97, 0.97);
    transform: scale3d(0.97, 0.97, 0.97);
  }

  to {
    opacity: 1;
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}
@keyframes bounceIn {
  from,
  20%,
  40%,
  60%,
  80%,
  to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  0% {
    opacity: 0;
    -webkit-transform: scale3d(0.3, 0.3, 0.3);
    transform: scale3d(0.3, 0.3, 0.3);
  }

  20% {
    -webkit-transform: scale3d(1.1, 1.1, 1.1);
    transform: scale3d(1.1, 1.1, 1.1);
  }

  40% {
    -webkit-transform: scale3d(0.9, 0.9, 0.9);
    transform: scale3d(0.9, 0.9, 0.9);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(1.03, 1.03, 1.03);
    transform: scale3d(1.03, 1.03, 1.03);
  }

  80% {
    -webkit-transform: scale3d(0.97, 0.97, 0.97);
    transform: scale3d(0.97, 0.97, 0.97);
  }

  to {
    opacity: 1;
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}
.animate__bounceIn {
  -webkit-animation-duration: calc(1s * 0.75);
  animation-duration: calc(1s * 0.75);
  -webkit-animation-duration: calc(var(--animate-duration) * 0.75);
  animation-duration: calc(var(--animate-duration) * 0.75);
  -webkit-animation-name: bounceIn;
  animation-name: bounceIn;
}
@-webkit-keyframes bounceInDown {
  from,
  60%,
  75%,
  90%,
  to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  0% {
    opacity: 0;
    -webkit-transform: translate3d(0, -3000px, 0) scaleY(3);
    transform: translate3d(0, -3000px, 0) scaleY(3);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(0, 25px, 0) scaleY(0.9);
    transform: translate3d(0, 25px, 0) scaleY(0.9);
  }

  75% {
    -webkit-transform: translate3d(0, -10px, 0) scaleY(0.95);
    transform: translate3d(0, -10px, 0) scaleY(0.95);
  }

  90% {
    -webkit-transform: translate3d(0, 5px, 0) scaleY(0.985);
    transform: translate3d(0, 5px, 0) scaleY(0.985);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes bounceInDown {
  from,
  60%,
  75%,
  90%,
  to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  0% {
    opacity: 0;
    -webkit-transform: translate3d(0, -3000px, 0) scaleY(3);
    transform: translate3d(0, -3000px, 0) scaleY(3);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(0, 25px, 0) scaleY(0.9);
    transform: translate3d(0, 25px, 0) scaleY(0.9);
  }

  75% {
    -webkit-transform: translate3d(0, -10px, 0) scaleY(0.95);
    transform: translate3d(0, -10px, 0) scaleY(0.95);
  }

  90% {
    -webkit-transform: translate3d(0, 5px, 0) scaleY(0.985);
    transform: translate3d(0, 5px, 0) scaleY(0.985);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__bounceInDown {
  -webkit-animation-name: bounceInDown;
  animation-name: bounceInDown;
}
@-webkit-keyframes bounceInLeft {
  from,
  60%,
  75%,
  90%,
  to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  0% {
    opacity: 0;
    -webkit-transform: translate3d(-3000px, 0, 0) scaleX(3);
    transform: translate3d(-3000px, 0, 0) scaleX(3);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(25px, 0, 0) scaleX(1);
    transform: translate3d(25px, 0, 0) scaleX(1);
  }

  75% {
    -webkit-transform: translate3d(-10px, 0, 0) scaleX(0.98);
    transform: translate3d(-10px, 0, 0) scaleX(0.98);
  }

  90% {
    -webkit-transform: translate3d(5px, 0, 0) scaleX(0.995);
    transform: translate3d(5px, 0, 0) scaleX(0.995);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes bounceInLeft {
  from,
  60%,
  75%,
  90%,
  to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  0% {
    opacity: 0;
    -webkit-transform: translate3d(-3000px, 0, 0) scaleX(3);
    transform: translate3d(-3000px, 0, 0) scaleX(3);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(25px, 0, 0) scaleX(1);
    transform: translate3d(25px, 0, 0) scaleX(1);
  }

  75% {
    -webkit-transform: translate3d(-10px, 0, 0) scaleX(0.98);
    transform: translate3d(-10px, 0, 0) scaleX(0.98);
  }

  90% {
    -webkit-transform: translate3d(5px, 0, 0) scaleX(0.995);
    transform: translate3d(5px, 0, 0) scaleX(0.995);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__bounceInLeft {
  -webkit-animation-name: bounceInLeft;
  animation-name: bounceInLeft;
}
@-webkit-keyframes bounceInRight {
  from,
  60%,
  75%,
  90%,
  to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  from {
    opacity: 0;
    -webkit-transform: translate3d(3000px, 0, 0) scaleX(3);
    transform: translate3d(3000px, 0, 0) scaleX(3);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(-25px, 0, 0) scaleX(1);
    transform: translate3d(-25px, 0, 0) scaleX(1);
  }

  75% {
    -webkit-transform: translate3d(10px, 0, 0) scaleX(0.98);
    transform: translate3d(10px, 0, 0) scaleX(0.98);
  }

  90% {
    -webkit-transform: translate3d(-5px, 0, 0) scaleX(0.995);
    transform: translate3d(-5px, 0, 0) scaleX(0.995);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes bounceInRight {
  from,
  60%,
  75%,
  90%,
  to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  from {
    opacity: 0;
    -webkit-transform: translate3d(3000px, 0, 0) scaleX(3);
    transform: translate3d(3000px, 0, 0) scaleX(3);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(-25px, 0, 0) scaleX(1);
    transform: translate3d(-25px, 0, 0) scaleX(1);
  }

  75% {
    -webkit-transform: translate3d(10px, 0, 0) scaleX(0.98);
    transform: translate3d(10px, 0, 0) scaleX(0.98);
  }

  90% {
    -webkit-transform: translate3d(-5px, 0, 0) scaleX(0.995);
    transform: translate3d(-5px, 0, 0) scaleX(0.995);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__bounceInRight {
  -webkit-animation-name: bounceInRight;
  animation-name: bounceInRight;
}
@-webkit-keyframes bounceInUp {
  from,
  60%,
  75%,
  90%,
  to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 3000px, 0) scaleY(5);
    transform: translate3d(0, 3000px, 0) scaleY(5);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(0, -20px, 0) scaleY(0.9);
    transform: translate3d(0, -20px, 0) scaleY(0.9);
  }

  75% {
    -webkit-transform: translate3d(0, 10px, 0) scaleY(0.95);
    transform: translate3d(0, 10px, 0) scaleY(0.95);
  }

  90% {
    -webkit-transform: translate3d(0, -5px, 0) scaleY(0.985);
    transform: translate3d(0, -5px, 0) scaleY(0.985);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes bounceInUp {
  from,
  60%,
  75%,
  90%,
  to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 3000px, 0) scaleY(5);
    transform: translate3d(0, 3000px, 0) scaleY(5);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(0, -20px, 0) scaleY(0.9);
    transform: translate3d(0, -20px, 0) scaleY(0.9);
  }

  75% {
    -webkit-transform: translate3d(0, 10px, 0) scaleY(0.95);
    transform: translate3d(0, 10px, 0) scaleY(0.95);
  }

  90% {
    -webkit-transform: translate3d(0, -5px, 0) scaleY(0.985);
    transform: translate3d(0, -5px, 0) scaleY(0.985);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__bounceInUp {
  -webkit-animation-name: bounceInUp;
  animation-name: bounceInUp;
}
/* Bouncing exits  */
@-webkit-keyframes bounceOut {
  20% {
    -webkit-transform: scale3d(0.9, 0.9, 0.9);
    transform: scale3d(0.9, 0.9, 0.9);
  }

  50%,
  55% {
    opacity: 1;
    -webkit-transform: scale3d(1.1, 1.1, 1.1);
    transform: scale3d(1.1, 1.1, 1.1);
  }

  to {
    opacity: 0;
    -webkit-transform: scale3d(0.3, 0.3, 0.3);
    transform: scale3d(0.3, 0.3, 0.3);
  }
}
@keyframes bounceOut {
  20% {
    -webkit-transform: scale3d(0.9, 0.9, 0.9);
    transform: scale3d(0.9, 0.9, 0.9);
  }

  50%,
  55% {
    opacity: 1;
    -webkit-transform: scale3d(1.1, 1.1, 1.1);
    transform: scale3d(1.1, 1.1, 1.1);
  }

  to {
    opacity: 0;
    -webkit-transform: scale3d(0.3, 0.3, 0.3);
    transform: scale3d(0.3, 0.3, 0.3);
  }
}
.animate__bounceOut {
  -webkit-animation-duration: calc(1s * 0.75);
  animation-duration: calc(1s * 0.75);
  -webkit-animation-duration: calc(var(--animate-duration) * 0.75);
  animation-duration: calc(var(--animate-duration) * 0.75);
  -webkit-animation-name: bounceOut;
  animation-name: bounceOut;
}
@-webkit-keyframes bounceOutDown {
  20% {
    -webkit-transform: translate3d(0, 10px, 0) scaleY(0.985);
    transform: translate3d(0, 10px, 0) scaleY(0.985);
  }

  40%,
  45% {
    opacity: 1;
    -webkit-transform: translate3d(0, -20px, 0) scaleY(0.9);
    transform: translate3d(0, -20px, 0) scaleY(0.9);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, 2000px, 0) scaleY(3);
    transform: translate3d(0, 2000px, 0) scaleY(3);
  }
}
@keyframes bounceOutDown {
  20% {
    -webkit-transform: translate3d(0, 10px, 0) scaleY(0.985);
    transform: translate3d(0, 10px, 0) scaleY(0.985);
  }

  40%,
  45% {
    opacity: 1;
    -webkit-transform: translate3d(0, -20px, 0) scaleY(0.9);
    transform: translate3d(0, -20px, 0) scaleY(0.9);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, 2000px, 0) scaleY(3);
    transform: translate3d(0, 2000px, 0) scaleY(3);
  }
}
.animate__bounceOutDown {
  -webkit-animation-name: bounceOutDown;
  animation-name: bounceOutDown;
}
@-webkit-keyframes bounceOutLeft {
  20% {
    opacity: 1;
    -webkit-transform: translate3d(20px, 0, 0) scaleX(0.9);
    transform: translate3d(20px, 0, 0) scaleX(0.9);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(-2000px, 0, 0) scaleX(2);
    transform: translate3d(-2000px, 0, 0) scaleX(2);
  }
}
@keyframes bounceOutLeft {
  20% {
    opacity: 1;
    -webkit-transform: translate3d(20px, 0, 0) scaleX(0.9);
    transform: translate3d(20px, 0, 0) scaleX(0.9);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(-2000px, 0, 0) scaleX(2);
    transform: translate3d(-2000px, 0, 0) scaleX(2);
  }
}
.animate__bounceOutLeft {
  -webkit-animation-name: bounceOutLeft;
  animation-name: bounceOutLeft;
}
@-webkit-keyframes bounceOutRight {
  20% {
    opacity: 1;
    -webkit-transform: translate3d(-20px, 0, 0) scaleX(0.9);
    transform: translate3d(-20px, 0, 0) scaleX(0.9);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(2000px, 0, 0) scaleX(2);
    transform: translate3d(2000px, 0, 0) scaleX(2);
  }
}
@keyframes bounceOutRight {
  20% {
    opacity: 1;
    -webkit-transform: translate3d(-20px, 0, 0) scaleX(0.9);
    transform: translate3d(-20px, 0, 0) scaleX(0.9);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(2000px, 0, 0) scaleX(2);
    transform: translate3d(2000px, 0, 0) scaleX(2);
  }
}
.animate__bounceOutRight {
  -webkit-animation-name: bounceOutRight;
  animation-name: bounceOutRight;
}
@-webkit-keyframes bounceOutUp {
  20% {
    -webkit-transform: translate3d(0, -10px, 0) scaleY(0.985);
    transform: translate3d(0, -10px, 0) scaleY(0.985);
  }

  40%,
  45% {
    opacity: 1;
    -webkit-transform: translate3d(0, 20px, 0) scaleY(0.9);
    transform: translate3d(0, 20px, 0) scaleY(0.9);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, -2000px, 0) scaleY(3);
    transform: translate3d(0, -2000px, 0) scaleY(3);
  }
}
@keyframes bounceOutUp {
  20% {
    -webkit-transform: translate3d(0, -10px, 0) scaleY(0.985);
    transform: translate3d(0, -10px, 0) scaleY(0.985);
  }

  40%,
  45% {
    opacity: 1;
    -webkit-transform: translate3d(0, 20px, 0) scaleY(0.9);
    transform: translate3d(0, 20px, 0) scaleY(0.9);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, -2000px, 0) scaleY(3);
    transform: translate3d(0, -2000px, 0) scaleY(3);
  }
}
.animate__bounceOutUp {
  -webkit-animation-name: bounceOutUp;
  animation-name: bounceOutUp;
}
/* Fading entrances  */
@-webkit-keyframes fadeIn {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}
@keyframes fadeIn {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}
.animate__fadeIn {
  -webkit-animation-name: fadeIn;
  animation-name: fadeIn;
}
@-webkit-keyframes fadeInDown {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes fadeInDown {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__fadeInDown {
  -webkit-animation-name: fadeInDown;
  animation-name: fadeInDown;
}
@-webkit-keyframes fadeInDownBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, -2000px, 0);
    transform: translate3d(0, -2000px, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes fadeInDownBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, -2000px, 0);
    transform: translate3d(0, -2000px, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__fadeInDownBig {
  -webkit-animation-name: fadeInDownBig;
  animation-name: fadeInDownBig;
}
@-webkit-keyframes fadeInLeft {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes fadeInLeft {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__fadeInLeft {
  -webkit-animation-name: fadeInLeft;
  animation-name: fadeInLeft;
}
@-webkit-keyframes fadeInLeftBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-2000px, 0, 0);
    transform: translate3d(-2000px, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes fadeInLeftBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-2000px, 0, 0);
    transform: translate3d(-2000px, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__fadeInLeftBig {
  -webkit-animation-name: fadeInLeftBig;
  animation-name: fadeInLeftBig;
}
@-webkit-keyframes fadeInRight {
  from {
    opacity: 0;
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes fadeInRight {
  from {
    opacity: 0;
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__fadeInRight {
  -webkit-animation-name: fadeInRight;
  animation-name: fadeInRight;
}
@-webkit-keyframes fadeInRightBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(2000px, 0, 0);
    transform: translate3d(2000px, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes fadeInRightBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(2000px, 0, 0);
    transform: translate3d(2000px, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__fadeInRightBig {
  -webkit-animation-name: fadeInRightBig;
  animation-name: fadeInRightBig;
}
@-webkit-keyframes fadeInUp {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes fadeInUp {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__fadeInUp {
  -webkit-animation-name: fadeInUp;
  animation-name: fadeInUp;
}
@-webkit-keyframes fadeInUpBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 2000px, 0);
    transform: translate3d(0, 2000px, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes fadeInUpBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 2000px, 0);
    transform: translate3d(0, 2000px, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__fadeInUpBig {
  -webkit-animation-name: fadeInUpBig;
  animation-name: fadeInUpBig;
}
@-webkit-keyframes fadeInTopLeft {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-100%, -100%, 0);
    transform: translate3d(-100%, -100%, 0);
  }
  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes fadeInTopLeft {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-100%, -100%, 0);
    transform: translate3d(-100%, -100%, 0);
  }
  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__fadeInTopLeft {
  -webkit-animation-name: fadeInTopLeft;
  animation-name: fadeInTopLeft;
}
@-webkit-keyframes fadeInTopRight {
  from {
    opacity: 0;
    -webkit-transform: translate3d(100%, -100%, 0);
    transform: translate3d(100%, -100%, 0);
  }
  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes fadeInTopRight {
  from {
    opacity: 0;
    -webkit-transform: translate3d(100%, -100%, 0);
    transform: translate3d(100%, -100%, 0);
  }
  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__fadeInTopRight {
  -webkit-animation-name: fadeInTopRight;
  animation-name: fadeInTopRight;
}
@-webkit-keyframes fadeInBottomLeft {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 100%, 0);
    transform: translate3d(-100%, 100%, 0);
  }
  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes fadeInBottomLeft {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 100%, 0);
    transform: translate3d(-100%, 100%, 0);
  }
  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__fadeInBottomLeft {
  -webkit-animation-name: fadeInBottomLeft;
  animation-name: fadeInBottomLeft;
}
@-webkit-keyframes fadeInBottomRight {
  from {
    opacity: 0;
    -webkit-transform: translate3d(100%, 100%, 0);
    transform: translate3d(100%, 100%, 0);
  }
  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes fadeInBottomRight {
  from {
    opacity: 0;
    -webkit-transform: translate3d(100%, 100%, 0);
    transform: translate3d(100%, 100%, 0);
  }
  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__fadeInBottomRight {
  -webkit-animation-name: fadeInBottomRight;
  animation-name: fadeInBottomRight;
}
/* Fading exits */
@-webkit-keyframes fadeOut {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}
@keyframes fadeOut {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}
.animate__fadeOut {
  -webkit-animation-name: fadeOut;
  animation-name: fadeOut;
}
@-webkit-keyframes fadeOutDown {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }
}
@keyframes fadeOutDown {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }
}
.animate__fadeOutDown {
  -webkit-animation-name: fadeOutDown;
  animation-name: fadeOutDown;
}
@-webkit-keyframes fadeOutDownBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, 2000px, 0);
    transform: translate3d(0, 2000px, 0);
  }
}
@keyframes fadeOutDownBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, 2000px, 0);
    transform: translate3d(0, 2000px, 0);
  }
}
.animate__fadeOutDownBig {
  -webkit-animation-name: fadeOutDownBig;
  animation-name: fadeOutDownBig;
}
@-webkit-keyframes fadeOutLeft {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
  }
}
@keyframes fadeOutLeft {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
  }
}
.animate__fadeOutLeft {
  -webkit-animation-name: fadeOutLeft;
  animation-name: fadeOutLeft;
}
@-webkit-keyframes fadeOutLeftBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(-2000px, 0, 0);
    transform: translate3d(-2000px, 0, 0);
  }
}
@keyframes fadeOutLeftBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(-2000px, 0, 0);
    transform: translate3d(-2000px, 0, 0);
  }
}
.animate__fadeOutLeftBig {
  -webkit-animation-name: fadeOutLeftBig;
  animation-name: fadeOutLeftBig;
}
@-webkit-keyframes fadeOutRight {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
  }
}
@keyframes fadeOutRight {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
  }
}
.animate__fadeOutRight {
  -webkit-animation-name: fadeOutRight;
  animation-name: fadeOutRight;
}
@-webkit-keyframes fadeOutRightBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(2000px, 0, 0);
    transform: translate3d(2000px, 0, 0);
  }
}
@keyframes fadeOutRightBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(2000px, 0, 0);
    transform: translate3d(2000px, 0, 0);
  }
}
.animate__fadeOutRightBig {
  -webkit-animation-name: fadeOutRightBig;
  animation-name: fadeOutRightBig;
}
@-webkit-keyframes fadeOutUp {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
  }
}
@keyframes fadeOutUp {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
  }
}
.animate__fadeOutUp {
  -webkit-animation-name: fadeOutUp;
  animation-name: fadeOutUp;
}
@-webkit-keyframes fadeOutUpBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, -2000px, 0);
    transform: translate3d(0, -2000px, 0);
  }
}
@keyframes fadeOutUpBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, -2000px, 0);
    transform: translate3d(0, -2000px, 0);
  }
}
.animate__fadeOutUpBig {
  -webkit-animation-name: fadeOutUpBig;
  animation-name: fadeOutUpBig;
}
@-webkit-keyframes fadeOutTopLeft {
  from {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
  to {
    opacity: 0;
    -webkit-transform: translate3d(-100%, -100%, 0);
    transform: translate3d(-100%, -100%, 0);
  }
}
@keyframes fadeOutTopLeft {
  from {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
  to {
    opacity: 0;
    -webkit-transform: translate3d(-100%, -100%, 0);
    transform: translate3d(-100%, -100%, 0);
  }
}
.animate__fadeOutTopLeft {
  -webkit-animation-name: fadeOutTopLeft;
  animation-name: fadeOutTopLeft;
}
@-webkit-keyframes fadeOutTopRight {
  from {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
  to {
    opacity: 0;
    -webkit-transform: translate3d(100%, -100%, 0);
    transform: translate3d(100%, -100%, 0);
  }
}
@keyframes fadeOutTopRight {
  from {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
  to {
    opacity: 0;
    -webkit-transform: translate3d(100%, -100%, 0);
    transform: translate3d(100%, -100%, 0);
  }
}
.animate__fadeOutTopRight {
  -webkit-animation-name: fadeOutTopRight;
  animation-name: fadeOutTopRight;
}
@-webkit-keyframes fadeOutBottomRight {
  from {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
  to {
    opacity: 0;
    -webkit-transform: translate3d(100%, 100%, 0);
    transform: translate3d(100%, 100%, 0);
  }
}
@keyframes fadeOutBottomRight {
  from {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
  to {
    opacity: 0;
    -webkit-transform: translate3d(100%, 100%, 0);
    transform: translate3d(100%, 100%, 0);
  }
}
.animate__fadeOutBottomRight {
  -webkit-animation-name: fadeOutBottomRight;
  animation-name: fadeOutBottomRight;
}
@-webkit-keyframes fadeOutBottomLeft {
  from {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
  to {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 100%, 0);
    transform: translate3d(-100%, 100%, 0);
  }
}
@keyframes fadeOutBottomLeft {
  from {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
  to {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 100%, 0);
    transform: translate3d(-100%, 100%, 0);
  }
}
.animate__fadeOutBottomLeft {
  -webkit-animation-name: fadeOutBottomLeft;
  animation-name: fadeOutBottomLeft;
}
/* Flippers */
@-webkit-keyframes flip {
  from {
    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);
    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);
    -webkit-animation-timing-function: ease-out;
    animation-timing-function: ease-out;
  }

  40% {
    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
      rotate3d(0, 1, 0, -190deg);
    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
      rotate3d(0, 1, 0, -190deg);
    -webkit-animation-timing-function: ease-out;
    animation-timing-function: ease-out;
  }

  50% {
    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
      rotate3d(0, 1, 0, -170deg);
    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
      rotate3d(0, 1, 0, -170deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  80% {
    -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)
      rotate3d(0, 1, 0, 0deg);
    transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)
      rotate3d(0, 1, 0, 0deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  to {
    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }
}
@keyframes flip {
  from {
    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);
    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);
    -webkit-animation-timing-function: ease-out;
    animation-timing-function: ease-out;
  }

  40% {
    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
      rotate3d(0, 1, 0, -190deg);
    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
      rotate3d(0, 1, 0, -190deg);
    -webkit-animation-timing-function: ease-out;
    animation-timing-function: ease-out;
  }

  50% {
    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
      rotate3d(0, 1, 0, -170deg);
    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
      rotate3d(0, 1, 0, -170deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  80% {
    -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)
      rotate3d(0, 1, 0, 0deg);
    transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)
      rotate3d(0, 1, 0, 0deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  to {
    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }
}
.animate__animated.animate__flip {
  -webkit-backface-visibility: visible;
  backface-visibility: visible;
  -webkit-animation-name: flip;
  animation-name: flip;
}
@-webkit-keyframes flipInX {
  from {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
    opacity: 0;
  }

  40% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  60% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
    opacity: 1;
  }

  80% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
  }

  to {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }
}
@keyframes flipInX {
  from {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
    opacity: 0;
  }

  40% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  60% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
    opacity: 1;
  }

  80% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
  }

  to {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }
}
.animate__flipInX {
  -webkit-backface-visibility: visible !important;
  backface-visibility: visible !important;
  -webkit-animation-name: flipInX;
  animation-name: flipInX;
}
@-webkit-keyframes flipInY {
  from {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
    opacity: 0;
  }

  40% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  60% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
    opacity: 1;
  }

  80% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
  }

  to {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }
}
@keyframes flipInY {
  from {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
    opacity: 0;
  }

  40% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  60% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
    opacity: 1;
  }

  80% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
  }

  to {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }
}
.animate__flipInY {
  -webkit-backface-visibility: visible !important;
  backface-visibility: visible !important;
  -webkit-animation-name: flipInY;
  animation-name: flipInY;
}
@-webkit-keyframes flipOutX {
  from {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }

  30% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    opacity: 1;
  }

  to {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    opacity: 0;
  }
}
@keyframes flipOutX {
  from {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }

  30% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    opacity: 1;
  }

  to {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    opacity: 0;
  }
}
.animate__flipOutX {
  -webkit-animation-duration: calc(1s * 0.75);
  animation-duration: calc(1s * 0.75);
  -webkit-animation-duration: calc(var(--animate-duration) * 0.75);
  animation-duration: calc(var(--animate-duration) * 0.75);
  -webkit-animation-name: flipOutX;
  animation-name: flipOutX;
  -webkit-backface-visibility: visible !important;
  backface-visibility: visible !important;
}
@-webkit-keyframes flipOutY {
  from {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }

  30% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
    opacity: 1;
  }

  to {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    opacity: 0;
  }
}
@keyframes flipOutY {
  from {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }

  30% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
    opacity: 1;
  }

  to {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    opacity: 0;
  }
}
.animate__flipOutY {
  -webkit-animation-duration: calc(1s * 0.75);
  animation-duration: calc(1s * 0.75);
  -webkit-animation-duration: calc(var(--animate-duration) * 0.75);
  animation-duration: calc(var(--animate-duration) * 0.75);
  -webkit-backface-visibility: visible !important;
  backface-visibility: visible !important;
  -webkit-animation-name: flipOutY;
  animation-name: flipOutY;
}
/* Lightspeed */
@-webkit-keyframes lightSpeedInRight {
  from {
    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
    transform: translate3d(100%, 0, 0) skewX(-30deg);
    opacity: 0;
  }

  60% {
    -webkit-transform: skewX(20deg);
    transform: skewX(20deg);
    opacity: 1;
  }

  80% {
    -webkit-transform: skewX(-5deg);
    transform: skewX(-5deg);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes lightSpeedInRight {
  from {
    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
    transform: translate3d(100%, 0, 0) skewX(-30deg);
    opacity: 0;
  }

  60% {
    -webkit-transform: skewX(20deg);
    transform: skewX(20deg);
    opacity: 1;
  }

  80% {
    -webkit-transform: skewX(-5deg);
    transform: skewX(-5deg);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__lightSpeedInRight {
  -webkit-animation-name: lightSpeedInRight;
  animation-name: lightSpeedInRight;
  -webkit-animation-timing-function: ease-out;
  animation-timing-function: ease-out;
}
@-webkit-keyframes lightSpeedInLeft {
  from {
    -webkit-transform: translate3d(-100%, 0, 0) skewX(30deg);
    transform: translate3d(-100%, 0, 0) skewX(30deg);
    opacity: 0;
  }

  60% {
    -webkit-transform: skewX(-20deg);
    transform: skewX(-20deg);
    opacity: 1;
  }

  80% {
    -webkit-transform: skewX(5deg);
    transform: skewX(5deg);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes lightSpeedInLeft {
  from {
    -webkit-transform: translate3d(-100%, 0, 0) skewX(30deg);
    transform: translate3d(-100%, 0, 0) skewX(30deg);
    opacity: 0;
  }

  60% {
    -webkit-transform: skewX(-20deg);
    transform: skewX(-20deg);
    opacity: 1;
  }

  80% {
    -webkit-transform: skewX(5deg);
    transform: skewX(5deg);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__lightSpeedInLeft {
  -webkit-animation-name: lightSpeedInLeft;
  animation-name: lightSpeedInLeft;
  -webkit-animation-timing-function: ease-out;
  animation-timing-function: ease-out;
}
@-webkit-keyframes lightSpeedOutRight {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
    transform: translate3d(100%, 0, 0) skewX(30deg);
    opacity: 0;
  }
}
@keyframes lightSpeedOutRight {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
    transform: translate3d(100%, 0, 0) skewX(30deg);
    opacity: 0;
  }
}
.animate__lightSpeedOutRight {
  -webkit-animation-name: lightSpeedOutRight;
  animation-name: lightSpeedOutRight;
  -webkit-animation-timing-function: ease-in;
  animation-timing-function: ease-in;
}
@-webkit-keyframes lightSpeedOutLeft {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: translate3d(-100%, 0, 0) skewX(-30deg);
    transform: translate3d(-100%, 0, 0) skewX(-30deg);
    opacity: 0;
  }
}
@keyframes lightSpeedOutLeft {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: translate3d(-100%, 0, 0) skewX(-30deg);
    transform: translate3d(-100%, 0, 0) skewX(-30deg);
    opacity: 0;
  }
}
.animate__lightSpeedOutLeft {
  -webkit-animation-name: lightSpeedOutLeft;
  animation-name: lightSpeedOutLeft;
  -webkit-animation-timing-function: ease-in;
  animation-timing-function: ease-in;
}
/* Rotating entrances */
@-webkit-keyframes rotateIn {
  from {
    -webkit-transform: rotate3d(0, 0, 1, -200deg);
    transform: rotate3d(0, 0, 1, -200deg);
    opacity: 0;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}
@keyframes rotateIn {
  from {
    -webkit-transform: rotate3d(0, 0, 1, -200deg);
    transform: rotate3d(0, 0, 1, -200deg);
    opacity: 0;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}
.animate__rotateIn {
  -webkit-animation-name: rotateIn;
  animation-name: rotateIn;
  -webkit-transform-origin: center;
  transform-origin: center;
}
@-webkit-keyframes rotateInDownLeft {
  from {
    -webkit-transform: rotate3d(0, 0, 1, -45deg);
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}
@keyframes rotateInDownLeft {
  from {
    -webkit-transform: rotate3d(0, 0, 1, -45deg);
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}
.animate__rotateInDownLeft {
  -webkit-animation-name: rotateInDownLeft;
  animation-name: rotateInDownLeft;
  -webkit-transform-origin: left bottom;
  transform-origin: left bottom;
}
@-webkit-keyframes rotateInDownRight {
  from {
    -webkit-transform: rotate3d(0, 0, 1, 45deg);
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}
@keyframes rotateInDownRight {
  from {
    -webkit-transform: rotate3d(0, 0, 1, 45deg);
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}
.animate__rotateInDownRight {
  -webkit-animation-name: rotateInDownRight;
  animation-name: rotateInDownRight;
  -webkit-transform-origin: right bottom;
  transform-origin: right bottom;
}
@-webkit-keyframes rotateInUpLeft {
  from {
    -webkit-transform: rotate3d(0, 0, 1, 45deg);
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}
@keyframes rotateInUpLeft {
  from {
    -webkit-transform: rotate3d(0, 0, 1, 45deg);
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}
.animate__rotateInUpLeft {
  -webkit-animation-name: rotateInUpLeft;
  animation-name: rotateInUpLeft;
  -webkit-transform-origin: left bottom;
  transform-origin: left bottom;
}
@-webkit-keyframes rotateInUpRight {
  from {
    -webkit-transform: rotate3d(0, 0, 1, -90deg);
    transform: rotate3d(0, 0, 1, -90deg);
    opacity: 0;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}
@keyframes rotateInUpRight {
  from {
    -webkit-transform: rotate3d(0, 0, 1, -90deg);
    transform: rotate3d(0, 0, 1, -90deg);
    opacity: 0;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}
.animate__rotateInUpRight {
  -webkit-animation-name: rotateInUpRight;
  animation-name: rotateInUpRight;
  -webkit-transform-origin: right bottom;
  transform-origin: right bottom;
}
/* Rotating exits */
@-webkit-keyframes rotateOut {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: rotate3d(0, 0, 1, 200deg);
    transform: rotate3d(0, 0, 1, 200deg);
    opacity: 0;
  }
}
@keyframes rotateOut {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: rotate3d(0, 0, 1, 200deg);
    transform: rotate3d(0, 0, 1, 200deg);
    opacity: 0;
  }
}
.animate__rotateOut {
  -webkit-animation-name: rotateOut;
  animation-name: rotateOut;
  -webkit-transform-origin: center;
  transform-origin: center;
}
@-webkit-keyframes rotateOutDownLeft {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: rotate3d(0, 0, 1, 45deg);
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }
}
@keyframes rotateOutDownLeft {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: rotate3d(0, 0, 1, 45deg);
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }
}
.animate__rotateOutDownLeft {
  -webkit-animation-name: rotateOutDownLeft;
  animation-name: rotateOutDownLeft;
  -webkit-transform-origin: left bottom;
  transform-origin: left bottom;
}
@-webkit-keyframes rotateOutDownRight {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: rotate3d(0, 0, 1, -45deg);
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }
}
@keyframes rotateOutDownRight {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: rotate3d(0, 0, 1, -45deg);
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }
}
.animate__rotateOutDownRight {
  -webkit-animation-name: rotateOutDownRight;
  animation-name: rotateOutDownRight;
  -webkit-transform-origin: right bottom;
  transform-origin: right bottom;
}
@-webkit-keyframes rotateOutUpLeft {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: rotate3d(0, 0, 1, -45deg);
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }
}
@keyframes rotateOutUpLeft {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: rotate3d(0, 0, 1, -45deg);
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }
}
.animate__rotateOutUpLeft {
  -webkit-animation-name: rotateOutUpLeft;
  animation-name: rotateOutUpLeft;
  -webkit-transform-origin: left bottom;
  transform-origin: left bottom;
}
@-webkit-keyframes rotateOutUpRight {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: rotate3d(0, 0, 1, 90deg);
    transform: rotate3d(0, 0, 1, 90deg);
    opacity: 0;
  }
}
@keyframes rotateOutUpRight {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: rotate3d(0, 0, 1, 90deg);
    transform: rotate3d(0, 0, 1, 90deg);
    opacity: 0;
  }
}
.animate__rotateOutUpRight {
  -webkit-animation-name: rotateOutUpRight;
  animation-name: rotateOutUpRight;
  -webkit-transform-origin: right bottom;
  transform-origin: right bottom;
}
/* Specials */
@-webkit-keyframes hinge {
  0% {
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
  }

  20%,
  60% {
    -webkit-transform: rotate3d(0, 0, 1, 80deg);
    transform: rotate3d(0, 0, 1, 80deg);
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
  }

  40%,
  80% {
    -webkit-transform: rotate3d(0, 0, 1, 60deg);
    transform: rotate3d(0, 0, 1, 60deg);
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
    opacity: 1;
  }

  to {
    -webkit-transform: translate3d(0, 700px, 0);
    transform: translate3d(0, 700px, 0);
    opacity: 0;
  }
}
@keyframes hinge {
  0% {
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
  }

  20%,
  60% {
    -webkit-transform: rotate3d(0, 0, 1, 80deg);
    transform: rotate3d(0, 0, 1, 80deg);
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
  }

  40%,
  80% {
    -webkit-transform: rotate3d(0, 0, 1, 60deg);
    transform: rotate3d(0, 0, 1, 60deg);
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
    opacity: 1;
  }

  to {
    -webkit-transform: translate3d(0, 700px, 0);
    transform: translate3d(0, 700px, 0);
    opacity: 0;
  }
}
.animate__hinge {
  -webkit-animation-duration: calc(1s * 2);
  animation-duration: calc(1s * 2);
  -webkit-animation-duration: calc(var(--animate-duration) * 2);
  animation-duration: calc(var(--animate-duration) * 2);
  -webkit-animation-name: hinge;
  animation-name: hinge;
  -webkit-transform-origin: top left;
  transform-origin: top left;
}
@-webkit-keyframes jackInTheBox {
  from {
    opacity: 0;
    -webkit-transform: scale(0.1) rotate(30deg);
    transform: scale(0.1) rotate(30deg);
    -webkit-transform-origin: center bottom;
    transform-origin: center bottom;
  }

  50% {
    -webkit-transform: rotate(-10deg);
    transform: rotate(-10deg);
  }

  70% {
    -webkit-transform: rotate(3deg);
    transform: rotate(3deg);
  }

  to {
    opacity: 1;
    -webkit-transform: scale(1);
    transform: scale(1);
  }
}
@keyframes jackInTheBox {
  from {
    opacity: 0;
    -webkit-transform: scale(0.1) rotate(30deg);
    transform: scale(0.1) rotate(30deg);
    -webkit-transform-origin: center bottom;
    transform-origin: center bottom;
  }

  50% {
    -webkit-transform: rotate(-10deg);
    transform: rotate(-10deg);
  }

  70% {
    -webkit-transform: rotate(3deg);
    transform: rotate(3deg);
  }

  to {
    opacity: 1;
    -webkit-transform: scale(1);
    transform: scale(1);
  }
}
.animate__jackInTheBox {
  -webkit-animation-name: jackInTheBox;
  animation-name: jackInTheBox;
}
/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
@-webkit-keyframes rollIn {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes rollIn {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__rollIn {
  -webkit-animation-name: rollIn;
  animation-name: rollIn;
}
/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
@-webkit-keyframes rollOut {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
  }
}
@keyframes rollOut {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
  }
}
.animate__rollOut {
  -webkit-animation-name: rollOut;
  animation-name: rollOut;
}
/* Zooming entrances */
@-webkit-keyframes zoomIn {
  from {
    opacity: 0;
    -webkit-transform: scale3d(0.3, 0.3, 0.3);
    transform: scale3d(0.3, 0.3, 0.3);
  }

  50% {
    opacity: 1;
  }
}
@keyframes zoomIn {
  from {
    opacity: 0;
    -webkit-transform: scale3d(0.3, 0.3, 0.3);
    transform: scale3d(0.3, 0.3, 0.3);
  }

  50% {
    opacity: 1;
  }
}
.animate__zoomIn {
  -webkit-animation-name: zoomIn;
  animation-name: zoomIn;
}
@-webkit-keyframes zoomInDown {
  from {
    opacity: 0;
    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}
@keyframes zoomInDown {
  from {
    opacity: 0;
    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}
.animate__zoomInDown {
  -webkit-animation-name: zoomInDown;
  animation-name: zoomInDown;
}
@-webkit-keyframes zoomInLeft {
  from {
    opacity: 0;
    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
    transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}
@keyframes zoomInLeft {
  from {
    opacity: 0;
    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
    transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}
.animate__zoomInLeft {
  -webkit-animation-name: zoomInLeft;
  animation-name: zoomInLeft;
}
@-webkit-keyframes zoomInRight {
  from {
    opacity: 0;
    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
    transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}
@keyframes zoomInRight {
  from {
    opacity: 0;
    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
    transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}
.animate__zoomInRight {
  -webkit-animation-name: zoomInRight;
  animation-name: zoomInRight;
}
@-webkit-keyframes zoomInUp {
  from {
    opacity: 0;
    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}
@keyframes zoomInUp {
  from {
    opacity: 0;
    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}
.animate__zoomInUp {
  -webkit-animation-name: zoomInUp;
  animation-name: zoomInUp;
}
/* Zooming exits */
@-webkit-keyframes zoomOut {
  from {
    opacity: 1;
  }

  50% {
    opacity: 0;
    -webkit-transform: scale3d(0.3, 0.3, 0.3);
    transform: scale3d(0.3, 0.3, 0.3);
  }

  to {
    opacity: 0;
  }
}
@keyframes zoomOut {
  from {
    opacity: 1;
  }

  50% {
    opacity: 0;
    -webkit-transform: scale3d(0.3, 0.3, 0.3);
    transform: scale3d(0.3, 0.3, 0.3);
  }

  to {
    opacity: 0;
  }
}
.animate__zoomOut {
  -webkit-animation-name: zoomOut;
  animation-name: zoomOut;
}
@-webkit-keyframes zoomOutDown {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  to {
    opacity: 0;
    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}
@keyframes zoomOutDown {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  to {
    opacity: 0;
    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}
.animate__zoomOutDown {
  -webkit-animation-name: zoomOutDown;
  animation-name: zoomOutDown;
  -webkit-transform-origin: center bottom;
  transform-origin: center bottom;
}
@-webkit-keyframes zoomOutLeft {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);
    transform: scale(0.1) translate3d(-2000px, 0, 0);
  }
}
@keyframes zoomOutLeft {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);
    transform: scale(0.1) translate3d(-2000px, 0, 0);
  }
}
.animate__zoomOutLeft {
  -webkit-animation-name: zoomOutLeft;
  animation-name: zoomOutLeft;
  -webkit-transform-origin: left center;
  transform-origin: left center;
}
@-webkit-keyframes zoomOutRight {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);
    transform: scale(0.1) translate3d(2000px, 0, 0);
  }
}
@keyframes zoomOutRight {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);
    transform: scale(0.1) translate3d(2000px, 0, 0);
  }
}
.animate__zoomOutRight {
  -webkit-animation-name: zoomOutRight;
  animation-name: zoomOutRight;
  -webkit-transform-origin: right center;
  transform-origin: right center;
}
@-webkit-keyframes zoomOutUp {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  to {
    opacity: 0;
    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}
@keyframes zoomOutUp {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  to {
    opacity: 0;
    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}
.animate__zoomOutUp {
  -webkit-animation-name: zoomOutUp;
  animation-name: zoomOutUp;
  -webkit-transform-origin: center bottom;
  transform-origin: center bottom;
}
/* Sliding entrances */
@-webkit-keyframes slideInDown {
  from {
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes slideInDown {
  from {
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__slideInDown {
  -webkit-animation-name: slideInDown;
  animation-name: slideInDown;
}
@-webkit-keyframes slideInLeft {
  from {
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes slideInLeft {
  from {
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__slideInLeft {
  -webkit-animation-name: slideInLeft;
  animation-name: slideInLeft;
}
@-webkit-keyframes slideInRight {
  from {
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes slideInRight {
  from {
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__slideInRight {
  -webkit-animation-name: slideInRight;
  animation-name: slideInRight;
}
@-webkit-keyframes slideInUp {
  from {
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
@keyframes slideInUp {
  from {
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__slideInUp {
  -webkit-animation-name: slideInUp;
  animation-name: slideInUp;
}
/* Sliding exits */
@-webkit-keyframes slideOutDown {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }
}
@keyframes slideOutDown {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }
}
.animate__slideOutDown {
  -webkit-animation-name: slideOutDown;
  animation-name: slideOutDown;
}
@-webkit-keyframes slideOutLeft {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
  }
}
@keyframes slideOutLeft {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
  }
}
.animate__slideOutLeft {
  -webkit-animation-name: slideOutLeft;
  animation-name: slideOutLeft;
}
@-webkit-keyframes slideOutRight {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
  }
}
@keyframes slideOutRight {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
  }
}
.animate__slideOutRight {
  -webkit-animation-name: slideOutRight;
  animation-name: slideOutRight;
}
@-webkit-keyframes slideOutUp {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
  }
}
@keyframes slideOutUp {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
  }
}
.animate__slideOutUp {
  -webkit-animation-name: slideOutUp;
  animation-name: slideOutUp;
}


