diff --git a/docs-archive/apache-airflow-providers-daskexecutor/1.1.1/security/security-model.html b/docs-archive/apache-airflow-providers-daskexecutor/1.1.1/security/security-model.html new file mode 100644 index 00000000000..9a36716bcbb --- /dev/null +++ b/docs-archive/apache-airflow-providers-daskexecutor/1.1.1/security/security-model.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/.buildinfo b/docs-archive/apache-airflow-providers-docker/3.9.0/.buildinfo new file mode 100644 index 00000000000..ee3e29caf3a --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 6a53893bdd2a1c627a99fcdfd209680c +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/decorators/docker/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/decorators/docker/index.html new file mode 100644 index 00000000000..a56d4b63ba4 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/decorators/docker/index.html @@ -0,0 +1,906 @@ + + + + + + + + + + + + airflow.providers.docker.decorators.docker — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+

airflow.providers.docker.decorators.docker

+
+

Module Contents

+
+

Functions

+ ++++ + + + + + +

docker_task([python_callable, multiple_outputs])

Python operator decorator; wraps a function into an Airflow operator.

+
+
+airflow.providers.docker.decorators.docker.docker_task(python_callable=None, multiple_outputs=None, **kwargs)[source]
+

Python operator decorator; wraps a function into an Airflow operator.

+

Also accepts any argument that DockerOperator will via kwargs. Can be reused in a single DAG.

+
+
Parameters
+
    +
  • python_callable (Callable | None) – Function to decorate

  • +
  • multiple_outputs (bool | None) – If set, function return value will be unrolled to multiple XCom values. +Dict will unroll to XCom values with keys as XCom keys. Defaults to False.

  • +
+
+
+
+ +
+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/decorators/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/decorators/index.html new file mode 100644 index 00000000000..46ebddbfbd5 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/decorators/index.html @@ -0,0 +1,873 @@ + + + + + + + + + + + + airflow.providers.docker.decorators — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + + +
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/exceptions/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/exceptions/index.html new file mode 100644 index 00000000000..f57ea308a63 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/exceptions/index.html @@ -0,0 +1,897 @@ + + + + + + + + + + + + airflow.providers.docker.exceptions — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+

airflow.providers.docker.exceptions

+

Exceptions used by Docker provider.

+
+

Module Contents

+
+
+exception airflow.providers.docker.exceptions.DockerContainerFailedException(message=None, logs=None)[source]
+

Bases: airflow.exceptions.AirflowException

+

Raised when a Docker container returns an error.

+
+
Parameters
+

logs (list[str | bytes] | None) – The log output of the failed Docker container

+
+
+
+ +
+
+exception airflow.providers.docker.exceptions.DockerContainerFailedSkipException(message=None, logs=None)[source]
+

Bases: airflow.exceptions.AirflowSkipException

+

Raised when a Docker container returns an error and task should be skipped.

+
+
Parameters
+

logs (list[str | bytes] | None) – The log output of the failed Docker container

+
+
+
+ +
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/hooks/docker/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/hooks/docker/index.html new file mode 100644 index 00000000000..5155e389634 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/hooks/docker/index.html @@ -0,0 +1,1010 @@ + + + + + + + + + + + + airflow.providers.docker.hooks.docker — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+

airflow.providers.docker.hooks.docker

+
+

Module Contents

+
+

Classes

+ ++++ + + + + + +

DockerHook

Interact with a Docker Daemon and Container Registry.

+
+
+class airflow.providers.docker.hooks.docker.DockerHook(docker_conn_id=default_conn_name, base_url=None, version=None, tls=None, timeout=DEFAULT_TIMEOUT_SECONDS)[source]
+

Bases: airflow.hooks.base.BaseHook

+

Interact with a Docker Daemon and Container Registry.

+

This class provide a thin wrapper around the docker.APIClient.

+ +
+
Parameters
+
    +
  • docker_conn_id (str | None) – Docker connection id where stored credentials +to Docker Registry. If set to None or empty then hook does not login to Container Registry.

  • +
  • base_url (str | None) – URL to the Docker server.

  • +
  • version (str | None) – The version of the API to use. Use auto or None for automatically detect +the server’s version.

  • +
  • tls (docker.TLSConfig | bool | None) – Is connection required TLS, for enable pass True for use with default options, +or pass a docker.tls.TLSConfig object to use custom configurations.

  • +
  • timeout (int) – Default timeout for API calls, in seconds.

  • +
+
+
+
+
+property client_created: bool[source]
+

Is api_client created or not.

+
+
+
+ +
+
+conn_name_attr = 'docker_conn_id'[source]
+
+ +
+
+default_conn_name = 'docker_default'[source]
+
+ +
+
+conn_type = 'docker'[source]
+
+ +
+
+hook_name = 'Docker'[source]
+
+ +
+
+static construct_tls_config(ca_cert=None, client_cert=None, client_key=None, verify=True, assert_hostname=None, ssl_version=None)[source]
+

Construct TLSConfig object from parts.

+
+
Parameters
+
    +
  • ca_cert (str | None) – Path to a PEM-encoded CA (Certificate Authority) certificate file.

  • +
  • client_cert (str | None) – Path to PEM-encoded certificate file.

  • +
  • client_key (str | None) – Path to PEM-encoded key file.

  • +
  • verify (bool) – Set True to verify the validity of the provided certificate.

  • +
  • assert_hostname (str | bool | None) – Hostname to match against the docker server certificate +or False to disable the check.

  • +
  • ssl_version (str | None) – Version of SSL to use when communicating with docker daemon.

  • +
+
+
+
+ +
+
+api_client()[source]
+

Create connection to docker host and return docker.APIClient (cached).

+
+
+
+ +
+
+get_conn()[source]
+

Create connection to docker host and return docker.APIClient (cached).

+
+
+
+ +
+
+classmethod get_connection_form_widgets()[source]
+

Return connection form widgets.

+
+
+
+ +
+
+classmethod get_ui_field_behaviour()[source]
+

Return custom field behaviour.

+
+
+
+ +
+ +
+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/hooks/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/hooks/index.html new file mode 100644 index 00000000000..d69dd13f0c9 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/hooks/index.html @@ -0,0 +1,873 @@ + + + + + + + + + + + + airflow.providers.docker.hooks — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+ +
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/index.html new file mode 100644 index 00000000000..93b15e3159b --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/index.html @@ -0,0 +1,904 @@ + + + + + + + + + + + + airflow.providers.docker — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + + +
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/operators/docker/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/operators/docker/index.html new file mode 100644 index 00000000000..fb6ef310a40 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/operators/docker/index.html @@ -0,0 +1,1147 @@ + + + + + + + + + + + + airflow.providers.docker.operators.docker — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+

airflow.providers.docker.operators.docker

+

Implements Docker operator.

+
+

Module Contents

+
+

Classes

+ ++++ + + + + + +

DockerOperator

Execute a command inside a docker container.

+
+
+

Functions

+ ++++ + + + + + +

stringify(line)

Make sure string is returned even if bytes are passed. Docker stream can return bytes.

+
+
+airflow.providers.docker.operators.docker.stringify(line)[source]
+

Make sure string is returned even if bytes are passed. Docker stream can return bytes.

+
+
+
+ +
+
+class airflow.providers.docker.operators.docker.DockerOperator(*, image, api_version=None, command=None, container_name=None, cpus=1.0, docker_url='unix://var/run/docker.sock', environment=None, private_environment=None, env_file=None, force_pull=False, mem_limit=None, host_tmp_dir=None, network_mode=None, tls_ca_cert=None, tls_client_cert=None, tls_client_key=None, tls_verify=True, tls_hostname=None, tls_ssl_version=None, mount_tmp_dir=True, tmp_dir='/tmp/airflow', user=None, mounts=None, entrypoint=None, working_dir=None, xcom_all=False, docker_conn_id=None, dns=None, dns_search=None, auto_remove='never', shm_size=None, tty=False, hostname=None, privileged=False, cap_add=None, extra_hosts=None, retrieve_output=False, retrieve_output_path=None, timeout=DEFAULT_TIMEOUT_SECONDS, device_requests=None, log_opts_max_size=None, log_opts_max_file=None, ipc_mode=None, skip_on_exit_code=None, port_bindings=None, ulimits=None, **kwargs)[source]
+

Bases: airflow.models.BaseOperator

+

Execute a command inside a docker container.

+

By default, a temporary directory is +created on the host and mounted into a container to allow storing files +that together exceed the default disk size of 10GB in a container. +In this case The path to the mounted directory can be accessed +via the environment variable AIRFLOW_TMP_DIR.

+

If the volume cannot be mounted, warning is printed and an attempt is made to execute the docker +command without the temporary folder mounted. This is to make it works by default with remote docker +engine or when you run docker-in-docker solution and temporary directory is not shared with the +docker engine. Warning is printed in logs in this case.

+

If you know you run DockerOperator with remote engine or via docker-in-docker +you should set mount_tmp_dir parameter to False. In this case, you can still use +mounts parameter to mount already existing named volumes in your Docker Engine +to achieve similar capability where you can store files exceeding default disk size +of the container,

+

If a login to a private registry is required prior to pulling the image, a +Docker connection needs to be configured in Airflow and the connection ID +be provided with the parameter docker_conn_id.

+
+
Parameters
+
    +
  • image (str) – Docker image from which to create the container. +If image tag is omitted, “latest” will be used. (templated)

  • +
  • api_version (str | None) – Remote API version. Set to auto to automatically +detect the server’s version.

  • +
  • command (str | list[str] | None) – Command to be run in the container. (templated)

  • +
  • container_name (str | None) – Name of the container. Optional (templated)

  • +
  • cpus (float) – Number of CPUs to assign to the container. +This value gets multiplied with 1024. See +https://docs.docker.com/engine/reference/run/#cpu-share-constraint

  • +
  • docker_url (str) – URL of the host running the docker daemon. +Default is unix://var/run/docker.sock

  • +
  • environment (dict | None) – Environment variables to set in the container. (templated)

  • +
  • private_environment (dict | None) – Private environment variables to set in the container. +These are not templated, and hidden from the website.

  • +
  • env_file (str | None) – Relative path to the .env file with environment variables to set in the container. +Overridden by variables in the environment parameter. (templated)

  • +
  • force_pull (bool) – Pull the docker image on every run. Default is False.

  • +
  • mem_limit (float | str | None) – Maximum amount of memory the container can use. +Either a float value, which represents the limit in bytes, +or a string like 128m or 1g.

  • +
  • host_tmp_dir (str | None) – Specify the location of the temporary directory on the host which will +be mapped to tmp_dir. If not provided defaults to using the standard system temp directory.

  • +
  • network_mode (str | None) –

    Network mode for the container. It can be one of the following:

    +
      +
    • "bridge": Create new network stack for the container with default docker bridge network

    • +
    • "none": No networking for this container

    • +
    • "container:<name|id>": Use the network stack of another container specified via <name|id>

    • +
    • "host": Use the host network stack. Incompatible with port_bindings

    • +
    • "<network-name>|<network-id>": Connects the container to user created network +(using docker network create command)

    • +
    +

  • +
  • tls_ca_cert (str | None) – Path to a PEM-encoded certificate authority +to secure the docker connection.

  • +
  • tls_client_cert (str | None) – Path to the PEM-encoded certificate +used to authenticate docker client.

  • +
  • tls_client_key (str | None) – Path to the PEM-encoded key used to authenticate docker client.

  • +
  • tls_verify (bool) – Set True to verify the validity of the provided certificate.

  • +
  • tls_hostname (str | bool | None) – Hostname to match against +the docker server certificate or False to disable the check.

  • +
  • tls_ssl_version (str | None) – Version of SSL to use when communicating with docker daemon.

  • +
  • mount_tmp_dir (bool) – Specify whether the temporary directory should be bind-mounted +from the host to the container. Defaults to True

  • +
  • tmp_dir (str) – Mount point inside the container to +a temporary directory created on the host by the operator. +The path is also made available via the environment variable +AIRFLOW_TMP_DIR inside the container.

  • +
  • user (str | int | None) – Default user inside the docker container.

  • +
  • mounts (list[docker.types.Mount] | None) – List of volumes to mount into the container. Each item should +be a docker.types.Mount instance.

  • +
  • entrypoint (str | list[str] | None) – Overwrite the default ENTRYPOINT of the image

  • +
  • working_dir (str | None) – Working directory to +set on the container (equivalent to the -w switch the docker client)

  • +
  • xcom_all (bool) – Push all the stdout or just the last line. +The default is False (last line).

  • +
  • docker_conn_id (str | None) – The Docker connection id

  • +
  • dns (list[str] | None) – Docker custom DNS servers

  • +
  • dns_search (list[str] | None) – Docker custom DNS search domain

  • +
  • auto_remove (typing_extensions.Literal[never, success, force]) –

    Enable removal of the container when the container’s process exits. Possible values:

    +
      +
    • never: (default) do not remove container

    • +
    • success: remove on success

    • +
    • force: always remove container

    • +
    +

  • +
  • shm_size (int | None) – Size of /dev/shm in bytes. The size must be +greater than 0. If omitted uses system default.

  • +
  • tty (bool) – Allocate pseudo-TTY to the container +This needs to be set see logs of the Docker container.

  • +
  • hostname (str | None) – Optional hostname for the container.

  • +
  • privileged (bool) – Give extended privileges to this container.

  • +
  • cap_add (Iterable[str] | None) – Include container capabilities

  • +
  • extra_hosts (dict[str, str] | None) – Additional hostnames to resolve inside the container, +as a mapping of hostname to IP address.

  • +
  • retrieve_output (bool) – Should this docker image consistently attempt to pull from and output +file before manually shutting down the image. Useful for cases where users want a pickle serialized +output that is not posted to logs

  • +
  • retrieve_output_path (str | None) – path for output file that will be retrieved and passed to xcom

  • +
  • device_requests (list[docker.types.DeviceRequest] | None) – Expose host resources such as GPUs to the container.

  • +
  • log_opts_max_size (str | None) – The maximum size of the log before it is rolled. +A positive integer plus a modifier representing the unit of measure (k, m, or g). +Eg: 10m or 1g Defaults to -1 (unlimited).

  • +
  • log_opts_max_file (str | None) – The maximum number of log files that can be present. +If rolling the logs creates excess files, the oldest file is removed. +Only effective when max-size is also set. A positive integer. Defaults to 1.

  • +
  • ipc_mode (str | None) – Set the IPC mode for the container.

  • +
  • skip_on_exit_code (int | collections.abc.Container[int] | None) – If task exits with this exit code, leave the task +in skipped state (default: None). If set to None, any non-zero +exit code will be treated as a failure.

  • +
  • port_bindings (dict | None) – Publish a container’s port(s) to the host. It is a +dictionary of value where the key indicates the port to open inside the container +and value indicates the host port that binds to the container port. +Incompatible with "host" in network_mode.

  • +
  • ulimits (list[docker.types.Ulimit] | None) – List of ulimit options to set for the container. Each item should +be a docker.types.Ulimit instance.

  • +
+
+
+
+
+property cli: docker.APIClient[source]
+
+
+
+ +
+
+template_fields: Sequence[str] = ('image', 'command', 'environment', 'env_file', 'container_name')[source]
+
+ +
+
+template_fields_renderers[source]
+
+ +
+
+template_ext: Sequence[str] = ('.sh', '.bash', '.env')[source]
+
+ +
+
+hook()[source]
+

Create and return an DockerHook (cached).

+
+
+
+ +
+
+get_hook()[source]
+

Create and return an DockerHook (cached).

+
+
+
+ +
+
+execute(context)[source]
+

Derive when creating an operator.

+

Context is the same dictionary used as when rendering jinja templates.

+

Refer to get_template_context for more context.

+
+
+
+ +
+
+static format_command(command)[source]
+

Retrieve command(s).

+

If command string starts with [, the string is treated as a Python +literal and parsed into a list of commands.

+
+
Parameters
+

command (list[str] | str | None) – Docker command or entrypoint

+
+
Returns
+

the command (or commands)

+
+
Return type
+

list[str] | str | None

+
+
+
+ +
+
+on_kill()[source]
+

Override this method to clean up subprocesses when a task instance gets killed.

+

Any use of the threading, subprocess or multiprocessing module within an +operator needs to be cleaned up, or it will leave ghost processes behind.

+
+
+
+ +
+
+static unpack_environment_variables(env_str)[source]
+

Parse environment variables from the string.

+
+
Parameters
+

env_str (str) – environment variables in the {key}={value} format, +separated by a \n (newline)

+
+
Returns
+

dictionary containing parsed environment variables

+
+
Return type
+

dict

+
+
+
+ +
+ +
+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/operators/docker_swarm/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/operators/docker_swarm/index.html new file mode 100644 index 00000000000..e7cce7cf6af --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/operators/docker_swarm/index.html @@ -0,0 +1,983 @@ + + + + + + + + + + + + airflow.providers.docker.operators.docker_swarm — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+

airflow.providers.docker.operators.docker_swarm

+

Run ephemeral Docker Swarm services.

+
+

Module Contents

+
+

Classes

+ ++++ + + + + + +

DockerSwarmOperator

Execute a command as an ephemeral docker swarm service.

+
+
+class airflow.providers.docker.operators.docker_swarm.DockerSwarmOperator(*, image, enable_logging=True, configs=None, secrets=None, mode=None, networks=None, placement=None, **kwargs)[source]
+

Bases: airflow.providers.docker.operators.docker.DockerOperator

+

Execute a command as an ephemeral docker swarm service.

+

Example use-case - Using Docker Swarm orchestration to make one-time +scripts highly available.

+

A temporary directory is created on the host and +mounted into a container to allow storing files +that together exceed the default disk size of 10GB in a container. +The path to the mounted directory can be accessed +via the environment variable AIRFLOW_TMP_DIR.

+

If a login to a private registry is required prior to pulling the image, a +Docker connection needs to be configured in Airflow and the connection ID +be provided with the parameter docker_conn_id.

+
+
Parameters
+
    +
  • image (str) – Docker image from which to create the container. +If image tag is omitted, “latest” will be used.

  • +
  • api_version – Remote API version. Set to auto to automatically +detect the server’s version.

  • +
  • auto_remove – Auto-removal of the container on daemon side when the +container’s process exits. +The default is False.

  • +
  • command – Command to be run in the container. (templated)

  • +
  • docker_url – URL of the host running the docker daemon. +Default is unix://var/run/docker.sock

  • +
  • environment – Environment variables to set in the container. (templated)

  • +
  • force_pull – Pull the docker image on every run. Default is False.

  • +
  • mem_limit – Maximum amount of memory the container can use. +Either a float value, which represents the limit in bytes, +or a string like 128m or 1g.

  • +
  • tls_ca_cert – Path to a PEM-encoded certificate authority +to secure the docker connection.

  • +
  • tls_client_cert – Path to the PEM-encoded certificate +used to authenticate docker client.

  • +
  • tls_client_key – Path to the PEM-encoded key used to authenticate docker client.

  • +
  • tls_hostname – Hostname to match against +the docker server certificate or False to disable the check.

  • +
  • tls_ssl_version – Version of SSL to use when communicating with docker daemon.

  • +
  • tmp_dir – Mount point inside the container to +a temporary directory created on the host by the operator. +The path is also made available via the environment variable +AIRFLOW_TMP_DIR inside the container.

  • +
  • user – Default user inside the docker container.

  • +
  • docker_conn_id – The Docker connection id

  • +
  • tty – Allocate pseudo-TTY to the container of this service +This needs to be set see logs of the Docker container / service.

  • +
  • enable_logging (bool) – Show the application’s logs in operator’s logs. +Supported only if the Docker engine is using json-file or journald logging drivers. +The tty parameter should be set to use this with Python applications.

  • +
  • configs (list[docker.types.ConfigReference] | None) – List of docker configs to be exposed to the containers of the swarm service. +The configs are ConfigReference objects as per the docker api +[https://docker-py.readthedocs.io/en/stable/services.html#docker.models.services.ServiceCollection.create]_

  • +
  • secrets (list[docker.types.SecretReference] | None) – List of docker secrets to be exposed to the containers of the swarm service. +The secrets are SecretReference objects as per the docker create_service api. +[https://docker-py.readthedocs.io/en/stable/services.html#docker.models.services.ServiceCollection.create]_

  • +
  • mode (docker.types.ServiceMode | None) – Indicate whether a service should be deployed as a replicated or global service, +and associated parameters

  • +
  • networks (list[str | docker.types.NetworkAttachmentConfig] | None) – List of network names or IDs or NetworkAttachmentConfig to attach the service to.

  • +
  • placement (docker.types.Placement | list[docker.types.Placement] | None) – Placement instructions for the scheduler. If a list is passed instead, +it is assumed to be a list of constraints as part of a Placement object.

  • +
+
+
+
+
+execute(context)[source]
+

Derive when creating an operator.

+

Context is the same dictionary used as when rendering jinja templates.

+

Refer to get_template_context for more context.

+
+
+
+ +
+
+on_kill()[source]
+

Override this method to clean up subprocesses when a task instance gets killed.

+

Any use of the threading, subprocess or multiprocessing module within an +operator needs to be cleaned up, or it will leave ghost processes behind.

+
+
+
+ +
+ +
+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/operators/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/operators/index.html new file mode 100644 index 00000000000..98f13fdc823 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/airflow/providers/docker/operators/index.html @@ -0,0 +1,874 @@ + + + + + + + + + + + + airflow.providers.docker.operators — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + + +
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_api/tests/system/providers/docker/example_docker/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/tests/system/providers/docker/example_docker/index.html new file mode 100644 index 00000000000..6f1efae7421 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/tests/system/providers/docker/example_docker/index.html @@ -0,0 +1,894 @@ + + + + + + + + + + + + tests.system.providers.docker.example_docker — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+

tests.system.providers.docker.example_docker

+
+

Module Contents

+
+
+tests.system.providers.docker.example_docker.ENV_ID[source]
+
+ +
+
+tests.system.providers.docker.example_docker.DAG_ID = 'docker_test'[source]
+
+ +
+
+tests.system.providers.docker.example_docker.t1[source]
+
+ +
+
+tests.system.providers.docker.example_docker.test_run[source]
+
+ +
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_api/tests/system/providers/docker/example_docker_copy_data/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/tests/system/providers/docker/example_docker_copy_data/index.html new file mode 100644 index 00000000000..3f1f16b98d0 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/tests/system/providers/docker/example_docker_copy_data/index.html @@ -0,0 +1,909 @@ + + + + + + + + + + + + tests.system.providers.docker.example_docker_copy_data — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+

tests.system.providers.docker.example_docker_copy_data

+

This sample “listen to directory”. move the new file and print it, +using docker-containers. +The following operators are being used: DockerOperator, +BashOperator & ShortCircuitOperator. +TODO: Review the workflow, change it accordingly to +your environment & enable the code.

+
+

Module Contents

+
+
+tests.system.providers.docker.example_docker_copy_data.ENV_ID[source]
+
+ +
+
+tests.system.providers.docker.example_docker_copy_data.DAG_ID = 'docker_sample_copy_data'[source]
+
+ +
+
+tests.system.providers.docker.example_docker_copy_data.locate_file_cmd = Multiline-String[source]
+
+
Show Value
"""
+        sleep 10
+        find {{params.source_location}} -type f  -printf "%f
+" | head -1
+    """
+
+
+
+
+ +
+
+tests.system.providers.docker.example_docker_copy_data.test_run[source]
+
+ +
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_api/tests/system/providers/docker/example_docker_swarm/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/tests/system/providers/docker/example_docker_swarm/index.html new file mode 100644 index 00000000000..3b214615d0c --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/tests/system/providers/docker/example_docker_swarm/index.html @@ -0,0 +1,894 @@ + + + + + + + + + + + + tests.system.providers.docker.example_docker_swarm — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+

tests.system.providers.docker.example_docker_swarm

+
+

Module Contents

+
+
+tests.system.providers.docker.example_docker_swarm.ENV_ID[source]
+
+ +
+
+tests.system.providers.docker.example_docker_swarm.DAG_ID = 'docker_swarm_dag'[source]
+
+ +
+
+tests.system.providers.docker.example_docker_swarm.t1[source]
+
+ +
+
+tests.system.providers.docker.example_docker_swarm.test_run[source]
+
+ +
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_api/tests/system/providers/docker/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/tests/system/providers/docker/index.html new file mode 100644 index 00000000000..c1ed36fc5a1 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_api/tests/system/providers/docker/index.html @@ -0,0 +1,873 @@ + + + + + + + + + + + + tests.system.providers.docker — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + + +
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker.html new file mode 100644 index 00000000000..bda922c00ea --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker.html @@ -0,0 +1,873 @@ + + + + + + + + + + + + airflow.providers.docker — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +

Source code for airflow.providers.docker

+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE
+# OVERWRITTEN WHEN PREPARING DOCUMENTATION FOR THE PACKAGES.
+#
+# IF YOU WANT TO MODIFY THIS FILE, YOU SHOULD MODIFY THE TEMPLATE
+# `PROVIDER__INIT__PY_TEMPLATE.py.jinja2` IN the `dev/breeze/src/airflow_breeze/templates` DIRECTORY
+#
+from __future__ import annotations
+
+import packaging.version
+
+__all__ = ["__version__"]
+
+
[docs]__version__ = "3.9.0"
+ +try: + from airflow import __version__ as airflow_version +except ImportError: + from airflow.version import version as airflow_version + +if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse( + "2.6.0" +): + raise RuntimeError( + f"The package `apache-airflow-providers-docker:{__version__}` needs Apache Airflow 2.6.0+" + ) +
+ + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/decorators/docker.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/decorators/docker.html new file mode 100644 index 00000000000..3562f897980 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/decorators/docker.html @@ -0,0 +1,998 @@ + + + + + + + + + + + + airflow.providers.docker.decorators.docker — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +

Source code for airflow.providers.docker.decorators.docker

+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import base64
+import inspect
+import os
+import pickle
+import textwrap
+from tempfile import TemporaryDirectory
+from typing import TYPE_CHECKING, Callable, Sequence
+
+import dill
+
+from airflow.decorators.base import DecoratedOperator, task_decorator_factory
+from airflow.providers.docker.operators.docker import DockerOperator
+from airflow.utils.decorators import remove_task_decorator
+from airflow.utils.python_virtualenv import write_python_script
+
+if TYPE_CHECKING:
+    from airflow.decorators.base import TaskDecorator
+    from airflow.utils.context import Context
+
+
+def _generate_decode_command(env_var, file, python_command):
+    # We don't need `f.close()` as the interpreter is about to exit anyway
+    return (
+        f'{python_command} -c "import base64, os;'
+        rf"x = base64.b64decode(os.environ[\"{env_var}\"]);"
+        rf'f = open(\"{file}\", \"wb\"); f.write(x);"'
+    )
+
+
+def _b64_encode_file(filename):
+    with open(filename, "rb") as file_to_encode:
+        return base64.b64encode(file_to_encode.read())
+
+
+class _DockerDecoratedOperator(DecoratedOperator, DockerOperator):
+    """
+    Wraps a Python callable and captures args/kwargs when called for execution.
+
+    :param python_callable: A reference to an object that is callable
+    :param python: Python binary name to use
+    :param use_dill: Whether dill should be used to serialize the callable
+    :param expect_airflow: whether to expect airflow to be installed in the docker environment. if this
+          one is specified, the script to run callable will attempt to load Airflow macros.
+    :param op_kwargs: a dictionary of keyword arguments that will get unpacked
+        in your function (templated)
+    :param op_args: a list of positional arguments that will get unpacked when
+        calling your callable (templated)
+    :param multiple_outputs: if set, function return value will be
+        unrolled to multiple XCom values. Dict will unroll to xcom values with keys as keys.
+        Defaults to False.
+    """
+
+    custom_operator_name = "@task.docker"
+
+    template_fields: Sequence[str] = (*DockerOperator.template_fields, "op_args", "op_kwargs")
+
+    def __init__(
+        self,
+        use_dill=False,
+        python_command="python3",
+        expect_airflow: bool = True,
+        **kwargs,
+    ) -> None:
+        command = "placeholder command"
+        self.python_command = python_command
+        self.expect_airflow = expect_airflow
+        self.use_dill = use_dill
+        super().__init__(
+            command=command, retrieve_output=True, retrieve_output_path="/tmp/script.out", **kwargs
+        )
+
+    def generate_command(self):
+        return (
+            f"""bash -cx  '{_generate_decode_command("__PYTHON_SCRIPT", "/tmp/script.py",
+                                                     self.python_command)} &&"""
+            f'{_generate_decode_command("__PYTHON_INPUT", "/tmp/script.in", self.python_command)} &&'
+            f"{self.python_command} /tmp/script.py /tmp/script.in /tmp/script.out'"
+        )
+
+    def execute(self, context: Context):
+        with TemporaryDirectory(prefix="venv") as tmp_dir:
+            input_filename = os.path.join(tmp_dir, "script.in")
+            script_filename = os.path.join(tmp_dir, "script.py")
+
+            with open(input_filename, "wb") as file:
+                if self.op_args or self.op_kwargs:
+                    self.pickling_library.dump({"args": self.op_args, "kwargs": self.op_kwargs}, file)
+            py_source = self.get_python_source()
+            write_python_script(
+                jinja_context={
+                    "op_args": self.op_args,
+                    "op_kwargs": self.op_kwargs,
+                    "pickling_library": self.pickling_library.__name__,
+                    "python_callable": self.python_callable.__name__,
+                    "python_callable_source": py_source,
+                    "expect_airflow": self.expect_airflow,
+                    "string_args_global": False,
+                },
+                filename=script_filename,
+            )
+
+            # Pass the python script to be executed, and the input args, via environment variables. This is
+            # more than slightly hacky, but it means it can work when Airflow itself is in the same Docker
+            # engine where this task is going to run (unlike say trying to mount a file in)
+            self.environment["__PYTHON_SCRIPT"] = _b64_encode_file(script_filename)
+            if self.op_args or self.op_kwargs:
+                self.environment["__PYTHON_INPUT"] = _b64_encode_file(input_filename)
+            else:
+                self.environment["__PYTHON_INPUT"] = ""
+
+            self.command = self.generate_command()
+            return super().execute(context)
+
+    # TODO: Remove me once this provider min supported Airflow version is 2.6
+    def get_python_source(self):
+        raw_source = inspect.getsource(self.python_callable)
+        res = textwrap.dedent(raw_source)
+        res = remove_task_decorator(res, self.custom_operator_name)
+        return res
+
+    @property
+    def pickling_library(self):
+        if self.use_dill:
+            return dill
+        return pickle
+
+
+
[docs]def docker_task( + python_callable: Callable | None = None, + multiple_outputs: bool | None = None, + **kwargs, +) -> TaskDecorator: + """ + Python operator decorator; wraps a function into an Airflow operator. + + Also accepts any argument that DockerOperator will via ``kwargs``. Can be reused in a single DAG. + + :param python_callable: Function to decorate + :param multiple_outputs: If set, function return value will be unrolled to multiple XCom values. + Dict will unroll to XCom values with keys as XCom keys. Defaults to False. + """ + return task_decorator_factory( + python_callable=python_callable, + multiple_outputs=multiple_outputs, + decorated_operator_class=_DockerDecoratedOperator, + **kwargs, + )
+
+ + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/exceptions.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/exceptions.html new file mode 100644 index 00000000000..17c2a1f3867 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/exceptions.html @@ -0,0 +1,878 @@ + + + + + + + + + + + + airflow.providers.docker.exceptions — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +

Source code for airflow.providers.docker.exceptions

+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""Exceptions used by Docker provider."""
+from __future__ import annotations
+
+from airflow.exceptions import AirflowException, AirflowSkipException
+
+
+
[docs]class DockerContainerFailedException(AirflowException): + """ + Raised when a Docker container returns an error. + + :param logs: The log output of the failed Docker container + """ + + def __init__(self, message: str | None = None, logs: list[str | bytes] | None = None) -> None: + super().__init__(message) + self.logs = logs
+ + +
[docs]class DockerContainerFailedSkipException(AirflowSkipException): + """ + Raised when a Docker container returns an error and task should be skipped. + + :param logs: The log output of the failed Docker container + """ + + def __init__(self, message: str | None = None, logs: list[str | bytes] | None = None) -> None: + super().__init__(message) + self.logs = logs
+
+ + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/hooks/docker.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/hooks/docker.html new file mode 100644 index 00000000000..6a0accc165b --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/hooks/docker.html @@ -0,0 +1,1034 @@ + + + + + + + + + + + + airflow.providers.docker.hooks.docker — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +

Source code for airflow.providers.docker.hooks.docker

+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import json
+from functools import cached_property
+from typing import TYPE_CHECKING, Any
+
+from docker import APIClient, TLSConfig
+from docker.constants import DEFAULT_TIMEOUT_SECONDS
+from docker.errors import APIError
+
+from airflow.exceptions import AirflowException, AirflowNotFoundException
+from airflow.hooks.base import BaseHook
+
+if TYPE_CHECKING:
+    from airflow.models import Connection
+
+
+
[docs]class DockerHook(BaseHook): + """ + Interact with a Docker Daemon and Container Registry. + + This class provide a thin wrapper around the ``docker.APIClient``. + + .. seealso:: + - :ref:`Docker Connection <howto/connection:docker>` + - `Docker SDK: Low-level API <https://docker-py.readthedocs.io/en/stable/api.html?low-level-api>`_ + + :param docker_conn_id: :ref:`Docker connection id <howto/connection:docker>` where stored credentials + to Docker Registry. If set to ``None`` or empty then hook does not login to Container Registry. + :param base_url: URL to the Docker server. + :param version: The version of the API to use. Use ``auto`` or ``None`` for automatically detect + the server's version. + :param tls: Is connection required TLS, for enable pass ``True`` for use with default options, + or pass a `docker.tls.TLSConfig` object to use custom configurations. + :param timeout: Default timeout for API calls, in seconds. + """ + +
[docs] conn_name_attr = "docker_conn_id"
+
[docs] default_conn_name = "docker_default"
+
[docs] conn_type = "docker"
+
[docs] hook_name = "Docker"
+ + def __init__( + self, + docker_conn_id: str | None = default_conn_name, + base_url: str | None = None, + version: str | None = None, + tls: TLSConfig | bool | None = None, + timeout: int = DEFAULT_TIMEOUT_SECONDS, + ) -> None: + super().__init__() + if not base_url: + raise AirflowException("URL to the Docker server not provided.") + elif tls: + if base_url.startswith("tcp://"): + base_url = base_url.replace("tcp://", "https://") + self.log.debug("Change `base_url` schema from 'tcp://' to 'https://'.") + if not base_url.startswith("https://"): + self.log.warning("When `tls` specified then `base_url` expected 'https://' schema.") + + self.docker_conn_id = docker_conn_id + self.__base_url = base_url + self.__version = version + self.__tls = tls or False + self.__timeout = timeout + self._client_created = False + + @staticmethod +
[docs] def construct_tls_config( + ca_cert: str | None = None, + client_cert: str | None = None, + client_key: str | None = None, + verify: bool = True, + assert_hostname: str | bool | None = None, + ssl_version: str | None = None, + ) -> TLSConfig | bool: + """ + Construct TLSConfig object from parts. + + :param ca_cert: Path to a PEM-encoded CA (Certificate Authority) certificate file. + :param client_cert: Path to PEM-encoded certificate file. + :param client_key: Path to PEM-encoded key file. + :param verify: Set ``True`` to verify the validity of the provided certificate. + :param assert_hostname: Hostname to match against the docker server certificate + or ``False`` to disable the check. + :param ssl_version: Version of SSL to use when communicating with docker daemon. + """ + if ca_cert and client_cert and client_key: + # Ignore type error on SSL version here. + # It is deprecated and type annotation is wrong, and it should be string. + return TLSConfig( + ca_cert=ca_cert, + client_cert=(client_cert, client_key), + verify=verify, + ssl_version=ssl_version, + assert_hostname=assert_hostname, + ) + return False
+ + @cached_property +
[docs] def api_client(self) -> APIClient: + """Create connection to docker host and return ``docker.APIClient`` (cached).""" + client = APIClient( + base_url=self.__base_url, version=self.__version, tls=self.__tls, timeout=self.__timeout + ) + if self.docker_conn_id: + # Obtain connection and try to login to Container Registry only if ``docker_conn_id`` set. + self.__login(client, self.get_connection(self.docker_conn_id)) + + self._client_created = True + return client
+ + @property +
[docs] def client_created(self) -> bool: + """Is api_client created or not.""" + return self._client_created
+ +
[docs] def get_conn(self) -> APIClient: + """Create connection to docker host and return ``docker.APIClient`` (cached).""" + return self.api_client
+ + def __login(self, client, conn: Connection) -> None: + if not conn.host: + raise AirflowNotFoundException("No Docker Registry URL provided.") + if not conn.login: + raise AirflowNotFoundException("No Docker Registry username provided.") + + registry = f"{conn.host}:{conn.port}" if conn.port else conn.host + + # Parse additional optional parameters + email = conn.extra_dejson.get("email") or None + reauth = conn.extra_dejson.get("reauth", True) + if isinstance(reauth, str): + reauth = reauth.lower() + if reauth in ("y", "yes", "t", "true", "on", "1"): + reauth = True + elif reauth in ("n", "no", "f", "false", "off", "0"): + reauth = False + else: + raise ValueError(f"Unable parse `reauth` value {reauth!r} to bool.") + + try: + self.log.info("Login into Docker Registry: %s", registry) + client.login( + username=conn.login, password=conn.password, registry=registry, email=email, reauth=reauth + ) + self.log.debug("Login successful") + except APIError: + self.log.error("Login failed") + raise + + @classmethod +
[docs] def get_connection_form_widgets(cls) -> dict[str, Any]: + """Return connection form widgets.""" + from flask_appbuilder.fieldwidgets import BS3TextFieldWidget + from flask_babel import lazy_gettext + from wtforms import BooleanField, StringField + + return { + "reauth": BooleanField( + lazy_gettext("Reauthenticate"), + description="Whether or not to refresh existing authentication on the Docker server.", + ), + "email": StringField(lazy_gettext("Email"), widget=BS3TextFieldWidget()), + }
+ + @classmethod +
[docs] def get_ui_field_behaviour(cls) -> dict[str, Any]: + """Return custom field behaviour.""" + return { + "hidden_fields": ["schema"], + "relabeling": { + "host": "Registry URL", + "login": "Username", + }, + "placeholders": { + "extra": json.dumps( + { + "reauth": False, + "email": "Jane.Doe@example.org", + } + ) + }, + }
+
+ + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/operators/docker.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/operators/docker.html new file mode 100644 index 00000000000..138553783ec --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/operators/docker.html @@ -0,0 +1,1368 @@ + + + + + + + + + + + + airflow.providers.docker.operators.docker — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +

Source code for airflow.providers.docker.operators.docker

+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""Implements Docker operator."""
+from __future__ import annotations
+
+import ast
+import pickle
+import tarfile
+import warnings
+from collections.abc import Container
+from functools import cached_property
+from io import BytesIO, StringIO
+from tempfile import TemporaryDirectory
+from typing import TYPE_CHECKING, Iterable, Sequence
+
+from deprecated.classic import deprecated
+from docker.constants import DEFAULT_TIMEOUT_SECONDS
+from docker.errors import APIError
+from docker.types import LogConfig, Mount, Ulimit
+from dotenv import dotenv_values
+from typing_extensions import Literal
+
+from airflow.exceptions import AirflowProviderDeprecationWarning
+from airflow.models import BaseOperator
+from airflow.providers.docker.exceptions import (
+    DockerContainerFailedException,
+    DockerContainerFailedSkipException,
+)
+from airflow.providers.docker.hooks.docker import DockerHook
+
+if TYPE_CHECKING:
+    from docker import APIClient
+    from docker.types import DeviceRequest
+
+    from airflow.utils.context import Context
+
+
+
[docs]def stringify(line: str | bytes): + """Make sure string is returned even if bytes are passed. Docker stream can return bytes.""" + decode_method = getattr(line, "decode", None) + if decode_method: + return decode_method(encoding="utf-8", errors="surrogateescape") + else: + return line
+ + +
[docs]class DockerOperator(BaseOperator): + """Execute a command inside a docker container. + + By default, a temporary directory is + created on the host and mounted into a container to allow storing files + that together exceed the default disk size of 10GB in a container. + In this case The path to the mounted directory can be accessed + via the environment variable ``AIRFLOW_TMP_DIR``. + + If the volume cannot be mounted, warning is printed and an attempt is made to execute the docker + command without the temporary folder mounted. This is to make it works by default with remote docker + engine or when you run docker-in-docker solution and temporary directory is not shared with the + docker engine. Warning is printed in logs in this case. + + If you know you run DockerOperator with remote engine or via docker-in-docker + you should set ``mount_tmp_dir`` parameter to False. In this case, you can still use + ``mounts`` parameter to mount already existing named volumes in your Docker Engine + to achieve similar capability where you can store files exceeding default disk size + of the container, + + If a login to a private registry is required prior to pulling the image, a + Docker connection needs to be configured in Airflow and the connection ID + be provided with the parameter ``docker_conn_id``. + + :param image: Docker image from which to create the container. + If image tag is omitted, "latest" will be used. (templated) + :param api_version: Remote API version. Set to ``auto`` to automatically + detect the server's version. + :param command: Command to be run in the container. (templated) + :param container_name: Name of the container. Optional (templated) + :param cpus: Number of CPUs to assign to the container. + This value gets multiplied with 1024. See + https://docs.docker.com/engine/reference/run/#cpu-share-constraint + :param docker_url: URL of the host running the docker daemon. + Default is unix://var/run/docker.sock + :param environment: Environment variables to set in the container. (templated) + :param private_environment: Private environment variables to set in the container. + These are not templated, and hidden from the website. + :param env_file: Relative path to the ``.env`` file with environment variables to set in the container. + Overridden by variables in the environment parameter. (templated) + :param force_pull: Pull the docker image on every run. Default is False. + :param mem_limit: Maximum amount of memory the container can use. + Either a float value, which represents the limit in bytes, + or a string like ``128m`` or ``1g``. + :param host_tmp_dir: Specify the location of the temporary directory on the host which will + be mapped to tmp_dir. If not provided defaults to using the standard system temp directory. + :param network_mode: Network mode for the container. It can be one of the following: + + - ``"bridge"``: Create new network stack for the container with default docker bridge network + - ``"none"``: No networking for this container + - ``"container:<name|id>"``: Use the network stack of another container specified via <name|id> + - ``"host"``: Use the host network stack. Incompatible with `port_bindings` + - ``"<network-name>|<network-id>"``: Connects the container to user created network + (using ``docker network create`` command) + :param tls_ca_cert: Path to a PEM-encoded certificate authority + to secure the docker connection. + :param tls_client_cert: Path to the PEM-encoded certificate + used to authenticate docker client. + :param tls_client_key: Path to the PEM-encoded key used to authenticate docker client. + :param tls_verify: Set ``True`` to verify the validity of the provided certificate. + :param tls_hostname: Hostname to match against + the docker server certificate or False to disable the check. + :param tls_ssl_version: Version of SSL to use when communicating with docker daemon. + :param mount_tmp_dir: Specify whether the temporary directory should be bind-mounted + from the host to the container. Defaults to True + :param tmp_dir: Mount point inside the container to + a temporary directory created on the host by the operator. + The path is also made available via the environment variable + ``AIRFLOW_TMP_DIR`` inside the container. + :param user: Default user inside the docker container. + :param mounts: List of volumes to mount into the container. Each item should + be a :py:class:`docker.types.Mount` instance. + :param entrypoint: Overwrite the default ENTRYPOINT of the image + :param working_dir: Working directory to + set on the container (equivalent to the -w switch the docker client) + :param xcom_all: Push all the stdout or just the last line. + The default is False (last line). + :param docker_conn_id: The :ref:`Docker connection id <howto/connection:docker>` + :param dns: Docker custom DNS servers + :param dns_search: Docker custom DNS search domain + :param auto_remove: Enable removal of the container when the container's process exits. Possible values: + + - ``never``: (default) do not remove container + - ``success``: remove on success + - ``force``: always remove container + :param shm_size: Size of ``/dev/shm`` in bytes. The size must be + greater than 0. If omitted uses system default. + :param tty: Allocate pseudo-TTY to the container + This needs to be set see logs of the Docker container. + :param hostname: Optional hostname for the container. + :param privileged: Give extended privileges to this container. + :param cap_add: Include container capabilities + :param extra_hosts: Additional hostnames to resolve inside the container, + as a mapping of hostname to IP address. + :param retrieve_output: Should this docker image consistently attempt to pull from and output + file before manually shutting down the image. Useful for cases where users want a pickle serialized + output that is not posted to logs + :param retrieve_output_path: path for output file that will be retrieved and passed to xcom + :param device_requests: Expose host resources such as GPUs to the container. + :param log_opts_max_size: The maximum size of the log before it is rolled. + A positive integer plus a modifier representing the unit of measure (k, m, or g). + Eg: 10m or 1g Defaults to -1 (unlimited). + :param log_opts_max_file: The maximum number of log files that can be present. + If rolling the logs creates excess files, the oldest file is removed. + Only effective when max-size is also set. A positive integer. Defaults to 1. + :param ipc_mode: Set the IPC mode for the container. + :param skip_on_exit_code: If task exits with this exit code, leave the task + in ``skipped`` state (default: None). If set to ``None``, any non-zero + exit code will be treated as a failure. + :param port_bindings: Publish a container's port(s) to the host. It is a + dictionary of value where the key indicates the port to open inside the container + and value indicates the host port that binds to the container port. + Incompatible with ``"host"`` in ``network_mode``. + :param ulimits: List of ulimit options to set for the container. Each item should + be a :py:class:`docker.types.Ulimit` instance. + """ + + # !!! Changes in DockerOperator's arguments should be also reflected in !!! + # - docs/apache-airflow-providers-docker/decorators/docker.rst + # - airflow/decorators/__init__.pyi (by a separate PR) + +
[docs] template_fields: Sequence[str] = ("image", "command", "environment", "env_file", "container_name")
+
[docs] template_fields_renderers = {"env_file": "yaml"}
+
[docs] template_ext: Sequence[str] = ( + ".sh", + ".bash", + ".env", + )
+ + def __init__( + self, + *, + image: str, + api_version: str | None = None, + command: str | list[str] | None = None, + container_name: str | None = None, + cpus: float = 1.0, + docker_url: str = "unix://var/run/docker.sock", + environment: dict | None = None, + private_environment: dict | None = None, + env_file: str | None = None, + force_pull: bool = False, + mem_limit: float | str | None = None, + host_tmp_dir: str | None = None, + network_mode: str | None = None, + tls_ca_cert: str | None = None, + tls_client_cert: str | None = None, + tls_client_key: str | None = None, + tls_verify: bool = True, + tls_hostname: str | bool | None = None, + tls_ssl_version: str | None = None, + mount_tmp_dir: bool = True, + tmp_dir: str = "/tmp/airflow", + user: str | int | None = None, + mounts: list[Mount] | None = None, + entrypoint: str | list[str] | None = None, + working_dir: str | None = None, + xcom_all: bool = False, + docker_conn_id: str | None = None, + dns: list[str] | None = None, + dns_search: list[str] | None = None, + auto_remove: Literal["never", "success", "force"] = "never", + shm_size: int | None = None, + tty: bool = False, + hostname: str | None = None, + privileged: bool = False, + cap_add: Iterable[str] | None = None, + extra_hosts: dict[str, str] | None = None, + retrieve_output: bool = False, + retrieve_output_path: str | None = None, + timeout: int = DEFAULT_TIMEOUT_SECONDS, + device_requests: list[DeviceRequest] | None = None, + log_opts_max_size: str | None = None, + log_opts_max_file: str | None = None, + ipc_mode: str | None = None, + skip_on_exit_code: int | Container[int] | None = None, + port_bindings: dict | None = None, + ulimits: list[Ulimit] | None = None, + **kwargs, + ) -> None: + if skip_exit_code := kwargs.pop("skip_exit_code", None): + warnings.warn( + "`skip_exit_code` is deprecated and will be removed in the future. " + "Please use `skip_on_exit_code` instead.", + AirflowProviderDeprecationWarning, + stacklevel=2, + ) + if skip_on_exit_code is not None and skip_exit_code != skip_on_exit_code: + msg = ( + f"Conflicting `skip_on_exit_code` provided, " + f"skip_on_exit_code={skip_on_exit_code!r}, skip_exit_code={skip_exit_code!r}." + ) + raise ValueError(msg) + skip_on_exit_code = skip_exit_code + if isinstance(auto_remove, bool): + warnings.warn( + "bool value for `auto_remove` is deprecated and will be removed in the future. " + "Please use 'never', 'success', or 'force' instead", + AirflowProviderDeprecationWarning, + stacklevel=2, + ) + auto_remove = "success" if auto_remove else "never" + + super().__init__(**kwargs) + self.api_version = api_version + if not auto_remove or auto_remove not in ("never", "success", "force"): + msg = ( + f"Invalid `auto_remove` value {auto_remove!r}, " + "expected one of 'never', 'success', or 'force'." + ) + raise ValueError(msg) + self.auto_remove = auto_remove + self.command = command + self.container_name = container_name + self.cpus = cpus + self.dns = dns + self.dns_search = dns_search + self.docker_url = docker_url + self.environment = environment or {} + self._private_environment = private_environment or {} + self.env_file = env_file + self.force_pull = force_pull + self.image = image + self.mem_limit = mem_limit + self.host_tmp_dir = host_tmp_dir + self.network_mode = network_mode + self.tls_ca_cert = tls_ca_cert + self.tls_client_cert = tls_client_cert + self.tls_client_key = tls_client_key + self.tls_verify = tls_verify + self.tls_hostname = tls_hostname + self.tls_ssl_version = tls_ssl_version + self.mount_tmp_dir = mount_tmp_dir + self.tmp_dir = tmp_dir + self.user = user + self.mounts = mounts or [] + self.entrypoint = entrypoint + self.working_dir = working_dir + self.xcom_all = xcom_all + self.docker_conn_id = docker_conn_id + self.shm_size = shm_size + self.tty = tty + self.hostname = hostname + self.privileged = privileged + self.cap_add = cap_add + self.extra_hosts = extra_hosts + self.ulimits = ulimits or [] + + self.container: dict = None # type: ignore[assignment] + self.retrieve_output = retrieve_output + self.retrieve_output_path = retrieve_output_path + self.timeout = timeout + self.device_requests = device_requests + self.log_opts_max_size = log_opts_max_size + self.log_opts_max_file = log_opts_max_file + self.ipc_mode = ipc_mode + self.skip_on_exit_code = ( + skip_on_exit_code + if isinstance(skip_on_exit_code, Container) + else [skip_on_exit_code] + if skip_on_exit_code + else [] + ) + self.port_bindings = port_bindings or {} + if self.port_bindings and self.network_mode == "host": + raise ValueError("Port bindings is not supported in the host network mode") + + @cached_property +
[docs] def hook(self) -> DockerHook: + """Create and return an DockerHook (cached).""" + tls_config = DockerHook.construct_tls_config( + ca_cert=self.tls_ca_cert, + client_cert=self.tls_client_cert, + client_key=self.tls_client_key, + verify=self.tls_verify, + assert_hostname=self.tls_hostname, + ssl_version=self.tls_ssl_version, + ) + return DockerHook( + docker_conn_id=self.docker_conn_id, + base_url=self.docker_url, + version=self.api_version, + tls=tls_config, + timeout=self.timeout, + )
+ + @deprecated(reason="use `hook` property instead.", category=AirflowProviderDeprecationWarning) +
[docs] def get_hook(self) -> DockerHook: + """Create and return an DockerHook (cached).""" + return self.hook
+ + @property +
[docs] def cli(self) -> APIClient: + return self.hook.api_client
+ + def _run_image(self) -> list[str] | str | None: + """Run a Docker container with the provided image.""" + self.log.info("Starting docker container from image %s", self.image) + if self.mount_tmp_dir: + with TemporaryDirectory(prefix="airflowtmp", dir=self.host_tmp_dir) as host_tmp_dir_generated: + tmp_mount = Mount(self.tmp_dir, host_tmp_dir_generated, "bind") + try: + return self._run_image_with_mounts([*self.mounts, tmp_mount], add_tmp_variable=True) + except APIError as e: + if host_tmp_dir_generated in str(e): + self.log.warning( + "Using remote engine or docker-in-docker and mounting temporary " + "volume from host is not supported. Falling back to " + "`mount_tmp_dir=False` mode. You can set `mount_tmp_dir` parameter" + " to False to disable mounting and remove the warning" + ) + return self._run_image_with_mounts(self.mounts, add_tmp_variable=False) + raise + else: + return self._run_image_with_mounts(self.mounts, add_tmp_variable=False) + + def _run_image_with_mounts(self, target_mounts, add_tmp_variable: bool) -> list[str] | str | None: + if add_tmp_variable: + self.environment["AIRFLOW_TMP_DIR"] = self.tmp_dir + else: + self.environment.pop("AIRFLOW_TMP_DIR", None) + docker_log_config = {} + if self.log_opts_max_size is not None: + docker_log_config["max-size"] = self.log_opts_max_size + if self.log_opts_max_file is not None: + docker_log_config["max-file"] = self.log_opts_max_file + env_file_vars = {} + if self.env_file is not None: + env_file_vars = self.unpack_environment_variables(self.env_file) + self.container = self.cli.create_container( + command=self.format_command(self.command), + name=self.container_name, + environment={**env_file_vars, **self.environment, **self._private_environment}, + ports=list(self.port_bindings), + host_config=self.cli.create_host_config( + auto_remove=False, + mounts=target_mounts, + network_mode=self.network_mode, + shm_size=self.shm_size, + dns=self.dns, + dns_search=self.dns_search, + cpu_shares=round(self.cpus * 1024), + port_bindings=self.port_bindings, + mem_limit=self.mem_limit, + cap_add=self.cap_add, + extra_hosts=self.extra_hosts, + privileged=self.privileged, + device_requests=self.device_requests, + log_config=LogConfig(config=docker_log_config), + ipc_mode=self.ipc_mode, + ulimits=self.ulimits, + ), + image=self.image, + user=self.user, + entrypoint=self.format_command(self.entrypoint), + working_dir=self.working_dir, + tty=self.tty, + hostname=self.hostname, + ) + logstream = self.cli.attach(container=self.container["Id"], stdout=True, stderr=True, stream=True) + try: + self.cli.start(self.container["Id"]) + + log_lines = [] + for log_chunk in logstream: + log_chunk = stringify(log_chunk).strip() + log_lines.append(log_chunk) + self.log.info("%s", log_chunk) + + result = self.cli.wait(self.container["Id"]) + if result["StatusCode"] in self.skip_on_exit_code: + raise DockerContainerFailedSkipException( + f"Docker container returned exit code {self.skip_on_exit_code}. Skipping.", logs=log_lines + ) + elif result["StatusCode"] != 0: + raise DockerContainerFailedException(f"Docker container failed: {result!r}", logs=log_lines) + + if self.retrieve_output: + return self._attempt_to_retrieve_result() + elif self.do_xcom_push: + if not log_lines: + return None + try: + if self.xcom_all: + return log_lines + else: + return log_lines[-1] + except StopIteration: + # handle the case when there is not a single line to iterate on + return None + return None + finally: + if self.auto_remove == "success": + self.cli.remove_container(self.container["Id"]) + elif self.auto_remove == "force": + self.cli.remove_container(self.container["Id"], force=True) + + def _attempt_to_retrieve_result(self): + """Attempt to pull the result from the expected file. + + This uses Docker's ``get_archive`` function. If the file is not yet + ready, *None* is returned. + """ + + def copy_from_docker(container_id, src): + archived_result, stat = self.cli.get_archive(container_id, src) + if stat["size"] == 0: + # 0 byte file, it can't be anything else than None + return None + # no need to port to a file since we intend to deserialize + with BytesIO(b"".join(archived_result)) as f: + tar = tarfile.open(fileobj=f) + file = tar.extractfile(stat["name"]) + lib = getattr(self, "pickling_library", pickle) + return lib.load(file) + + try: + return copy_from_docker(self.container["Id"], self.retrieve_output_path) + except APIError: + return None + +
[docs] def execute(self, context: Context) -> list[str] | str | None: + # Pull the docker image if `force_pull` is set or image does not exist locally + if self.force_pull or not self.cli.images(name=self.image): + self.log.info("Pulling docker image %s", self.image) + latest_status: dict[str, str] = {} + for output in self.cli.pull(self.image, stream=True, decode=True): + if isinstance(output, str): + self.log.info("%s", output) + continue + if isinstance(output, dict) and "status" in output: + output_status = output["status"] + if "id" not in output: + self.log.info("%s", output_status) + continue + + output_id = output["id"] + if latest_status.get(output_id) != output_status: + self.log.info("%s: %s", output_id, output_status) + latest_status[output_id] = output_status + return self._run_image()
+ + @staticmethod +
[docs] def format_command(command: list[str] | str | None) -> list[str] | str | None: + """Retrieve command(s). + + If command string starts with ``[``, the string is treated as a Python + literal and parsed into a list of commands. + + :param command: Docker command or entrypoint + + :return: the command (or commands) + """ + if isinstance(command, str) and command.strip().startswith("["): + command = ast.literal_eval(command) + return command
+ +
[docs] def on_kill(self) -> None: + if self.hook.client_created: + self.log.info("Stopping docker container") + if self.container is None: + self.log.info("Not attempting to kill container as it was not created") + return + self.cli.stop(self.container["Id"])
+ + @staticmethod +
[docs] def unpack_environment_variables(env_str: str) -> dict: + r"""Parse environment variables from the string. + + :param env_str: environment variables in the ``{key}={value}`` format, + separated by a ``\n`` (newline) + :return: dictionary containing parsed environment variables + """ + return dotenv_values(stream=StringIO(env_str))
+
+ + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/operators/docker_swarm.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/operators/docker_swarm.html new file mode 100644 index 00000000000..b5a37209d1d --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/airflow/providers/docker/operators/docker_swarm.html @@ -0,0 +1,1056 @@ + + + + + + + + + + + + airflow.providers.docker.operators.docker_swarm — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +

Source code for airflow.providers.docker.operators.docker_swarm

+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""Run ephemeral Docker Swarm services."""
+from __future__ import annotations
+
+import re
+from datetime import datetime
+from time import sleep
+from typing import TYPE_CHECKING
+
+from docker import types
+
+from airflow.exceptions import AirflowException
+from airflow.providers.docker.operators.docker import DockerOperator
+from airflow.utils.strings import get_random_string
+
+if TYPE_CHECKING:
+    from airflow.utils.context import Context
+
+
+
[docs]class DockerSwarmOperator(DockerOperator): + """ + Execute a command as an ephemeral docker swarm service. + + Example use-case - Using Docker Swarm orchestration to make one-time + scripts highly available. + + A temporary directory is created on the host and + mounted into a container to allow storing files + that together exceed the default disk size of 10GB in a container. + The path to the mounted directory can be accessed + via the environment variable ``AIRFLOW_TMP_DIR``. + + If a login to a private registry is required prior to pulling the image, a + Docker connection needs to be configured in Airflow and the connection ID + be provided with the parameter ``docker_conn_id``. + + :param image: Docker image from which to create the container. + If image tag is omitted, "latest" will be used. + :param api_version: Remote API version. Set to ``auto`` to automatically + detect the server's version. + :param auto_remove: Auto-removal of the container on daemon side when the + container's process exits. + The default is False. + :param command: Command to be run in the container. (templated) + :param docker_url: URL of the host running the docker daemon. + Default is unix://var/run/docker.sock + :param environment: Environment variables to set in the container. (templated) + :param force_pull: Pull the docker image on every run. Default is False. + :param mem_limit: Maximum amount of memory the container can use. + Either a float value, which represents the limit in bytes, + or a string like ``128m`` or ``1g``. + :param tls_ca_cert: Path to a PEM-encoded certificate authority + to secure the docker connection. + :param tls_client_cert: Path to the PEM-encoded certificate + used to authenticate docker client. + :param tls_client_key: Path to the PEM-encoded key used to authenticate docker client. + :param tls_hostname: Hostname to match against + the docker server certificate or False to disable the check. + :param tls_ssl_version: Version of SSL to use when communicating with docker daemon. + :param tmp_dir: Mount point inside the container to + a temporary directory created on the host by the operator. + The path is also made available via the environment variable + ``AIRFLOW_TMP_DIR`` inside the container. + :param user: Default user inside the docker container. + :param docker_conn_id: The :ref:`Docker connection id <howto/connection:docker>` + :param tty: Allocate pseudo-TTY to the container of this service + This needs to be set see logs of the Docker container / service. + :param enable_logging: Show the application's logs in operator's logs. + Supported only if the Docker engine is using json-file or journald logging drivers. + The `tty` parameter should be set to use this with Python applications. + :param configs: List of docker configs to be exposed to the containers of the swarm service. + The configs are ConfigReference objects as per the docker api + [https://docker-py.readthedocs.io/en/stable/services.html#docker.models.services.ServiceCollection.create]_ + :param secrets: List of docker secrets to be exposed to the containers of the swarm service. + The secrets are SecretReference objects as per the docker create_service api. + [https://docker-py.readthedocs.io/en/stable/services.html#docker.models.services.ServiceCollection.create]_ + :param mode: Indicate whether a service should be deployed as a replicated or global service, + and associated parameters + :param networks: List of network names or IDs or NetworkAttachmentConfig to attach the service to. + :param placement: Placement instructions for the scheduler. If a list is passed instead, + it is assumed to be a list of constraints as part of a Placement object. + """ + + def __init__( + self, + *, + image: str, + enable_logging: bool = True, + configs: list[types.ConfigReference] | None = None, + secrets: list[types.SecretReference] | None = None, + mode: types.ServiceMode | None = None, + networks: list[str | types.NetworkAttachmentConfig] | None = None, + placement: types.Placement | list[types.Placement] | None = None, + **kwargs, + ) -> None: + super().__init__(image=image, **kwargs) + self.enable_logging = enable_logging + self.service = None + self.configs = configs + self.secrets = secrets + self.mode = mode + self.networks = networks + self.placement = placement + +
[docs] def execute(self, context: Context) -> None: + self.environment["AIRFLOW_TMP_DIR"] = self.tmp_dir + return self._run_service()
+ + def _run_service(self) -> None: + self.log.info("Starting docker service from image %s", self.image) + self.service = self.cli.create_service( + types.TaskTemplate( + container_spec=types.ContainerSpec( + image=self.image, + command=self.format_command(self.command), + mounts=self.mounts, + env=self.environment, + user=self.user, + tty=self.tty, + configs=self.configs, + secrets=self.secrets, + ), + restart_policy=types.RestartPolicy(condition="none"), + resources=types.Resources(mem_limit=self.mem_limit), + networks=self.networks, + placement=self.placement, + ), + name=f"airflow-{get_random_string()}", + labels={"name": f"airflow__{self.dag_id}__{self.task_id}"}, + mode=self.mode, + ) + if self.service is None: + raise Exception("Service should be set here") + self.log.info("Service started: %s", self.service) + + # wait for the service to start the task + while not self.cli.tasks(filters={"service": self.service["ID"]}): + continue + + if self.enable_logging: + self._stream_logs_to_output() + + while True: + if self._has_service_terminated(): + self.log.info("Service status before exiting: %s", self._service_status()) + break + + self.log.info("auto_removeauto_removeauto_removeauto_removeauto_remove : %s", str(self.auto_remove)) + if self.service and self._service_status() != "complete": + if self.auto_remove == "success": + self.cli.remove_service(self.service["ID"]) + raise AirflowException(f"Service did not complete: {self.service!r}") + elif self.auto_remove == "success": + if not self.service: + raise Exception("The 'service' should be initialized before!") + self.cli.remove_service(self.service["ID"]) + + def _service_status(self) -> str | None: + if not self.service: + raise Exception("The 'service' should be initialized before!") + return self.cli.tasks(filters={"service": self.service["ID"]})[0]["Status"]["State"] + + def _has_service_terminated(self) -> bool: + status = self._service_status() + return status in ["complete", "failed", "shutdown", "rejected", "orphaned", "remove"] + + def _stream_logs_to_output(self) -> None: + if not self.service: + raise Exception("The 'service' should be initialized before!") + last_line_logged, last_timestamp = "", 0 + + def stream_new_logs(last_line_logged, since=0): + logs = self.cli.service_logs( + self.service["ID"], + follow=False, + stdout=True, + stderr=True, + is_tty=self.tty, + since=since, + timestamps=True, + ) + logs = b"".join(logs).decode().splitlines() + if last_line_logged in logs: + logs = logs[logs.index(last_line_logged) + 1 :] + for line in logs: + match = re.match(r"(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6,}Z) (.*)", line) + timestamp, message = match.groups() + self.log.info(message) + + if len(logs) == 0: + return last_line_logged, since + + last_line_logged = line + + # Floor nanoseconds to microseconds + last_timestamp = re.sub(r"(\.\d{6})\d+Z", r"\1Z", timestamp) + last_timestamp = datetime.strptime(last_timestamp, "%Y-%m-%dT%H:%M:%S.%fZ") + last_timestamp = last_timestamp.timestamp() + return last_line_logged, last_timestamp + + while not self._has_service_terminated(): + sleep(2) + last_line_logged, last_timestamp = stream_new_logs(last_line_logged, since=last_timestamp) + +
[docs] def on_kill(self) -> None: + if self.hook.client_created and self.service is not None: + self.log.info("Removing docker service: %s", self.service["ID"]) + self.cli.remove_service(self.service["ID"])
+
+ + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/index.html new file mode 100644 index 00000000000..9f9e4653565 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/index.html @@ -0,0 +1,838 @@ + + + + + + + + + + + + Overview: module code — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + + +
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/tests/system/providers/docker/example_docker.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/tests/system/providers/docker/example_docker.html new file mode 100644 index 00000000000..b07c8e027f0 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/tests/system/providers/docker/example_docker.html @@ -0,0 +1,894 @@ + + + + + + + + + + + + tests.system.providers.docker.example_docker — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +

Source code for tests.system.providers.docker.example_docker

+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import os
+from datetime import datetime
+
+from airflow import models
+from airflow.operators.bash import BashOperator
+from airflow.providers.docker.operators.docker import DockerOperator
+
+
[docs]ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID")
+
[docs]DAG_ID = "docker_test"
+ +with models.DAG( + DAG_ID, + schedule="@once", + start_date=datetime(2021, 1, 1), + catchup=False, + tags=["example", "docker"], +) as dag: +
[docs] t1 = BashOperator(task_id="print_date", bash_command="date", dag=dag)
+ t2 = BashOperator(task_id="sleep", bash_command="sleep 5", retries=3, dag=dag) + # [START howto_operator_docker] + t3 = DockerOperator( + docker_url="unix://var/run/docker.sock", # Set your docker URL + command="/bin/sleep 30", + image="centos:latest", + network_mode="bridge", + task_id="docker_op_tester", + dag=dag, + ) + # [END howto_operator_docker] + + t4 = BashOperator(task_id="print_hello", bash_command='echo "hello world!!!"', dag=dag) + # t1 >> t2 + # t1 >> t3 + # t3 >> t4 + + ( + # TEST BODY + t1 >> [t2, t3] >> t4 + ) + +from tests.system.utils import get_test_run # noqa: E402 + +# Needed to run the example DAG with pytest (see: tests/system/README.md#run_via_pytest) +
[docs]test_run = get_test_run(dag)
+
+ + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/tests/system/providers/docker/example_docker_copy_data.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/tests/system/providers/docker/example_docker_copy_data.html new file mode 100644 index 00000000000..011d8569a3e --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/tests/system/providers/docker/example_docker_copy_data.html @@ -0,0 +1,939 @@ + + + + + + + + + + + + tests.system.providers.docker.example_docker_copy_data — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +

Source code for tests.system.providers.docker.example_docker_copy_data

+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""
+This sample "listen to directory". move the new file and print it,
+using docker-containers.
+The following operators are being used: DockerOperator,
+BashOperator & ShortCircuitOperator.
+TODO: Review the workflow, change it accordingly to
+your environment & enable the code.
+"""
+from __future__ import annotations
+
+import os
+from datetime import datetime
+
+from docker.types import Mount
+
+from airflow import models
+from airflow.operators.bash import BashOperator
+from airflow.operators.python import ShortCircuitOperator
+from airflow.providers.docker.operators.docker import DockerOperator
+
+
[docs]ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID")
+
[docs]DAG_ID = "docker_sample_copy_data"
+ +with models.DAG( + DAG_ID, + schedule="@once", + start_date=datetime(2021, 1, 1), + catchup=False, + tags=["example", "docker"], +) as dag: +
[docs] locate_file_cmd = """ + sleep 10 + find {{params.source_location}} -type f -printf "%f\n" | head -1 + """
+ + t_view = BashOperator( + task_id="view_file", + bash_command=locate_file_cmd, + do_xcom_push=True, + params={"source_location": "/your/input_dir/path"}, + dag=dag, + ) + + t_is_data_available = ShortCircuitOperator( + task_id="check_if_data_available", + python_callable=lambda task_output: not task_output == "", + op_kwargs=dict(task_output=t_view.output), + dag=dag, + ) + + t_move = DockerOperator( + api_version="1.19", + docker_url="tcp://localhost:2375", # replace it with swarm/docker endpoint + image="centos:latest", + network_mode="bridge", + mounts=[ + Mount(source="/your/host/input_dir/path", target="/your/input_dir/path", type="bind"), + Mount(source="/your/host/output_dir/path", target="/your/output_dir/path", type="bind"), + ], + command=[ + "/bin/bash", + "-c", + "/bin/sleep 30; " + f"/bin/mv {{{{ params.source_location }}}}/{t_view.output} {{{{ params.target_location }}}};" + f"/bin/echo '{{{{ params.target_location }}}}/{t_view.output}';", + ], + task_id="move_data", + do_xcom_push=True, + params={"source_location": "/your/input_dir/path", "target_location": "/your/output_dir/path"}, + dag=dag, + ) + + t_print = DockerOperator( + api_version="1.19", + docker_url="tcp://localhost:2375", + image="centos:latest", + mounts=[Mount(source="/your/host/output_dir/path", target="/your/output_dir/path", type="bind")], + command=f"cat {t_move.output}", + task_id="print", + dag=dag, + ) + + ( + # TEST BODY + t_is_data_available >> t_move >> t_print + ) + +from tests.system.utils import get_test_run # noqa: E402 + +# Needed to run the example DAG with pytest (see: tests/system/README.md#run_via_pytest) +
[docs]test_run = get_test_run(dag)
+
+ + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/tests/system/providers/docker/example_docker_swarm.html b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/tests/system/providers/docker/example_docker_swarm.html new file mode 100644 index 00000000000..80f2f40eb9b --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_modules/tests/system/providers/docker/example_docker_swarm.html @@ -0,0 +1,884 @@ + + + + + + + + + + + + tests.system.providers.docker.example_docker_swarm — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +

Source code for tests.system.providers.docker.example_docker_swarm

+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+from __future__ import annotations
+
+import os
+from datetime import datetime
+
+from airflow import models
+from airflow.providers.docker.operators.docker_swarm import DockerSwarmOperator
+
+
[docs]ENV_ID = os.environ.get("SYSTEM_TESTS_ENV_ID")
+
[docs]DAG_ID = "docker_swarm_dag"
+ +with models.DAG( + dag_id=DAG_ID, + schedule="@once", + start_date=datetime(2021, 1, 1), + catchup=False, + tags=["example", "docker"], +) as dag: +
[docs] t1 = DockerSwarmOperator( + api_version="auto", + docker_url="unix://var/run/docker.sock", # Set your docker URL + command="/bin/sleep 10", + image="centos:latest", + auto_remove=True, + task_id="sleep_with_swarm", + )
+ + ( + # TEST BODY + t1 + ) + +from tests.system.utils import get_test_run # noqa: E402 + +# Needed to run the example DAG with pytest (see: tests/system/README.md#run_via_pytest) +
[docs]test_run = get_test_run(dag)
+
+ + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/decorators/docker/index.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/decorators/docker/index.rst.txt new file mode 100644 index 00000000000..311a5340bba --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/decorators/docker/index.rst.txt @@ -0,0 +1,30 @@ +:py:mod:`airflow.providers.docker.decorators.docker` +==================================================== + +.. py:module:: airflow.providers.docker.decorators.docker + + +Module Contents +--------------- + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + airflow.providers.docker.decorators.docker.docker_task + + + +.. py:function:: docker_task(python_callable = None, multiple_outputs = None, **kwargs) + + Python operator decorator; wraps a function into an Airflow operator. + + Also accepts any argument that DockerOperator will via ``kwargs``. Can be reused in a single DAG. + + :param python_callable: Function to decorate + :param multiple_outputs: If set, function return value will be unrolled to multiple XCom values. + Dict will unroll to XCom values with keys as XCom keys. Defaults to False. + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/decorators/index.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/decorators/index.rst.txt new file mode 100644 index 00000000000..ec1c526c182 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/decorators/index.rst.txt @@ -0,0 +1,15 @@ +:py:mod:`airflow.providers.docker.decorators` +============================================= + +.. py:module:: airflow.providers.docker.decorators + + +Submodules +---------- +.. toctree:: + :titlesonly: + :maxdepth: 1 + + docker/index.rst + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/exceptions/index.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/exceptions/index.rst.txt new file mode 100644 index 00000000000..fb79911b2f4 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/exceptions/index.rst.txt @@ -0,0 +1,34 @@ +:py:mod:`airflow.providers.docker.exceptions` +============================================= + +.. py:module:: airflow.providers.docker.exceptions + +.. autoapi-nested-parse:: + + Exceptions used by Docker provider. + + + +Module Contents +--------------- + +.. py:exception:: DockerContainerFailedException(message = None, logs = None) + + + Bases: :py:obj:`airflow.exceptions.AirflowException` + + Raised when a Docker container returns an error. + + :param logs: The log output of the failed Docker container + + +.. py:exception:: DockerContainerFailedSkipException(message = None, logs = None) + + + Bases: :py:obj:`airflow.exceptions.AirflowSkipException` + + Raised when a Docker container returns an error and task should be skipped. + + :param logs: The log output of the failed Docker container + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/hooks/docker/index.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/hooks/docker/index.rst.txt new file mode 100644 index 00000000000..18f3288d946 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/hooks/docker/index.rst.txt @@ -0,0 +1,104 @@ +:py:mod:`airflow.providers.docker.hooks.docker` +=============================================== + +.. py:module:: airflow.providers.docker.hooks.docker + + +Module Contents +--------------- + +Classes +~~~~~~~ + +.. autoapisummary:: + + airflow.providers.docker.hooks.docker.DockerHook + + + + +.. py:class:: DockerHook(docker_conn_id = default_conn_name, base_url = None, version = None, tls = None, timeout = DEFAULT_TIMEOUT_SECONDS) + + + Bases: :py:obj:`airflow.hooks.base.BaseHook` + + Interact with a Docker Daemon and Container Registry. + + This class provide a thin wrapper around the ``docker.APIClient``. + + .. seealso:: + - :ref:`Docker Connection ` + - `Docker SDK: Low-level API `_ + + :param docker_conn_id: :ref:`Docker connection id ` where stored credentials + to Docker Registry. If set to ``None`` or empty then hook does not login to Container Registry. + :param base_url: URL to the Docker server. + :param version: The version of the API to use. Use ``auto`` or ``None`` for automatically detect + the server's version. + :param tls: Is connection required TLS, for enable pass ``True`` for use with default options, + or pass a `docker.tls.TLSConfig` object to use custom configurations. + :param timeout: Default timeout for API calls, in seconds. + + .. py:property:: client_created + :type: bool + + Is api_client created or not. + + + .. py:attribute:: conn_name_attr + :value: 'docker_conn_id' + + + + .. py:attribute:: default_conn_name + :value: 'docker_default' + + + + .. py:attribute:: conn_type + :value: 'docker' + + + + .. py:attribute:: hook_name + :value: 'Docker' + + + + .. py:method:: construct_tls_config(ca_cert = None, client_cert = None, client_key = None, verify = True, assert_hostname = None, ssl_version = None) + :staticmethod: + + Construct TLSConfig object from parts. + + :param ca_cert: Path to a PEM-encoded CA (Certificate Authority) certificate file. + :param client_cert: Path to PEM-encoded certificate file. + :param client_key: Path to PEM-encoded key file. + :param verify: Set ``True`` to verify the validity of the provided certificate. + :param assert_hostname: Hostname to match against the docker server certificate + or ``False`` to disable the check. + :param ssl_version: Version of SSL to use when communicating with docker daemon. + + + .. py:method:: api_client() + + Create connection to docker host and return ``docker.APIClient`` (cached). + + + .. py:method:: get_conn() + + Create connection to docker host and return ``docker.APIClient`` (cached). + + + .. py:method:: get_connection_form_widgets() + :classmethod: + + Return connection form widgets. + + + .. py:method:: get_ui_field_behaviour() + :classmethod: + + Return custom field behaviour. + + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/hooks/index.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/hooks/index.rst.txt new file mode 100644 index 00000000000..133ddb4d60f --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/hooks/index.rst.txt @@ -0,0 +1,15 @@ +:py:mod:`airflow.providers.docker.hooks` +======================================== + +.. py:module:: airflow.providers.docker.hooks + + +Submodules +---------- +.. toctree:: + :titlesonly: + :maxdepth: 1 + + docker/index.rst + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/index.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/index.rst.txt new file mode 100644 index 00000000000..e263fd4858a --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/index.rst.txt @@ -0,0 +1,34 @@ +:py:mod:`airflow.providers.docker` +================================== + +.. py:module:: airflow.providers.docker + + +Subpackages +----------- +.. toctree:: + :titlesonly: + :maxdepth: 3 + + decorators/index.rst + hooks/index.rst + operators/index.rst + + +Submodules +---------- +.. toctree:: + :titlesonly: + :maxdepth: 1 + + exceptions/index.rst + + +Package Contents +---------------- + +.. py:data:: __version__ + :value: '3.9.0' + + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/operators/docker/index.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/operators/docker/index.rst.txt new file mode 100644 index 00000000000..93217be09e5 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/operators/docker/index.rst.txt @@ -0,0 +1,228 @@ +:py:mod:`airflow.providers.docker.operators.docker` +=================================================== + +.. py:module:: airflow.providers.docker.operators.docker + +.. autoapi-nested-parse:: + + Implements Docker operator. + + + +Module Contents +--------------- + +Classes +~~~~~~~ + +.. autoapisummary:: + + airflow.providers.docker.operators.docker.DockerOperator + + + +Functions +~~~~~~~~~ + +.. autoapisummary:: + + airflow.providers.docker.operators.docker.stringify + + + +.. py:function:: stringify(line) + + Make sure string is returned even if bytes are passed. Docker stream can return bytes. + + +.. py:class:: DockerOperator(*, image, api_version = None, command = None, container_name = None, cpus = 1.0, docker_url = 'unix://var/run/docker.sock', environment = None, private_environment = None, env_file = None, force_pull = False, mem_limit = None, host_tmp_dir = None, network_mode = None, tls_ca_cert = None, tls_client_cert = None, tls_client_key = None, tls_verify = True, tls_hostname = None, tls_ssl_version = None, mount_tmp_dir = True, tmp_dir = '/tmp/airflow', user = None, mounts = None, entrypoint = None, working_dir = None, xcom_all = False, docker_conn_id = None, dns = None, dns_search = None, auto_remove = 'never', shm_size = None, tty = False, hostname = None, privileged = False, cap_add = None, extra_hosts = None, retrieve_output = False, retrieve_output_path = None, timeout = DEFAULT_TIMEOUT_SECONDS, device_requests = None, log_opts_max_size = None, log_opts_max_file = None, ipc_mode = None, skip_on_exit_code = None, port_bindings = None, ulimits = None, **kwargs) + + + Bases: :py:obj:`airflow.models.BaseOperator` + + Execute a command inside a docker container. + + By default, a temporary directory is + created on the host and mounted into a container to allow storing files + that together exceed the default disk size of 10GB in a container. + In this case The path to the mounted directory can be accessed + via the environment variable ``AIRFLOW_TMP_DIR``. + + If the volume cannot be mounted, warning is printed and an attempt is made to execute the docker + command without the temporary folder mounted. This is to make it works by default with remote docker + engine or when you run docker-in-docker solution and temporary directory is not shared with the + docker engine. Warning is printed in logs in this case. + + If you know you run DockerOperator with remote engine or via docker-in-docker + you should set ``mount_tmp_dir`` parameter to False. In this case, you can still use + ``mounts`` parameter to mount already existing named volumes in your Docker Engine + to achieve similar capability where you can store files exceeding default disk size + of the container, + + If a login to a private registry is required prior to pulling the image, a + Docker connection needs to be configured in Airflow and the connection ID + be provided with the parameter ``docker_conn_id``. + + :param image: Docker image from which to create the container. + If image tag is omitted, "latest" will be used. (templated) + :param api_version: Remote API version. Set to ``auto`` to automatically + detect the server's version. + :param command: Command to be run in the container. (templated) + :param container_name: Name of the container. Optional (templated) + :param cpus: Number of CPUs to assign to the container. + This value gets multiplied with 1024. See + https://docs.docker.com/engine/reference/run/#cpu-share-constraint + :param docker_url: URL of the host running the docker daemon. + Default is unix://var/run/docker.sock + :param environment: Environment variables to set in the container. (templated) + :param private_environment: Private environment variables to set in the container. + These are not templated, and hidden from the website. + :param env_file: Relative path to the ``.env`` file with environment variables to set in the container. + Overridden by variables in the environment parameter. (templated) + :param force_pull: Pull the docker image on every run. Default is False. + :param mem_limit: Maximum amount of memory the container can use. + Either a float value, which represents the limit in bytes, + or a string like ``128m`` or ``1g``. + :param host_tmp_dir: Specify the location of the temporary directory on the host which will + be mapped to tmp_dir. If not provided defaults to using the standard system temp directory. + :param network_mode: Network mode for the container. It can be one of the following: + + - ``"bridge"``: Create new network stack for the container with default docker bridge network + - ``"none"``: No networking for this container + - ``"container:"``: Use the network stack of another container specified via + - ``"host"``: Use the host network stack. Incompatible with `port_bindings` + - ``"|"``: Connects the container to user created network + (using ``docker network create`` command) + :param tls_ca_cert: Path to a PEM-encoded certificate authority + to secure the docker connection. + :param tls_client_cert: Path to the PEM-encoded certificate + used to authenticate docker client. + :param tls_client_key: Path to the PEM-encoded key used to authenticate docker client. + :param tls_verify: Set ``True`` to verify the validity of the provided certificate. + :param tls_hostname: Hostname to match against + the docker server certificate or False to disable the check. + :param tls_ssl_version: Version of SSL to use when communicating with docker daemon. + :param mount_tmp_dir: Specify whether the temporary directory should be bind-mounted + from the host to the container. Defaults to True + :param tmp_dir: Mount point inside the container to + a temporary directory created on the host by the operator. + The path is also made available via the environment variable + ``AIRFLOW_TMP_DIR`` inside the container. + :param user: Default user inside the docker container. + :param mounts: List of volumes to mount into the container. Each item should + be a :py:class:`docker.types.Mount` instance. + :param entrypoint: Overwrite the default ENTRYPOINT of the image + :param working_dir: Working directory to + set on the container (equivalent to the -w switch the docker client) + :param xcom_all: Push all the stdout or just the last line. + The default is False (last line). + :param docker_conn_id: The :ref:`Docker connection id ` + :param dns: Docker custom DNS servers + :param dns_search: Docker custom DNS search domain + :param auto_remove: Enable removal of the container when the container's process exits. Possible values: + + - ``never``: (default) do not remove container + - ``success``: remove on success + - ``force``: always remove container + :param shm_size: Size of ``/dev/shm`` in bytes. The size must be + greater than 0. If omitted uses system default. + :param tty: Allocate pseudo-TTY to the container + This needs to be set see logs of the Docker container. + :param hostname: Optional hostname for the container. + :param privileged: Give extended privileges to this container. + :param cap_add: Include container capabilities + :param extra_hosts: Additional hostnames to resolve inside the container, + as a mapping of hostname to IP address. + :param retrieve_output: Should this docker image consistently attempt to pull from and output + file before manually shutting down the image. Useful for cases where users want a pickle serialized + output that is not posted to logs + :param retrieve_output_path: path for output file that will be retrieved and passed to xcom + :param device_requests: Expose host resources such as GPUs to the container. + :param log_opts_max_size: The maximum size of the log before it is rolled. + A positive integer plus a modifier representing the unit of measure (k, m, or g). + Eg: 10m or 1g Defaults to -1 (unlimited). + :param log_opts_max_file: The maximum number of log files that can be present. + If rolling the logs creates excess files, the oldest file is removed. + Only effective when max-size is also set. A positive integer. Defaults to 1. + :param ipc_mode: Set the IPC mode for the container. + :param skip_on_exit_code: If task exits with this exit code, leave the task + in ``skipped`` state (default: None). If set to ``None``, any non-zero + exit code will be treated as a failure. + :param port_bindings: Publish a container's port(s) to the host. It is a + dictionary of value where the key indicates the port to open inside the container + and value indicates the host port that binds to the container port. + Incompatible with ``"host"`` in ``network_mode``. + :param ulimits: List of ulimit options to set for the container. Each item should + be a :py:class:`docker.types.Ulimit` instance. + + .. py:property:: cli + :type: docker.APIClient + + + .. py:attribute:: template_fields + :type: Sequence[str] + :value: ('image', 'command', 'environment', 'env_file', 'container_name') + + + + .. py:attribute:: template_fields_renderers + + + + .. py:attribute:: template_ext + :type: Sequence[str] + :value: ('.sh', '.bash', '.env') + + + + .. py:method:: hook() + + Create and return an DockerHook (cached). + + + .. py:method:: get_hook() + + Create and return an DockerHook (cached). + + + .. py:method:: execute(context) + + Derive when creating an operator. + + Context is the same dictionary used as when rendering jinja templates. + + Refer to get_template_context for more context. + + + .. py:method:: format_command(command) + :staticmethod: + + Retrieve command(s). + + If command string starts with ``[``, the string is treated as a Python + literal and parsed into a list of commands. + + :param command: Docker command or entrypoint + + :return: the command (or commands) + + + .. py:method:: on_kill() + + Override this method to clean up subprocesses when a task instance gets killed. + + Any use of the threading, subprocess or multiprocessing module within an + operator needs to be cleaned up, or it will leave ghost processes behind. + + + .. py:method:: unpack_environment_variables(env_str) + :staticmethod: + + Parse environment variables from the string. + + :param env_str: environment variables in the ``{key}={value}`` format, + separated by a ``\n`` (newline) + :return: dictionary containing parsed environment variables + + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/operators/docker_swarm/index.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/operators/docker_swarm/index.rst.txt new file mode 100644 index 00000000000..41668823133 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/operators/docker_swarm/index.rst.txt @@ -0,0 +1,108 @@ +:py:mod:`airflow.providers.docker.operators.docker_swarm` +========================================================= + +.. py:module:: airflow.providers.docker.operators.docker_swarm + +.. autoapi-nested-parse:: + + Run ephemeral Docker Swarm services. + + + +Module Contents +--------------- + +Classes +~~~~~~~ + +.. autoapisummary:: + + airflow.providers.docker.operators.docker_swarm.DockerSwarmOperator + + + + +.. py:class:: DockerSwarmOperator(*, image, enable_logging = True, configs = None, secrets = None, mode = None, networks = None, placement = None, **kwargs) + + + Bases: :py:obj:`airflow.providers.docker.operators.docker.DockerOperator` + + Execute a command as an ephemeral docker swarm service. + + Example use-case - Using Docker Swarm orchestration to make one-time + scripts highly available. + + A temporary directory is created on the host and + mounted into a container to allow storing files + that together exceed the default disk size of 10GB in a container. + The path to the mounted directory can be accessed + via the environment variable ``AIRFLOW_TMP_DIR``. + + If a login to a private registry is required prior to pulling the image, a + Docker connection needs to be configured in Airflow and the connection ID + be provided with the parameter ``docker_conn_id``. + + :param image: Docker image from which to create the container. + If image tag is omitted, "latest" will be used. + :param api_version: Remote API version. Set to ``auto`` to automatically + detect the server's version. + :param auto_remove: Auto-removal of the container on daemon side when the + container's process exits. + The default is False. + :param command: Command to be run in the container. (templated) + :param docker_url: URL of the host running the docker daemon. + Default is unix://var/run/docker.sock + :param environment: Environment variables to set in the container. (templated) + :param force_pull: Pull the docker image on every run. Default is False. + :param mem_limit: Maximum amount of memory the container can use. + Either a float value, which represents the limit in bytes, + or a string like ``128m`` or ``1g``. + :param tls_ca_cert: Path to a PEM-encoded certificate authority + to secure the docker connection. + :param tls_client_cert: Path to the PEM-encoded certificate + used to authenticate docker client. + :param tls_client_key: Path to the PEM-encoded key used to authenticate docker client. + :param tls_hostname: Hostname to match against + the docker server certificate or False to disable the check. + :param tls_ssl_version: Version of SSL to use when communicating with docker daemon. + :param tmp_dir: Mount point inside the container to + a temporary directory created on the host by the operator. + The path is also made available via the environment variable + ``AIRFLOW_TMP_DIR`` inside the container. + :param user: Default user inside the docker container. + :param docker_conn_id: The :ref:`Docker connection id ` + :param tty: Allocate pseudo-TTY to the container of this service + This needs to be set see logs of the Docker container / service. + :param enable_logging: Show the application's logs in operator's logs. + Supported only if the Docker engine is using json-file or journald logging drivers. + The `tty` parameter should be set to use this with Python applications. + :param configs: List of docker configs to be exposed to the containers of the swarm service. + The configs are ConfigReference objects as per the docker api + [https://docker-py.readthedocs.io/en/stable/services.html#docker.models.services.ServiceCollection.create]_ + :param secrets: List of docker secrets to be exposed to the containers of the swarm service. + The secrets are SecretReference objects as per the docker create_service api. + [https://docker-py.readthedocs.io/en/stable/services.html#docker.models.services.ServiceCollection.create]_ + :param mode: Indicate whether a service should be deployed as a replicated or global service, + and associated parameters + :param networks: List of network names or IDs or NetworkAttachmentConfig to attach the service to. + :param placement: Placement instructions for the scheduler. If a list is passed instead, + it is assumed to be a list of constraints as part of a Placement object. + + .. py:method:: execute(context) + + Derive when creating an operator. + + Context is the same dictionary used as when rendering jinja templates. + + Refer to get_template_context for more context. + + + .. py:method:: on_kill() + + Override this method to clean up subprocesses when a task instance gets killed. + + Any use of the threading, subprocess or multiprocessing module within an + operator needs to be cleaned up, or it will leave ghost processes behind. + + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/operators/index.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/operators/index.rst.txt new file mode 100644 index 00000000000..e599d839900 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/airflow/providers/docker/operators/index.rst.txt @@ -0,0 +1,16 @@ +:py:mod:`airflow.providers.docker.operators` +============================================ + +.. py:module:: airflow.providers.docker.operators + + +Submodules +---------- +.. toctree:: + :titlesonly: + :maxdepth: 1 + + docker/index.rst + docker_swarm/index.rst + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/tests/system/providers/docker/example_docker/index.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/tests/system/providers/docker/example_docker/index.rst.txt new file mode 100644 index 00000000000..6fc4acb85ec --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/tests/system/providers/docker/example_docker/index.rst.txt @@ -0,0 +1,26 @@ +:py:mod:`tests.system.providers.docker.example_docker` +====================================================== + +.. py:module:: tests.system.providers.docker.example_docker + + +Module Contents +--------------- + +.. py:data:: ENV_ID + + + +.. py:data:: DAG_ID + :value: 'docker_test' + + + +.. py:data:: t1 + + + +.. py:data:: test_run + + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/tests/system/providers/docker/example_docker_copy_data/index.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/tests/system/providers/docker/example_docker_copy_data/index.rst.txt new file mode 100644 index 00000000000..e0973e6f8b7 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/tests/system/providers/docker/example_docker_copy_data/index.rst.txt @@ -0,0 +1,53 @@ +:py:mod:`tests.system.providers.docker.example_docker_copy_data` +================================================================ + +.. py:module:: tests.system.providers.docker.example_docker_copy_data + +.. autoapi-nested-parse:: + + This sample "listen to directory". move the new file and print it, + using docker-containers. + The following operators are being used: DockerOperator, + BashOperator & ShortCircuitOperator. + TODO: Review the workflow, change it accordingly to + your environment & enable the code. + + + +Module Contents +--------------- + +.. py:data:: ENV_ID + + + +.. py:data:: DAG_ID + :value: 'docker_sample_copy_data' + + + +.. py:data:: locate_file_cmd + :value: Multiline-String + + .. raw:: html + +
Show Value + + .. code-block:: python + + """ + sleep 10 + find {{params.source_location}} -type f -printf "%f + " | head -1 + """ + + .. raw:: html + +
+ + + +.. py:data:: test_run + + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/tests/system/providers/docker/example_docker_swarm/index.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/tests/system/providers/docker/example_docker_swarm/index.rst.txt new file mode 100644 index 00000000000..cd550acaee8 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/tests/system/providers/docker/example_docker_swarm/index.rst.txt @@ -0,0 +1,26 @@ +:py:mod:`tests.system.providers.docker.example_docker_swarm` +============================================================ + +.. py:module:: tests.system.providers.docker.example_docker_swarm + + +Module Contents +--------------- + +.. py:data:: ENV_ID + + + +.. py:data:: DAG_ID + :value: 'docker_swarm_dag' + + + +.. py:data:: t1 + + + +.. py:data:: test_run + + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/tests/system/providers/docker/index.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/tests/system/providers/docker/index.rst.txt new file mode 100644 index 00000000000..d3bb8486a0f --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/_api/tests/system/providers/docker/index.rst.txt @@ -0,0 +1,17 @@ +:py:mod:`tests.system.providers.docker` +======================================= + +.. py:module:: tests.system.providers.docker + + +Submodules +---------- +.. toctree:: + :titlesonly: + :maxdepth: 1 + + example_docker/index.rst + example_docker_copy_data/index.rst + example_docker_swarm/index.rst + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/changelog.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/changelog.rst.txt new file mode 100644 index 00000000000..46a39571be6 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/changelog.rst.txt @@ -0,0 +1,25 @@ + + .. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + .. http://www.apache.org/licenses/LICENSE-2.0 + + .. Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + + .. NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE + OVERWRITTEN WHEN PREPARING PACKAGES. + + .. IF YOU WANT TO MODIFY THIS FILE, YOU SHOULD MODIFY THE TEMPLATE + `PROVIDER_CHANGELOG_TEMPLATE.rst.jinja2` IN the `dev/breeze/src/airflow_breeze/templates` DIRECTORY + +.. include:: ../../airflow/providers/docker/CHANGELOG.rst diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/commits.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/commits.rst.txt new file mode 100644 index 00000000000..ac1cbd64e41 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/commits.rst.txt @@ -0,0 +1,622 @@ + + .. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + .. http://www.apache.org/licenses/LICENSE-2.0 + + .. Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + + .. NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE + OVERWRITTEN WHEN PREPARING PACKAGES. + + .. IF YOU WANT TO MODIFY THIS FILE, YOU SHOULD MODIFY THE TEMPLATE + `PROVIDER_COMMITS_TEMPLATE.rst.jinja2` IN the `dev/breeze/src/airflow_breeze/templates` DIRECTORY + + .. THE REMAINDER OF THE FILE IS AUTOMATICALLY GENERATED. IT WILL BE OVERWRITTEN AT RELEASE TIME! + +Package apache-airflow-providers-docker +------------------------------------------------------ + +`Docker `__ + + +This is detailed commit list of changes for versions provider package: ``docker``. +For high-level changelog, see :doc:`package information including changelog `. + + + +3.9.0 +..... + +Latest change: 2023-12-11 + +================================================================================================= =========== ================================================================================ +Commit Committed Subject +================================================================================================= =========== ================================================================================ +`cd476acd8f `_ 2023-12-11 ``Follow BaseHook connection fields method signature in child classes (#36086)`` +`f9c952bb7f `_ 2023-12-09 ``Fix broken log streaming from #35677 (#36127)`` +`999b70178a `_ 2023-12-08 ``Prepare docs 1st wave of Providers December 2023 (#36112)`` +`d0918d77ee `_ 2023-12-07 ``Bump minimum Airflow version in providers to Airflow 2.6.0 (#36017)`` +`882108862d `_ 2023-12-06 ``Fix 'enable_logging=True' not working in 'DockerSwarmOperator' (#35677)`` +`c905fe88de `_ 2023-11-25 ``Update information about links into the provider.yaml files (#35837)`` +================================================================================================= =========== ================================================================================ + +3.8.2 +..... + +Latest change: 2023-11-24 + +================================================================================================= =========== ==================================================================== +Commit Committed Subject +================================================================================================= =========== ==================================================================== +`0b23d5601c `_ 2023-11-24 ``Prepare docs 2nd wave of Providers November 2023 (#35836)`` +`99534e47f3 `_ 2023-11-19 ``Use reproducible builds for provider packages (#35693)`` +`99df205f42 `_ 2023-11-16 ``Fix and reapply templates for provider documentation (#35686)`` +`5a6dcfd865 `_ 2023-11-12 ``Refactor docker operator attribute validations and docs (#35571)`` +================================================================================================= =========== ==================================================================== + +3.8.1 +..... + +Latest change: 2023-11-08 + +================================================================================================= =========== ============================================================================== +Commit Committed Subject +================================================================================================= =========== ============================================================================== +`1b059c57d6 `_ 2023-11-08 ``Prepare docs 1st wave of Providers November 2023 (#35537)`` +`1c9d1c2f8a `_ 2023-10-31 ``fix '_DockerDecoratedOperator' module type attribute pickle error (#35293)`` +`d1c58d86de `_ 2023-10-28 ``Prepare docs 3rd wave of Providers October 2023 - FIX (#35233)`` +`3592ff4046 `_ 2023-10-28 ``Prepare docs 3rd wave of Providers October 2023 (#35187)`` +`dd7ba3cae1 `_ 2023-10-19 ``Pre-upgrade 'ruff==0.0.292' changes in providers (#35053)`` +`7a93b19138 `_ 2023-10-16 ``D401 Support - Providers: DaskExecutor to Github (Inclusive) (#34935)`` +================================================================================================= =========== ============================================================================== + +3.8.0 +..... + +Latest change: 2023-10-13 + +================================================================================================= =========== =============================================================== +Commit Committed Subject +================================================================================================= =========== =============================================================== +`e9987d5059 `_ 2023-10-13 ``Prepare docs 1st wave of Providers in October 2023 (#34916)`` +`8e26865763 `_ 2023-10-06 ``Refactor consolidate import from io in providers (#34378)`` +`0c8e30e43b `_ 2023-10-05 ``Bump min airflow version of providers (#34728)`` +`7ebf4220c9 `_ 2023-09-28 ``Refactor usage of str() in providers (#34320)`` +`d75e5ef00a `_ 2023-09-18 ``Deprecate get_hook method in DockerOperator (#34432)`` +`c668245b57 `_ 2023-09-12 ``Add ulimits parameter to DockerOperator (#34284)`` +`c5016f754d `_ 2023-09-08 ``Refactor: Consolidate import textwrap in providers (#34220)`` +================================================================================================= =========== =============================================================== + +3.7.5 +..... + +Latest change: 2023-09-08 + +================================================================================================= =========== ============================================================================= +Commit Committed Subject +================================================================================================= =========== ============================================================================= +`21990ed894 `_ 2023-09-08 ``Prepare docs for 09 2023 - 1st wave of Providers (#34201)`` +`3d27504a62 `_ 2023-09-04 ``Cleanup Docker operator logging (#33914)`` +`55976af32e `_ 2023-08-31 ``Replace sequence concatination by unpacking in Airflow providers (#33933)`` +`b11525702c `_ 2023-08-26 ``Use literal dict instead of calling dict() in providers (#33761)`` +`e16e9f3439 `_ 2023-08-26 ``Replace type func by isinstance in DockerOperator (#33759)`` +================================================================================================= =========== ============================================================================= + +3.7.4 +..... + +Latest change: 2023-08-26 + +================================================================================================= =========== ======================================================================= +Commit Committed Subject +================================================================================================= =========== ======================================================================= +`c077d19060 `_ 2023-08-26 ``Prepare docs for Aug 2023 3rd wave of Providers (#33730)`` +`2dbb963324 `_ 2023-08-24 ``Refactor: Improve detection of duplicates and list sorting (#33675)`` +`1cdd82391e `_ 2023-08-21 ``Simplify conditions on len() in other providers (#33569)`` +`abef61ff3d `_ 2023-08-20 ``Replace repr() with proper formatting (#33520)`` +================================================================================================= =========== ======================================================================= + +3.7.3 +..... + +Latest change: 2023-08-11 + +================================================================================================= =========== ============================================================ +Commit Committed Subject +================================================================================================= =========== ============================================================ +`b5a4d36383 `_ 2023-08-11 ``Prepare docs for Aug 2023 2nd wave of Providers (#33291)`` +`55424d41b4 `_ 2023-08-08 ``Refactor: Simplify code in providers/docker (#33232)`` +================================================================================================= =========== ============================================================ + +3.7.2 +..... + +Latest change: 2023-08-05 + +================================================================================================= =========== ======================================================================= +Commit Committed Subject +================================================================================================= =========== ======================================================================= +`60677b0ba3 `_ 2023-08-05 ``Prepare docs for Aug 2023 1st wave of Providers (#33128)`` +`e3d82c6be0 `_ 2023-08-04 ``Get rid of Python2 numeric relics (#33050)`` +`225e3041d2 `_ 2023-07-06 ``Prepare docs for July 2023 wave of Providers (RC2) (#32381)`` +`3878fe6fab `_ 2023-07-05 ``Remove spurious headers for provider changelogs (#32373)`` +`cb4927a018 `_ 2023-07-05 ``Prepare docs for July 2023 wave of Providers (#32298)`` +`d1aa509bbd `_ 2023-06-28 ``D205 Support - Providers: Databricks to Github (inclusive) (#32243)`` +`09d4718d3a `_ 2023-06-27 ``Improve provider documentation and README structure (#32125)`` +================================================================================================= =========== ======================================================================= + +3.7.1 +..... + +Latest change: 2023-06-20 + +================================================================================================= =========== ============================================================= +Commit Committed Subject +================================================================================================= =========== ============================================================= +`79bcc2e668 `_ 2023-06-20 ``Prepare RC1 docs for June 2023 wave of Providers (#32001)`` +`8b146152d6 `_ 2023-06-20 ``Add note about dropping Python 3.7 for providers (#32015)`` +`07ea574fed `_ 2023-06-07 ``Add D400 pydocstyle check (#31742)`` +`9276310a43 `_ 2023-06-05 ``Improve docstrings in providers (#31681)`` +`a59076eaee `_ 2023-06-02 ``Add D400 pydocstyle check - Providers (#31427)`` +`9fa75aaf7a `_ 2023-05-29 ``Remove Python 3.7 support (#30963)`` +================================================================================================= =========== ============================================================= + +3.7.0 +..... + +Latest change: 2023-05-19 + +================================================================================================= =========== ====================================================================================== +Commit Committed Subject +================================================================================================= =========== ====================================================================================== +`45548b9451 `_ 2023-05-19 ``Prepare RC2 docs for May 2023 wave of Providers (#31416)`` +`abea189022 `_ 2023-05-18 ``Use '__version__' in providers not 'version' (#31393)`` +`f5aed58d9f `_ 2023-05-18 ``Fixing circular import error in providers caused by airflow version check (#31379)`` +`d8c0e3009a `_ 2023-05-17 ``adding docker port expose capability (#30730)`` +`d9ff55cf6d `_ 2023-05-16 ``Prepare docs for May 2023 wave of Providers (#31252)`` +`0a30706aa7 `_ 2023-05-03 ``Use 'AirflowProviderDeprecationWarning' in providers (#30975)`` +`eef5bc7f16 `_ 2023-05-03 ``Add full automation for min Airflow version for providers (#30994)`` +`a7eb32a5b2 `_ 2023-04-30 ``Bump minimum Airflow version in providers (#30917)`` +================================================================================================= =========== ====================================================================================== + +3.6.0 +..... + +Latest change: 2023-04-21 + +================================================================================================= =========== ===================================================================================================================== +Commit Committed Subject +================================================================================================= =========== ===================================================================================================================== +`e46ce78b66 `_ 2023-04-21 ``Prepare docs for adhoc release of providers (#30787)`` +`afdc95435b `_ 2023-04-21 ``Add multiple exit code handling in skip logic for 'DockerOperator' and 'KubernetesPodOperator' (#30769)`` +`99a3bf2318 `_ 2023-04-19 ``Deprecate 'skip_exit_code' in 'DockerOperator' and 'KubernetesPodOperator' (#30733)`` +`c1a685f752 `_ 2023-04-14 ``In 'DockerOperator', adding an attribute 'tls_verify' to choose whether to validate certificate (#30309) (#30310)`` +`d23a3bbed8 `_ 2023-04-04 ``Add mechanism to suspend providers (#30422)`` +`b8ab594130 `_ 2023-03-15 ``Remove "boilerplate" from all taskflow decorators (#30118)`` +`dba390e323 `_ 2023-02-22 ``Fix and augment 'check-for-inclusive-language' CI check (#29549)`` +================================================================================================= =========== ===================================================================================================================== + +3.5.1 +..... + +Latest change: 2023-02-18 + +================================================================================================= =========== ================================================================ +Commit Committed Subject +================================================================================================= =========== ================================================================ +`470fdaea27 `_ 2023-02-18 ``Prepare docs for 02 2023 midmonth wave of Providers (#29589)`` +`7bd87e75de `_ 2023-02-17 ``fix template_fields in the decorator 'task.docker' (#29586)`` +================================================================================================= =========== ================================================================ + +3.5.0 +..... + +Latest change: 2023-01-23 + +================================================================================================= =========== ============================================================================= +Commit Committed Subject +================================================================================================= =========== ============================================================================= +`dd6cef7889 `_ 2023-01-23 ``Prepare ad hoc provider release for Docker, Cassandra, Papermill (#28999)`` +`3a7bfce601 `_ 2023-01-18 ``Skip DockerOperator task when it returns a provided exit code (#28996)`` +`cd637c223f `_ 2023-01-16 ``Fix label name for 'reauth' field in Docker Connection (#28974)`` +`911b708ffd `_ 2023-01-14 ``Prepare docs for Jan 2023 mid-month wave of Providers (#28929)`` +`af2c22a00a `_ 2023-01-03 ``Add correct widgets in Docker Hook (#28700)`` +`57a889de35 `_ 2023-01-03 ``Make docker operators always use 'DockerHook' for API calls (#28363)`` +================================================================================================= =========== ============================================================================= + +3.4.0 +..... + +Latest change: 2023-01-02 + +================================================================================================= =========== ======================================================================= +Commit Committed Subject +================================================================================================= =========== ======================================================================= +`5246c009c5 `_ 2023-01-02 ``Prepare docs for Jan 2023 wave of Providers (#28651)`` +`ea08989db1 `_ 2022-12-30 ``Move min airflow version down for Docker Provider to 2.3.0 (#28648)`` +`1aa3da543a `_ 2022-11-29 ``add hostname argument to DockerOperator (#27822)`` +================================================================================================= =========== ======================================================================= + +3.3.0 +..... + +Latest change: 2022-11-15 + +================================================================================================= =========== ========================================================================= +Commit Committed Subject +================================================================================================= =========== ========================================================================= +`12c3c39d1a `_ 2022-11-15 ``pRepare docs for November 2022 wave of Providers (#27613)`` +`a504a8267d `_ 2022-11-10 ``Add ipc_mode for DockerOperator (#27553)`` +`1add2f7c41 `_ 2022-10-28 ``Add env-file parameter to Docker Operator (#26951)`` +`9ab1a6a3e7 `_ 2022-10-27 ``Update old style typing (#26872)`` +`2a34dc9e84 `_ 2022-10-23 ``Enable string normalization in python formatting - providers (#27205)`` +================================================================================================= =========== ========================================================================= + +3.2.0 +..... + +Latest change: 2022-09-28 + +================================================================================================= =========== ==================================================================================== +Commit Committed Subject +================================================================================================= =========== ==================================================================================== +`f8db64c35c `_ 2022-09-28 ``Update docs for September Provider's release (#26731)`` +`19d6f54704 `_ 2022-09-27 ``Add logging options to docker operator (#26653)`` +`06acf40a43 `_ 2022-09-13 ``Apply PEP-563 (Postponed Evaluation of Annotations) to non-core airflow (#26289)`` +`55928b9da6 `_ 2022-09-06 ``Implement ExternalPythonOperator (#25780)`` +`762235fd77 `_ 2022-08-19 ``Add pre-commit hook for custom_operator_name (#25786)`` +================================================================================================= =========== ==================================================================================== + +3.1.0 +..... + +Latest change: 2022-07-13 + +================================================================================================= =========== =================================================================================== +Commit Committed Subject +================================================================================================= =========== =================================================================================== +`d2459a241b `_ 2022-07-13 ``Add documentation for July 2022 Provider's release (#25030)`` +`cc6a44bdc3 `_ 2022-07-05 ``'DockerOperator' fix cli.logs giving character array instead of string (#24726)`` +`237d2225d6 `_ 2022-07-02 ``Force-remove container after DockerOperator execution (#23160)`` +`0de31bd73a `_ 2022-06-29 ``Move provider dependencies to inside provider folders (#24672)`` +`510a6bab45 `_ 2022-06-28 ``Remove 'hook-class-names' from provider.yaml (#24702)`` +`40f08900f2 `_ 2022-06-28 ``Clean up task decorator type hints and docstrings (#24667)`` +================================================================================================= =========== =================================================================================== + +3.0.0 +..... + +Latest change: 2022-06-09 + +================================================================================================= =========== ================================================================================== +Commit Committed Subject +================================================================================================= =========== ================================================================================== +`dcdcf3a2b8 `_ 2022-06-09 ``Update release notes for RC2 release of Providers for May 2022 (#24307)`` +`717a7588bc `_ 2022-06-07 ``Update package description to remove double min-airflow specification (#24292)`` +`aeabe994b3 `_ 2022-06-07 ``Prepare docs for May 2022 provider's release (#24231)`` +`06856337a5 `_ 2022-06-06 ``docker new system test (#23167)`` +`027b707d21 `_ 2022-06-05 ``Add explanatory note for contributors about updating Changelog (#24229)`` +`97b443aa59 `_ 2022-05-28 ``Remove 'xcom_push' from 'DockerOperator' (#23981)`` +================================================================================================= =========== ================================================================================== + +2.7.0 +..... + +Latest change: 2022-05-12 + +================================================================================================= =========== =========================================================================== +Commit Committed Subject +================================================================================================= =========== =========================================================================== +`75c60923e0 `_ 2022-05-12 ``Prepare provider documentation 2022.05.11 (#23631)`` +`24bb9f3a6f `_ 2022-05-09 ``Add 'device_requests' parameter to 'DockerOperator' (#23554)`` +`8b6b0848a3 `_ 2022-04-23 ``Use new Breese for building, pulling and verifying the images. (#23104)`` +`6933022e94 `_ 2022-04-10 ``Fix new MyPy errors in main (#22884)`` +================================================================================================= =========== =========================================================================== + +2.6.0 +..... + +Latest change: 2022-04-07 + +================================================================================================= =========== ====================================================== +Commit Committed Subject +================================================================================================= =========== ====================================================== +`56ab82ed7a `_ 2022-04-07 ``Prepare mid-April provider documentation. (#22819)`` +`e1a42c4fc8 `_ 2022-03-28 ``Add timeout parameter to 'DockerOperator' (#22502)`` +================================================================================================= =========== ====================================================== + +2.5.2 +..... + +Latest change: 2022-03-22 + +================================================================================================= =========== ================================================================================== +Commit Committed Subject +================================================================================================= =========== ================================================================================== +`d7dbfb7e26 `_ 2022-03-22 ``Add documentation for bugfix release of Providers (#22383)`` +`31096cc883 `_ 2022-03-21 ``Correct 'multiple_outputs' param descriptions mentioning lists/tuples (#22371)`` +================================================================================================= =========== ================================================================================== + +2.5.1 +..... + +Latest change: 2022-03-14 + +================================================================================================= =========== ============================================================================== +Commit Committed Subject +================================================================================================= =========== ============================================================================== +`16adc035b1 `_ 2022-03-14 ``Add documentation for Classifier release for March 2022 (#22226)`` +`03cdfe701b `_ 2022-03-11 ``Avoid trying to kill container when it did not succeed for Docker (#22145)`` +================================================================================================= =========== ============================================================================== + +2.5.0 +..... + +Latest change: 2022-03-07 + +================================================================================================= =========== ========================================================================================= +Commit Committed Subject +================================================================================================= =========== ========================================================================================= +`f5b96315fe `_ 2022-03-07 ``Add documentation for Feb Providers release (#22056)`` +`188ac51996 `_ 2022-03-07 ``Change default python executable to python3 for docker decorator (#21973)`` +`7acc190a23 `_ 2022-03-06 ``added docker network_mode options (#21986)`` +`3035d3ab16 `_ 2022-03-01 ``Switch to Debian 11 (bullseye) as base for our dockerfiles (#21378) (#21875)`` +`8299adec91 `_ 2022-02-28 ``Revert "Switch to Debian 11 (bullseye) as base for our dockerfiles (#21378)" (#21874)`` +`5d89dea568 `_ 2022-02-28 ``Switch to Debian 11 (bullseye) as base for our dockerfiles (#21378)`` +================================================================================================= =========== ========================================================================================= + +2.4.1 +..... + +Latest change: 2022-02-08 + +================================================================================================= =========== ========================================================================== +Commit Committed Subject +================================================================================================= =========== ========================================================================== +`d94fa37830 `_ 2022-02-08 ``Fixed changelog for January 2022 (delayed) provider's release (#21439)`` +`63fa257231 `_ 2022-02-08 ``Fix docker behaviour with byte lines returned (#21429)`` +`6c3a67d4fc `_ 2022-02-05 ``Add documentation for January 2021 providers release (#21257)`` +`2f4a3d4d40 `_ 2022-02-01 ``Fixes Docker xcom functionality (#21175)`` +`cb73053211 `_ 2022-01-27 ``Add optional features in providers. (#21074)`` +`602abe8394 `_ 2022-01-20 ``Remove ':type' lines now sphinx-autoapi supports typehints (#20951)`` +`2c840670c0 `_ 2022-01-18 ``Rewrite the task decorator as a composition (#20868)`` +================================================================================================= =========== ========================================================================== + +2.4.0 +..... + +Latest change: 2021-12-31 + +================================================================================================= =========== ========================================================================= +Commit Committed Subject +================================================================================================= =========== ========================================================================= +`f77417eb0d `_ 2021-12-31 ``Fix K8S changelog to be PyPI-compatible (#20614)`` +`97496ba2b4 `_ 2021-12-31 ``Update documentation for provider December 2021 release (#20523)`` +`83f8e178ba `_ 2021-12-31 ``Even more typing in operators (template_fields/ext) (#20608)`` +`d56e7b56bb `_ 2021-12-30 ``Fix template_fields type to have MyPy friendly Sequence type (#20571)`` +`a0821235fb `_ 2021-12-30 ``Use typed Context EVERYWHERE (#20565)`` +`59e4b78daa `_ 2021-12-29 ``Fix MyPy errors for Airflow decorators (#20034)`` +`b20e6d3f06 `_ 2021-12-14 ``Fix mypy docker provider (#20235)`` +`1924e29fa2 `_ 2021-12-03 ``Allow DockerOperator's image to be templated (#19997)`` +`853576d901 `_ 2021-11-30 ``Update documentation for November 2021 provider's release (#19882)`` +`aa2cb5545f `_ 2021-11-12 ``Remove remaining 'pylint: disable' comments (#19541)`` +================================================================================================= =========== ========================================================================= + +2.3.0 +..... + +Latest change: 2021-10-29 + +================================================================================================= =========== ================================================================= +Commit Committed Subject +================================================================================================= =========== ================================================================= +`d9567eb106 `_ 2021-10-29 ``Prepare documentation for October Provider's release (#19321)`` +`45c70f397a `_ 2021-10-29 ``Add support of placement in the DockerSwarmOperator (#18990)`` +`f5ad26dcdd `_ 2021-10-21 ``Fixup string concatenations (#19099)`` +`3154935138 `_ 2021-10-12 ``Remove the docker timeout workaround (#18872)`` +`43f334f4bd `_ 2021-10-06 ``Move docker decorator example dag to docker provider (#18739)`` +================================================================================================= =========== ================================================================= + +2.2.0 +..... + +Latest change: 2021-09-30 + +================================================================================================= =========== ====================================================================================== +Commit Committed Subject +================================================================================================= =========== ====================================================================================== +`840ea3efb9 `_ 2021-09-30 ``Update documentation for September providers release (#18613)`` +`ef037e7021 `_ 2021-09-29 ``Static start_date and default arg cleanup for misc. provider example DAGs (#18597)`` +`2a3cbabbf8 `_ 2021-09-23 ``Cope with '@task.docker' decorated function not returning anything (#18463)`` +`a9772cf287 `_ 2021-09-20 ``Add a Docker Taskflow decorator (#15330)`` +================================================================================================= =========== ====================================================================================== + +2.1.1 +..... + +Latest change: 2021-08-30 + +================================================================================================= =========== ============================================================================================ +Commit Committed Subject +================================================================================================= =========== ============================================================================================ +`0a68588479 `_ 2021-08-30 ``Add August 2021 Provider's documentation (#17890)`` +`be75dcd39c `_ 2021-08-23 ``Update description about the new ''connection-types'' provider meta-data`` +`76ed2a49c6 `_ 2021-08-19 ``Import Hooks lazily individually in providers manager (#17682)`` +`4da4c186ec `_ 2021-08-19 ``Add support for configs, secrets, networks and replicas for DockerSwarmOperator (#17474)`` +================================================================================================= =========== ============================================================================================ + +2.1.0 +..... + +Latest change: 2021-07-26 + +================================================================================================= =========== =============================================================================== +Commit Committed Subject +================================================================================================= =========== =============================================================================== +`87f408b1e7 `_ 2021-07-26 ``Prepares docs for Rc2 release of July providers (#17116)`` +`b10ed95a2a `_ 2021-07-26 ``Updating Docker example DAGs to use XComArgs (#16871)`` +`cd3307ff21 `_ 2021-07-26 ``fix string encoding when using xcom / json (#13536)`` +`24d02bfa84 `_ 2021-07-19 ``Prepares documentation for RC2 release of Docker Provider (#17066)`` +`b076ac5925 `_ 2021-07-18 ``[FIX] Docker provider - retry docker in docker (#17061)`` +`d02ded65ea `_ 2021-07-15 ``Fixed wrongly escaped characters in amazon's changelog (#17020)`` +`b916b75079 `_ 2021-07-15 ``Prepare documentation for July release of providers. (#17015)`` +`bc004151ed `_ 2021-07-15 ``Adds option to disable mounting temporary folder in DockerOperator (#16932)`` +`866a601b76 `_ 2021-06-28 ``Removes pylint from our toolchain (#16682)`` +================================================================================================= =========== =============================================================================== + +2.0.0 +..... + +Latest change: 2021-06-18 + +================================================================================================= =========== ================================================================= +Commit Committed Subject +================================================================================================= =========== ================================================================= +`bbc627a3da `_ 2021-06-18 ``Prepares documentation for rc2 release of Providers (#16501)`` +`cbf8001d76 `_ 2021-06-16 ``Synchronizes updated changelog after buggfix release (#16464)`` +`8a9c337838 `_ 2021-06-15 ``Remove class references in changelogs (#16454)`` +`1fba5402bb `_ 2021-06-15 ``More documentation update for June providers release (#16405)`` +`9c94b72d44 `_ 2021-06-07 ``Updated documentation for June 2021 provider release (#16294)`` +`12995cfb9a `_ 2021-05-17 ``Replace DockerOperator's 'volumes' arg for 'mounts' (#15843)`` +`37681bca00 `_ 2021-05-07 ``Auto-apply apply_default decorator (#15667)`` +================================================================================================= =========== ================================================================= + +1.2.0 +..... + +Latest change: 2021-05-01 + +================================================================================================= =========== ====================================================================== +Commit Committed Subject +================================================================================================= =========== ====================================================================== +`807ad32ce5 `_ 2021-05-01 ``Prepares provider release after PIP 21 compatibility (#15576)`` +`5b2fe0e740 `_ 2021-04-27 ``Add Connection Documentation for Popular Providers (#15393)`` +`594d93d3b0 `_ 2021-04-09 ``Entrypoint support in docker operator (#14642)`` +`566127308f `_ 2021-04-08 ``Add PythonVirtualenvDecorator to Taskflow API (#14761)`` +`ab47717699 `_ 2021-04-07 ``Support all terminus task states in Docker Swarm Operator (#14960)`` +================================================================================================= =========== ====================================================================== + +1.1.0 +..... + +Latest change: 2021-04-06 + +================================================================================================= =========== ============================================================================= +Commit Committed Subject +================================================================================================= =========== ============================================================================= +`042be2e4e0 `_ 2021-04-06 ``Updated documentation for provider packages before April release (#15236)`` +`68e4c4dcb0 `_ 2021-03-20 ``Remove Backport Providers (#14886)`` +`3064bf0442 `_ 2021-03-02 ``Add privileged option in DockerOperator (#14157)`` +================================================================================================= =========== ============================================================================= + +1.0.2 +..... + +Latest change: 2021-02-27 + +================================================================================================= =========== ======================================================================= +Commit Committed Subject +================================================================================================= =========== ======================================================================= +`589d6dec92 `_ 2021-02-27 ``Prepare to release the next wave of providers: (#14487)`` +`10343ec29f `_ 2021-02-05 ``Corrections in docs and tools after releasing provider RCs (#14082)`` +================================================================================================= =========== ======================================================================= + +1.0.1 +..... + +Latest change: 2021-02-04 + +================================================================================================= =========== ============================================================================== +Commit Committed Subject +================================================================================================= =========== ============================================================================== +`88bdcfa0df `_ 2021-02-04 ``Prepare to release a new wave of providers. (#14013)`` +`ac2f72c98d `_ 2021-02-01 ``Implement provider versioning tools (#13767)`` +`ba54afe58b `_ 2021-01-31 ``Remove failed DockerOperator tasks with auto_remove=True (#13532) (#13993)`` +`25d68a7a9e `_ 2021-01-30 ``Fix error on DockerSwarmOperator with auto_remove True (#13532) (#13852)`` +`a9ac2b040b `_ 2021-01-23 ``Switch to f-strings using flynt. (#13732)`` +`3fd5ef3555 `_ 2021-01-21 ``Add missing logos for integrations (#13717)`` +`295d66f914 `_ 2020-12-30 ``Fix Grammar in PIP warning (#13380)`` +`6cf76d7ac0 `_ 2020-12-18 ``Fix typo in pip upgrade command :( (#13148)`` +================================================================================================= =========== ============================================================================== + +1.0.0 +..... + +Latest change: 2020-12-09 + +================================================================================================= =========== ====================================================================================================================================================================== +Commit Committed Subject +================================================================================================= =========== ====================================================================================================================================================================== +`32971a1a2d `_ 2020-12-09 ``Updates providers versions to 1.0.0 (#12955)`` +`b40dffa085 `_ 2020-12-08 ``Rename remaing modules to match AIP-21 (#12917)`` +`9b39f24780 `_ 2020-12-08 ``Add support for dynamic connection form fields per provider (#12558)`` +`6b339c70c4 `_ 2020-12-03 ``Avoid log spam & have more meaningful log when pull image in DockerOperator (#12763)`` +`2037303eef `_ 2020-11-29 ``Adds support for Connection/Hook discovery from providers (#12466)`` +`c34ef853c8 `_ 2020-11-20 ``Separate out documentation building per provider (#12444)`` +`0080354502 `_ 2020-11-18 ``Update provider READMEs for 1.0.0b2 batch release (#12449)`` +`ae7cb4a1e2 `_ 2020-11-17 ``Update wrong commit hash in backport provider changes (#12390)`` +`6889a333cf `_ 2020-11-15 ``Improvements for operators and hooks ref docs (#12366)`` +`7825e8f590 `_ 2020-11-13 ``Docs installation improvements (#12304)`` +`85a18e13d9 `_ 2020-11-09 ``Point at pypi project pages for cross-dependency of provider packages (#12212)`` +`59eb5de78c `_ 2020-11-09 ``Update provider READMEs for up-coming 1.0.0beta1 releases (#12206)`` +`b2a28d1590 `_ 2020-11-09 ``Moves provider packages scripts to dev (#12082)`` +`4e8f9cc8d0 `_ 2020-11-03 ``Enable Black - Python Auto Formmatter (#9550)`` +`8c42cf1b00 `_ 2020-11-03 ``Use PyUpgrade to use Python 3.6 features (#11447)`` +`0314a3a218 `_ 2020-11-01 ``Allow airflow.providers to be installed in multiple python folders (#10806)`` +`5a439e84eb `_ 2020-10-26 ``Prepare providers release 0.0.2a1 (#11855)`` +`872b1566a1 `_ 2020-10-25 ``Generated backport providers readmes/setup for 2020.10.29 (#11826)`` +`349b0811c3 `_ 2020-10-20 ``Add D200 pydocstyle check (#11688)`` +`16e7129719 `_ 2020-10-13 ``Added support for provider packages for Airflow 2.0 (#11487)`` +`0a0e1af800 `_ 2020-10-03 ``Fix Broken Markdown links in Providers README TOC (#11249)`` +`ca4238eb4d `_ 2020-10-02 ``Fixed month in backport packages to October (#11242)`` +`5220e4c384 `_ 2020-10-02 ``Prepare Backport release 2020.09.07 (#11238)`` +`e3f96ce7a8 `_ 2020-09-24 ``Fix incorrect Usage of Optional[bool] (#11138)`` +`2e56ee7b22 `_ 2020-08-27 ``DockerOperator extra_hosts argument support added (#10546)`` +`fdd9b6f65b `_ 2020-08-25 ``Enable Black on Providers Packages (#10543)`` +`3696c34c28 `_ 2020-08-24 ``Fix typo in the word "release" (#10528)`` +`2f2d8dbfaf `_ 2020-08-25 ``Remove all "noinspection" comments native to IntelliJ (#10525)`` +`ee7ca128a1 `_ 2020-08-22 ``Fix broken Markdown refernces in Providers README (#10483)`` +`cdec301254 `_ 2020-08-07 ``Add correct signature to all operators and sensors (#10205)`` +`d79e7221de `_ 2020-08-06 ``Type annotation for Docker operator (#9733)`` +`aeea71274d `_ 2020-08-02 ``Remove 'args' parameter from provider operator constructors (#10097)`` +`7d24b088cd `_ 2020-07-25 ``Stop using start_date in default_args in example_dags (2) (#9985)`` +`c2db0dfeb1 `_ 2020-07-22 ``More strict rules in mypy (#9705) (#9906)`` +`5d61580c57 `_ 2020-06-21 ``Enable 'Public function Missing Docstrings' PyDocStyle Check (#9463)`` +`d0e7db4024 `_ 2020-06-19 ``Fixed release number for fresh release (#9408)`` +`12af6a0800 `_ 2020-06-19 ``Final cleanup for 2020.6.23rc1 release preparation (#9404)`` +`c7e5bce57f `_ 2020-06-19 ``Prepare backport release candidate for 2020.6.23rc1 (#9370)`` +`f6bd817a3a `_ 2020-06-16 ``Introduce 'transfers' packages (#9320)`` +`4a74cf1a34 `_ 2020-06-08 ``Fix xcom in DockerOperator when auto_remove is used (#9173)`` +`b4b84a1933 `_ 2020-06-07 ``Add kernel capabilities in DockerOperator(#9142)`` +`0b0e4f7a4c `_ 2020-05-26 ``Preparing for RC3 relase of backports (#9026)`` +`00642a46d0 `_ 2020-05-26 ``Fixed name of 20 remaining wrongly named operators. (#8994)`` +`375d1ca229 `_ 2020-05-19 ``Release candidate 2 for backport packages 2020.05.20 (#8898)`` +`12c5e5d8ae `_ 2020-05-17 ``Prepare release candidate for backport packages (#8891)`` +`f3521fb0e3 `_ 2020-05-16 ``Regenerate readme files for backport package release (#8886)`` +`92585ca4cb `_ 2020-05-15 ``Added automated release notes generation for backport operators (#8807)`` +`511d98e30d `_ 2020-05-01 ``[AIRFLOW-4363] Fix JSON encoding error (#8287)`` +`0a1de16682 `_ 2020-04-27 ``Stop DockerSwarmOperator from pulling Docker images (#8533)`` +`3237c7e31d `_ 2020-04-26 ``[AIRFLOW-5850] Capture task logs in DockerSwarmOperator (#6552)`` +`9626b03d19 `_ 2020-03-30 ``[AIRFLOW-6574] Adding private_environment to docker operator. (#7671)`` +`733d3d3c32 `_ 2020-03-25 ``[AIRFLOW-4363] Fix JSON encoding error (#7628)`` +`4bde99f132 `_ 2020-03-23 ``Make airflow/providers pylint compatible (#7802)`` +`cd546b664f `_ 2020-03-23 ``Add missing call to Super class in 'cncf' & 'docker' providers (#7825)`` +`3320e432a1 `_ 2020-02-24 ``[AIRFLOW-6817] Lazy-load 'airflow.DAG' to keep user-facing API untouched (#7517)`` +`4d03e33c11 `_ 2020-02-22 ``[AIRFLOW-6817] remove imports from 'airflow/__init__.py', replaced implicit imports with explicit imports, added entry to 'UPDATING.MD' - squashed/rebased (#7456)`` +`dbcd3d8787 `_ 2020-02-18 ``[AIRFLOW-6804] Add the basic test for all example DAGs (#7419)`` +`9cbd7de6d1 `_ 2020-02-18 ``[AIRFLOW-6792] Remove _operator/_hook/_sensor in providers package and add tests (#7412)`` +`97a429f9d0 `_ 2020-02-02 ``[AIRFLOW-6714] Remove magic comments about UTF-8 (#7338)`` +`83c037873f `_ 2020-01-30 ``[AIRFLOW-6674] Move example_dags in accordance with AIP-21 (#7287)`` +`059eda05f8 `_ 2020-01-21 ``[AIRFLOW-6610] Move software classes to providers package (#7231)`` +================================================================================================= =========== ====================================================================================================================================================================== diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/connections/docker.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/connections/docker.rst.txt new file mode 100644 index 00000000000..ce733b4e866 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/connections/docker.rst.txt @@ -0,0 +1,70 @@ +.. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + .. http://www.apache.org/licenses/LICENSE-2.0 + + .. Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + + + +.. _howto/connection:docker: + +Docker Connection +================= + +The Docker connection type enables connection to the Docker registry. + +Authenticating to Docker +------------------------ + +Authenticate to Docker by using the login information for Docker registry. +More information on `Docker authentication here +`_. + +Default Connection IDs +---------------------- + +Some hooks and operators related to Docker use ``docker_default`` by default. + +Configuring the Connection +-------------------------- + +Login + Specify the Docker registry username. + +Password + Specify the Docker registry plaintext password. + +Host + Specify the URL to the Docker registry. Ex: ``https://index.docker.io/v1`` + +Port (optional) + Specify the port if not specified in host. + +Extra + Specify the extra parameters (as json dictionary) that can be used in Azure connection. + The following parameters are all optional: + + * ``email``: Specify the email used for the registry account. + * ``reauth``: Specify whether refresh existing authentication on the Docker server. (bool) + +When specifying the connection in environment variable you should specify +it using URI syntax. + +Note that all components of the URI should be URL-encoded. + +For example: + +.. code-block:: bash + + export AIRFLOW_CONN_DOCKER_DEFAULT='docker://username:password@https%3A%2F%2Findex.docker.io%2Fv1:80?email=myemail%40my.com&reauth=False' diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/decorators/docker.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/decorators/docker.rst.txt new file mode 100644 index 00000000000..1ef2af81d7a --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/decorators/docker.rst.txt @@ -0,0 +1,173 @@ +.. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + .. http://www.apache.org/licenses/LICENSE-2.0 + + .. Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + + + +.. _howto/decorator:docker: + +Task Docker Decorator +===================== + +Python callable wrapped within the ``@task.docker`` decorator with args are executed within +the docker container. + +Parameters +---------- + +The following parameters are supported in Docker Task decorator. + +multiple_outputs + If set, function return value will be unrolled to multiple XCom values. + Dict will unroll to XCom values with keys as XCom keys. Defaults to False. +use_dill + Whether to use dill or pickle for serialization +python_command + Python command for executing functions, Default python3 +image + Docker image from which to create the container. + If image tag is omitted, "latest" will be used. +api_version + Remote API version. Set to ``auto`` to automatically detect the server's version. +container_name + Name of the container. Optional (templated) +cpus + Number of CPUs to assign to the container. This value gets multiplied with 1024. +docker_url + URL of the host running the docker daemon. + Default is unix://var/run/docker.sock +environment + Environment variables to set in the container. (templated) +private_environment + Private environment variables to set in the container. + These are not templated, and hidden from the website. +env_file + Relative path to the ``.env`` file with environment variables to set in the container. + Overridden by variables in the environment parameter. +force_pull + Pull the docker image on every run. Default is False. +mem_limit + Maximum amount of memory the container can use. + Either a float value, which represents the limit in bytes, + or a string like ``128m`` or ``1g``. +host_tmp_dir + Specify the location of the temporary directory on the host which will + be mapped to tmp_dir. If not provided defaults to using the standard system temp directory. +network_mode + Network mode for the container. It can be one of the following + + - ``"bridge"``: Create new network stack for the container with default docker bridge network + - ``"none"``: No networking for this container + - ``"container:"`` or ``"container:"``: Use the network stack of another container specified via or + - ``"host"``: Use the host network stack. Incompatible with **port_bindings** + - ``""`` or ``""``: Connects the container to user created network (using ``docker network create`` command) +tls_ca_cert + Path to a PEM-encoded certificate authority to secure the docker connection. +tls_client_cert + Path to the PEM-encoded certificate used to authenticate docker client. +tls_client_key + Path to the PEM-encoded key used to authenticate docker client. +tls_verify + Set ``True`` to verify the validity of the provided certificate. +tls_hostname + Hostname to match against the docker server certificate or False to disable the check. +tls_ssl_version + Version of SSL to use when communicating with docker daemon. +mount_tmp_dir + Specify whether the temporary directory should be bind-mounted from the host to the container. +tmp_dir + Mount point inside the container to + a temporary directory created on the host by the operator. + The path is also made available via the environment variable + ``AIRFLOW_TMP_DIR`` inside the container. +user + Default user inside the docker container. +mounts + List of mounts to mount into the container, e.g. + ``['/host/path:/container/path', '/host/path2:/container/path2:ro']``. +working_dir + Working directory to set on the container (equivalent to the -w switch the docker client) +entrypoint + Overwrite the default ENTRYPOINT of the image +xcom_all + Push all the stdout or just the last line. The default is False (last line). +docker_conn_id + ID of the Airflow connection to use +dns + Docker custom DNS servers +dns_search + Docker custom DNS search domain +auto_remove + Enable removal of the container when the container's process exits. Possible values + + - ``never``: (default) do not remove container + - ``success``: remove on success + - ``force``: always remove container +shm_size + Size of ``/dev/shm`` in bytes. The size must be greater than 0. + If omitted uses system default. +tty + Allocate pseudo-TTY to the container + This needs to be set see logs of the Docker container. +hostname + Optional hostname for the container. +privileged + Give extended privileges to this container. +cap_add + Include container capabilities +extra_hosts + Additional hostnames to resolve inside the container, as a mapping of hostname to IP address. +retrieve_output + Should this docker image consistently attempt to pull from and output + file before manually shutting down the image. Useful for cases where users want a pickle serialized + output that is not posted to logs +retrieve_output_path + path for output file that will be retrieved and passed to xcom +timeout + Default timeout for API calls, in seconds. +device_requests + Expose host resources such as GPUs to the container. +log_opts_max_size + The maximum size of the log before it is rolled. + A positive integer plus a modifier representing the unit of measure (k, m, or g). + Eg: 10m or 1g Defaults to -1 (unlimited). +log_opts_max_file + The maximum number of log files that can be present. + If rolling the logs creates excess files, the oldest file is removed. + Only effective when max-size is also set. A positive integer. Defaults to 1. +ipc_mode + Set the IPC mode for the container. +skip_on_exit_code + If task exits with this exit code, leave the task + in ``skipped`` state (default: None). If set to ``None``, any non-zero + exit code will be treated as a failure. +port_bindings + Publish a container's port(s) to the host. It is a + dictionary of value where the key indicates the port to open inside the container + and value indicates the host port that binds to the container port. + Incompatible with ``"host"`` in ``network_mode``. +ulimits + List of ulimit options to set for the container. + Each item should be a ``docker.types.Ulimit`` instance. + + +Usage Example +------------- + +.. exampleinclude:: /../../tests/system/providers/docker/example_taskflow_api_docker_virtualenv.py + :language: python + :start-after: [START transform_docker] + :end-before: [END transform_docker] diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/index.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/index.rst.txt new file mode 100644 index 00000000000..3d5ffc5861d --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/index.rst.txt @@ -0,0 +1,99 @@ + + .. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + .. http://www.apache.org/licenses/LICENSE-2.0 + + .. Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +``apache-airflow-providers-docker`` +=================================== + + +.. toctree:: + :hidden: + :maxdepth: 1 + :caption: Basics + + Home + Changelog + Security + +.. toctree:: + :hidden: + :maxdepth: 1 + :caption: References + + Connection types + Python API <_api/airflow/providers/docker/index> + Docker Task Decorator +.. toctree:: + :hidden: + :maxdepth: 1 + :caption: System tests + + System Tests <_api/tests/system/providers/docker/index> + +.. toctree:: + :hidden: + :maxdepth: 1 + :caption: Resources + + Example DAGs + PyPI Repository + Installing from sources + +.. THE REMAINDER OF THE FILE IS AUTOMATICALLY GENERATED. IT WILL BE OVERWRITTEN AT RELEASE TIME! + + +.. toctree:: + :hidden: + :maxdepth: 1 + :caption: Commits + + Detailed list of commits + + +Package apache-airflow-providers-docker +------------------------------------------------------ + +`Docker `__ + + +Release: 3.9.0 + +Provider package +---------------- + +This is a provider package for ``docker`` provider. All classes for this provider package +are in ``airflow.providers.docker`` python package. + +Installation +------------ + +You can install this package on top of an existing Airflow 2 installation (see ``Requirements`` below) +for the minimum Airflow version supported) via +``pip install apache-airflow-providers-docker`` + +Requirements +------------ + +The minimum Apache Airflow version supported by this provider package is ``2.6.0``. + +================== ================== +PIP package Version required +================== ================== +``apache-airflow`` ``>=2.6.0`` +``docker`` ``>=5.0.3`` +``python-dotenv`` ``>=0.21.0`` +================== ================== diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/installing-providers-from-sources.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/installing-providers-from-sources.rst.txt new file mode 100644 index 00000000000..b4e730f4ff2 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/installing-providers-from-sources.rst.txt @@ -0,0 +1,18 @@ + .. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + .. http://www.apache.org/licenses/LICENSE-2.0 + + .. Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +.. include:: ../exts/includes/installing-providers-from-sources.rst diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/security.rst.txt b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/security.rst.txt new file mode 100644 index 00000000000..afa13dac6fc --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sources/security.rst.txt @@ -0,0 +1,18 @@ + .. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + .. http://www.apache.org/licenses/LICENSE-2.0 + + .. Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +.. include:: ../exts/includes/security.rst diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/docs-archive/apache-airflow-providers-docker/3.9.0/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css new file mode 100644 index 00000000000..eb19f698afc --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_sphinx_design_static/design-tabs.js b/docs-archive/apache-airflow-providers-docker/3.9.0/_sphinx_design_static/design-tabs.js new file mode 100644 index 00000000000..36b38cf0d91 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_sphinx_design_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/_gen/css/main-custom.min.css b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/_gen/css/main-custom.min.css new file mode 100644 index 00000000000..46f1de59325 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/_gen/css/main-custom.min.css @@ -0,0 +1 @@ +@charset "UTF-8";@import "https://fonts.googleapis.com/css?family=Rubik:500&display=swap";@import "https://fonts.googleapis.com/css?family=Roboto:400,400i,500,700&display=swap";@import "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700&display=swap";.header__large--cerulean-blue{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#017cee}.header__large--shamrock{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#00ad46}.header__large--bright-sky-blue{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#0cb6ff}.header__large--melon{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#ff7557}.header__large--vermillion{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#e43921}.header__large--aqua{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#11e1ee}.header__large--shamrock-green{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#04d659}.header__large--aqua-blue{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#00c7d4}.header__large--white{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#fff}.header__large--brownish-grey{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#707070}.header__large--very-light-pink{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#cbcbcb}.header__large--slate-grey{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#636365}.header__large--greyish-brown,#header-canvas .text-area--header{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#51504f}.header__medium--cerulean-blue{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#017cee}.header__medium--shamrock{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#00ad46}.header__medium--bright-sky-blue{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#0cb6ff}.header__medium--melon{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#ff7557}.header__medium--vermillion{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#e43921}.header__medium--aqua{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#11e1ee}.header__medium--shamrock-green{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#04d659}.header__medium--aqua-blue{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#00c7d4}.header__medium--white{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#fff}.header__medium--brownish-grey{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#707070}.header__medium--very-light-pink{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#cbcbcb}.header__medium--slate-grey{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#636365}.header__medium--greyish-brown,.page-header{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#51504f}.header__small--cerulean-blue{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#017cee}.header__small--shamrock{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#00ad46}.header__small--bright-sky-blue{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#0cb6ff}.header__small--melon{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#ff7557}.header__small--vermillion{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#e43921}.header__small--aqua{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#11e1ee}.header__small--shamrock-green{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#04d659}.header__small--aqua-blue{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#00c7d4}.header__small--white{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#fff}.header__small--brownish-grey{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#707070}.header__small--very-light-pink{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#cbcbcb}.header__small--slate-grey{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#636365}.header__small--greyish-brown,.blogpost-content__metadata--title,.community--header-join,.community--committers-header{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#51504f}.header__xsmall--cerulean-blue{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#017cee}.header__xsmall--shamrock{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#00ad46}.header__xsmall--bright-sky-blue{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#0cb6ff}.header__xsmall--melon{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#ff7557}.header__xsmall--vermillion{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#e43921}.header__xsmall--aqua{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#11e1ee}.header__xsmall--shamrock-green{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#04d659}.header__xsmall--aqua-blue{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#00c7d4}.header__xsmall--white{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#fff}.header__xsmall--brownish-grey{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#707070}.header__xsmall--very-light-pink{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#cbcbcb}.header__xsmall--slate-grey{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#636365}.header__xsmall--greyish-brown,.feature-item--header,.text-with-icon-item--header{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#51504f}.subtitle__large--cerulean-blue,.box-event__meetup--location{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#017cee}.subtitle__large--shamrock{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#00ad46}.subtitle__large--bright-sky-blue{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#0cb6ff}.subtitle__large--melon{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#ff7557}.subtitle__large--vermillion{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#e43921}.subtitle__large--aqua{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#11e1ee}.subtitle__large--shamrock-green{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#04d659}.subtitle__large--aqua-blue{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#00c7d4}.subtitle__large--white{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#fff}.subtitle__large--brownish-grey,.quote--text,.page-subtitle,.blogpost-content__metadata--description,#header-canvas .text-area--subheader{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#707070}.subtitle__large--very-light-pink{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#cbcbcb}.subtitle__large--slate-grey{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#636365}.subtitle__large--greyish-brown,.box-event__blogpost--header,.markdown-content h1,.markdown-content h2,.markdown-content h3,.markdown-content h4,.markdown-content h5{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#51504f}.subtitle__medium--cerulean-blue,ol.counter-blue li::before{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#017cee}.subtitle__medium--shamrock{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#00ad46}.subtitle__medium--bright-sky-blue{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#0cb6ff}.subtitle__medium--melon{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#ff7557}.subtitle__medium--vermillion{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#e43921}.subtitle__medium--aqua{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#11e1ee}.subtitle__medium--shamrock-green{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#04d659}.subtitle__medium--aqua-blue{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#00c7d4}.subtitle__medium--white{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#fff}.subtitle__medium--brownish-grey,.box-event__integration--name{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#707070}.subtitle__medium--very-light-pink{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#cbcbcb}.subtitle__medium--slate-grey{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#636365}.subtitle__medium--greyish-brown,.roadmap .td-sidebar nav>ul>li>a{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#51504f}.bodytext__medium--cerulean-blue,.box-event__blogpost--author,.box-event__meetup--next-meetup,.tag,.new-entry--link,.blogpost-content__metadata--author{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#017cee}.bodytext__medium--shamrock{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#00ad46}.bodytext__medium--bright-sky-blue{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#0cb6ff}.bodytext__medium--melon{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#ff7557}.bodytext__medium--vermillion{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#e43921}.bodytext__medium--aqua{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#11e1ee}.bodytext__medium--shamrock-green{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#04d659}.bodytext__medium--aqua-blue{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#00c7d4}.bodytext__medium--white,footer .footer-section span{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#fff}.bodytext__medium--brownish-grey,ol.counter-blue li,ul.ticks-blue li,.box-event__blogpost--description,.box-event__blogpost--date,.box-event__case-study--quote,.box-event__meetup--members,.markdown-content p,.markdown-content span,.feature-item--text,.text-with-icon-item--text,.video-list__item .video-list__item--title,.blogpost-content__metadata--date,.install--description,.roadmap .breadcrumb-item a,.roadmap .td-sidebar li>a,.sidebar__version-selector a{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#707070}.bodytext__medium--very-light-pink{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#cbcbcb}.bodytext__medium--slate-grey{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#636365}.bodytext__medium--greyish-brown,.box-event__committer--nick,.quote--author,.list-link,.install__accordions-content--header,.navbar__text-link{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#51504f}.bodytext__mobile--cerulean-blue{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#017cee}.bodytext__mobile--shamrock{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#00ad46}.bodytext__mobile--bright-sky-blue{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#0cb6ff}.bodytext__mobile--melon{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#ff7557}.bodytext__mobile--vermillion{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#e43921}.bodytext__mobile--aqua{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#11e1ee}.bodytext__mobile--shamrock-green{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#04d659}.bodytext__mobile--aqua-blue{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#00c7d4}.bodytext__mobile--white{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#fff}.bodytext__mobile--brownish-grey{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#707070}.bodytext__mobile--very-light-pink{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#cbcbcb}.bodytext__mobile--slate-grey{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#636365}.bodytext__mobile--greyish-brown{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#51504f}.bodytext__small--cerulean-blue{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#017cee}.bodytext__small--shamrock{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#00ad46}.bodytext__small--bright-sky-blue{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#0cb6ff}.bodytext__small--melon{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#ff7557}.bodytext__small--vermillion{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#e43921}.bodytext__small--aqua{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#11e1ee}.bodytext__small--shamrock-green{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#04d659}.bodytext__small--aqua-blue{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#00c7d4}.bodytext__small--white{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#fff}.bodytext__small--brownish-grey{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#707070}.bodytext__small--very-light-pink{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#cbcbcb}.bodytext__small--slate-grey{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#636365}.bodytext__small--greyish-brown{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#51504f}.bodytext__xsmall--cerulean-blue{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#017cee}.bodytext__xsmall--shamrock{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#00ad46}.bodytext__xsmall--bright-sky-blue{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#0cb6ff}.bodytext__xsmall--melon{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#ff7557}.bodytext__xsmall--vermillion{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#e43921}.bodytext__xsmall--aqua{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#11e1ee}.bodytext__xsmall--shamrock-green{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#04d659}.bodytext__xsmall--aqua-blue{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#00c7d4}.bodytext__xsmall--white{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#fff}.bodytext__xsmall--brownish-grey{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#707070}.bodytext__xsmall--very-light-pink{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#cbcbcb}.bodytext__xsmall--slate-grey{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#636365}.bodytext__xsmall--greyish-brown{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#51504f}.monotext--cerulean-blue{font-family:roboto mono,monospace;color:#017cee;font-size:14px;line-height:1.71}.monotext--shamrock{font-family:roboto mono,monospace;color:#00ad46;font-size:14px;line-height:1.71}.monotext--bright-sky-blue{font-family:roboto mono,monospace;color:#0cb6ff;font-size:14px;line-height:1.71}.monotext--melon{font-family:roboto mono,monospace;color:#ff7557;font-size:14px;line-height:1.71}.monotext--vermillion{font-family:roboto mono,monospace;color:#e43921;font-size:14px;line-height:1.71}.monotext--aqua{font-family:roboto mono,monospace;color:#11e1ee;font-size:14px;line-height:1.71}.monotext--shamrock-green{font-family:roboto mono,monospace;color:#04d659;font-size:14px;line-height:1.71}.monotext--aqua-blue{font-family:roboto mono,monospace;color:#00c7d4;font-size:14px;line-height:1.71}.monotext--white{font-family:roboto mono,monospace;color:#fff;font-size:14px;line-height:1.71}.monotext--brownish-grey,.markdown-content pre span,pre span{font-family:roboto mono,monospace;color:#707070;font-size:14px;line-height:1.71}.monotext--very-light-pink{font-family:roboto mono,monospace;color:#cbcbcb;font-size:14px;line-height:1.71}.monotext--slate-grey{font-family:roboto mono,monospace;color:#636365;font-size:14px;line-height:1.71}.monotext--greyish-brown{font-family:roboto mono,monospace;color:#51504f;font-size:14px;line-height:1.71}.font-weight-normal{font-weight:400!important}.font-weight-500{font-weight:500!important}.font-weight-bold{font-weight:700!important}details.accordion{padding:40px 30px;border-bottom:solid 1px #cbcbcb;-webkit-transition:ease 1s;-o-transition:ease 1s;transition:ease 1s}details.accordion:first-of-type{border-top:solid 1px #cbcbcb}details.accordion summary{position:relative;display:block;outline:none}details.accordion summary::-webkit-details-marker{display:none}details.accordion .accordion__summary-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;max-width:750px;margin-right:40px}details.accordion .accordion__summary-content--icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:60px;margin-right:42px}details.accordion .accordion__summary-content--header{margin-bottom:20px}details.accordion .accordion__arrow{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:absolute;width:36px;height:36px;top:0;right:0;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:solid 1px #017cee;border-radius:50%}details.accordion .accordion__arrow svg{-webkit-transition:ease-out .2s;-o-transition:ease-out .2s;transition:ease-out .2s}details.accordion[open] .accordion__arrow svg{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}details.accordion .accordion__content{margin-top:30px;margin-right:36px}details.accordion .accordion__content.indented{margin-left:102px}@media(max-width:1280px){details.accordion{padding:30px 0}details.accordion .accordion__summary-content--icon{-webkit-box-align:unset;-webkit-align-items:unset;-ms-flex-align:unset;align-items:unset;margin-right:20px;margin-top:28px}details.accordion .accordion__arrow{width:28px;height:28px;top:5px}details.accordion .accordion__content.indented{margin-left:80px}details.accordion .accordion__content ol.counter-blue{margin-left:-38px!important}}button{cursor:pointer;border:1px solid;border-radius:5px;padding:9px 29px;-webkit-transition:all ease-out .2s;-o-transition:all ease-out .2s;transition:all ease-out .2s}button:disabled{cursor:not-allowed}button.btn-filled{border-color:#017cee;background-color:#017cee}button.btn-filled:hover{border-color:#0cb6ff;background-color:#0cb6ff}button.btn-with-icon{padding:14px 20px}button.btn-with-icon svg{height:30px;width:auto;padding-right:15px}button.btn-with-icon span{display:inline-block;line-height:30px;vertical-align:middle}button.btn-hollow{background-color:#fff}button.btn-hollow.btn-blue{color:#017cee;border-color:#017cee}button.btn-hollow.btn-blue:disabled{color:#cbcbcb;border-color:#cbcbcb}button.btn-hollow.btn-blue:hover:enabled{color:#fff;background-color:#017cee}button.btn-hollow.btn-brown{border-color:#cbcbcb}button.btn-hollow.btn-brown:hover{background-color:#51504f;border-color:#51504f}button.btn-hollow.btn-brown:hover span{color:#fff}button.btn-hollow.btn-brown:hover svg path{fill:#fff}button.with-box-shadow{-webkit-box-shadow:0 2px 6px 0 rgba(0,0,0,.12);box-shadow:0 2px 6px 0 rgba(0,0,0,.12)}@media(max-width:1280px){button{padding:4px 17px}}ol.counter-blue,ul.ticks-blue{list-style:none;margin-bottom:0}ol.counter-blue li,ul.ticks-blue li{position:relative;padding-left:10px}ol.counter-blue li::before,ul.ticks-blue li::before{position:absolute;border:solid 1px #017cee;border-radius:50%}ol.counter-blue{counter-reset:custom-counter;padding-left:-webkit-calc(26px + 2px);padding-left:calc(26px + 2px)}ol.counter-blue li{counter-increment:custom-counter;margin-bottom:25px}ol.counter-blue li::before{content:counter(custom-counter);-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;top:-2px;left:-webkit-calc(-1 * 26px);left:calc(-1 * 26px);width:26px;height:26px;text-align:center;line-height:26px}ul.ticks-blue{padding-left:-webkit-calc(24px + 2px);padding-left:calc(24px + 2px)}ul.ticks-blue li{margin-bottom:22px}ul.ticks-blue li::before{content:"";left:-webkit-calc(-1 * 24px);left:calc(-1 * 24px);width:24px;height:24px;background-position:50%;background-repeat:no-repeat;background-image:url(/images/tick.svg)}.list-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:-20px;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}@media(max-width:1280px){.list-items{margin:auto;max-width:580px}}@media(max-width:640px){.list-items{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}}.list-item{width:25%;padding:20px}@media(min-width:1920px){.list-item{width:20%}}@media(max-width:1280px){.list-item{padding:10px;width:50%}}@media(max-width:640px){.list-item{width:100%}}.list-item--wide{width:50%}@media(max-width:1280px){.list-item--wide{width:100%}}.card{border:solid 1px #cbcbcb;border-radius:5px;padding:30px 10px;height:100%}.box-event{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.box-event__blogpost{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:0 20px}.box-event__blogpost--metadata{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:20px}.box-event__blogpost--header{margin-bottom:4px}.box-event__blogpost--author{font-weight:500}.box-event__blogpost--description{margin-bottom:20px}.box-event__case-study{padding:18px 18px 0;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.box-event__case-study--logo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:60px;width:100%;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.box-event__case-study--logo svg,.box-event__case-study--logo img{max-height:100%;max-width:100%}.box-event__case-study--quote{font-style:italic;margin:30px 0 20px;text-align:center}.box-event__case-study--quote::before{content:"“"}.box-event__case-study--quote::after{content:"”"}.box-event__committer--nick{font-weight:500;margin-top:12px}.box-event__committer--social-media-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.box-event__committer--social-media-icon{margin:0 6px}.box-event__meetup--location{margin-bottom:10px;text-align:center}.box-event__meetup--members{margin-bottom:30px}.box-event__meetup--members span{vertical-align:middle}.box-event__meetup--next-meetup{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;min-height:52px;margin-bottom:20px;text-align:center}.box-event__integration{height:208px;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.box-event__integration--logo{margin:auto 0;-webkit-filter:grayscale(1);filter:grayscale(1);opacity:.6;max-width:100%;max-height:100%}.box-event__integration--name{font-weight:700;text-align:center}.box-event__integration:hover .box-event__integration--logo{-webkit-filter:none;filter:none;opacity:1}.box-event.hoverable-icon svg,.box-event.hoverable-icon img{-webkit-filter:grayscale(1);filter:grayscale(1);opacity:.6;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.box-event.hoverable-icon:hover svg,.box-event.hoverable-icon:hover img{-webkit-filter:none;filter:none;opacity:1}@media(max-width:640px){.box-event__blogpost--metadata{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.box-event__blogpost--date{margin-top:17px}}.avatar{border-radius:50%;width:80px;height:80px}.quote{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;border-bottom:solid 1px #cbcbcb;padding:0 78px 60px}.quote--text{text-align:center;font-weight:400}.quote--text::before{content:"“"}.quote--text::after{content:"”"}.quote--author{text-align:center;font-weight:500;margin-bottom:32px}.quote--logo{max-height:140px;margin:0 auto}@media(max-width:640px){.quote{padding:0 0 40px}}.pager{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:60px}.case-study-page{max-width:790px!important;margin:60px auto 0}@media(max-width:640px){.case-study-page{margin-top:40px}}.markdown-content h1,.markdown-content h2,.markdown-content h3,.markdown-content h4,.markdown-content h5{margin-top:40px;margin-bottom:20px}.markdown-content p,.markdown-content span{margin-bottom:30px;margin-top:20px}.markdown-content img{width:100%}.markdown-content table{border-collapse:collapse;width:100%}.markdown-content th{background:#ccc}.markdown-content th,.markdown-content td{border:1px solid #ccc;padding:8px}.markdown-content tr:nth-child(even){background:#efefef}.markdown-content tr:hover{background:#d1d1d1}.markdown-content li{color:#707070}.base-layout{padding:123px 0 40px}.base-layout--button{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:-webkit-sticky;position:sticky;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin-left:auto;margin-right:40px;bottom:40px;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;z-index:1}@media(max-width:1280px){.base-layout{padding:76px 0 60px}.base-layout--button{display:none}}.page-header{text-align:center;margin-bottom:16px}@media(max-width:1280px){.page-header{font-size:36px!important;line-height:1.22!important}}.page-subtitle{text-align:center;font-weight:400!important;margin-bottom:80px}@media(max-width:1280px){.page-subtitle{font-family:roboto,sans-serif!important;font-size:16px!important;line-height:1.63!important;margin-bottom:30px}}.container{margin-top:44px;max-width:1200px}@media(min-width:1920px){.container{max-width:1510px}}@media(max-width:1280px){.container>*{max-width:630px;margin-left:auto;margin-right:auto}.container .no-width-restriction{max-width:none}}@media(max-width:640px){.container>*{max-width:306px}}.container-fluid{padding-left:20px;padding-right:20px}.show-more-button{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin:60px auto 0}@media(max-width:1280px){.show-more-button{margin-top:30px}}@media(max-width:1280px){.desktop-only{display:none}}@media(min-width:calc(1280px + 1px)){.no-desktop{display:none}}@media(min-width:calc(640px + 1px)){.mobile-only{display:none}}.features-list{margin:76px auto 100px;max-width:720px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}@media(min-width:1920px){.features-list{max-width:unset;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-top:0}}@media(max-width:640px){.features-list{margin-top:0}}.feature-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:44px auto 0}.feature-item--icon-box{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;max-width:150px;width:100%;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-top:18px}.feature-item--text-box{margin-left:60px}@media(min-width:1920px),(max-width:1280px){.feature-item{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.feature-item--icon-box{margin-top:0;margin-bottom:20px;max-width:unset}.feature-item--text-box{margin-left:0;text-align:center}}@media(min-width:1920px){.feature-item{margin-top:60px;max-width:392px;margin-left:40px;margin-right:40px}}@media(max-width:1280px){.feature-item{margin-top:40px;max-width:260px}.feature-item svg{height:60px;width:auto}.feature-item--header{font-family:roboto,sans-serif!important;font-size:24px!important;line-height:1.5!important}.feature-item--text{font-size:14px!important;line-height:1.57!important}}.text-with-icon-list{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:940px;margin:0 auto 100px;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.text-with-icon-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-width:410px;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;margin-top:54px}.text-with-icon-item svg{height:100px}.text-with-icon-item--header{text-align:center;margin-top:23px}.text-with-icon-item--text{text-align:center}@media(min-width:1920px){.text-with-icon-list{max-width:unset}.text-with-icon-item{max-width:305px}}@media(max-width:1280px){.text-with-icon-item{margin-top:30px;max-width:276px}.text-with-icon-item svg{width:70px;height:70px}.text-with-icon-item--header{font-family:roboto,sans-serif;font-size:24px;line-height:1.5;margin-top:16px}.text-with-icon-item--text{font-size:14px;line-height:1.57}}@media(max-width:640px){.text-with-icon-list{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}}.video-section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border:solid 1px #cbcbcb;padding:40px}@media(max-width:1280px){.video-section{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-width:560px;margin:0 auto;padding:20px}}.video-wrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.video-wrapper .video-container{display:none}.video-wrapper .video-container:last-child{display:block}.video-wrapper .anchor{position:fixed}.video-wrapper .anchor:target+.video-container{display:block}.video-wrapper .anchor:target+.video-container~.video-container{display:none}.video-list-wrapper{overflow-y:auto;max-height:403px;max-width:370px;width:100%;margin-left:40px}@media(max-width:1280px){.video-list-wrapper{max-width:unset;margin-left:0}}.video-list-wrapper::-webkit-scrollbar{-webkit-appearance:none}.video-list-wrapper::-webkit-scrollbar-thumb{border-radius:8px;border:2px solid #fff;background-color:rgba(0,0,0,.5)}.video-list-wrapper::-webkit-scrollbar:vertical{width:9px}.video-list{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.video-list__item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:solid 1px #cbcbcb;padding:16px 0}.video-list__item .video-list__item--title{margin-left:9px;vertical-align:middle}.video-list__item--icon-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.video-list__item:hover .video-list__item--title,.video-list__item.active .video-list__item--title{font-weight:500}.video-list__item:hover svg path,.video-list__item.active svg path{fill:#707070;stroke:none}.tag{display:block;background-color:rgba(1,124,238,.25);padding:1px 15px;border-radius:5px;-webkit-transition:.2s;-o-transition:.2s;transition:.2s;margin:7px}.tag.active,.tag:hover{background-color:#017cee;color:#fff}.tags-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin:-7px}@media(max-width:640px){.tags-container{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:7px}}.all-tags-container{margin:30px 0}.blog__list-items-wrapper{max-width:1200px;margin:30px auto 0}@media(max-width:1280px){.blog__list-items-wrapper{max-width:580px}}.new-entry{margin-bottom:20px}.new-entry--link{font-weight:500}@media(max-width:1280px){.new-entry{margin-bottom:10px;padding-left:10px}}.blogpost-content{max-width:790px;margin:0 auto}.blogpost-content--header-wrapper{border-bottom:solid 1px #cbcbcb}.blogpost-content__metadata--container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:30px}.blogpost-content__metadata--title{margin-bottom:20px}.blogpost-content__metadata--author{font-weight:500;margin-bottom:30px;margin-right:17px}.blogpost-content__metadata--social-media-icon{margin-right:7px}.blogpost-content__metadata--description{font-weight:400;margin-bottom:30px}.blogpost-content__metadata--date{margin-top:17px}@media(max-width:640px){.blogpost-content__metadata--container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin-bottom:19px}.blogpost-content__metadata--title{font-family:roboto,sans-serif!important;font-size:24px!important;line-height:1.5!important;max-width:272px;margin-bottom:13px}.blogpost-content__metadata--author{margin-bottom:20px}.blogpost-content__metadata--description{font-family:roboto,sans-serif!important;font-weight:400!important;font-size:16px!important;line-height:1.63!important;margin-bottom:20px}}.blog-pager{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;max-width:1200px;margin:60px auto 0}.blog-pager .pager{margin-top:40px;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.home-page-layout.base-layout{padding-top:70px}@media(max-width:640px){.home-page-layout.base-layout{padding-top:16px}}.principles-header{margin-top:20px;margin-bottom:4px}.integrations-header{margin-bottom:60px}@media(max-width:640px){.integrations-header{margin-bottom:30px}}#integrations .list-items{margin-top:40px}@media(max-width:640px){#integrations .list-items{margin-top:20px}}.video-section-container{margin:80px auto;max-width:1200px}@media(max-width:640px){.video-section-container{margin:60px 0}}.host-header{margin-bottom:6px}.meetups{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.meetups>.list-items{margin-top:40px;margin-bottom:40px;width:100%}@media(max-width:1280px){.meetups>.list-items{margin-top:30px;margin-bottom:30px}}@media(max-width:640px){.meetups>.list-items{margin-bottom:10px}}.meetups-page.page-subtitle{margin-bottom:0}.list-link{text-decoration:underline}.community--header-container{max-width:936px;margin:0 auto}.community--header-join{text-align:center}.community--accordion-container{margin:60px 18px}.community--committers-header{text-align:center;margin-top:70px;margin-bottom:40px}.community--committers-header.large-margin{margin-top:100px;margin-bottom:40px}@media(min-width:1920px){.community .list-items{max-width:1220px;margin-right:auto;margin-left:auto}.community .list-item{width:25%}}@media(max-width:1280px){.community--header-container{max-width:580px}.community--header-join{font-family:roboto,sans-serif!important;font-size:24px!important;line-height:1.5!important}.community--accordion-container{margin:40px 0}.community--committers-header{font-size:36px!important;line-height:1.22!important;margin-top:60px}.community--committers-header.large-margin{margin-top:60px;margin-bottom:40px}.community--button-container{margin-top:20px}}.install .page-subtitle{margin-bottom:45px}.install--headers-wrapper{max-width:936px;margin:0 auto}.install--description{text-align:center;margin:45px 0 60px}.install--description a{color:#017cee;text-decoration:underline}.install__accordions--wrapper{max-width:900px;margin:60px auto}.install__accordions-content--header{font-weight:500}.install__accordions-content--list-wrapper{margin-bottom:40px}.install__accordions-content--methods-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:20px}.install__accordions-content--method-box{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:270px;height:160px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;border:solid 1px #cbcbcb;border-radius:5px;margin-right:40px}@media(max-width:1280px){.install .page-subtitle{margin-bottom:30px}.install--headers-wrapper{max-width:580px}.install--description{margin-top:30px;margin-bottom:30px}.install__accordions--wrapper{max-width:580px;margin-top:40px;margin-bottom:0}}@media(max-width:640px){.install__accordions-content--methods-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;margin-bottom:0;margin-right:-36px}.install__accordions-content--method-box{margin-right:0;margin-bottom:20px}}footer{min-height:unset}footer .footer-section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}footer .footer-section__media-section{padding:60px 60px 30px;background-color:#51504f}footer .footer-section__media-section--link{margin-right:30px}footer .footer-section__media-section--button-with-text{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}footer .footer-section__media-section--text{margin-right:20px}footer .footer-section__policies-section{padding:30px 60px;background-color:#636365;font-size:12px;-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}footer .footer-section__policies-section span{font-size:12px}footer .footer-section__policies-section--policies{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}footer .footer-section__policies-section--policy-item::before{content:"\00a0\00a0"}footer .footer-section__policies-section--policy-item::after{content:"\00a0\00a0|";color:#fff}footer .footer-section__policies-section--policy-item:last-of-type::after{content:"\00a0\00a0|\00a0\00a0"}footer .footer-section__policies-section--disclaimer{display:block;max-width:600px;color:#cbcbcb!important;margin-top:16px}@media(min-width:1920px){footer .footer-section__policies-section--disclaimer{max-width:800px}}footer .dropdown-toggle::after{color:#fff;vertical-align:middle}@media(max-width:1280px){footer .footer-section{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}footer .footer-section span{font-size:14px!important;line-height:1.57!important}footer .footer-section__media-section{padding:30px 40px}footer .footer-section__media-section svg{height:31px;width:auto}footer .footer-section__media-section--link{margin-right:20px}footer .footer-section__media-section--button-with-text{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;margin-bottom:47px}footer .footer-section__media-section--text{margin-right:0;margin-bottom:16px}footer .footer-section__policies-section{padding:30px 40px}footer .footer-section__policies-section--policies{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}footer .footer-section__policies-section--policy-item::before,footer .footer-section__policies-section--policy-item::after,footer .footer-section__policies-section--policy-item:last-of-type::before,footer .footer-section__policies-section--policy-item:last-of-type::after{content:""}footer .footer-section__policies-section--language-toggle{margin:17px 0 35px}}.navbar{position:fixed;top:0;width:100%;background-color:#fff;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;border-bottom:solid 1px #cbcbcb;z-index:32;padding:30px 60px}.navbar__menu-container{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.navbar__menu-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding-top:16px;padding-left:88px}.navbar__links-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.navbar__text-link{margin-right:30px;position:relative;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.navbar__text-link::before,.navbar__text-link::after{content:"";position:absolute;top:100%;width:0;right:0;height:2px;background-color:#017cee;-webkit-transition:.2s ease-out;-o-transition:.2s ease-out;transition:.2s ease-out}.navbar__text-link:hover,.navbar__text-link.active{color:#51504f}.navbar__text-link:hover::before,.navbar__text-link:hover::after,.navbar__text-link.active::before,.navbar__text-link.active::after{width:100%;left:0}.navbar--box-shadow{-webkit-box-shadow:0 2px 6px 0 rgba(0,0,0,.12);box-shadow:0 2px 6px 0 rgba(0,0,0,.12)}@media(max-width:1280px){.navbar{padding:20px}.navbar__icon-container svg{width:93px;height:auto}.navbar__menu-content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;padding-left:0;padding-top:0}.navbar__drawer-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.navbar__toggle-button{border:none;background:0 0;padding:0;position:relative;width:26px;height:20px}.navbar__toggle-button--icon{position:absolute;top:0;bottom:0;left:0;right:0;visibility:hidden;opacity:0;-webkit-transition:.2s ease-out;-o-transition:.2s ease-out;transition:.2s ease-out}.navbar__toggle-button--icon.visible{visibility:visible;opacity:1}.navbar__drawer{position:fixed;top:77px;left:0;width:100%;height:-webkit-calc(100% - 77px);height:calc(100% - 77px);background-color:#fff;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);-o-transform:translateX(100%);transform:translateX(100%);-webkit-transition:.2s ease-out;-o-transition:.2s ease-out;transition:.2s ease-out;padding:40px 40px 30px}.navbar__drawer--open{-webkit-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}.navbar__links-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.navbar__text-link{margin-right:0;margin-bottom:10px}.navbar__text-link:last-child{margin-bottom:20px}}#header{position:relative;margin:123px -20px 0;min-height:-webkit-calc(100vh - 123px);min-height:calc(100vh - 123px)}#header-canvas{padding:0;margin:0;position:absolute;width:100%;height:100%;top:0;left:0;right:0;bottom:0}#header-canvas .text-area{max-width:706px;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}#header-canvas .text-area--header{text-align:center;margin-bottom:20px}#header-canvas .text-area--subheader{font-weight:400!important;text-align:center;margin-bottom:20px}#header-canvas canvas{position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1}@media(min-width:1920px){#header-canvas .text-area--header{font-size:90px}}@media(max-width:1280px){#header{margin:77px -20px 0;min-height:-webkit-calc(100vh - 77px);min-height:calc(100vh - 77px)}#header-canvas .text-area{max-width:450px}#header-canvas .text-area--header{margin-bottom:14px}#header-canvas .text-area--subheader{margin-bottom:26px}}@media(max-width:640px){#header-canvas .text-area{max-width:290px}#header-canvas .text-area--header{font-size:48px!important;line-height:1.25!important}#header-canvas .text-area--subheader{font-size:16px!important;line-height:1.63!important}}.roadmap{margin-top:40px}.roadmap main{padding-left:40px}.roadmap .breadcrumb{padding-bottom:0;margin-bottom:30px}.roadmap .breadcrumb-item+.breadcrumb-item{padding-left:4px}.roadmap .breadcrumb-item+.breadcrumb-item::before{color:#707070;padding-right:0}.roadmap .td-sidebar{position:-webkit-sticky;position:sticky;top:163px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;max-height:-webkit-calc(100vh - 163px);max-height:calc(100vh - 163px);max-width:270px;min-width:270px;width:100%;overflow-y:auto;padding-top:12px;padding-left:15px;padding-bottom:30px;margin-left:40px;background-color:#f9f9f9;border:none}.roadmap .td-sidebar::-webkit-scrollbar{-webkit-appearance:none}.roadmap .td-sidebar::-webkit-scrollbar-thumb{border-radius:8px;border:2px solid #fff;background-color:rgba(0,0,0,.5)}.roadmap .td-sidebar::-webkit-scrollbar:vertical{width:9px}.roadmap .td-sidebar__inner{position:static;height:unset}.roadmap .td-sidebar li>a{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.roadmap .td-sidebar li>a.active{color:#017cee}.roadmap .td-sidebar .searchb-box{margin-bottom:26px}.roadmap .td-sidebar .searchb-box .search-form{width:100%}.roadmap .td-sidebar .toctree li{list-style:none;font-family:roboto,sans-serif;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.63;letter-spacing:normal;color:#707070}.roadmap .td-sidebar .toctree ul{padding-left:15px;display:none}.roadmap .td-sidebar .toctree>ul,.roadmap .td-sidebar .toctree li.current>ul{display:block}.roadmap .td-sidebar .toctree .caption{font-family:roboto,sans-serif;font-size:18px;font-weight:700;font-stretch:normal;font-style:normal;line-height:1.33;letter-spacing:normal;color:#51504f;padding-bottom:13px;text-transform:uppercase;margin-bottom:0}.roadmap .td-sidebar .toctree .current{color:#017cee;font-weight:500}.roadmap .td-sidebar .toctree .current>a:not([href="#"]){color:#017cee}.roadmap .td-sidebar .toctree a .toctree-expand{display:inline-block;position:relative;height:1em}.roadmap .td-sidebar .toctree a .toctree-expand::before{position:absolute;top:6px;left:-12px;content:'►';font-size:7px}.roadmap .td-sidebar .toctree .current>a>.toctree-expand:before{content:'▼'}.roadmap .td-sidebar-nav__section{padding-right:0}.roadmap .td-sidebar-nav>.td-sidebar-nav__section .td-sidebar-nav__section{list-style:none;position:relative;margin-left:10px}.roadmap .td-sidebar-nav>.td-sidebar-nav__section .td-sidebar-nav__section::before{content:'►';position:absolute;top:6px;left:-12px;font-size:8px;color:#51504f}.roadmap .td-sidebar-nav>.td-sidebar-nav__section .td-sidebar-nav__section>ul{display:none}.roadmap .td-sidebar-nav>.td-sidebar-nav__section .td-sidebar-nav__section.current-section::before{content:'▼'}.roadmap .td-sidebar-nav>.td-sidebar-nav__section .td-sidebar-nav__section.current-section>ul{display:block}.roadmap .wy-nav-side-toc{position:-webkit-sticky;position:sticky;top:163px;overflow-x:hidden;overflow-y:auto;width:280px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;max-height:-webkit-calc(100vh - 163px);max-height:calc(100vh - 163px);font-size:14px;line-height:1.43}.roadmap .wy-nav-side-toc::-webkit-scrollbar{-webkit-appearance:none}.roadmap .wy-nav-side-toc::-webkit-scrollbar-thumb{border-radius:8px;border:2px solid #fff;background-color:rgba(0,0,0,.5)}.roadmap .wy-nav-side-toc::-webkit-scrollbar:vertical{width:9px}.roadmap .wy-nav-side-toc ul,.roadmap .wy-nav-side-toc ol{padding:0;list-style:none none}.roadmap .wy-nav-side-toc li{list-style:none}.roadmap .wy-nav-side-toc .wy-menu-vertical>ul,.roadmap .wy-nav-side-toc .wy-menu-vertical li.current>ul{padding-left:1px}.roadmap .wy-nav-side-toc .wy-menu-vertical a{display:inline-block;padding:.4045em 0;color:#707070}.roadmap .wy-nav-side-toc .wy-menu-vertical li a{border-left:solid 2px #cbcbcb;padding-left:-webkit-calc(1.25em + 1px);padding-left:calc(1.25em + 1px)}.roadmap .wy-nav-side-toc .wy-menu-vertical li.current{margin-left:-1px}.roadmap .wy-nav-side-toc .wy-menu-vertical li.current>a{border-left:solid 4px #017cee;color:#017cee}.roadmap .wy-nav-side-toc .wy-menu-vertical li li>a{padding-left:2.427em}.roadmap .wy-nav-side-toc .wy-menu-vertical li li li>a{padding-left:4.045em}.roadmap .wy-nav-side-toc .wy-menu-vertical li li li li>a{padding-left:5.663em}@media(max-width:1280px){.roadmap main{padding-left:0}.roadmap .td-sidebar{position:static;background-color:transparent;padding:0;margin:0;max-width:unset;height:530px}}.search-form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:344px;padding:8px 20px;border:solid 1px #cbcbcb;border-radius:5px;margin:60px auto 0}.search-form__input{font-family:roboto,sans-serif;font-size:16px;color:#707070;line-height:1.63;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-right:10px;border:none;background:0 0;outline:none;float:left}.search-form__button{border:none;background-color:transparent;padding:0}@media(max-width:1280px){.search-form{width:270px;padding:3px 20px;margin-top:30px}}.rating-container{margin-top:40px}.rating{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.rate-star{cursor:pointer;margin-right:13px}.rate-star svg path{fill:none;stroke:#51504f}.rate-star:hover svg path,.rate-star:hover~.rate-star svg path{fill:#017cee;stroke:none}.rst-content{color:#707070}.rst-content h1{margin-top:0;margin-bottom:30px;font-weight:500;font-family:rubik,sans-serif;color:#51504f;font-size:225%}.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6,.rst-content p{font-family:roboto,sans-serif;color:#707070}.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-top:40px;margin-bottom:20px;font-weight:500}.rst-content p{line-height:1.63;margin:0 0 30px;font-size:16px;overflow-wrap:break-word}.rst-content h2{font-size:150%}.rst-content h3{font-size:125%}.rst-content h4{font-size:115%}.rst-content h5{font-size:110%}.rst-content h6{font-size:100%}.rst-content code{max-width:100%;color:#51504f;padding:0 5px;font-family:roboto mono,monospace;overflow-x:auto}.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .admonition-todo,.rst-content .admonition{padding:9px 10px;line-height:24px;margin-bottom:24px;background:#e7f2fa}@media(max-width:768px){.rst-content .admonition p:not(.admonition-title){font-size:12px;line-height:1.83}}.rst-content .admonition-title:before{content:"!";background-color:#fff;border-radius:50%;padding:0 4px;margin-right:5px}.rst-content .admonition-title{color:#fff;font-weight:500;font-size:10px;line-height:2.1;display:block;background:#68d1ff;margin:-10px;padding:0 12px;margin-bottom:9px}.rst-content .danger,.rst-content .error{background:#fdece9}.rst-content .danger::before,.rst-content .error::before{color:#fdece9}.rst-content .danger .admonition-title,.rst-content .error .admonition-title{background:#ee8170}.rst-content .danger .admonition-title::before,.rst-content .error .admonition-title::before{color:#ee8170}.rst-content .attention,.rst-content .caution{background:#fff8f6}.rst-content .warning{background:#f8f8f8}.rst-content .attention .admonition-title,.rst-content .caution .admonition-title{background:#ffa996}.rst-content .attention .admonition-title::before,.rst-content .caution .admonition-title::before{color:#ffa996}.rst-content .warning .admonition-title{background:#a6a6a6}.rst-content .warning .admonition-title::before{color:#a6a6a6}.rst-content .note,.rst-content .seealso{background:#f3fbff}.rst-content .note .admonition-title,.rst-content .seealso .admonition-title{background:#68d2fe}.rst-content .note .admonition-title::before,.rst-content .seealso .admonition-title::before{color:#68d2fe}.rst-content .hint{background:#f2fef6}.rst-content .important{background:#e6f9fc}.rst-content .tip{background:#e5f7ec}.rst-content .hint .admonition-title{background:#63e598}.rst-content .hint .admonition-title::before{color:#63e598}.rst-content .important .admonition-title{background:#5bdae3}.rst-content .important .admonition-title::before{color:#5bdae3}.rst-content .tip .admonition-title{background:#5bcb88}.rst-content .tip .admonition-title::before{color:#5bcb88}.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition p:last-child{margin-bottom:0}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre{background-color:#f2f8fe}.rst-content pre.literal-block,.rst-content .linenodiv pre{font-family:roboto mono,monospace;font-size:12px;line-height:1.4}@media print{.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .section ol li p:last-child,.rst-content .section ul li p:last-child{margin-bottom:0}.rst-content .section ol p:last-child,.rst-content .section ul p:last-child{margin-bottom:24px}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:inherit}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink{visibility:hidden;font-size:0}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after,.rst-content .code-block-caption .headerlink:after{content:url(/images/anchor.svg);vertical-align:bottom;padding-left:8px}.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content .toctree-wrapper p.caption:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after,.rst-content .code-block-caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption{padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list th{margin:0;overflow:visible}.rst-content table.docutils td{padding:10px 31px}.rst-content table.docutils th,.rst-content table.field-list th{padding:11px 31px}.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead{text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th{border-bottom:solid 1px rgba(81,80,79,.3);border-left:solid 1px rgba(81,80,79,.3)}.rst-content table.docutils thead th p,.rst-content table.field-list thead th p{font-weight:700;font-size:18px;color:#51504f;line-height:1.33;margin-bottom:0}.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.rst-content td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:rgba(112,112,112,.05)}.rst-content table.docutils{border:1px solid rgba(81,80,79,.3)}.rst-content table.docutils td{border-bottom:1px solid rgba(81,80,79,.3);border-left:1px solid rgba(81,80,79,.3)}.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.rst-content .wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.rst-content .wy-table-responsive table{margin-bottom:0!important}.rst-content .wy-table-responsive table td,.rst-content .wy-table-responsive table th{white-space:nowrap}.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100%!important;line-height:normal}.rst-content code.literal{color:#e74c3c}.rst-content code.xref,.rst-content a code{font-weight:700;color:#707070}.rst-content pre,.rst-content kbd{font-family:roboto mono,monospace}.rst-content kbd{background-color:inherit;color:inherit;-webkit-box-shadow:none;box-shadow:none;border:none;font-size:100%}.rst-content a code{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px;word-break:break-word}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px!important}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{font-family:roboto mono,monospace;display:table;margin:6px 0;font-size:100%;line-height:1.63;background:#f3fbff;color:#51504f;border-top:solid 4px #68d1ff;padding:8px 10px;position:relative}@media(max-width:768px){.rst-content dl:not(.docutils) dt{font-size:10px}}.rst-content dl:not(.docutils) dt:before{color:#68d1ff}.rst-content dl:not(.docutils) dt .headerlink{color:#707070;font-size:100%!important}.rst-content dl:not(.docutils) dt .fn-backref{color:#0cb6ff}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 8px #a6a6a6;background:#f8f8f8;color:#707070}.rst-content dl:not(.docutils) dl dt .headerlink{color:#707070;font-size:100%!important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) code{font-weight:700}.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100%!important}.rst-content dl:not(.docutils) code.descname{font-weight:700}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#51504f;font-weight:700}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content .versionmodified{font-style:italic}.rst-content .example-header{position:relative;background:#017cee;padding:8px 16px;margin-bottom:0}.rst-content .example-block-wrapper pre{margin:0;width:unset;border-top-left-radius:0;border-top-right-radius:0}.rst-content .example-header--with-button{padding-right:166px}@media(max-width:768px){.rst-content .example-header--with-button{padding-right:100px}}.rst-content .example-header:after{content:'';display:table;clear:both}.rst-content .example-title{display:block;padding:4px;margin-right:16px;color:#fff;overflow-x:auto}@media(max-width:768px){.rst-content .example-title{overflow-wrap:initial;font-size:12px}}.rst-content .example-header-button{top:8px;right:16px;position:absolute}.rst-content .example-header+.highlight-python{margin-top:0!important}.rst-content .viewcode-button{display:inline-block;padding:8px 16px;border:0;margin:0;color:#fff;font-weight:700;line-height:1;text-decoration:underline;text-overflow:ellipsis;overflow:hidden;text-transform:lowercase;vertical-align:middle;white-space:nowrap}@media(max-width:768px){.rst-content .viewcode-button{font-size:12px;padding:7px 0}}.rst-content .viewcode-button:visited{color:#404040}.rst-content .viewcode-button:hover,.rst-content .viewcode-button:focus{color:#404040}@media(min-width:1024px){.rst-content .section::before{display:block;content:" ";margin-top:-83px;height:83px;visibility:hidden}}.content-drawer-wrapper{display:none}@media(max-width:1280px){.content-drawer-wrapper{display:block;margin-bottom:30px}}.content-drawer-wrapper .navbar{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;left:0}.content-drawer-wrapper .navbar--hidden{display:none}.content-drawer-container{position:fixed;top:77px;left:0;width:100%;height:100%;background-color:#fff;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);-o-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition:.2s ease-out;-o-transition:.2s ease-out;transition:.2s ease-out;z-index:100}.content-drawer-container--open{-webkit-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}.content-drawer{padding:20px 40px}.content-drawer__toggle-button{border:none;background:0 0;padding:0;position:relative;width:26px;height:20px}.content-drawer__toggle-button--icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;visibility:hidden;opacity:0;-webkit-transition:.2s ease-out;-o-transition:.2s ease-out;transition:.2s ease-out}.content-drawer__toggle-button--icon svg{margin-right:10px}.content-drawer__toggle-button--icon.visible{visibility:visible;opacity:1}.dropdown-menu{font-family:roboto,sans-serif}.dropdown-toggle::after{color:#51504f}.sidebar__version-selector{margin-bottom:22px}.chroma,.highlight{background-color:#fff}.chroma .lntd,.highlight .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable,.highlight .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma .hl,.highlight .hl{display:block;width:100%;background-color:#ffc}.chroma .lnt,.chroma .ln,.highlight .lnt,.highlight .ln{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr{color:#00f}.chroma .kt,.chroma .nc,.highlight .kt,.highlight .nc{color:#2b91af}.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .sr,.chroma .s1,.chroma .ss,.highlight .s,.highlight .sa,.highlight .sb,.highlight .sc,.highlight .dl,.highlight .sd,.highlight .s2,.highlight .se,.highlight .sh,.highlight .si,.highlight .sx,.highlight .sr,.highlight .s1,.highlight .ss{color:#a31515}.chroma .ow,.highlight .ow{color:#00f}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs,.highlight .c,.highlight .ch,.highlight .cm,.highlight .c1,.highlight .cs{color:green}.chroma .cp,.chroma .cpf,.highlight .cp,.highlight .cpf{color:#00f}.chroma .ge,.highlight .ge{font-style:italic}.chroma .gh,.chroma .gp,.chroma .gs,.chroma .gu,.highlight .gh,.highlight .gp,.highlight .gs,.highlight .gu{font-weight:700}pre{margin:40px 0;padding:16px 20px;border:solid 1px #cbcbcb;border-radius:5px;width:100%}.share-section--icons-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.share-section--icon{margin-right:12px;cursor:pointer}.four-oh-four{height:-webkit-calc(100vh - 123px);height:calc(100vh - 123px);position:relative}.four-oh-four__text-container{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center} \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/_gen/css/main.min.css b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/_gen/css/main.min.css new file mode 100644 index 00000000000..603f3cb39ff --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/_gen/css/main.min.css @@ -0,0 +1,7 @@ +@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,700,700i";@fa-font-path:"../webfonts";/*!* Bootstrap v4.1.3 (https://getbootstrap.com/) +* Copyright 2011-2018 The Bootstrap Authors +* Copyright 2011-2018 Twitter, Inc. +* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)*/:root{--blue: #72A1E5;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #dc3545;--orange: #BA5A31;--yellow: #ffc107;--green: #28a745;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #888;--gray-dark: #333;--primary: #30638E;--secondary: #FFA630;--success: #3772FF;--info: #C0E0DE;--warning: #ED6A5A;--danger: #ED6A5A;--light: #D3F3EE;--dark: #403F4C;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width;}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:open sans,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol;font-size:1rem;font-weight:400;line-height:1.5;color:#222;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#3176d9;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#1e53a0;text-decoration:none}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#888;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}h1,.h1{font-size:2.25rem}h2,.h2{font-size:2rem}h3,.h3{font-size:1.5rem}h4,.h4{font-size:1.35rem}h5,.h5{font-size:1.15rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:3rem;font-weight:700;line-height:1.2}.display-2{font-size:2.5rem;font-weight:700;line-height:1.2}.display-3{font-size:2rem;font-weight:700;line-height:1.2}.display-4{font-size:1.75rem;font-weight:700;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}small,.small{font-size:80%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#888}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid,.td-content img{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#888}code{font-size:87.5%;color:#c97300;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#222;border-radius:.2rem;-webkit-box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25);box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;font-size:87.5%;color:#222}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media(min-width:576px){.container{max-width:540px}}@media(min-width:768px){.container{max-width:720px}}@media(min-width:992px){.container{max-width:960px}}@media(min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-webkit-flex:0 0 8.33333333%;-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-2{-webkit-box-flex:0;-webkit-flex:0 0 16.66666667%;-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-webkit-flex:0 0 33.33333333%;-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-5{-webkit-box-flex:0;-webkit-flex:0 0 41.66666667%;-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-webkit-flex:0 0 58.33333333%;-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-8{-webkit-box-flex:0;-webkit-flex:0 0 66.66666667%;-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-webkit-flex:0 0 83.33333333%;-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-11{-webkit-box-flex:0;-webkit-flex:0 0 91.66666667%;-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}@media(min-width:576px){.col-sm{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-webkit-flex:0 0 8.33333333%;-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-sm-2{-webkit-box-flex:0;-webkit-flex:0 0 16.66666667%;-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-sm-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-webkit-flex:0 0 33.33333333%;-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-sm-5{-webkit-box-flex:0;-webkit-flex:0 0 41.66666667%;-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-sm-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-webkit-flex:0 0 58.33333333%;-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-sm-8{-webkit-box-flex:0;-webkit-flex:0 0 66.66666667%;-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-sm-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-webkit-flex:0 0 83.33333333%;-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-sm-11{-webkit-box-flex:0;-webkit-flex:0 0 91.66666667%;-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-sm-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}}@media(min-width:768px){.col-md{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-webkit-flex:0 0 8.33333333%;-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-md-2{-webkit-box-flex:0;-webkit-flex:0 0 16.66666667%;-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-md-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-webkit-flex:0 0 33.33333333%;-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-md-5{-webkit-box-flex:0;-webkit-flex:0 0 41.66666667%;-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-md-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-webkit-flex:0 0 58.33333333%;-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-md-8{-webkit-box-flex:0;-webkit-flex:0 0 66.66666667%;-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-md-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-webkit-flex:0 0 83.33333333%;-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-md-11{-webkit-box-flex:0;-webkit-flex:0 0 91.66666667%;-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-md-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}}@media(min-width:992px){.col-lg{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-webkit-flex:0 0 8.33333333%;-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-lg-2{-webkit-box-flex:0;-webkit-flex:0 0 16.66666667%;-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-lg-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-webkit-flex:0 0 33.33333333%;-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-lg-5{-webkit-box-flex:0;-webkit-flex:0 0 41.66666667%;-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-lg-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-webkit-flex:0 0 58.33333333%;-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-lg-8{-webkit-box-flex:0;-webkit-flex:0 0 66.66666667%;-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-lg-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-webkit-flex:0 0 83.33333333%;-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-lg-11{-webkit-box-flex:0;-webkit-flex:0 0 91.66666667%;-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-lg-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}}@media(min-width:1200px){.col-xl{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-webkit-flex:0 0 8.33333333%;-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-xl-2{-webkit-box-flex:0;-webkit-flex:0 0 16.66666667%;-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-xl-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-webkit-flex:0 0 33.33333333%;-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-xl-5{-webkit-box-flex:0;-webkit-flex:0 0 41.66666667%;-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-xl-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-webkit-flex:0 0 58.33333333%;-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-xl-8{-webkit-box-flex:0;-webkit-flex:0 0 66.66666667%;-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-xl-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-webkit-flex:0 0 83.33333333%;-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-xl-11{-webkit-box-flex:0;-webkit-flex:0 0 91.66666667%;-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-xl-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}}.table,.td-box .row.section>table,.td-content>table{width:100%;margin-bottom:1rem;background-color:transparent}.table th,.td-box .row.section>table th,.td-content>table th,.table td,.td-box .row.section>table td,.td-content>table td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th,.td-box .row.section>table thead th,.td-content>table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody,.td-box .row.section>table tbody+tbody,.td-content>table tbody+tbody{border-top:2px solid #dee2e6}.table .table,.td-box .row.section>table .table,.td-content>table .table,.table .td-box .row.section>table,.td-box .table .row.section>table,.td-box .row.section>table .row.section>table,.td-content>table .td-box .row.section>table,.td-box .td-content>table .row.section>table,.table .td-content>table,.td-box .row.section>table .td-content>table,.td-content>table .td-content>table{background-color:#fff}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered th,.table-bordered td{border:1px solid #dee2e6}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd),.td-box .row.section>table tbody tr:nth-of-type(odd),.td-content>table tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>th,.table-primary>td{background-color:#c5d3df}.table-hover .table-primary:hover{background-color:#b5c7d6}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#b5c7d6}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#ffe6c5}.table-hover .table-secondary:hover{background-color:#ffdbac}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#ffdbac}.table-success,.table-success>th,.table-success>td{background-color:#c7d8ff}.table-hover .table-success:hover{background-color:#aec6ff}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#aec6ff}.table-info,.table-info>th,.table-info>td{background-color:#edf6f6}.table-hover .table-info:hover{background-color:#dceeee}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#dceeee}.table-warning,.table-warning>th,.table-warning>td{background-color:#fad5d1}.table-hover .table-warning:hover{background-color:#f8c0ba}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#f8c0ba}.table-danger,.table-danger>th,.table-danger>td{background-color:#fad5d1}.table-hover .table-danger:hover{background-color:#f8c0ba}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f8c0ba}.table-light,.table-light>th,.table-light>td{background-color:#f3fcfa}.table-hover .table-light:hover{background-color:#dff7f2}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#dff7f2}.table-dark,.table-dark>th,.table-dark>td{background-color:#cac9cd}.table-hover .table-dark:hover{background-color:#bdbcc1}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#bdbcc1}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th,.td-box .row.section>table .thead-dark th,.td-content>table .thead-dark th{color:#fff;background-color:#222;border-color:#353535}.table .thead-light th,.td-box .row.section>table .thead-light th,.td-content>table .thead-light th{color:#495057;background-color:#eee;border-color:#dee2e6}.table-dark{color:#fff;background-color:#222}.table-dark th,.table-dark td,.table-dark thead th{border-color:#353535}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd),.td-box .row.section>table.table-dark tbody tr:nth-of-type(odd),.td-content>table.table-dark tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media(max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media(max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media(max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media(max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive,.td-box .row.section>table,.td-content>table{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered,.td-box .row.section>table>.table-bordered,.td-content>table>.table-bordered{border:0}.form-control{display:block;width:100%;height:-webkit-calc(2.25rem + 2px);height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border-radius:.25rem;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{-webkit-transition:none;-o-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#6fa3ce;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(48,99,142,.25);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(48,99,142,.25)}.form-control::-webkit-input-placeholder{color:#888;opacity:1}.form-control::-moz-placeholder{color:#888;opacity:1}.form-control:-ms-input-placeholder{color:#888;opacity:1}.form-control::placeholder{color:#888;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#eee;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:-webkit-calc(0.375rem + 1px);padding-top:calc(0.375rem + 1px);padding-bottom:-webkit-calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:-webkit-calc(0.5rem + 1px);padding-top:calc(0.5rem + 1px);padding-bottom:-webkit-calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:-webkit-calc(0.25rem + 1px);padding-top:calc(0.25rem + 1px);padding-bottom:-webkit-calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#222;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:-webkit-calc(1.8125rem + 2px);height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:-webkit-calc(2.875rem + 2px);height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#888}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#3772ff}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(55,114,255,.9);border-radius:.25rem}.was-validated .form-control:valid,.form-control.is-valid,.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#3772ff}.was-validated .form-control:valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#3772ff;-webkit-box-shadow:0 0 0 .2rem rgba(55,114,255,.25);box-shadow:0 0 0 .2rem rgba(55,114,255,.25)}.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip{display:block}.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip{display:block}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#3772ff}.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip,.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip{display:block}.was-validated .custom-control-input:valid~.custom-control-label,.custom-control-input.is-valid~.custom-control-label{color:#3772ff}.was-validated .custom-control-input:valid~.custom-control-label::before,.custom-control-input.is-valid~.custom-control-label::before{background-color:#b7ccff}.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip,.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip{display:block}.was-validated .custom-control-input:valid:checked~.custom-control-label::before,.custom-control-input.is-valid:checked~.custom-control-label::before{background:#6a96ff -webkit-gradient(linear,left top,left bottom,from(#80a6ff),to(#6a96ff)) repeat-x;background:#6a96ff -webkit-linear-gradient(top,#80a6ff,#6a96ff) repeat-x;background:#6a96ff -o-linear-gradient(top,#80a6ff,#6a96ff) repeat-x;background:#6a96ff linear-gradient(180deg,#80a6ff,#6a96ff) repeat-x}.was-validated .custom-control-input:valid:focus~.custom-control-label::before,.custom-control-input.is-valid:focus~.custom-control-label::before{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(55,114,255,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(55,114,255,.25)}.was-validated .custom-file-input:valid~.custom-file-label,.custom-file-input.is-valid~.custom-file-label{border-color:#3772ff}.was-validated .custom-file-input:valid~.custom-file-label::after,.custom-file-input.is-valid~.custom-file-label::after{border-color:inherit}.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip,.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip{display:block}.was-validated .custom-file-input:valid:focus~.custom-file-label,.custom-file-input.is-valid:focus~.custom-file-label{-webkit-box-shadow:0 0 0 .2rem rgba(55,114,255,.25);box-shadow:0 0 0 .2rem rgba(55,114,255,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#ed6a5a}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(237,106,90,.9);border-radius:.25rem}.was-validated .form-control:invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#ed6a5a}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#ed6a5a;-webkit-box-shadow:0 0 0 .2rem rgba(237,106,90,.25);box-shadow:0 0 0 .2rem rgba(237,106,90,.25)}.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip{display:block}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#ed6a5a}.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip,.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip{display:block}.was-validated .custom-control-input:invalid~.custom-control-label,.custom-control-input.is-invalid~.custom-control-label{color:#ed6a5a}.was-validated .custom-control-input:invalid~.custom-control-label::before,.custom-control-input.is-invalid~.custom-control-label::before{background-color:#fad2cd}.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip,.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip{display:block}.was-validated .custom-control-input:invalid:checked~.custom-control-label::before,.custom-control-input.is-invalid:checked~.custom-control-label::before{background:#f29488 -webkit-gradient(linear,left top,left bottom,from(#f4a49a),to(#f29488)) repeat-x;background:#f29488 -webkit-linear-gradient(top,#f4a49a,#f29488) repeat-x;background:#f29488 -o-linear-gradient(top,#f4a49a,#f29488) repeat-x;background:#f29488 linear-gradient(180deg,#f4a49a,#f29488) repeat-x}.was-validated .custom-control-input:invalid:focus~.custom-control-label::before,.custom-control-input.is-invalid:focus~.custom-control-label::before{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(237,106,90,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(237,106,90,.25)}.was-validated .custom-file-input:invalid~.custom-file-label,.custom-file-input.is-invalid~.custom-file-label{border-color:#ed6a5a}.was-validated .custom-file-input:invalid~.custom-file-label::after,.custom-file-input.is-invalid~.custom-file-label::after{border-color:inherit}.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip,.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip{display:block}.was-validated .custom-file-input:invalid:focus~.custom-file-label,.custom-file-input.is-invalid:focus~.custom-file-label{-webkit-box-shadow:0 0 0 .2rem rgba(237,106,90,.25);box-shadow:0 0 0 .2rem rgba(237,106,90,.25)}.form-inline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media(min-width:576px){.form-inline label{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{-webkit-transition:none;-o-transition:none;transition:none}}.btn:hover,.btn:focus{text-decoration:none}.btn:focus,.btn.focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(48,99,142,.25);box-shadow:0 0 0 .2rem rgba(48,99,142,.25)}.btn.disabled,.btn:disabled{opacity:.65;-webkit-box-shadow:none;box-shadow:none}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled):active,.btn:not(:disabled):not(.disabled).active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:not(:disabled):not(.disabled):active:focus,.btn:not(:disabled):not(.disabled).active:focus{-webkit-box-shadow:0 0 0 .2rem rgba(48,99,142,.25),inset 0 3px 5px rgba(0,0,0,.125);box-shadow:0 0 0 .2rem rgba(48,99,142,.25),inset 0 3px 5px rgba(0,0,0,.125)}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x;border-color:#30638e;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-primary:hover{color:#fff;background:#264f71 -webkit-gradient(linear,left top,left bottom,from(#476987),to(#264f71)) repeat-x;background:#264f71 -webkit-linear-gradient(top,#476987,#264f71) repeat-x;background:#264f71 -o-linear-gradient(top,#476987,#264f71) repeat-x;background:#264f71 linear-gradient(180deg,#476987,#264f71) repeat-x;border-color:#234868}.btn-primary:focus,.btn-primary.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(48,99,142,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(48,99,142,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#30638e;border-color:#30638e}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#234868;background-image:none;border-color:#20425e}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(48,99,142,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(48,99,142,.5)}.btn-secondary{color:#fff;background:#FFA630 -webkit-gradient(linear,left top,left bottom,from(#ffb34f),to(#FFA630)) repeat-x;background:#ffa630 -webkit-linear-gradient(top,#ffb34f,#FFA630) repeat-x;background:#ffa630 -o-linear-gradient(top,#ffb34f,#FFA630) repeat-x;background:#ffa630 linear-gradient(180deg,#ffb34f,#FFA630) repeat-x;border-color:#ffa630;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-secondary:hover{color:#fff;background:#ff960a -webkit-gradient(linear,left top,left bottom,from(#ffa52f),to(#ff960a)) repeat-x;background:#ff960a -webkit-linear-gradient(top,#ffa52f,#ff960a) repeat-x;background:#ff960a -o-linear-gradient(top,#ffa52f,#ff960a) repeat-x;background:#ff960a linear-gradient(180deg,#ffa52f,#ff960a) repeat-x;border-color:#fc9000}.btn-secondary:focus,.btn-secondary.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(255,166,48,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(255,166,48,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#ffa630;border-color:#ffa630}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#fc9000;background-image:none;border-color:#ef8800}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,166,48,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,166,48,.5)}.btn-success{color:#fff;background:#3772FF -webkit-gradient(linear,left top,left bottom,from(#5587ff),to(#3772FF)) repeat-x;background:#3772ff -webkit-linear-gradient(top,#5587ff,#3772FF) repeat-x;background:#3772ff -o-linear-gradient(top,#5587ff,#3772FF) repeat-x;background:#3772ff linear-gradient(180deg,#5587ff,#3772FF) repeat-x;border-color:#3772ff;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-success:hover{color:#fff;background:#1157ff -webkit-gradient(linear,left top,left bottom,from(#3470ff),to(#1157ff)) repeat-x;background:#1157ff -webkit-linear-gradient(top,#3470ff,#1157ff) repeat-x;background:#1157ff -o-linear-gradient(top,#3470ff,#1157ff) repeat-x;background:#1157ff linear-gradient(180deg,#3470ff,#1157ff) repeat-x;border-color:#044eff}.btn-success:focus,.btn-success.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(55,114,255,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(55,114,255,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#3772ff;border-color:#3772ff}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#044eff;background-image:none;border-color:#0049f6}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(55,114,255,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(55,114,255,.5)}.btn-info{color:#222;background:#C0E0DE -webkit-gradient(linear,left top,left bottom,from(#c9e5e3),to(#C0E0DE)) repeat-x;background:#c0e0de -webkit-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x;background:#c0e0de -o-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x;background:#c0e0de linear-gradient(180deg,#c9e5e3,#C0E0DE) repeat-x;border-color:#c0e0de;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-info:hover{color:#fff;background:#a6d3d1 -webkit-gradient(linear,left top,left bottom,from(#b4dad8),to(#a6d3d1)) repeat-x;background:#a6d3d1 -webkit-linear-gradient(top,#b4dad8,#a6d3d1) repeat-x;background:#a6d3d1 -o-linear-gradient(top,#b4dad8,#a6d3d1) repeat-x;background:#a6d3d1 linear-gradient(180deg,#b4dad8,#a6d3d1) repeat-x;border-color:#9ecfcc}.btn-info:focus,.btn-info.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(192,224,222,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(192,224,222,.5)}.btn-info.disabled,.btn-info:disabled{color:#222;background-color:#c0e0de;border-color:#c0e0de}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#9ecfcc;background-image:none;border-color:#95cbc8}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(192,224,222,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(192,224,222,.5)}.btn-warning{color:#fff;background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x;border-color:#ed6a5a;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-warning:hover{color:#fff;background:#e94b38 -webkit-gradient(linear,left top,left bottom,from(#ed6655),to(#e94b38)) repeat-x;background:#e94b38 -webkit-linear-gradient(top,#ed6655,#e94b38) repeat-x;background:#e94b38 -o-linear-gradient(top,#ed6655,#e94b38) repeat-x;background:#e94b38 linear-gradient(180deg,#ed6655,#e94b38) repeat-x;border-color:#e8402c}.btn-warning:focus,.btn-warning.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(237,106,90,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(237,106,90,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#ed6a5a;border-color:#ed6a5a}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#e8402c;background-image:none;border-color:#e73621}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5)}.btn-danger{color:#fff;background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x;border-color:#ed6a5a;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger:hover{color:#fff;background:#e94b38 -webkit-gradient(linear,left top,left bottom,from(#ed6655),to(#e94b38)) repeat-x;background:#e94b38 -webkit-linear-gradient(top,#ed6655,#e94b38) repeat-x;background:#e94b38 -o-linear-gradient(top,#ed6655,#e94b38) repeat-x;background:#e94b38 linear-gradient(180deg,#ed6655,#e94b38) repeat-x;border-color:#e8402c}.btn-danger:focus,.btn-danger.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(237,106,90,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(237,106,90,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#ed6a5a;border-color:#ed6a5a}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#e8402c;background-image:none;border-color:#e73621}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5)}.btn-light{color:#222;background:#D3F3EE -webkit-gradient(linear,left top,left bottom,from(#daf5f1),to(#D3F3EE)) repeat-x;background:#d3f3ee -webkit-linear-gradient(top,#daf5f1,#D3F3EE) repeat-x;background:#d3f3ee -o-linear-gradient(top,#daf5f1,#D3F3EE) repeat-x;background:#d3f3ee linear-gradient(180deg,#daf5f1,#D3F3EE) repeat-x;border-color:#d3f3ee;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-light:hover{color:#222;background:#b5ebe2 -webkit-gradient(linear,left top,left bottom,from(#c0eee7),to(#b5ebe2)) repeat-x;background:#b5ebe2 -webkit-linear-gradient(top,#c0eee7,#b5ebe2) repeat-x;background:#b5ebe2 -o-linear-gradient(top,#c0eee7,#b5ebe2) repeat-x;background:#b5ebe2 linear-gradient(180deg,#c0eee7,#b5ebe2) repeat-x;border-color:#abe8df}.btn-light:focus,.btn-light.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(211,243,238,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(211,243,238,.5)}.btn-light.disabled,.btn-light:disabled{color:#222;background-color:#d3f3ee;border-color:#d3f3ee}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#222;background-color:#abe8df;background-image:none;border-color:#a1e5db}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(211,243,238,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(211,243,238,.5)}.btn-dark{color:#fff;background:#403F4C -webkit-gradient(linear,left top,left bottom,from(#5d5c67),to(#403F4C)) repeat-x;background:#403f4c -webkit-linear-gradient(top,#5d5c67,#403F4C) repeat-x;background:#403f4c -o-linear-gradient(top,#5d5c67,#403F4C) repeat-x;background:#403f4c linear-gradient(180deg,#5d5c67,#403F4C) repeat-x;border-color:#403f4c;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-dark:hover{color:#fff;background:#2e2e37 -webkit-gradient(linear,left top,left bottom,from(#4e4d55),to(#2e2e37)) repeat-x;background:#2e2e37 -webkit-linear-gradient(top,#4e4d55,#2e2e37) repeat-x;background:#2e2e37 -o-linear-gradient(top,#4e4d55,#2e2e37) repeat-x;background:#2e2e37 linear-gradient(180deg,#4e4d55,#2e2e37) repeat-x;border-color:#292830}.btn-dark:focus,.btn-dark.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(64,63,76,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(64,63,76,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#403f4c;border-color:#403f4c}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#292830;background-image:none;border-color:#232229}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(64,63,76,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(64,63,76,.5)}.btn-outline-primary{color:#30638e;background-color:transparent;background-image:none;border-color:#30638e}.btn-outline-primary:hover{color:#fff;background-color:#30638e;border-color:#30638e}.btn-outline-primary:focus,.btn-outline-primary.focus{-webkit-box-shadow:0 0 0 .2rem rgba(48,99,142,.5);box-shadow:0 0 0 .2rem rgba(48,99,142,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#30638e;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#30638e;border-color:#30638e}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(48,99,142,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(48,99,142,.5)}.btn-outline-secondary{color:#ffa630;background-color:transparent;background-image:none;border-color:#ffa630}.btn-outline-secondary:hover{color:#fff;background-color:#ffa630;border-color:#ffa630}.btn-outline-secondary:focus,.btn-outline-secondary.focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,166,48,.5);box-shadow:0 0 0 .2rem rgba(255,166,48,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#ffa630;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#ffa630;border-color:#ffa630}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,166,48,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,166,48,.5)}.btn-outline-success{color:#3772ff;background-color:transparent;background-image:none;border-color:#3772ff}.btn-outline-success:hover{color:#fff;background-color:#3772ff;border-color:#3772ff}.btn-outline-success:focus,.btn-outline-success.focus{-webkit-box-shadow:0 0 0 .2rem rgba(55,114,255,.5);box-shadow:0 0 0 .2rem rgba(55,114,255,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#3772ff;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#3772ff;border-color:#3772ff}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(55,114,255,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(55,114,255,.5)}.btn-outline-info{color:#c0e0de;background-color:transparent;background-image:none;border-color:#c0e0de}.btn-outline-info:hover{color:#222;background-color:#c0e0de;border-color:#c0e0de}.btn-outline-info:focus,.btn-outline-info.focus{-webkit-box-shadow:0 0 0 .2rem rgba(192,224,222,.5);box-shadow:0 0 0 .2rem rgba(192,224,222,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#c0e0de;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#222;background-color:#c0e0de;border-color:#c0e0de}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(192,224,222,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(192,224,222,.5)}.btn-outline-warning{color:#ed6a5a;background-color:transparent;background-image:none;border-color:#ed6a5a}.btn-outline-warning:hover{color:#fff;background-color:#ed6a5a;border-color:#ed6a5a}.btn-outline-warning:focus,.btn-outline-warning.focus{-webkit-box-shadow:0 0 0 .2rem rgba(237,106,90,.5);box-shadow:0 0 0 .2rem rgba(237,106,90,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ed6a5a;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#ed6a5a;border-color:#ed6a5a}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5)}.btn-outline-danger{color:#ed6a5a;background-color:transparent;background-image:none;border-color:#ed6a5a}.btn-outline-danger:hover{color:#fff;background-color:#ed6a5a;border-color:#ed6a5a}.btn-outline-danger:focus,.btn-outline-danger.focus{-webkit-box-shadow:0 0 0 .2rem rgba(237,106,90,.5);box-shadow:0 0 0 .2rem rgba(237,106,90,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#ed6a5a;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#ed6a5a;border-color:#ed6a5a}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5)}.btn-outline-light{color:#d3f3ee;background-color:transparent;background-image:none;border-color:#d3f3ee}.btn-outline-light:hover{color:#222;background-color:#d3f3ee;border-color:#d3f3ee}.btn-outline-light:focus,.btn-outline-light.focus{-webkit-box-shadow:0 0 0 .2rem rgba(211,243,238,.5);box-shadow:0 0 0 .2rem rgba(211,243,238,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#d3f3ee;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#222;background-color:#d3f3ee;border-color:#d3f3ee}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(211,243,238,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(211,243,238,.5)}.btn-outline-dark{color:#403f4c;background-color:transparent;background-image:none;border-color:#403f4c}.btn-outline-dark:hover{color:#fff;background-color:#403f4c;border-color:#403f4c}.btn-outline-dark:focus,.btn-outline-dark.focus{-webkit-box-shadow:0 0 0 .2rem rgba(64,63,76,.5);box-shadow:0 0 0 .2rem rgba(64,63,76,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#403f4c;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#403f4c;border-color:#403f4c}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(64,63,76,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(64,63,76,.5)}.btn-link{font-weight:400;color:#3176d9;background-color:transparent}.btn-link:hover{color:#1e53a0;text-decoration:none;background-color:transparent;border-color:transparent}.btn-link:focus,.btn-link.focus{text-decoration:none;border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:disabled,.btn-link.disabled{color:#888;pointer-events:none}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{-webkit-transition:none;-o-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{-webkit-transition:none;-o-transition:none;transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#222;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.175);box-shadow:0 .5rem 1rem rgba(0,0,0,.175)}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=top],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #eee}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#222;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#151515;text-decoration:none;background:#f8f9fa -webkit-gradient(linear,left top,left bottom,from(#f9fafb),to(#f8f9fa)) repeat-x;background:#f8f9fa -webkit-linear-gradient(top,#f9fafb,#f8f9fa) repeat-x;background:#f8f9fa -o-linear-gradient(top,#f9fafb,#f8f9fa) repeat-x;background:#f8f9fa linear-gradient(180deg,#f9fafb,#f8f9fa) repeat-x}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x}.dropdown-item.disabled,.dropdown-item:disabled{color:#888;background-color:transparent;background-image:none}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#888;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#222}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group.show .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.custom-select,.input-group>.custom-file{position:relative;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus~.custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:last-child),.input-group>.custom-select:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-prepend,.input-group-append{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.input-group-prepend .btn,.input-group-append .btn{position:relative;z-index:2}.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#eee;border:1px solid #ccc;border-radius:.25rem}.input-group-text input[type=radio],.input-group-text input[type=checkbox]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-append>.btn{height:-webkit-calc(2.875rem + 2px);height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-append>.btn{height:-webkit-calc(1.8125rem + 2px);height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text,.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x;-webkit-box-shadow:none;box-shadow:none}.custom-control-input:focus~.custom-control-label::before{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(48,99,142,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(48,99,142,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#95bbdb;-webkit-box-shadow:none;box-shadow:none}.custom-control-input:disabled~.custom-control-label{color:#888}.custom-control-input:disabled~.custom-control-label::before{background-color:#eee}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6;-webkit-box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1);box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:50%;-webkit-background-size:50% 50%;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA4IDgiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik02LjU2NC43NWwtMy41OSAzLjYxMi0xLjUzOC0xLjU1TDAgNC4yNiAyLjk3NCA3LjI1IDggMi4xOTN6Ii8+PC9zdmc+)}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x;-webkit-box-shadow:none;box-shadow:none}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0IDQiPjxwYXRoIHN0cm9rZT0iI2ZmZiIgZD0iTTAgMmg0Ii8+PC9zdmc+)}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(48,99,142,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(48,99,142,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IC00IDggOCI+PGNpcmNsZSByPSIzIiBmaWxsPSIjZmZmIi8+PC9zdmc+)}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(48,99,142,.5)}.custom-select{display:inline-block;width:100%;height:-webkit-calc(2.25rem + 2px);height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0IDUiPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik0yIDAgMCAyaDR6bTAgNUwwIDNoNHoiLz48L3N2Zz4=) no-repeat 100% .75rem 50%;-webkit-background-size:8px 10px;background-size:8px 10px;border:1px solid #ccc;border-radius:.25rem;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.075);box-shadow:inset 0 1px 2px rgba(0,0,0,.075);-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#6fa3ce;outline:0;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 0 .2rem rgba(111,163,206,.5);box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 0 .2rem rgba(111,163,206,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#888;background-color:#eee}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:-webkit-calc(1.8125rem + 2px);height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:-webkit-calc(2.875rem + 2px);height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:-webkit-calc(2.25rem + 2px);height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:-webkit-calc(2.25rem + 2px);height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#6fa3ce;-webkit-box-shadow:0 0 0 .2rem rgba(48,99,142,.25);box-shadow:0 0 0 .2rem rgba(48,99,142,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#6fa3ce}.custom-file-input:disabled~.custom-file-label{background-color:#eee}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:-webkit-calc(2.25rem + 2px);height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ccc;border-radius:.25rem;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background:#eee -webkit-gradient(linear,left top,left bottom,from(#f1f1f1),to(#eee)) repeat-x;background:#eee -webkit-linear-gradient(top,#f1f1f1,#eee) repeat-x;background:#eee -o-linear-gradient(top,#f1f1f1,#eee) repeat-x;background:#eee linear-gradient(180deg,#f1f1f1,#eee) repeat-x;border-left:1px solid #ccc;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(48,99,142,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(48,99,142,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(48,99,142,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(48,99,142,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x;border:0;border-radius:1rem;-webkit-box-shadow:0 .1rem .25rem rgba(0,0,0,.1);box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;-o-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background:#95bbdb -webkit-gradient(linear,left top,left bottom,from(#a5c5e1),to(#95bbdb)) repeat-x;background:#95bbdb -webkit-linear-gradient(top,#a5c5e1,#95bbdb) repeat-x;background:#95bbdb linear-gradient(180deg,#a5c5e1,#95bbdb) repeat-x}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem;-webkit-box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1);box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-webkit-transition:none;-o-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background:#95bbdb linear-gradient(180deg,#a5c5e1,#95bbdb) repeat-x}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem;box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-webkit-transition:none;-o-transition:none;transition:none}}.custom-range::-ms-thumb:active{background:#95bbdb linear-gradient(180deg,#a5c5e1,#95bbdb) repeat-x}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem;box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{-webkit-transition:none;-o-transition:none;transition:none}}.nav{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#888}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#eee #eee #dee2e6}.nav-tabs .nav-link.disabled{color:#888;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#30638e}.nav-fill .nav-item{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;-webkit-background-size:100% 100%;background-size:100% 100%}@media(max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media(min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media(max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media(min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media(max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media(min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media(max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media(min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzAgMzAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggc3Ryb2tlPSJyZ2JhKDAsIDAsIDAsIDAuNSkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik00IDdoMjJNNCAxNWgyMk00IDIzaDIyIi8+PC9zdmc+)}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.75);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzAgMzAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggc3Ryb2tlPSJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMiIvPjwvc3ZnPg==)}.navbar-dark .navbar-text{color:rgba(255,255,255,.75)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card,.td-content .highlight{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr,.td-content .highlight>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child,.td-content .highlight>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child,.td-content .highlight>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:-webkit-calc(0.25rem - 1px) -webkit-calc(0.25rem - 1px) 0 0;border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 -webkit-calc(0.25rem - 1px) -webkit-calc(0.25rem - 1px);border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:-webkit-calc(0.25rem - 1px);border-radius:calc(0.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:-webkit-calc(0.25rem - 1px);border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:-webkit-calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:-webkit-calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:-webkit-calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card-deck{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.card-deck .card,.card-deck .td-content .highlight,.td-content .card-deck .highlight{margin-bottom:15px}@media(min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card,.card-deck .td-content .highlight,.td-content .card-deck .highlight{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1 0 0%;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.card-group>.card,.td-content .card-group>.highlight{margin-bottom:15px}@media(min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card,.td-content .card-group>.highlight{-webkit-box-flex:1;-webkit-flex:1 0 0%;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card,.td-content .card-group>.highlight+.card,.td-content .card-group>.card+.highlight,.td-content .card-group>.highlight+.highlight{margin-left:0;border-left:0}.card-group>.card:first-child,.td-content .card-group>.highlight:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-img-top,.td-content .card-group>.highlight:first-child .card-img-top,.card-group>.card:first-child .card-header,.td-content .card-group>.highlight:first-child .card-header{border-top-right-radius:0}.card-group>.card:first-child .card-img-bottom,.td-content .card-group>.highlight:first-child .card-img-bottom,.card-group>.card:first-child .card-footer,.td-content .card-group>.highlight:first-child .card-footer{border-bottom-right-radius:0}.card-group>.card:last-child,.td-content .card-group>.highlight:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-img-top,.td-content .card-group>.highlight:last-child .card-img-top,.card-group>.card:last-child .card-header,.td-content .card-group>.highlight:last-child .card-header{border-top-left-radius:0}.card-group>.card:last-child .card-img-bottom,.td-content .card-group>.highlight:last-child .card-img-bottom,.card-group>.card:last-child .card-footer,.td-content .card-group>.highlight:last-child .card-footer{border-bottom-left-radius:0}.card-group>.card:only-child,.td-content .card-group>.highlight:only-child{border-radius:.25rem}.card-group>.card:only-child .card-img-top,.td-content .card-group>.highlight:only-child .card-img-top,.card-group>.card:only-child .card-header,.td-content .card-group>.highlight:only-child .card-header{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-img-bottom,.td-content .card-group>.highlight:only-child .card-img-bottom,.card-group>.card:only-child .card-footer,.td-content .card-group>.highlight:only-child .card-footer{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child),.td-content .card-group>.highlight:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,.td-content .card-group>.highlight:not(:first-child):not(:last-child):not(:only-child) .card-img-top,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.td-content .card-group>.highlight:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.td-content .card-group>.highlight:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.td-content .card-group>.highlight:not(:first-child):not(:last-child):not(:only-child) .card-footer{border-radius:0}}.card-columns .card,.card-columns .td-content .highlight,.td-content .card-columns .highlight{margin-bottom:.75rem}@media(min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card,.card-columns .td-content .highlight,.td-content .card-columns .highlight{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type),.accordion .td-content .highlight:not(:first-of-type):not(:last-of-type),.td-content .accordion .highlight:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child,.accordion .td-content .highlight:not(:first-of-type) .card-header:first-child,.td-content .accordion .highlight:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type,.accordion .td-content .highlight:first-of-type,.td-content .accordion .highlight:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type,.accordion .td-content .highlight:last-of-type,.td-content .accordion .highlight:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#eee;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#888;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#888}.pagination{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#888;background-color:#fff;border:1px solid rgba(0,0,0,.1)}.page-link:hover{z-index:2;color:#1e53a0;text-decoration:none;background-color:#eee;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(48,99,142,.25);box-shadow:0 0 0 .2rem rgba(48,99,142,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#30638e;border-color:#2a567b}.page-item.disabled .page-link{color:#dee2e6;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#30638e}.badge-primary[href]:hover,.badge-primary[href]:focus{color:#fff;text-decoration:none;background-color:#234868}.badge-secondary{color:#fff;background-color:#ffa630}.badge-secondary[href]:hover,.badge-secondary[href]:focus{color:#fff;text-decoration:none;background-color:#fc9000}.badge-success{color:#fff;background-color:#3772ff}.badge-success[href]:hover,.badge-success[href]:focus{color:#fff;text-decoration:none;background-color:#044eff}.badge-info{color:#222;background-color:#c0e0de}.badge-info[href]:hover,.badge-info[href]:focus{color:#222;text-decoration:none;background-color:#9ecfcc}.badge-warning{color:#fff;background-color:#ed6a5a}.badge-warning[href]:hover,.badge-warning[href]:focus{color:#fff;text-decoration:none;background-color:#e8402c}.badge-danger{color:#fff;background-color:#ed6a5a}.badge-danger[href]:hover,.badge-danger[href]:focus{color:#fff;text-decoration:none;background-color:#e8402c}.badge-light{color:#222;background-color:#d3f3ee}.badge-light[href]:hover,.badge-light[href]:focus{color:#222;text-decoration:none;background-color:#abe8df}.badge-dark{color:#fff;background-color:#403f4c}.badge-dark[href]:hover,.badge-dark[href]:focus{color:#fff;text-decoration:none;background-color:#292830}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#eee;border-radius:.3rem}@media(min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#19334a;background:#d6e0e8 -webkit-gradient(linear,left top,left bottom,from(#dce5eb),to(#d6e0e8)) repeat-x;background:#d6e0e8 -webkit-linear-gradient(top,#dce5eb,#d6e0e8) repeat-x;background:#d6e0e8 -o-linear-gradient(top,#dce5eb,#d6e0e8) repeat-x;background:#d6e0e8 linear-gradient(180deg,#dce5eb,#d6e0e8) repeat-x;border-color:#c5d3df}.alert-primary hr{border-top-color:#b5c7d6}.alert-primary .alert-link{color:#0c1924}.alert-secondary{color:#855619;background:#ffedd6 -webkit-gradient(linear,left top,left bottom,from(#fff0dc),to(#ffedd6)) repeat-x;background:#ffedd6 -webkit-linear-gradient(top,#fff0dc,#ffedd6) repeat-x;background:#ffedd6 -o-linear-gradient(top,#fff0dc,#ffedd6) repeat-x;background:#ffedd6 linear-gradient(180deg,#fff0dc,#ffedd6) repeat-x;border-color:#ffe6c5}.alert-secondary hr{border-top-color:#ffdbac}.alert-secondary .alert-link{color:#5a3a11}.alert-success{color:#1d3b85;background:#d7e3ff -webkit-gradient(linear,left top,left bottom,from(#dde7ff),to(#d7e3ff)) repeat-x;background:#d7e3ff -webkit-linear-gradient(top,#dde7ff,#d7e3ff) repeat-x;background:#d7e3ff -o-linear-gradient(top,#dde7ff,#d7e3ff) repeat-x;background:#d7e3ff linear-gradient(180deg,#dde7ff,#d7e3ff) repeat-x;border-color:#c7d8ff}.alert-success hr{border-top-color:#aec6ff}.alert-success .alert-link{color:#14285b}.alert-info{color:#647473;background:#f2f9f8 -webkit-gradient(linear,left top,left bottom,from(#f4faf9),to(#f2f9f8)) repeat-x;background:#f2f9f8 -webkit-linear-gradient(top,#f4faf9,#f2f9f8) repeat-x;background:#f2f9f8 -o-linear-gradient(top,#f4faf9,#f2f9f8) repeat-x;background:#f2f9f8 linear-gradient(180deg,#f4faf9,#f2f9f8) repeat-x;border-color:#edf6f6}.alert-info hr{border-top-color:#dceeee}.alert-info .alert-link{color:#4c5958}.alert-warning{color:#7b372f;background:#fbe1de -webkit-gradient(linear,left top,left bottom,from(#fce6e3),to(#fbe1de)) repeat-x;background:#fbe1de -webkit-linear-gradient(top,#fce6e3,#fbe1de) repeat-x;background:#fbe1de -o-linear-gradient(top,#fce6e3,#fbe1de) repeat-x;background:#fbe1de linear-gradient(180deg,#fce6e3,#fbe1de) repeat-x;border-color:#fad5d1}.alert-warning hr{border-top-color:#f8c0ba}.alert-warning .alert-link{color:#562721}.alert-danger{color:#7b372f;background:#fbe1de -webkit-gradient(linear,left top,left bottom,from(#fce6e3),to(#fbe1de)) repeat-x;background:#fbe1de -webkit-linear-gradient(top,#fce6e3,#fbe1de) repeat-x;background:#fbe1de -o-linear-gradient(top,#fce6e3,#fbe1de) repeat-x;background:#fbe1de linear-gradient(180deg,#fce6e3,#fbe1de) repeat-x;border-color:#fad5d1}.alert-danger hr{border-top-color:#f8c0ba}.alert-danger .alert-link{color:#562721}.alert-light{color:#6e7e7c;background:#f6fdfc -webkit-gradient(linear,left top,left bottom,from(#f7fdfc),to(#f6fdfc)) repeat-x;background:#f6fdfc -webkit-linear-gradient(top,#f7fdfc,#f6fdfc) repeat-x;background:#f6fdfc -o-linear-gradient(top,#f7fdfc,#f6fdfc) repeat-x;background:#f6fdfc linear-gradient(180deg,#f7fdfc,#f6fdfc) repeat-x;border-color:#f3fcfa}.alert-light hr{border-top-color:#dff7f2}.alert-light .alert-link{color:#566361}.alert-dark{color:#212128;background:#d9d9db -webkit-gradient(linear,left top,left bottom,from(#dfdfe0),to(#d9d9db)) repeat-x;background:#d9d9db -webkit-linear-gradient(top,#dfdfe0,#d9d9db) repeat-x;background:#d9d9db -o-linear-gradient(top,#dfdfe0,#d9d9db) repeat-x;background:#d9d9db linear-gradient(180deg,#dfdfe0,#d9d9db) repeat-x;border-color:#cac9cd}.alert-dark hr{border-top-color:#bdbcc1}.alert-dark .alert-link{color:#0a0a0c}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#eee;border-radius:.25rem;-webkit-box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1);box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1)}.progress-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#30638e;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{-webkit-transition:none;-o-transition:none;transition:none}}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:1rem 1rem;background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;-o-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#222;background-color:#eee}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:hover,.list-group-item:focus{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#888;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#30638e;border-color:#30638e}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#19334a;background-color:#c5d3df}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#19334a;background-color:#b5c7d6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#19334a;border-color:#19334a}.list-group-item-secondary{color:#855619;background-color:#ffe6c5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#855619;background-color:#ffdbac}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#855619;border-color:#855619}.list-group-item-success{color:#1d3b85;background-color:#c7d8ff}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#1d3b85;background-color:#aec6ff}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#1d3b85;border-color:#1d3b85}.list-group-item-info{color:#647473;background-color:#edf6f6}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#647473;background-color:#dceeee}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#647473;border-color:#647473}.list-group-item-warning{color:#7b372f;background-color:#fad5d1}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#7b372f;background-color:#f8c0ba}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#7b372f;border-color:#7b372f}.list-group-item-danger{color:#7b372f;background-color:#fad5d1}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#7b372f;background-color:#f8c0ba}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#7b372f;border-color:#7b372f}.list-group-item-light{color:#6e7e7c;background-color:#f3fcfa}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#6e7e7c;background-color:#dff7f2}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#6e7e7c;border-color:#6e7e7c}.list-group-item-dark{color:#212128;background-color:#cac9cd}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#212128;background-color:#bdbcc1}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#212128;border-color:#212128}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{-webkit-transition:none;-o-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;min-height:-webkit-calc(100% - (0.5rem * 2));min-height:calc(100% - (0.5rem * 2))}.modal-dialog-centered::before{display:block;height:-webkit-calc(100vh - (0.5rem * 2));height:calc(100vh - (0.5rem * 2));content:""}.modal-content{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;-webkit-box-shadow:0 .25rem .5rem rgba(0,0,0,.5);box-shadow:0 .25rem .5rem rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #eee;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #eee}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media(min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:-webkit-calc(100% - (1.75rem * 2));min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:-webkit-calc(100vh - (1.75rem * 2));height:calc(100vh - (1.75rem * 2))}.modal-content{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.5);box-shadow:0 .5rem 1rem rgba(0,0,0,.5)}.modal-sm{max-width:300px}}@media(min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:open sans,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^=top]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^=top] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^=top] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^=right]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^=right] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^=right] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^=bottom]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^=bottom] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^=bottom] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^=left]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^=left] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^=left] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:open sans,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;-webkit-box-shadow:0 .25rem .5rem rgba(0,0,0,.2);box-shadow:0 .25rem .5rem rgba(0,0,0,.2)}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^=top]{margin-bottom:.5rem}.bs-popover-top .arrow,.bs-popover-auto[x-placement^=top] .arrow{bottom:-webkit-calc((0.5rem + 1px) * -1);bottom:calc((0.5rem + 1px) * -1)}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::after{border-width:.5rem .5rem 0}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^=top] .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^=right]{margin-left:.5rem}.bs-popover-right .arrow,.bs-popover-auto[x-placement^=right] .arrow{left:-webkit-calc((0.5rem + 1px) * -1);left:calc((0.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::after{border-width:.5rem .5rem .5rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^=right] .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::after{left:1px;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^=bottom]{margin-top:.5rem}.bs-popover-bottom .arrow,.bs-popover-auto[x-placement^=bottom] .arrow{top:-webkit-calc((0.5rem + 1px) * -1);top:calc((0.5rem + 1px) * -1)}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::after{border-width:0 .5rem .5rem}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^=bottom] .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^=left]{margin-right:.5rem}.bs-popover-left .arrow,.bs-popover-auto[x-placement^=left] .arrow{right:-webkit-calc((0.5rem + 1px) * -1);right:calc((0.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::after{border-width:.5rem 0 .5rem .5rem}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^=left] .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:-webkit-calc(0.3rem - 1px);border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:-webkit-calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#222}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block;-webkit-transition:-webkit-transform .6s ease;transition:-webkit-transform .6s ease;-o-transition:-o-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease,-o-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item.active,.carousel-item-next,.carousel-item-prev{-webkit-transition:none;-o-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}@supports((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-item-next,.active.carousel-item-right{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);-o-transform:translateX(100%);transform:translateX(100%)}@supports((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next,.active.carousel-item-right{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.carousel-item-prev,.active.carousel-item-left{-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);-o-transform:translateX(-100%);transform:translateX(-100%)}@supports((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-prev,.active.carousel-item-left{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;-webkit-transition-duration:.6s;-o-transition-duration:.6s;transition-duration:.6s;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active,.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev{-webkit-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}@supports((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active,.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0;background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,0.25)),to(rgba(0,0,0,0.001)));background:-webkit-linear-gradient(left,rgba(0,0,0,0.25),rgba(0,0,0,0.001));background:-o-linear-gradient(left,rgba(0,0,0,0.25),rgba(0,0,0,0.001));background:linear-gradient(90deg,rgba(0,0,0,0.25),rgba(0,0,0,0.001))}.carousel-control-next{right:0;background:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,0.25)),to(rgba(0,0,0,0.001)));background:-webkit-linear-gradient(right,rgba(0,0,0,0.25),rgba(0,0,0,0.001));background:-o-linear-gradient(right,rgba(0,0,0,0.25),rgba(0,0,0,0.001));background:linear-gradient(270deg,rgba(0,0,0,0.25),rgba(0,0,0,0.001))}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat 50%;-webkit-background-size:100% 100%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiNmZmYiIHZpZXdCb3g9IjAgMCA4IDgiPjxwYXRoIGQ9Ik01LjI1LjBsLTQgNCA0IDQgMS41LTEuNUw0LjI1IDRsMi41LTIuNUw1LjI1LjB6Ii8+PC9zdmc+)}.carousel-control-next-icon{background-image:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiNmZmYiIHZpZXdCb3g9IjAgMCA4IDgiPjxwYXRoIGQ9Ik0yLjc1LjBsLTEuNSAxLjVMMy43NSA0bC0yLjUgMi41TDIuNzUgOGw0LTQtNC00eiIvPjwvc3ZnPg==)}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#30638e!important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#234868!important}.bg-secondary{background-color:#ffa630!important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#fc9000!important}.bg-success{background-color:#3772ff!important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#044eff!important}.bg-info{background-color:#c0e0de!important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#9ecfcc!important}.bg-warning{background-color:#ed6a5a!important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#e8402c!important}.bg-danger{background-color:#ed6a5a!important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#e8402c!important}.bg-light{background-color:#d3f3ee!important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#abe8df!important}.bg-dark{background-color:#403f4c!important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#292830!important}.bg-gradient-primary{background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x!important;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x!important}.bg-gradient-secondary{background:#FFA630 -webkit-gradient(linear,left top,left bottom,from(#ffb34f),to(#FFA630)) repeat-x!important;background:#ffa630 -webkit-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 -o-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 linear-gradient(180deg,#ffb34f,#FFA630) repeat-x!important}.bg-gradient-success{background:#3772FF -webkit-gradient(linear,left top,left bottom,from(#5587ff),to(#3772FF)) repeat-x!important;background:#3772ff -webkit-linear-gradient(top,#5587ff,#3772FF) repeat-x!important;background:#3772ff -o-linear-gradient(top,#5587ff,#3772FF) repeat-x!important;background:#3772ff linear-gradient(180deg,#5587ff,#3772FF) repeat-x!important}.bg-gradient-info{background:#C0E0DE -webkit-gradient(linear,left top,left bottom,from(#c9e5e3),to(#C0E0DE)) repeat-x!important;background:#c0e0de -webkit-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de -o-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de linear-gradient(180deg,#c9e5e3,#C0E0DE) repeat-x!important}.bg-gradient-warning{background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x!important;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x!important}.bg-gradient-danger{background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x!important;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x!important}.bg-gradient-light{background:#D3F3EE -webkit-gradient(linear,left top,left bottom,from(#daf5f1),to(#D3F3EE)) repeat-x!important;background:#d3f3ee -webkit-linear-gradient(top,#daf5f1,#D3F3EE) repeat-x!important;background:#d3f3ee -o-linear-gradient(top,#daf5f1,#D3F3EE) repeat-x!important;background:#d3f3ee linear-gradient(180deg,#daf5f1,#D3F3EE) repeat-x!important}.bg-gradient-dark{background:#403F4C -webkit-gradient(linear,left top,left bottom,from(#5d5c67),to(#403F4C)) repeat-x!important;background:#403f4c -webkit-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c -o-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c linear-gradient(180deg,#5d5c67,#403F4C) repeat-x!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#30638e!important}.border-secondary{border-color:#ffa630!important}.border-success{border-color:#3772ff!important}.border-info{border-color:#c0e0de!important}.border-warning{border-color:#ed6a5a!important}.border-danger{border-color:#ed6a5a!important}.border-light{border-color:#d3f3ee!important}.border-dark{border-color:#403f4c!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media(min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media(min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media(min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media(min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714286%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-webkit-box-flex:1!important;-webkit-flex:1 1 auto!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-webkit-box-flex:0!important;-webkit-flex-grow:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-webkit-box-flex:1!important;-webkit-flex-grow:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-webkit-flex-shrink:0!important;-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-webkit-flex-shrink:1!important;-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;align-self:stretch!important}@media(min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-webkit-box-flex:1!important;-webkit-flex:1 1 auto!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-webkit-box-flex:0!important;-webkit-flex-grow:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-webkit-box-flex:1!important;-webkit-flex-grow:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-webkit-flex-shrink:0!important;-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-webkit-flex-shrink:1!important;-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media(min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-webkit-box-flex:1!important;-webkit-flex:1 1 auto!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-webkit-box-flex:0!important;-webkit-flex-grow:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-webkit-box-flex:1!important;-webkit-flex-grow:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-webkit-flex-shrink:0!important;-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-webkit-flex-shrink:1!important;-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media(min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-webkit-box-flex:1!important;-webkit-flex:1 1 auto!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-webkit-box-flex:0!important;-webkit-flex-grow:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-webkit-box-flex:1!important;-webkit-flex-grow:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-webkit-flex-shrink:0!important;-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-webkit-flex-shrink:1!important;-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media(min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-webkit-box-flex:1!important;-webkit-flex:1 1 auto!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-webkit-box-flex:0!important;-webkit-flex-grow:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-webkit-box-flex:1!important;-webkit-flex-grow:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-webkit-flex-shrink:0!important;-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-webkit-flex-shrink:1!important;-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media(min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media(min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media(min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media(min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{-webkit-box-shadow:none!important;box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media(min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media(min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media(min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media(min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media(min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media(min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media(min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media(min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#30638e!important}a.text-primary:hover,a.text-primary:focus{color:#234868!important}.text-secondary{color:#ffa630!important}a.text-secondary:hover,a.text-secondary:focus{color:#fc9000!important}.text-success{color:#3772ff!important}a.text-success:hover,a.text-success:focus{color:#044eff!important}.text-info{color:#c0e0de!important}a.text-info:hover,a.text-info:focus{color:#9ecfcc!important}.text-warning{color:#ed6a5a!important}a.text-warning:hover,a.text-warning:focus{color:#e8402c!important}.text-danger{color:#ed6a5a!important}a.text-danger:hover,a.text-danger:focus{color:#e8402c!important}.text-light{color:#d3f3ee!important}a.text-light:hover,a.text-light:focus{color:#abe8df!important}.text-dark{color:#403f4c!important}a.text-dark:hover,a.text-dark:focus{color:#292830!important}.text-body{color:#222!important}.text-muted{color:#888!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,*::before,*::after{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}pre,blockquote{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table,.td-box .row.section>table,.td-content>table{border-collapse:collapse!important}.table td,.td-box .row.section>table td,.td-content>table td,.table th,.td-box .row.section>table th,.td-content>table th{background-color:#fff!important}.table-bordered th,.table-bordered td{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#dee2e6}.table .thead-dark th,.td-box .row.section>table .thead-dark th,.td-content>table .thead-dark th{color:inherit;border-color:#dee2e6}}/*!* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com +* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/.fa,.fas,.far,.fal,.fad,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fas.fa-pull-left,.far.fa-pull-left,.fal.fa-pull-left,.fab.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fas.fa-pull-right,.far.fa-pull-right,.fal.fa-pull-right,.fab.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;-o-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);-o-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes fa-spin{0%{-o-transform:rotate(0deg);transform:rotate(0deg)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(-1,-1);-ms-transform:scale(-1,-1);-o-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-flip-both{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}/*!* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com +* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/@font-face{font-family:'font awesome 5 free';font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:'font awesome 5 free';font-weight:900}/*!* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com +* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/@font-face{font-family:'font awesome 5 brands';font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:'font awesome 5 brands'}.td-border-top{border:none;border-top:1px solid #eee}.td-border-none{border:none}.td-block-padding,.td-default main section{padding-top:4rem;padding-bottom:4rem}@media(min-width:768px){.td-block-padding,.td-default main section{padding-top:5rem;padding-bottom:5rem}}.td-overlay{position:relative}.td-overlay::after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}.td-overlay--dark::after{background-color:rgba(64,63,76,.3)}.td-overlay--light::after{background-color:rgba(211,243,238,.3)}.td-overlay__inner{position:relative;z-index:1}@media(min-width:992px){.td-max-width-on-larger-screens,.td-content>pre,.td-content>.highlight,.td-content>.lead,.td-content>h1,.td-content>h2,.td-content>ul,.td-content>ol,.td-content>p,.td-content>blockquote,.td-content>dl dd,.td-content .footnotes,.td-content>.alert{max-width:80%}}.td-box--height-min{min-height:300px}.td-box--height-med{min-height:400px}.td-box--height-max{min-height:500px}.td-box--height-full{min-height:100vh}@media(min-width:768px){.td-box--height-min{min-height:450px}.td-box--height-med{min-height:500px}.td-box--height-max{min-height:650px}}.td-box .row.section{padding-left:5rem;padding-right:5rem;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.td-box .row{padding-left:5rem;padding-right:5rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.td-box.linkbox{padding:5rem}.td-box--0{color:#fff;background-color:#403f4c}.td-box--0 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#403f4c transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--0 p>a{color:#d9e5f8}.td-box--10.td-box--gradient{background:#403F4C -webkit-gradient(linear,left top,left bottom,from(#5d5c67),to(#403F4C)) repeat-x!important;background:#403f4c -webkit-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c -o-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c linear-gradient(180deg,#5d5c67,#403F4C) repeat-x!important}.td-box--1{color:#fff;background-color:#30638e}.td-box--1 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#30638e transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--1 p>a{color:#cadcf5}.td-box--11.td-box--gradient{background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x!important;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x!important}.td-box--2{color:#fff;background-color:#ffa630}.td-box--2 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ffa630 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--2 p>a{color:#abc7f0}.td-box--12.td-box--gradient{background:#FFA630 -webkit-gradient(linear,left top,left bottom,from(#ffb34f),to(#FFA630)) repeat-x!important;background:#ffa630 -webkit-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 -o-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 linear-gradient(180deg,#ffb34f,#FFA630) repeat-x!important}.td-box--3{color:#222;background-color:#c0e0de}.td-box--3 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#c0e0de transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--3 p>a{color:#638ac1}.td-box--13.td-box--gradient{background:#C0E0DE -webkit-gradient(linear,left top,left bottom,from(#c9e5e3),to(#C0E0DE)) repeat-x!important;background:#c0e0de -webkit-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de -o-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de linear-gradient(180deg,#c9e5e3,#C0E0DE) repeat-x!important}.td-box--4{color:#222;background-color:#fff}.td-box--4 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#fff transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--4 p>a{color:#72a1e5}.td-box--14.td-box--gradient{background:white -webkit-gradient(linear,left top,left bottom,from(white),to(white)) repeat-x!important;background:#fff -webkit-linear-gradient(top,white,white) repeat-x!important;background:#fff -o-linear-gradient(top,white,white) repeat-x!important;background:#fff linear-gradient(180deg,white,white) repeat-x!important}.td-box--5{color:#fff;background-color:#888}.td-box--5 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#888 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--5 p>a{color:#b4cdf1}.td-box--15.td-box--gradient{background:#888 -webkit-gradient(linear,left top,left bottom,from(#9a9a9a),to(#888)) repeat-x!important;background:#888 -webkit-linear-gradient(top,#9a9a9a,#888) repeat-x!important;background:#888 -o-linear-gradient(top,#9a9a9a,#888) repeat-x!important;background:#888 linear-gradient(180deg,#9a9a9a,#888) repeat-x!important}.td-box--6{color:#fff;background-color:#3772ff}.td-box--6 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#3772ff transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--6 p>a{color:#a9c6ef}.td-box--16.td-box--gradient{background:#3772FF -webkit-gradient(linear,left top,left bottom,from(#5587ff),to(#3772FF)) repeat-x!important;background:#3772ff -webkit-linear-gradient(top,#5587ff,#3772FF) repeat-x!important;background:#3772ff -o-linear-gradient(top,#5587ff,#3772FF) repeat-x!important;background:#3772ff linear-gradient(180deg,#5587ff,#3772FF) repeat-x!important}.td-box--7{color:#fff;background-color:#ed6a5a}.td-box--7 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ed6a5a transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--7 p>a{color:#a5c3ee}.td-box--17.td-box--gradient{background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x!important;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x!important}.td-box--8{color:#fff;background-color:#403f4c}.td-box--8 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#403f4c transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--8 p>a{color:#d9e5f8}.td-box--18.td-box--gradient{background:#403F4C -webkit-gradient(linear,left top,left bottom,from(#5d5c67),to(#403F4C)) repeat-x!important;background:#403f4c -webkit-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c -o-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c linear-gradient(180deg,#5d5c67,#403F4C) repeat-x!important}.td-box--9{color:#fff;background-color:#ed6a5a}.td-box--9 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ed6a5a transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--9 p>a{color:#a5c3ee}.td-box--19.td-box--gradient{background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x!important;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x!important}.td-box--10{color:#fff;background-color:#30638e}.td-box--10 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#30638e transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--10 p>a{color:#cadcf5}.td-box--110.td-box--gradient{background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x!important;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x!important}.td-box--11{color:#fff;background-color:#ffa630}.td-box--11 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ffa630 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--11 p>a{color:#abc7f0}.td-box--111.td-box--gradient{background:#FFA630 -webkit-gradient(linear,left top,left bottom,from(#ffb34f),to(#FFA630)) repeat-x!important;background:#ffa630 -webkit-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 -o-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 linear-gradient(180deg,#ffb34f,#FFA630) repeat-x!important}.td-box--12{color:#222;background-color:#fff}.td-box--12 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#fff transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--12 p>a{color:#72a1e5}.td-box--112.td-box--gradient{background:white -webkit-gradient(linear,left top,left bottom,from(white),to(white)) repeat-x!important;background:#fff -webkit-linear-gradient(top,white,white) repeat-x!important;background:#fff -o-linear-gradient(top,white,white) repeat-x!important;background:#fff linear-gradient(180deg,white,white) repeat-x!important}.td-box--13{color:#222;background-color:#c0e0de}.td-box--13 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#c0e0de transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--13 p>a{color:#638ac1}.td-box--113.td-box--gradient{background:#C0E0DE -webkit-gradient(linear,left top,left bottom,from(#c9e5e3),to(#C0E0DE)) repeat-x!important;background:#c0e0de -webkit-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de -o-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de linear-gradient(180deg,#c9e5e3,#C0E0DE) repeat-x!important}.td-box--cerulean-blue{color:#fff;background-color:#017cee}.td-box--cerulean-blue .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#017cee transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--cerulean-blue p>a{color:#bdd3f3}.td-box--1cerulean-blue.td-box--gradient{background:#017cee -webkit-gradient(linear,left top,left bottom,from(#2790f1),to(#017cee)) repeat-x!important;background:#017cee -webkit-linear-gradient(top,#2790f1,#017cee) repeat-x!important;background:#017cee -o-linear-gradient(top,#2790f1,#017cee) repeat-x!important;background:#017cee linear-gradient(180deg,#2790f1,#017cee) repeat-x!important}.td-box--shamrock{color:#fff;background-color:#00ad46}.td-box--shamrock .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#00ad46 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--shamrock p>a{color:#cfdff6}.td-box--1shamrock.td-box--gradient{background:#00ad46 -webkit-gradient(linear,left top,left bottom,from(#26b962),to(#00ad46)) repeat-x!important;background:#00ad46 -webkit-linear-gradient(top,#26b962,#00ad46) repeat-x!important;background:#00ad46 -o-linear-gradient(top,#26b962,#00ad46) repeat-x!important;background:#00ad46 linear-gradient(180deg,#26b962,#00ad46) repeat-x!important}.td-box--bright-sky-blue{color:#fff;background-color:#0cb6ff}.td-box--bright-sky-blue .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#0cb6ff transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--bright-sky-blue p>a{color:#b5cef1}.td-box--1bright-sky-blue.td-box--gradient{background:#0cb6ff -webkit-gradient(linear,left top,left bottom,from(#30c1ff),to(#0cb6ff)) repeat-x!important;background:#0cb6ff -webkit-linear-gradient(top,#30c1ff,#0cb6ff) repeat-x!important;background:#0cb6ff -o-linear-gradient(top,#30c1ff,#0cb6ff) repeat-x!important;background:#0cb6ff linear-gradient(180deg,#30c1ff,#0cb6ff) repeat-x!important}.td-box--melon{color:#fff;background-color:#ff7557}.td-box--melon .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ff7557 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--melon p>a{color:#a0c0ee}.td-box--1melon.td-box--gradient{background:#ff7557 -webkit-gradient(linear,left top,left bottom,from(#ff8a70),to(#ff7557)) repeat-x!important;background:#ff7557 -webkit-linear-gradient(top,#ff8a70,#ff7557) repeat-x!important;background:#ff7557 -o-linear-gradient(top,#ff8a70,#ff7557) repeat-x!important;background:#ff7557 linear-gradient(180deg,#ff8a70,#ff7557) repeat-x!important}.td-box--vermillion{color:#fff;background-color:#e43921}.td-box--vermillion .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#e43921 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--vermillion p>a{color:#b7cff2}.td-box--1vermillion.td-box--gradient{background:#e43921 -webkit-gradient(linear,left top,left bottom,from(#e85742),to(#e43921)) repeat-x!important;background:#e43921 -webkit-linear-gradient(top,#e85742,#e43921) repeat-x!important;background:#e43921 -o-linear-gradient(top,#e85742,#e43921) repeat-x!important;background:#e43921 linear-gradient(180deg,#e85742,#e43921) repeat-x!important}.td-box--aqua{color:#fff;background-color:#11e1ee}.td-box--aqua .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#11e1ee transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--aqua p>a{color:#b9d0f2}.td-box--1aqua.td-box--gradient{background:#11e1ee -webkit-gradient(linear,left top,left bottom,from(#35e6f1),to(#11e1ee)) repeat-x!important;background:#11e1ee -webkit-linear-gradient(top,#35e6f1,#11e1ee) repeat-x!important;background:#11e1ee -o-linear-gradient(top,#35e6f1,#11e1ee) repeat-x!important;background:#11e1ee linear-gradient(180deg,#35e6f1,#11e1ee) repeat-x!important}.td-box--shamrock-green{color:#fff;background-color:#04d659}.td-box--shamrock-green .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#04d659 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--shamrock-green p>a{color:#c3d7f4}.td-box--1shamrock-green.td-box--gradient{background:#04d659 -webkit-gradient(linear,left top,left bottom,from(#2adc72),to(#04d659)) repeat-x!important;background:#04d659 -webkit-linear-gradient(top,#2adc72,#04d659) repeat-x!important;background:#04d659 -o-linear-gradient(top,#2adc72,#04d659) repeat-x!important;background:#04d659 linear-gradient(180deg,#2adc72,#04d659) repeat-x!important}.td-box--aqua-blue{color:#fff;background-color:#00c7d4}.td-box--aqua-blue .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#00c7d4 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--aqua-blue p>a{color:#c4d8f4}.td-box--1aqua-blue.td-box--gradient{background:#00c7d4 -webkit-gradient(linear,left top,left bottom,from(#26cfda),to(#00c7d4)) repeat-x!important;background:#00c7d4 -webkit-linear-gradient(top,#26cfda,#00c7d4) repeat-x!important;background:#00c7d4 -o-linear-gradient(top,#26cfda,#00c7d4) repeat-x!important;background:#00c7d4 linear-gradient(180deg,#26cfda,#00c7d4) repeat-x!important}.td-box--white{color:#222;background-color:#fff}.td-box--white .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#fff transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--white p>a{color:#72a1e5}.td-box--1white.td-box--gradient{background:#ffffff -webkit-gradient(linear,left top,left bottom,from(white),to(#ffffff)) repeat-x!important;background:#fff -webkit-linear-gradient(top,white,#ffffff) repeat-x!important;background:#fff -o-linear-gradient(top,white,#ffffff) repeat-x!important;background:#fff linear-gradient(180deg,white,#ffffff) repeat-x!important}.td-box--brownish-grey{color:#fff;background-color:#707070}.td-box--brownish-grey .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#707070 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--brownish-grey p>a{color:#c1d6f4}.td-box--1brownish-grey.td-box--gradient{background:#707070 -webkit-gradient(linear,left top,left bottom,from(#858585),to(#707070)) repeat-x!important;background:#707070 -webkit-linear-gradient(top,#858585,#707070) repeat-x!important;background:#707070 -o-linear-gradient(top,#858585,#707070) repeat-x!important;background:#707070 linear-gradient(180deg,#858585,#707070) repeat-x!important}.td-box--very-light-pink{color:#222;background-color:#cbcbcb}.td-box--very-light-pink .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#cbcbcb transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--very-light-pink p>a{color:#6287bd}.td-box--1very-light-pink.td-box--gradient{background:#cbcbcb -webkit-gradient(linear,left top,left bottom,from(lightgray),to(#cbcbcb)) repeat-x!important;background:#cbcbcb -webkit-linear-gradient(top,lightgray,#cbcbcb) repeat-x!important;background:#cbcbcb -o-linear-gradient(top,lightgray,#cbcbcb) repeat-x!important;background:#cbcbcb linear-gradient(180deg,lightgray,#cbcbcb) repeat-x!important}.td-box--slate-grey{color:#fff;background-color:#636365}.td-box--slate-grey .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#636365 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--slate-grey p>a{color:#c8daf5}.td-box--1slate-grey.td-box--gradient{background:#636365 -webkit-gradient(linear,left top,left bottom,from(#7a7a7c),to(#636365)) repeat-x!important;background:#636365 -webkit-linear-gradient(top,#7a7a7c,#636365) repeat-x!important;background:#636365 -o-linear-gradient(top,#7a7a7c,#636365) repeat-x!important;background:#636365 linear-gradient(180deg,#7a7a7c,#636365) repeat-x!important}.td-box--greyish-brown{color:#fff;background-color:#51504f}.td-box--greyish-brown .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#51504f transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--greyish-brown p>a{color:#d3e2f7}.td-box--1greyish-brown.td-box--gradient{background:#51504f -webkit-gradient(linear,left top,left bottom,from(#6b6a69),to(#51504f)) repeat-x!important;background:#51504f -webkit-linear-gradient(top,#6b6a69,#51504f) repeat-x!important;background:#51504f -o-linear-gradient(top,#6b6a69,#51504f) repeat-x!important;background:#51504f linear-gradient(180deg,#6b6a69,#51504f) repeat-x!important}.td-box--primary{color:#fff;background-color:#30638e}.td-box--primary .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#30638e transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--primary p>a{color:#cadcf5}.td-box--1primary.td-box--gradient{background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x!important;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x!important}.td-box--secondary{color:#fff;background-color:#ffa630}.td-box--secondary .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ffa630 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--secondary p>a{color:#abc7f0}.td-box--1secondary.td-box--gradient{background:#FFA630 -webkit-gradient(linear,left top,left bottom,from(#ffb34f),to(#FFA630)) repeat-x!important;background:#ffa630 -webkit-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 -o-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 linear-gradient(180deg,#ffb34f,#FFA630) repeat-x!important}.td-box--success{color:#fff;background-color:#3772ff}.td-box--success .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#3772ff transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--success p>a{color:#a9c6ef}.td-box--1success.td-box--gradient{background:#3772FF -webkit-gradient(linear,left top,left bottom,from(#5587ff),to(#3772FF)) repeat-x!important;background:#3772ff -webkit-linear-gradient(top,#5587ff,#3772FF) repeat-x!important;background:#3772ff -o-linear-gradient(top,#5587ff,#3772FF) repeat-x!important;background:#3772ff linear-gradient(180deg,#5587ff,#3772FF) repeat-x!important}.td-box--info{color:#222;background-color:#c0e0de}.td-box--info .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#c0e0de transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--info p>a{color:#638ac1}.td-box--1info.td-box--gradient{background:#C0E0DE -webkit-gradient(linear,left top,left bottom,from(#c9e5e3),to(#C0E0DE)) repeat-x!important;background:#c0e0de -webkit-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de -o-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de linear-gradient(180deg,#c9e5e3,#C0E0DE) repeat-x!important}.td-box--warning{color:#fff;background-color:#ed6a5a}.td-box--warning .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ed6a5a transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--warning p>a{color:#a5c3ee}.td-box--1warning.td-box--gradient{background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x!important;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x!important}.td-box--danger{color:#fff;background-color:#ed6a5a}.td-box--danger .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ed6a5a transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--danger p>a{color:#a5c3ee}.td-box--1danger.td-box--gradient{background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x!important;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x!important}.td-box--light{color:#222;background-color:#d3f3ee}.td-box--light .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#d3f3ee transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--light p>a{color:#6993d0}.td-box--1light.td-box--gradient{background:#D3F3EE -webkit-gradient(linear,left top,left bottom,from(#daf5f1),to(#D3F3EE)) repeat-x!important;background:#d3f3ee -webkit-linear-gradient(top,#daf5f1,#D3F3EE) repeat-x!important;background:#d3f3ee -o-linear-gradient(top,#daf5f1,#D3F3EE) repeat-x!important;background:#d3f3ee linear-gradient(180deg,#daf5f1,#D3F3EE) repeat-x!important}.td-box--dark{color:#fff;background-color:#403f4c}.td-box--dark .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#403f4c transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--dark p>a{color:#d9e5f8}.td-box--1dark.td-box--gradient{background:#403F4C -webkit-gradient(linear,left top,left bottom,from(#5d5c67),to(#403F4C)) repeat-x!important;background:#403f4c -webkit-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c -o-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c linear-gradient(180deg,#5d5c67,#403F4C) repeat-x!important}.td-box--100{color:#222;background-color:#f8f9fa}.td-box--100 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#f8f9fa transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--100 p>a{color:#709ee0}.td-box--1100.td-box--gradient{background:#f8f9fa -webkit-gradient(linear,left top,left bottom,from(#f9fafb),to(#f8f9fa)) repeat-x!important;background:#f8f9fa -webkit-linear-gradient(top,#f9fafb,#f8f9fa) repeat-x!important;background:#f8f9fa -o-linear-gradient(top,#f9fafb,#f8f9fa) repeat-x!important;background:#f8f9fa linear-gradient(180deg,#f9fafb,#f8f9fa) repeat-x!important}.td-box--200{color:#222;background-color:#eee}.td-box--200 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#eee transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--200 p>a{color:#6d99d8}.td-box--1200.td-box--gradient{background:#eee -webkit-gradient(linear,left top,left bottom,from(#f1f1f1),to(#eee)) repeat-x!important;background:#eee -webkit-linear-gradient(top,#f1f1f1,#eee) repeat-x!important;background:#eee -o-linear-gradient(top,#f1f1f1,#eee) repeat-x!important;background:#eee linear-gradient(180deg,#f1f1f1,#eee) repeat-x!important}.td-box--300{color:#222;background-color:#dee2e6}.td-box--300 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#dee2e6 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--300 p>a{color:#6993cf}.td-box--1300.td-box--gradient{background:#dee2e6 -webkit-gradient(linear,left top,left bottom,from(#e3e6ea),to(#dee2e6)) repeat-x!important;background:#dee2e6 -webkit-linear-gradient(top,#e3e6ea,#dee2e6) repeat-x!important;background:#dee2e6 -o-linear-gradient(top,#e3e6ea,#dee2e6) repeat-x!important;background:#dee2e6 linear-gradient(180deg,#e3e6ea,#dee2e6) repeat-x!important}.td-box--400{color:#222;background-color:#ccc}.td-box--400 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ccc transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--400 p>a{color:#6288be}.td-box--1400.td-box--gradient{background:#ccc -webkit-gradient(linear,left top,left bottom,from(#d4d4d4),to(#ccc)) repeat-x!important;background:#ccc -webkit-linear-gradient(top,#d4d4d4,#ccc) repeat-x!important;background:#ccc -o-linear-gradient(top,#d4d4d4,#ccc) repeat-x!important;background:#ccc linear-gradient(180deg,#d4d4d4,#ccc) repeat-x!important}.td-box--500{color:#fff;background-color:#adb5bd}.td-box--500 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#adb5bd transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--500 p>a{color:#9bbced}.td-box--1500.td-box--gradient{background:#adb5bd -webkit-gradient(linear,left top,left bottom,from(#b9c0c7),to(#adb5bd)) repeat-x!important;background:#adb5bd -webkit-linear-gradient(top,#b9c0c7,#adb5bd) repeat-x!important;background:#adb5bd -o-linear-gradient(top,#b9c0c7,#adb5bd) repeat-x!important;background:#adb5bd linear-gradient(180deg,#b9c0c7,#adb5bd) repeat-x!important}.td-box--600{color:#fff;background-color:#888}.td-box--600 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#888 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--600 p>a{color:#b4cdf1}.td-box--1600.td-box--gradient{background:#888 -webkit-gradient(linear,left top,left bottom,from(#9a9a9a),to(#888)) repeat-x!important;background:#888 -webkit-linear-gradient(top,#9a9a9a,#888) repeat-x!important;background:#888 -o-linear-gradient(top,#9a9a9a,#888) repeat-x!important;background:#888 linear-gradient(180deg,#9a9a9a,#888) repeat-x!important}.td-box--700{color:#fff;background-color:#495057}.td-box--700 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#495057 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--700 p>a{color:#d3e2f7}.td-box--1700.td-box--gradient{background:#495057 -webkit-gradient(linear,left top,left bottom,from(#646a70),to(#495057)) repeat-x!important;background:#495057 -webkit-linear-gradient(top,#646a70,#495057) repeat-x!important;background:#495057 -o-linear-gradient(top,#646a70,#495057) repeat-x!important;background:#495057 linear-gradient(180deg,#646a70,#495057) repeat-x!important}.td-box--800{color:#fff;background-color:#333}.td-box--800 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#333 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--800 p>a{color:#e3ecfa}.td-box--1800.td-box--gradient{background:#333 -webkit-gradient(linear,left top,left bottom,from(#525252),to(#333)) repeat-x!important;background:#333 -webkit-linear-gradient(top,#525252,#333) repeat-x!important;background:#333 -o-linear-gradient(top,#525252,#333) repeat-x!important;background:#333 linear-gradient(180deg,#525252,#333) repeat-x!important}.td-box--900{color:#fff;background-color:#222}.td-box--900 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#222 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--900 p>a{color:#ecf2fc}.td-box--1900.td-box--gradient{background:#222 -webkit-gradient(linear,left top,left bottom,from(#434343),to(#222)) repeat-x!important;background:#222 -webkit-linear-gradient(top,#434343,#222) repeat-x!important;background:#222 -o-linear-gradient(top,#434343,#222) repeat-x!important;background:#222 linear-gradient(180deg,#434343,#222) repeat-x!important}.td-blog .td-rss-button{position:absolute;top:5.5rem;right:1rem;z-index:22}.td-content .highlight{margin:2rem 0;padding:1rem;background-color:#f8f9fa}.td-content .highlight pre,.td-content .highlight div{background-color:inherit!important}.td-content .highlight pre{margin:0;padding:0}.td-content p code,.td-content li>code,.td-content table code{color:inherit;padding:.2em .4em;margin:0;font-size:85%;word-break:normal;background-color:rgba(0,0,0,.05);border-radius:.25rem}.td-content p code br,.td-content li>code br,.td-content table code br{display:none}.td-content pre{word-wrap:normal;background-color:#f8f9fa;padding:1rem}.td-content pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;border:0}.td-navbar-cover{background:#30638e}@media(min-width:768px){.td-navbar-cover{background:transparent!important}.td-navbar-cover .nav-link{text-shadow:1px 1px 2px #403f4c}}.td-navbar-cover.navbar-bg-onscroll .nav-link{text-shadow:none}.navbar-bg-onscroll{background:#30638e!important;opacity:inherit}.td-navbar{background:#30638e;min-height:4rem;margin:0;z-index:32}@media(min-width:768px){.td-navbar{position:fixed;top:0;width:100%}}.td-navbar .navbar-brand{text-transform:none;text-align:middle}.td-navbar .navbar-brand .nav-link{display:inline-block;margin-right:-30px}.td-navbar .navbar-brand svg{display:inline-block;margin:0 10px;height:30px}.td-navbar .nav-link{text-transform:none;font-weight:700}.td-navbar .td-search-input{border:none}.td-navbar .td-search-input::-webkit-input-placeholder{color:rgba(255,255,255,.75)}.td-navbar .td-search-input:-moz-placeholder{color:rgba(255,255,255,.75)}.td-navbar .td-search-input::-moz-placeholder{color:rgba(255,255,255,.75)}.td-navbar .td-search-input:-ms-input-placeholder{color:rgba(255,255,255,.75)}.td-navbar .dropdown{min-width:100px}@media(max-width:991.98px){.td-navbar{padding-right:.5rem;padding-left:.75rem}.td-navbar .td-navbar-nav-scroll{max-width:100%;height:2.5rem;margin-top:.25rem;overflow:hidden;font-size:.875rem}.td-navbar .td-navbar-nav-scroll .nav-link{padding-right:.25rem;padding-left:0}.td-navbar .td-navbar-nav-scroll .navbar-nav{padding-bottom:2rem;overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch}}.td-sidebar-nav{padding-right:.5rem;margin-right:-15px;margin-left:-15px}@media(min-width:768px){@supports((position:-webkit-sticky) or (position:sticky)){.td-sidebar-nav{max-height:-webkit-calc(100vh - 10rem);max-height:calc(100vh - 10rem);overflow-y:auto}}}@media(min-width:768px){.td-sidebar-nav{display:block!important}}.td-sidebar-nav__section{padding-left:0}.td-sidebar-nav__section li{list-style:none}.td-sidebar-nav__section ul{padding:0;margin:0}@media(min-width:768px){.td-sidebar-nav__section>ul{padding-left:.5rem}}.td-sidebar-nav__section-title{display:block;font-weight:500}.td-sidebar-nav__section-title .active{font-weight:700}.td-sidebar-nav__section-title a{color:#222}.td-sidebar-nav .td-sidebar-link{display:block;padding-bottom:.375rem}.td-sidebar-nav .td-sidebar-link__page{color:#495057;font-weight:300}.td-sidebar-nav a:hover{color:#72a1e5;text-decoration:none}.td-sidebar-nav a.active{font-weight:700}.td-sidebar-nav .dropdown a{color:#495057}.td-sidebar-nav .dropdown .nav-link{padding:0 0 1rem}.td-sidebar{padding-bottom:1rem}@media(min-width:768px){.td-sidebar{padding-top:4rem;background-color:rgba(48,99,142,.03);padding-right:1rem;border-right:1px solid #dee2e6}}.td-sidebar__toggle{line-height:1;color:#222;margin:1rem}.td-sidebar__search{padding:1rem 15px;margin-right:-15px;margin-left:-15px}.td-sidebar__inner{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}@media(min-width:768px){@supports((position:-webkit-sticky) or (position:sticky)){.td-sidebar__inner{position:-webkit-sticky;position:sticky;top:4rem;z-index:10;height:-webkit-calc(100vh - 6rem);height:calc(100vh - 6rem)}}}@media(min-width:1200px){.td-sidebar__inner{-webkit-box-flex:0;-webkit-flex:0 1 320px;-ms-flex:0 1 320px;flex:0 1 320px}}.td-sidebar__inner .td-search-box{width:100%}.td-toc{border-left:1px solid #dee2e6;-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2;padding-top:.75rem;padding-bottom:1.5rem;vertical-align:top}@supports((position:-webkit-sticky) or (position:sticky)){.td-toc{position:-webkit-sticky;position:sticky;top:4rem;height:-webkit-calc(100vh - 10rem);height:calc(100vh - 10rem);overflow-y:auto}}.td-toc a{display:block;font-weight:300;padding-bottom:.25rem}.td-toc li{list-style:none;display:block}.td-toc li li{margin-left:.5rem}.td-toc .td-page-meta a{font-weight:500}.td-toc #TableOfContents a{color:#888}.td-toc #TableOfContents a:hover{color:#72a1e5;text-decoration:none}.td-toc ul{padding-left:0}button{cursor:pointer;border:1px solid;border-radius:5px;padding:9px 29px;-webkit-transition:all ease-out .2s;-o-transition:all ease-out .2s;transition:all ease-out .2s}button:disabled{cursor:not-allowed}button.btn-filled{border-color:#017cee;background-color:#017cee}button.btn-filled:hover{border-color:#0cb6ff;background-color:#0cb6ff}button.btn-with-icon{padding:14px 20px}button.btn-with-icon svg{height:30px;width:auto;padding-right:15px}button.btn-with-icon span{display:inline-block;line-height:30px;vertical-align:middle}button.btn-hollow{background-color:#fff}button.btn-hollow.btn-blue{color:#017cee;border-color:#017cee}button.btn-hollow.btn-blue:disabled{color:#cbcbcb;border-color:#cbcbcb}button.btn-hollow.btn-blue:hover:enabled{color:#fff;background-color:#017cee}button.btn-hollow.btn-brown{border-color:#cbcbcb}button.btn-hollow.btn-brown:hover{background-color:#51504f;border-color:#51504f}button.btn-hollow.btn-brown:hover span{color:#fff}button.btn-hollow.btn-brown:hover svg path{fill:#fff}button.with-box-shadow{-webkit-box-shadow:0 2px 6px 0 rgba(0,0,0,.12);box-shadow:0 2px 6px 0 rgba(0,0,0,.12)}@media(max-width:1280px){button{padding:4px 17px}}.breadcrumb{background:0 0;padding-left:0;padding-top:0}.alert{font-weight:500;background:#fff;color:inherit;border-radius:0}.alert-primary{border-style:solid;border-color:#30638e;border-width:0 0 0 4px}.alert-primary .alert-heading{color:#30638e}.alert-secondary{border-style:solid;border-color:#ffa630;border-width:0 0 0 4px}.alert-secondary .alert-heading{color:#ffa630}.alert-success{border-style:solid;border-color:#3772ff;border-width:0 0 0 4px}.alert-success .alert-heading{color:#3772ff}.alert-info{border-style:solid;border-color:#c0e0de;border-width:0 0 0 4px}.alert-info .alert-heading{color:#c0e0de}.alert-warning{border-style:solid;border-color:#ed6a5a;border-width:0 0 0 4px}.alert-warning .alert-heading{color:#ed6a5a}.alert-danger{border-style:solid;border-color:#ed6a5a;border-width:0 0 0 4px}.alert-danger .alert-heading{color:#ed6a5a}.alert-light{border-style:solid;border-color:#d3f3ee;border-width:0 0 0 4px}.alert-light .alert-heading{color:#d3f3ee}.alert-dark{border-style:solid;border-color:#403f4c;border-width:0 0 0 4px}.alert-dark .alert-heading{color:#403f4c}.td-content{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.td-content p,.td-content li,.td-content td{font-weight:400}.td-content>h1{font-weight:700;margin-bottom:1rem}.td-content>h2{margin-bottom:1rem}.td-content>h2:not(:first-child){margin-top:3rem}.td-content>h2+h3{margin-top:1rem}.td-content>h3,.td-content>h4,.td-content>h5,.td-content>h6{margin-bottom:1rem;margin-top:2rem}.td-content>blockquote{padding:0 0 0 1rem;margin-bottom:1rem;color:#888;border-left:6px solid #ffa630}.td-content>ul li,.td-content>ol li{margin-bottom:.25rem}.td-content strong{font-weight:700}.td-content .alert:not(:first-child){margin-top:2rem;margin-bottom:2rem}.td-content .lead{margin-bottom:1.5rem}.td-title{margin-top:1rem;margin-bottom:.5rem}@media(min-width:576px){.td-title{font-size:3rem}}.search-form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:344px;padding:8px 20px;border:solid 1px #cbcbcb;border-radius:5px;margin:60px auto 0}.search-form__input{font-family:roboto,sans-serif;font-size:16px;color:#707070;line-height:1.63;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-right:10px;border:none;background:0 0;outline:none;float:left}.search-form__button{border:none;background-color:transparent;padding:0}@media(max-width:1280px){.search-form{width:270px;padding:3px 20px;margin-top:30px}}.td-outer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100vh}@media(min-width:768px){.td-default main section:first-of-type{padding-top:8rem}}.td-main{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.td-main main{padding-bottom:2rem}@media(min-width:768px){.td-main main{padding-top:5.5rem}}.td-cover-block--height-min{min-height:300px}.td-cover-block--height-med{min-height:400px}.td-cover-block--height-max{min-height:500px}.td-cover-block--height-full{min-height:100vh}@media(min-width:768px){.td-cover-block--height-min{min-height:450px}.td-cover-block--height-med{min-height:500px}.td-cover-block--height-max{min-height:650px}}.td-cover-logo{margin-right:.5em}.td-cover-block{position:relative;padding-top:5rem;padding-bottom:5rem;background-repeat:no-repeat;background-position:50% 0;-webkit-background-size:cover;background-size:cover}.td-bg-arrow-wrapper{position:relative}.section-index .entry{padding:.75rem}.section-index h5{margin-bottom:0}.section-index h5 a{font-weight:700}.section-index p{margin-top:0}.pageinfo{font-weight:500;background:#f8f9fa;color:inherit;border-radius:0;margin:2rem;padding:1.5rem;padding-bottom:.5rem}.pageinfo-primary{border-style:solid;border-color:#30638e}.pageinfo-secondary{border-style:solid;border-color:#ffa630}.pageinfo-success{border-style:solid;border-color:#3772ff}.pageinfo-info{border-style:solid;border-color:#c0e0de}.pageinfo-warning{border-style:solid;border-color:#ed6a5a}.pageinfo-danger{border-style:solid;border-color:#ed6a5a}.pageinfo-light{border-style:solid;border-color:#d3f3ee}.pageinfo-dark{border-style:solid;border-color:#403f4c}footer{min-height:150px}@media(max-width:991.98px){footer{min-height:200px}}@media(min-width:768px){.td-offset-anchor:target{display:block;position:relative;top:-4rem;visibility:hidden}h2[id]:before,h3[id]:before,h4[id]:before,h5[id]:before{display:block;content:" ";margin-top:-5rem;height:5rem;visibility:hidden}} \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/_gen/js/docs.js b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/_gen/js/docs.js new file mode 100644 index 00000000000..90898d86d50 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/_gen/js/docs.js @@ -0,0 +1 @@ +!function(r){var n={};function o(t){if(n[t])return n[t].exports;var e=n[t]={i:t,l:!1,exports:{}};return r[t].call(e.exports,e,e.exports,o),e.l=!0,e.exports}o.m=r,o.c=n,o.d=function(t,e,r){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,"a",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p="/",o(o.s=54)}([function(t,e,r){var m=r(1),w=r(14),g=r(15),E=Math.max,x=Math.min;t.exports=function(n,r,t){var o,i,a,s,u,c,f=0,l=!1,d=!1,e=!0;if("function"!=typeof n)throw new TypeError("Expected a function");function h(t){var e=o,r=i;return o=i=void 0,f=t,s=n.apply(r,e)}function p(t){var e=t-c;return void 0===c||r<=e||e<0||d&&a<=t-f}function y(){var t=w();if(p(t))return b(t);u=setTimeout(y,function(t){var e=r-(t-c);return d?x(e,a-(t-f)):e}(t))}function b(t){return u=void 0,e&&o?h(t):(o=i=void 0,s)}function v(){var t=w(),e=p(t);if(o=arguments,i=this,c=t,e){if(void 0===u)return function(t){return f=t,u=setTimeout(y,r),l?h(t):s}(c);if(d)return clearTimeout(u),u=setTimeout(y,r),h(c)}return void 0===u&&(u=setTimeout(y,r)),s}return r=g(r)||0,m(t)&&(l=!!t.leading,a=(d="maxWait"in t)?E(g(t.maxWait)||0,r):a,e="trailing"in t?!!t.trailing:e),v.cancel=function(){void 0!==u&&clearTimeout(u),o=c=i=u=void(f=0)},v.flush=function(){return void 0===u?s:b(w())},v}},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,r){var n=r(8),o="object"==typeof self&&self&&self.Object===Object&&self,i=n||o||Function("return this")();t.exports=i},function(t,e,r){var n=r(6),o=r(17),i=r(18),a=n?n.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":a&&a in Object(t)?o(t):i(t)}},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,r){!function(s){"use strict";var u={searchParams:"URLSearchParams"in self,iterable:"Symbol"in self&&"iterator"in Symbol,blob:"FileReader"in self&&"Blob"in self&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in self,arrayBuffer:"ArrayBuffer"in self};if(u.arrayBuffer)var e=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],r=ArrayBuffer.isView||function(t){return t&&-1 nav").offsetHeight,n=function(){var t;e.sort(function(t,e){return t.targetElement.offsetTop-e.targetElement.offsetTop}),t=e[0].targetElement.offsetTop+r>window.scrollY?0:e[e.length-1].targetElement.offsetTop+rwindow.scrollY})-1,e.forEach(function(t){return t.navElement.classList.remove("current")}),e[t].navElement.classList.add("current")};window.addEventListener("scroll",o()(n,10)),window.addEventListener("resize",o()(n,10)),n()}}()},function(t,e,r){var n=r(2);t.exports=function(){return n.Date.now()}},function(t,e,r){var n=r(1),o=r(16),i=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,u=/^0o[0-7]+$/i,c=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(o(t))return NaN;if(n(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=n(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(i,"");var r=s.test(t);return r||u.test(t)?c(t.slice(2),r?2:8):a.test(t)?NaN:+t}},function(t,e,r){var n=r(3),o=r(4);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==n(t)}},function(t,e,r){var n=r(6),o=Object.prototype,i=o.hasOwnProperty,a=o.toString,s=n?n.toStringTag:void 0;t.exports=function(t){var e=i.call(t,s),r=t[s];try{var n=!(t[s]=void 0)}catch(t){}var o=a.call(t);return n&&(e?t[s]=r:delete t[s]),o}},function(t,e){var r=Object.prototype.toString;t.exports=function(t){return r.call(t)}},function(t,e){!function(){var e=window.document.querySelector(".rating");if(e){function t(t){e.querySelector("#rate-star-".concat(t)).addEventListener("click",function(){!function(t){window._paq.push(["trackEvent","Docs","Rating",window.location.pathname,t])}(t),e.innerHTML="

Thank you!

"})}for(var r=1;r<=5;r++)t(r)}}()},function(t,e){var r=window.document.querySelector(".rst-content");!function(){if(r){var t=r.querySelectorAll("table");t&&0!==t.length&&t.forEach(function(t){if(!t.parentNode.classList.contains("wy-table-responsive")){var e=document.createElement("div");e.classList.add("wy-table-responsive"),t.parentNode.insertBefore(e,t),e.appendChild(t)}})}}()},function(t,e,n){"use strict";(function(t){var i=n(7);function r(t){return function(t){if(Array.isArray(t))return t}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function f(){var t=r(document.location.pathname.split("/")),e=t[2];return{currentVersion:t[3],currentPackageName:e,pagePath:t.slice(4).join("/")}}var a;(a=window.document.querySelectorAll(".docs-version-selector"))&&0!==a.length&&t("/_gen/packages-metadata.json").then(function(t){return t.json()}).then(function(t){var e=f().currentPackageName,r=t.find(function(t){return t["package-name"]===e});if(r){var n=r["all-versions"].sort(i.a).reverse(),o=r["stable-version"];a.forEach(function(t){return function(t,e,r){var n=t.querySelector("#version-item-template").innerText,o=document.createElement("div");function i(t,e){var r=o.cloneNode(!0),n="/docs/".concat(u,"/").concat(t,"/").concat(c);r.setAttribute("href",n),r.innerText=e,a.appendChild(r)}o.innerHTML=n,o=o.firstElementChild;var a=t.querySelector(".dropdown-menu"),s=f(),u=s.currentPackageName,c=s.pagePath;i("stable","Stable (".concat(r,")")),e.forEach(function(t){return i(t,t)})}(t,n,o)})}})}).call(this,n(5))},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,r){"use strict";r.r(e);r(10),r(11),r(12),r(13),r(19),r(20),r(55),r(21)},function(t,e){Array.from(document.querySelectorAll(".toctree ul")).forEach(function(t){Array.from(t.parentNode.children).filter(function(t){return"A"===t.tagName}).forEach(function(t){var e=document.createElement("span");e.classList.add("toctree-expand"),t.insertBefore(e,t.firstChild)})})}]); \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/_sphinx_javascript_frameworks_compat.js b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 00000000000..8549469dc29 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,134 @@ +/* + * _sphinx_javascript_frameworks_compat.js + * ~~~~~~~~~~ + * + * Compatability shim for jQuery and underscores.js. + * + * WILL BE REMOVED IN Sphinx 6.0 + * xref RemovedInSphinx60Warning + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/basic.css b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/basic.css new file mode 100644 index 00000000000..eeb0519a69b --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/basic.css @@ -0,0 +1,899 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} +dl.field-list > dt:after { + content: ":"; +} + + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/check-solid.svg b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/check-solid.svg new file mode 100644 index 00000000000..92fad4b5c0b --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/clipboard.min.js b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/clipboard.min.js new file mode 100644 index 00000000000..54b3c463811 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/copybutton.css b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/copybutton.css new file mode 100644 index 00000000000..f1916ec7d1b --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/copybutton.js b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/copybutton.js new file mode 100644 index 00000000000..2ea7ff3e217 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/copybutton_funcs.js b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/copybutton_funcs.js new file mode 100644 index 00000000000..dbe1aaad79c --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/custom.css b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/custom.css new file mode 100644 index 00000000000..b1cf49f37d4 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/custom.css @@ -0,0 +1,33 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + /* + This file contains style overrides for the sphinx-design extension. + + The original defaults can be found here: + https://sphinx-design.readthedocs.io/en/alabaster-theme/css_variables.html + */ + +:root { + --sd-color-tabs-label-active: #017cee; + --sd-color-tabs-label-hover: #68d1ff; + --sd-color-tabs-underline-active: #017cee; + --sd-color-tabs-underline-hover: #68d1ff; + --sd-color-tabs-underline: transparent; +} diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css new file mode 100644 index 00000000000..eb19f698afc --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/design-tabs.js b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/design-tabs.js new file mode 100644 index 00000000000..36b38cf0d91 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/doctools.js b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/doctools.js new file mode 100644 index 00000000000..527b876ca63 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/documentation_options.js b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/documentation_options.js new file mode 100644 index 00000000000..bbc53345243 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '3.9.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/file.png b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/file.png new file mode 100644 index 00000000000..a858a410e4f Binary files /dev/null and b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/file.png differ diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/graphviz.css b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/graphviz.css new file mode 100644 index 00000000000..19e7afd385b --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/graphviz.css @@ -0,0 +1,19 @@ +/* + * graphviz.css + * ~~~~~~~~~~~~ + * + * Sphinx stylesheet -- graphviz extension. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +img.graphviz { + border: 0; + max-width: 100%; +} + +object.graphviz { + max-width: 100%; +} diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/_static/jquery-3.6.0.js b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/jquery-3.6.0.js new file mode 100644 index 00000000000..fc6c299b73e --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/_static/jquery-3.6.0.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+
+
+
+

apache-airflow-providers-docker

+
+

Changelog

+
+

3.9.0

+
+

Note

+

This release of provider is only available for Airflow 2.6+ as explained in the +Apache Airflow providers support policy.

+
+
+

Bug Fixes

+
    +
  • Fix 'enable_logging=True' not working in 'DockerSwarmOperator' (#35677)

  • +
  • Fix broken log streaming from #35677 (#36127)

  • +
+
+
+

Misc

+
    +
  • Bump minimum Airflow version in providers to Airflow 2.6.0 (#36017)

  • +
  • Follow BaseHook connection fields method signature in child classes (#36086)

  • +
+
+
+
+

3.8.2

+
+

Misc

+
    +
  • Refactor docker operator attribute validations and docs (#35571)

  • +
+
+
+
+

3.8.1

+
+

Bug Fixes

+
    +
  • fix '_DockerDecoratedOperator' module type attribute pickle error (#35293)

  • +
+
+
+
+

3.8.0

+
+

Note

+

This release of provider is only available for Airflow 2.5+ as explained in the +Apache Airflow providers support policy.

+
+
+

Features

+
    +
  • Add ulimits parameter to DockerOperator (#34284)

  • +
+
+
+

Misc

+
    +
  • Bump min airflow version of providers (#34728)

  • +
  • Deprecate get_hook method in DockerOperator (#34432)

  • +
+
+
+
+

3.7.5

+
+

Misc

+
    +
  • Cleanup Docker operator logging (#33914)

  • +
  • Replace sequence concatenation by unpacking in Airflow providers (#33933)

  • +
  • Use literal dict instead of calling dict() in providers (#33761)

  • +
  • Replace type func by isinstance in DockerOperator (#33759)

  • +
+
+
+
+

3.7.4

+
+

Misc

+
    +
  • Refactor: Improve detection of duplicates and list sorting (#33675)

  • +
  • Simplify conditions on len() in other providers (#33569)

  • +
  • Replace repr() with proper formatting (#33520)

  • +
+
+
+
+

3.7.3

+
+

Misc

+
    +
  • Refactor: Simplify code in providers/docker (#33232)

  • +
+
+
+
+

3.7.2

+
+

Misc

+
    +
  • Get rid of Python2 numeric relics (#33050)

  • +
+
+
+
+

3.7.1

+
+

Note

+

This release dropped support for Python 3.7

+
+
+

Misc

+
    +
  • Remove Python 3.7 support (#30963)

  • +
+
+
+
+

3.7.0

+
+

Note

+

This release of provider is only available for Airflow 2.4+ as explained in the +Apache Airflow providers support policy.

+
+
+

Misc

+
    +
  • Bump minimum Airflow version in providers (#30917)

  • +
+
+
+
+

3.6.0

+
+

Features

+
    +
  • Add multiple exit code handling in skip logic for 'DockerOperator' and 'KubernetesPodOperator' (#30769)

  • +
  • In 'DockerOperator', adding an attribute 'tls_verify' to choose whether to validate certificate (#30309) (#30310)

  • +
+
+
+

Misc

+
    +
  • Deprecate 'skip_exit_code' in 'DockerOperator' and 'KubernetesPodOperator' (#30733)

  • +
+
+
+
+

3.5.1

+
+

Bug Fixes

+
    +
  • fix template_fields in the decorator 'task.docker' (#29586)

  • +
+
+
+
+

3.5.0

+
+

Features

+
    +
  • Add correct widgets in Docker Hook (#28700)

  • +
  • Make docker operators always use 'DockerHook' for API calls (#28363)

  • +
  • Skip DockerOperator task when it returns a provided exit code (#28996)

  • +
+
+
+

Bug Fixes

+
    +
  • Fix label name for 'reauth' field in Docker Connection (#28974)

  • +
+
+
+
+

3.4.0

+
+

Features

+
    +
  • add hostname argument to DockerOperator (#27822)

  • +
  • Move min airflow version down for Docker Provider to 2.3.0 (#28648)

  • +
+
+
+
+

3.3.0

+
+

Note

+

This release of provider is only available for Airflow 2.3+ as explained in the +Apache Airflow providers support policy.

+
+
+

Misc

+
    +
  • Move min airflow version to 2.3.0 for all providers (#27196)

  • +
+
+
+

Features

+
    +
  • Add ipc_mode for DockerOperator (#27553)

  • +
  • Add env-file parameter to Docker Operator (#26951)

  • +
+
+
+
+

3.2.0

+
+

Features

+
    +
  • Add logging options to docker operator (#26653)

  • +
  • Add pre-commit hook for custom_operator_name (#25786)

  • +
  • Implement ExternalPythonOperator (#25780)

  • +
+
+
+

Bug Fixes

+
+
+
+

3.1.0

+
+

Features

+
    +
  • Force-remove container after DockerOperator execution (#23160)

  • +
+
+
+

Bug Fixes

+
    +
  • 'DockerOperator' fix cli.logs giving character array instead of string (#24726)

  • +
+
+
+
+

3.0.0

+
+

Breaking changes

+
+

Note

+

This release of provider is only available for Airflow 2.2+ as explained in the +Apache Airflow providers support policy.

+
+
+
+

Misc

+
    +
  • Remove 'xcom_push' from 'DockerOperator' (#23981)

  • +
  • docker new system test (#23167)

  • +
+
+
+
+

2.7.0

+
+

Features

+
    +
  • Add 'device_requests' parameter to 'DockerOperator' (#23554)

  • +
+
+
+

Bug Fixes

+
    +
  • Fix new MyPy errors in main (#22884)

  • +
+
+
+
+

2.6.0

+
+

Features

+
    +
  • Add timeout parameter to 'DockerOperator' (#22502)

  • +
+
+
+
+

2.5.2

+
+

Bug Fixes

+
    +
  • Fix mistakenly added install_requires for all providers (#22382)

  • +
+
+
+

Misc

+
    +
  • Correct 'multiple_outputs' param descriptions mentioning lists/tuples (#22371)

  • +
+
+
+
+

2.5.1

+
+

Bug Fixes

+
    +
  • Avoid trying to kill container when it did not succeed for Docker (#22145)

  • +
+
+
+

Misc

+
    +
  • Add Trove classifiers in PyPI (Framework :: Apache Airflow :: Provider)

  • +
+
+
+
+

2.5.0

+
+

Features

+
    +
  • added docker network_mode options (#21986)

  • +
+
+
+

Misc

+
    +
  • Support for Python 3.10

  • +
+
+
+
+

2.4.1

+
+

Bug Fixes

+
    +
  • Fixes Docker xcom functionality (#21175)

  • +
  • Fix docker behaviour with byte lines returned (#21429)

  • +
+
+
+
+

2.4.0

+
+

Features

+
    +
  • Allow DockerOperator's image to be templated (#19997)

  • +
+
+
+
+

2.3.0

+
+

Features

+
    +
  • Add support of placement in the DockerSwarmOperator (#18990)

  • +
+
+
+

Bug Fixes

+
    +
  • Fixup string concatenations (#19099)

  • +
  • Remove the docker timeout workaround (#18872)

  • +
+
+
+

Other

+
+
    +
  • Move docker decorator example dag to docker provider (#18739)

  • +
+
+
+
+
+

2.2.0

+
+

Features

+
    +
  • Add a Docker Taskflow decorator (#15330)

  • +
+

This version of Docker Provider has a new feature - TaskFlow decorator that only works in Airflow 2.2. +If you try to use the decorator in pre-Airflow 2.2 version you will get an error:

+
AttributeError: '_TaskDecorator' object has no attribute 'docker'
+
+
+
+
+
+

2.1.1

+
+

Features

+
    +
  • Add support for configs, secrets, networks and replicas for DockerSwarmOperator (#17474)

  • +
+
+
+

Misc

+
    +
  • Optimise connection importing for Airflow 2.2.0

  • +
+
+
+
+

2.1.0

+
+

Features

+
    +
  • Adds option to disable mounting temporary folder in DockerOperator (#16932)

  • +
+
+
+

Bug Fixes

+
    +
  • [FIX] Docker provider - retry docker in docker (#17061)

  • +
  • fix string encoding when using xcom / json (#13536)

  • +
  • if xcom_all is set to False, only the last line of the log (separated by \n) will be +included in the XCom value

  • +
+

The DockerOperator in version 2.0.0 did not work for remote Docker Engine or Docker-In-Docker case. +That was an unintended side effect of #15843 that has been fixed in #16932. There is a fallback mode +which will make Docker Operator works with warning and you will be able to remove the warning by +using the new parameter to disable mounting the folder.

+
+
+
+

2.0.0

+
+

Breaking changes

+
    +
  • Auto-apply apply_default decorator (#15667)

  • +
+
+

Warning

+

Due to apply_default decorator removal, this version of the provider requires Airflow 2.1.0+. +If your Airflow version is < 2.1.0, and you want to install this provider version, first upgrade +Airflow to at least version 2.1.0. Otherwise your Airflow package version will be upgraded +automatically and you will have to manually run airflow upgrade db to complete the migration.

+
+
    +
  • Replace DockerOperator's 'volumes' arg for 'mounts' (#15843)

  • +
+

The volumes parameter in +airflow.providers.docker.operators.docker.DockerOperator and +airflow.providers.docker.operators.docker_swarm.DockerSwarmOperator +was replaced by the mounts parameter, which uses the newer +mount syntax instead of --bind.

+
+
+
+

1.2.0

+
+

Features

+
    +
  • Entrypoint support in docker operator (#14642)

  • +
  • Add PythonVirtualenvDecorator to Taskflow API (#14761)

  • +
  • Support all terminus task states in Docker Swarm Operator (#14960)

  • +
+
+
+
+

1.1.0

+
+

Features

+
    +
  • Add privileged option in DockerOperator (#14157)

  • +
+
+
+
+

1.0.2

+
+

Bug fixes

+
    +
  • Corrections in docs and tools after releasing provider RCs (#14082)

  • +
+
+
+
+

1.0.1

+

Updated documentation and readme files.

+
+

Bug fixes

+
    +
  • Remove failed DockerOperator tasks with auto_remove=True (#13532) (#13993)

  • +
  • Fix error on DockerSwarmOperator with auto_remove True (#13532) (#13852)

  • +
+
+
+
+

1.0.0

+

Initial version of the provider.

+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/commits.html b/docs-archive/apache-airflow-providers-docker/3.9.0/commits.html new file mode 100644 index 00000000000..c00eed31c27 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/commits.html @@ -0,0 +1,2507 @@ + + + + + + + + + + + + Package apache-airflow-providers-docker — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+
+
+

Package apache-airflow-providers-docker

+

Docker

+

This is detailed commit list of changes for versions provider package: docker. +For high-level changelog, see package information including changelog.

+
+

3.9.0

+

Latest change: 2023-12-11

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

cd476acd8f

2023-12-11

Follow BaseHook connection fields method signature in child classes (#36086)

f9c952bb7f

2023-12-09

Fix broken log streaming from #35677 (#36127)

999b70178a

2023-12-08

Prepare docs 1st wave of Providers December 2023 (#36112)

d0918d77ee

2023-12-07

Bump minimum Airflow version in providers to Airflow 2.6.0 (#36017)

882108862d

2023-12-06

Fix 'enable_logging=True' not working in 'DockerSwarmOperator' (#35677)

c905fe88de

2023-11-25

Update information about links into the provider.yaml files (#35837)

+
+
+

3.8.2

+

Latest change: 2023-11-24

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

0b23d5601c

2023-11-24

Prepare docs 2nd wave of Providers November 2023 (#35836)

99534e47f3

2023-11-19

Use reproducible builds for provider packages (#35693)

99df205f42

2023-11-16

Fix and reapply templates for provider documentation (#35686)

5a6dcfd865

2023-11-12

Refactor docker operator attribute validations and docs (#35571)

+
+
+

3.8.1

+

Latest change: 2023-11-08

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

1b059c57d6

2023-11-08

Prepare docs 1st wave of Providers November 2023 (#35537)

1c9d1c2f8a

2023-10-31

fix '_DockerDecoratedOperator' module type attribute pickle error (#35293)

d1c58d86de

2023-10-28

Prepare docs 3rd wave of Providers October 2023 - FIX (#35233)

3592ff4046

2023-10-28

Prepare docs 3rd wave of Providers October 2023 (#35187)

dd7ba3cae1

2023-10-19

Pre-upgrade 'ruff==0.0.292' changes in providers (#35053)

7a93b19138

2023-10-16

D401 Support - Providers: DaskExecutor to Github (Inclusive) (#34935)

+
+
+

3.8.0

+

Latest change: 2023-10-13

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

e9987d5059

2023-10-13

Prepare docs 1st wave of Providers in October 2023 (#34916)

8e26865763

2023-10-06

Refactor consolidate import from io in providers (#34378)

0c8e30e43b

2023-10-05

Bump min airflow version of providers (#34728)

7ebf4220c9

2023-09-28

Refactor usage of str() in providers (#34320)

d75e5ef00a

2023-09-18

Deprecate get_hook method in DockerOperator (#34432)

c668245b57

2023-09-12

Add ulimits parameter to DockerOperator (#34284)

c5016f754d

2023-09-08

Refactor: Consolidate import textwrap in providers (#34220)

+
+
+

3.7.5

+

Latest change: 2023-09-08

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

21990ed894

2023-09-08

Prepare docs for 09 2023 - 1st wave of Providers (#34201)

3d27504a62

2023-09-04

Cleanup Docker operator logging (#33914)

55976af32e

2023-08-31

Replace sequence concatination by unpacking in Airflow providers (#33933)

b11525702c

2023-08-26

Use literal dict instead of calling dict() in providers (#33761)

e16e9f3439

2023-08-26

Replace type func by isinstance in DockerOperator (#33759)

+
+
+

3.7.4

+

Latest change: 2023-08-26

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

c077d19060

2023-08-26

Prepare docs for Aug 2023 3rd wave of Providers (#33730)

2dbb963324

2023-08-24

Refactor: Improve detection of duplicates and list sorting (#33675)

1cdd82391e

2023-08-21

Simplify conditions on len() in other providers (#33569)

abef61ff3d

2023-08-20

Replace repr() with proper formatting (#33520)

+
+
+

3.7.3

+

Latest change: 2023-08-11

+ +++++ + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

b5a4d36383

2023-08-11

Prepare docs for Aug 2023 2nd wave of Providers (#33291)

55424d41b4

2023-08-08

Refactor: Simplify code in providers/docker (#33232)

+
+
+

3.7.2

+

Latest change: 2023-08-05

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

60677b0ba3

2023-08-05

Prepare docs for Aug 2023 1st wave of Providers (#33128)

e3d82c6be0

2023-08-04

Get rid of Python2 numeric relics (#33050)

225e3041d2

2023-07-06

Prepare docs for July 2023 wave of Providers (RC2) (#32381)

3878fe6fab

2023-07-05

Remove spurious headers for provider changelogs (#32373)

cb4927a018

2023-07-05

Prepare docs for July 2023 wave of Providers (#32298)

d1aa509bbd

2023-06-28

D205 Support - Providers: Databricks to Github (inclusive) (#32243)

09d4718d3a

2023-06-27

Improve provider documentation and README structure (#32125)

+
+
+

3.7.1

+

Latest change: 2023-06-20

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

79bcc2e668

2023-06-20

Prepare RC1 docs for June 2023 wave of Providers (#32001)

8b146152d6

2023-06-20

Add note about dropping Python 3.7 for providers (#32015)

07ea574fed

2023-06-07

Add D400 pydocstyle check (#31742)

9276310a43

2023-06-05

Improve docstrings in providers (#31681)

a59076eaee

2023-06-02

Add D400 pydocstyle check - Providers (#31427)

9fa75aaf7a

2023-05-29

Remove Python 3.7 support (#30963)

+
+
+

3.7.0

+

Latest change: 2023-05-19

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

45548b9451

2023-05-19

Prepare RC2 docs for May 2023 wave of Providers (#31416)

abea189022

2023-05-18

Use '__version__' in providers not 'version' (#31393)

f5aed58d9f

2023-05-18

Fixing circular import error in providers caused by airflow version check (#31379)

d8c0e3009a

2023-05-17

adding docker port expose capability (#30730)

d9ff55cf6d

2023-05-16

Prepare docs for May 2023 wave of Providers (#31252)

0a30706aa7

2023-05-03

Use 'AirflowProviderDeprecationWarning' in providers (#30975)

eef5bc7f16

2023-05-03

Add full automation for min Airflow version for providers (#30994)

a7eb32a5b2

2023-04-30

Bump minimum Airflow version in providers (#30917)

+
+
+

3.6.0

+

Latest change: 2023-04-21

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

e46ce78b66

2023-04-21

Prepare docs for adhoc release of providers (#30787)

afdc95435b

2023-04-21

Add multiple exit code handling in skip logic for 'DockerOperator' and 'KubernetesPodOperator' (#30769)

99a3bf2318

2023-04-19

Deprecate 'skip_exit_code' in 'DockerOperator' and 'KubernetesPodOperator' (#30733)

c1a685f752

2023-04-14

In 'DockerOperator', adding an attribute 'tls_verify' to choose whether to validate certificate (#30309) (#30310)

d23a3bbed8

2023-04-04

Add mechanism to suspend providers (#30422)

b8ab594130

2023-03-15

Remove "boilerplate" from all taskflow decorators (#30118)

dba390e323

2023-02-22

Fix and augment 'check-for-inclusive-language' CI check (#29549)

+
+
+

3.5.1

+

Latest change: 2023-02-18

+ +++++ + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

470fdaea27

2023-02-18

Prepare docs for 02 2023 midmonth wave of Providers (#29589)

7bd87e75de

2023-02-17

fix template_fields in the decorator 'task.docker' (#29586)

+
+
+

3.5.0

+

Latest change: 2023-01-23

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

dd6cef7889

2023-01-23

Prepare ad hoc provider release for Docker, Cassandra, Papermill (#28999)

3a7bfce601

2023-01-18

Skip DockerOperator task when it returns a provided exit code (#28996)

cd637c223f

2023-01-16

Fix label name for 'reauth' field in Docker Connection (#28974)

911b708ffd

2023-01-14

Prepare docs for Jan 2023 mid-month wave of Providers (#28929)

af2c22a00a

2023-01-03

Add correct widgets in Docker Hook (#28700)

57a889de35

2023-01-03

Make docker operators always use 'DockerHook' for API calls (#28363)

+
+
+

3.4.0

+

Latest change: 2023-01-02

+ +++++ + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

5246c009c5

2023-01-02

Prepare docs for Jan 2023 wave of Providers (#28651)

ea08989db1

2022-12-30

Move min airflow version down for Docker Provider to 2.3.0 (#28648)

1aa3da543a

2022-11-29

add hostname argument to DockerOperator (#27822)

+
+
+

3.3.0

+

Latest change: 2022-11-15

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

12c3c39d1a

2022-11-15

pRepare docs for November 2022 wave of Providers (#27613)

a504a8267d

2022-11-10

Add ipc_mode for DockerOperator (#27553)

1add2f7c41

2022-10-28

Add env-file parameter to Docker Operator (#26951)

9ab1a6a3e7

2022-10-27

Update old style typing (#26872)

2a34dc9e84

2022-10-23

Enable string normalization in python formatting - providers (#27205)

+
+
+

3.2.0

+

Latest change: 2022-09-28

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

f8db64c35c

2022-09-28

Update docs for September Provider's release (#26731)

19d6f54704

2022-09-27

Add logging options to docker operator (#26653)

06acf40a43

2022-09-13

Apply PEP-563 (Postponed Evaluation of Annotations) to non-core airflow (#26289)

55928b9da6

2022-09-06

Implement ExternalPythonOperator (#25780)

762235fd77

2022-08-19

Add pre-commit hook for custom_operator_name (#25786)

+
+
+

3.1.0

+

Latest change: 2022-07-13

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

d2459a241b

2022-07-13

Add documentation for July 2022 Provider's release (#25030)

cc6a44bdc3

2022-07-05

'DockerOperator' fix cli.logs giving character array instead of string (#24726)

237d2225d6

2022-07-02

Force-remove container after DockerOperator execution (#23160)

0de31bd73a

2022-06-29

Move provider dependencies to inside provider folders (#24672)

510a6bab45

2022-06-28

Remove 'hook-class-names' from provider.yaml (#24702)

40f08900f2

2022-06-28

Clean up task decorator type hints and docstrings (#24667)

+
+
+

3.0.0

+

Latest change: 2022-06-09

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

dcdcf3a2b8

2022-06-09

Update release notes for RC2 release of Providers for May 2022 (#24307)

717a7588bc

2022-06-07

Update package description to remove double min-airflow specification (#24292)

aeabe994b3

2022-06-07

Prepare docs for May 2022 provider's release (#24231)

06856337a5

2022-06-06

docker new system test (#23167)

027b707d21

2022-06-05

Add explanatory note for contributors about updating Changelog (#24229)

97b443aa59

2022-05-28

Remove 'xcom_push' from 'DockerOperator' (#23981)

+
+
+

2.7.0

+

Latest change: 2022-05-12

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

75c60923e0

2022-05-12

Prepare provider documentation 2022.05.11 (#23631)

24bb9f3a6f

2022-05-09

Add 'device_requests' parameter to 'DockerOperator' (#23554)

8b6b0848a3

2022-04-23

Use new Breese for building, pulling and verifying the images. (#23104)

6933022e94

2022-04-10

Fix new MyPy errors in main (#22884)

+
+
+

2.6.0

+

Latest change: 2022-04-07

+ +++++ + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

56ab82ed7a

2022-04-07

Prepare mid-April provider documentation. (#22819)

e1a42c4fc8

2022-03-28

Add timeout parameter to 'DockerOperator' (#22502)

+
+
+

2.5.2

+

Latest change: 2022-03-22

+ +++++ + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

d7dbfb7e26

2022-03-22

Add documentation for bugfix release of Providers (#22383)

31096cc883

2022-03-21

Correct 'multiple_outputs' param descriptions mentioning lists/tuples (#22371)

+
+
+

2.5.1

+

Latest change: 2022-03-14

+ +++++ + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

16adc035b1

2022-03-14

Add documentation for Classifier release for March 2022 (#22226)

03cdfe701b

2022-03-11

Avoid trying to kill container when it did not succeed for Docker (#22145)

+
+
+

2.5.0

+

Latest change: 2022-03-07

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

f5b96315fe

2022-03-07

Add documentation for Feb Providers release (#22056)

188ac51996

2022-03-07

Change default python executable to python3 for docker decorator (#21973)

7acc190a23

2022-03-06

added docker network_mode options (#21986)

3035d3ab16

2022-03-01

Switch to Debian 11 (bullseye) as base for our dockerfiles (#21378) (#21875)

8299adec91

2022-02-28

Revert "Switch to Debian 11 (bullseye) as base for our dockerfiles (#21378)" (#21874)

5d89dea568

2022-02-28

Switch to Debian 11 (bullseye) as base for our dockerfiles (#21378)

+
+
+

2.4.1

+

Latest change: 2022-02-08

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

d94fa37830

2022-02-08

Fixed changelog for January 2022 (delayed) provider's release (#21439)

63fa257231

2022-02-08

Fix docker behaviour with byte lines returned (#21429)

6c3a67d4fc

2022-02-05

Add documentation for January 2021 providers release (#21257)

2f4a3d4d40

2022-02-01

Fixes Docker xcom functionality (#21175)

cb73053211

2022-01-27

Add optional features in providers. (#21074)

602abe8394

2022-01-20

Remove ':type' lines now sphinx-autoapi supports typehints (#20951)

2c840670c0

2022-01-18

Rewrite the task decorator as a composition (#20868)

+
+
+

2.4.0

+

Latest change: 2021-12-31

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

f77417eb0d

2021-12-31

Fix K8S changelog to be PyPI-compatible (#20614)

97496ba2b4

2021-12-31

Update documentation for provider December 2021 release (#20523)

83f8e178ba

2021-12-31

Even more typing in operators (template_fields/ext) (#20608)

d56e7b56bb

2021-12-30

Fix template_fields type to have MyPy friendly Sequence type (#20571)

a0821235fb

2021-12-30

Use typed Context EVERYWHERE (#20565)

59e4b78daa

2021-12-29

Fix MyPy errors for Airflow decorators (#20034)

b20e6d3f06

2021-12-14

Fix mypy docker provider (#20235)

1924e29fa2

2021-12-03

Allow DockerOperator's image to be templated (#19997)

853576d901

2021-11-30

Update documentation for November 2021 provider's release (#19882)

aa2cb5545f

2021-11-12

Remove remaining 'pylint: disable' comments (#19541)

+
+
+

2.3.0

+

Latest change: 2021-10-29

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

d9567eb106

2021-10-29

Prepare documentation for October Provider's release (#19321)

45c70f397a

2021-10-29

Add support of placement in the DockerSwarmOperator (#18990)

f5ad26dcdd

2021-10-21

Fixup string concatenations (#19099)

3154935138

2021-10-12

Remove the docker timeout workaround (#18872)

43f334f4bd

2021-10-06

Move docker decorator example dag to docker provider (#18739)

+
+
+

2.2.0

+

Latest change: 2021-09-30

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

840ea3efb9

2021-09-30

Update documentation for September providers release (#18613)

ef037e7021

2021-09-29

Static start_date and default arg cleanup for misc. provider example DAGs (#18597)

2a3cbabbf8

2021-09-23

Cope with '@task.docker' decorated function not returning anything (#18463)

a9772cf287

2021-09-20

Add a Docker Taskflow decorator (#15330)

+
+
+

2.1.1

+

Latest change: 2021-08-30

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

0a68588479

2021-08-30

Add August 2021 Provider's documentation (#17890)

be75dcd39c

2021-08-23

Update description about the new ''connection-types'' provider meta-data

76ed2a49c6

2021-08-19

Import Hooks lazily individually in providers manager (#17682)

4da4c186ec

2021-08-19

Add support for configs, secrets, networks and replicas for DockerSwarmOperator (#17474)

+
+
+

2.1.0

+

Latest change: 2021-07-26

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

87f408b1e7

2021-07-26

Prepares docs for Rc2 release of July providers (#17116)

b10ed95a2a

2021-07-26

Updating Docker example DAGs to use XComArgs (#16871)

cd3307ff21

2021-07-26

fix string encoding when using xcom / json (#13536)

24d02bfa84

2021-07-19

Prepares documentation for RC2 release of Docker Provider (#17066)

b076ac5925

2021-07-18

[FIX] Docker provider - retry docker in docker (#17061)

d02ded65ea

2021-07-15

Fixed wrongly escaped characters in amazon's changelog (#17020)

b916b75079

2021-07-15

Prepare documentation for July release of providers. (#17015)

bc004151ed

2021-07-15

Adds option to disable mounting temporary folder in DockerOperator (#16932)

866a601b76

2021-06-28

Removes pylint from our toolchain (#16682)

+
+
+

2.0.0

+

Latest change: 2021-06-18

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

bbc627a3da

2021-06-18

Prepares documentation for rc2 release of Providers (#16501)

cbf8001d76

2021-06-16

Synchronizes updated changelog after buggfix release (#16464)

8a9c337838

2021-06-15

Remove class references in changelogs (#16454)

1fba5402bb

2021-06-15

More documentation update for June providers release (#16405)

9c94b72d44

2021-06-07

Updated documentation for June 2021 provider release (#16294)

12995cfb9a

2021-05-17

Replace DockerOperator's 'volumes' arg for 'mounts' (#15843)

37681bca00

2021-05-07

Auto-apply apply_default decorator (#15667)

+
+
+

1.2.0

+

Latest change: 2021-05-01

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

807ad32ce5

2021-05-01

Prepares provider release after PIP 21 compatibility (#15576)

5b2fe0e740

2021-04-27

Add Connection Documentation for Popular Providers (#15393)

594d93d3b0

2021-04-09

Entrypoint support in docker operator (#14642)

566127308f

2021-04-08

Add PythonVirtualenvDecorator to Taskflow API (#14761)

ab47717699

2021-04-07

Support all terminus task states in Docker Swarm Operator (#14960)

+
+
+

1.1.0

+

Latest change: 2021-04-06

+ +++++ + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

042be2e4e0

2021-04-06

Updated documentation for provider packages before April release (#15236)

68e4c4dcb0

2021-03-20

Remove Backport Providers (#14886)

3064bf0442

2021-03-02

Add privileged option in DockerOperator (#14157)

+
+
+

1.0.2

+

Latest change: 2021-02-27

+ +++++ + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

589d6dec92

2021-02-27

Prepare to release the next wave of providers: (#14487)

10343ec29f

2021-02-05

Corrections in docs and tools after releasing provider RCs (#14082)

+
+
+

1.0.1

+

Latest change: 2021-02-04

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

88bdcfa0df

2021-02-04

Prepare to release a new wave of providers. (#14013)

ac2f72c98d

2021-02-01

Implement provider versioning tools (#13767)

ba54afe58b

2021-01-31

Remove failed DockerOperator tasks with auto_remove=True (#13532) (#13993)

25d68a7a9e

2021-01-30

Fix error on DockerSwarmOperator with auto_remove True (#13532) (#13852)

a9ac2b040b

2021-01-23

Switch to f-strings using flynt. (#13732)

3fd5ef3555

2021-01-21

Add missing logos for integrations (#13717)

295d66f914

2020-12-30

Fix Grammar in PIP warning (#13380)

6cf76d7ac0

2020-12-18

Fix typo in pip upgrade command :( (#13148)

+
+
+

1.0.0

+

Latest change: 2020-12-09

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

32971a1a2d

2020-12-09

Updates providers versions to 1.0.0 (#12955)

b40dffa085

2020-12-08

Rename remaing modules to match AIP-21 (#12917)

9b39f24780

2020-12-08

Add support for dynamic connection form fields per provider (#12558)

6b339c70c4

2020-12-03

Avoid log spam & have more meaningful log when pull image in DockerOperator (#12763)

2037303eef

2020-11-29

Adds support for Connection/Hook discovery from providers (#12466)

c34ef853c8

2020-11-20

Separate out documentation building per provider  (#12444)

0080354502

2020-11-18

Update provider READMEs for 1.0.0b2 batch release (#12449)

ae7cb4a1e2

2020-11-17

Update wrong commit hash in backport provider changes (#12390)

6889a333cf

2020-11-15

Improvements for operators and hooks ref docs (#12366)

7825e8f590

2020-11-13

Docs installation improvements (#12304)

85a18e13d9

2020-11-09

Point at pypi project pages for cross-dependency of provider packages (#12212)

59eb5de78c

2020-11-09

Update provider READMEs for up-coming 1.0.0beta1 releases (#12206)

b2a28d1590

2020-11-09

Moves provider packages scripts to dev (#12082)

4e8f9cc8d0

2020-11-03

Enable Black - Python Auto Formmatter (#9550)

8c42cf1b00

2020-11-03

Use PyUpgrade to use Python 3.6 features (#11447)

0314a3a218

2020-11-01

Allow airflow.providers to be installed in multiple python folders (#10806)

5a439e84eb

2020-10-26

Prepare providers release 0.0.2a1 (#11855)

872b1566a1

2020-10-25

Generated backport providers readmes/setup for 2020.10.29 (#11826)

349b0811c3

2020-10-20

Add D200 pydocstyle check (#11688)

16e7129719

2020-10-13

Added support for provider packages for Airflow 2.0 (#11487)

0a0e1af800

2020-10-03

Fix Broken Markdown links in Providers README TOC (#11249)

ca4238eb4d

2020-10-02

Fixed month in backport packages to October (#11242)

5220e4c384

2020-10-02

Prepare Backport release 2020.09.07 (#11238)

e3f96ce7a8

2020-09-24

Fix incorrect Usage of Optional[bool] (#11138)

2e56ee7b22

2020-08-27

DockerOperator extra_hosts argument support added (#10546)

fdd9b6f65b

2020-08-25

Enable Black on Providers Packages (#10543)

3696c34c28

2020-08-24

Fix typo in the word "release" (#10528)

2f2d8dbfaf

2020-08-25

Remove all "noinspection" comments native to IntelliJ (#10525)

ee7ca128a1

2020-08-22

Fix broken Markdown refernces in Providers README (#10483)

cdec301254

2020-08-07

Add correct signature to all operators and sensors (#10205)

d79e7221de

2020-08-06

Type annotation for Docker operator (#9733)

aeea71274d

2020-08-02

Remove 'args' parameter from provider operator constructors (#10097)

7d24b088cd

2020-07-25

Stop using start_date in default_args in example_dags (2) (#9985)

c2db0dfeb1

2020-07-22

More strict rules in mypy (#9705) (#9906)

5d61580c57

2020-06-21

Enable 'Public function Missing Docstrings' PyDocStyle Check (#9463)

d0e7db4024

2020-06-19

Fixed release number for fresh release (#9408)

12af6a0800

2020-06-19

Final cleanup for 2020.6.23rc1 release preparation (#9404)

c7e5bce57f

2020-06-19

Prepare backport release candidate for 2020.6.23rc1 (#9370)

f6bd817a3a

2020-06-16

Introduce 'transfers' packages (#9320)

4a74cf1a34

2020-06-08

Fix xcom in DockerOperator when auto_remove is used (#9173)

b4b84a1933

2020-06-07

Add kernel capabilities in DockerOperator(#9142)

0b0e4f7a4c

2020-05-26

Preparing for RC3 relase of backports (#9026)

00642a46d0

2020-05-26

Fixed name of 20 remaining wrongly named operators. (#8994)

375d1ca229

2020-05-19

Release candidate 2 for backport packages 2020.05.20 (#8898)

12c5e5d8ae

2020-05-17

Prepare release candidate for backport packages (#8891)

f3521fb0e3

2020-05-16

Regenerate readme files for backport package release (#8886)

92585ca4cb

2020-05-15

Added automated release notes generation for backport operators (#8807)

511d98e30d

2020-05-01

[AIRFLOW-4363] Fix JSON encoding error (#8287)

0a1de16682

2020-04-27

Stop DockerSwarmOperator from pulling Docker images (#8533)

3237c7e31d

2020-04-26

[AIRFLOW-5850] Capture task logs in DockerSwarmOperator (#6552)

9626b03d19

2020-03-30

[AIRFLOW-6574] Adding private_environment to docker operator. (#7671)

733d3d3c32

2020-03-25

[AIRFLOW-4363] Fix JSON encoding error (#7628)

4bde99f132

2020-03-23

Make airflow/providers pylint compatible (#7802)

cd546b664f

2020-03-23

Add missing call to Super class in 'cncf' & 'docker' providers (#7825)

3320e432a1

2020-02-24

[AIRFLOW-6817] Lazy-load 'airflow.DAG' to keep user-facing API untouched (#7517)

4d03e33c11

2020-02-22

[AIRFLOW-6817] remove imports from 'airflow/__init__.py', replaced implicit imports with explicit imports, added entry to 'UPDATING.MD' - squashed/rebased (#7456)

dbcd3d8787

2020-02-18

[AIRFLOW-6804] Add the basic test for all example DAGs (#7419)

9cbd7de6d1

2020-02-18

[AIRFLOW-6792] Remove _operator/_hook/_sensor in providers package and add tests (#7412)

97a429f9d0

2020-02-02

[AIRFLOW-6714] Remove magic comments about UTF-8 (#7338)

83c037873f

2020-01-30

[AIRFLOW-6674] Move example_dags in accordance with AIP-21 (#7287)

059eda05f8

2020-01-21

[AIRFLOW-6610] Move software classes to providers package (#7231)

+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/connections/docker.html b/docs-archive/apache-airflow-providers-docker/3.9.0/connections/docker.html new file mode 100644 index 00000000000..72f95fd1b18 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/connections/docker.html @@ -0,0 +1,902 @@ + + + + + + + + + + + + Docker Connection — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+

Docker Connection

+

The Docker connection type enables connection to the Docker registry.

+
+

Authenticating to Docker

+

Authenticate to Docker by using the login information for Docker registry. +More information on Docker authentication here.

+
+
+

Default Connection IDs

+

Some hooks and operators related to Docker use docker_default by default.

+
+
+

Configuring the Connection

+
+
Login

Specify the Docker registry username.

+
+
Password

Specify the Docker registry plaintext password.

+
+
Host

Specify the URL to the Docker registry. Ex: https://index.docker.io/v1

+
+
Port (optional)

Specify the port if not specified in host.

+
+
Extra

Specify the extra parameters (as json dictionary) that can be used in Azure connection. +The following parameters are all optional:

+
    +
  • email: Specify the email used for the registry account.

  • +
  • reauth: Specify whether refresh existing authentication on the Docker server. (bool)

  • +
+
+
+

When specifying the connection in environment variable you should specify +it using URI syntax.

+

Note that all components of the URI should be URL-encoded.

+

For example:

+
export AIRFLOW_CONN_DOCKER_DEFAULT='docker://username:password@https%3A%2F%2Findex.docker.io%2Fv1:80?email=myemail%40my.com&reauth=False'
+
+
+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/decorators/docker.html b/docs-archive/apache-airflow-providers-docker/3.9.0/decorators/docker.html new file mode 100644 index 00000000000..3c321a3ee1f --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/decorators/docker.html @@ -0,0 +1,1028 @@ + + + + + + + + + + + + Task Docker Decorator — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+

Task Docker Decorator

+

Python callable wrapped within the @task.docker decorator with args are executed within +the docker container.

+
+

Parameters

+

The following parameters are supported in Docker Task decorator.

+
+
multiple_outputs

If set, function return value will be unrolled to multiple XCom values. +Dict will unroll to XCom values with keys as XCom keys. Defaults to False.

+
+
use_dill

Whether to use dill or pickle for serialization

+
+
python_command

Python command for executing functions, Default python3

+
+
image

Docker image from which to create the container. +If image tag is omitted, “latest” will be used.

+
+
api_version

Remote API version. Set to auto to automatically detect the server’s version.

+
+
container_name

Name of the container. Optional (templated)

+
+
cpus

Number of CPUs to assign to the container. This value gets multiplied with 1024.

+
+
docker_url

URL of the host running the docker daemon. +Default is unix://var/run/docker.sock

+
+
environment

Environment variables to set in the container. (templated)

+
+
private_environment

Private environment variables to set in the container. +These are not templated, and hidden from the website.

+
+
env_file

Relative path to the .env file with environment variables to set in the container. +Overridden by variables in the environment parameter.

+
+
force_pull

Pull the docker image on every run. Default is False.

+
+
mem_limit

Maximum amount of memory the container can use. +Either a float value, which represents the limit in bytes, +or a string like 128m or 1g.

+
+
host_tmp_dir

Specify the location of the temporary directory on the host which will +be mapped to tmp_dir. If not provided defaults to using the standard system temp directory.

+
+
network_mode

Network mode for the container. It can be one of the following

+
    +
  • "bridge": Create new network stack for the container with default docker bridge network

  • +
  • "none": No networking for this container

  • +
  • "container:<name>" or "container:<id>": Use the network stack of another container specified via <name> or <id>

  • +
  • "host": Use the host network stack. Incompatible with port_bindings

  • +
  • "<network-name>" or "<network-id>": Connects the container to user created network (using docker network create command)

  • +
+
+
tls_ca_cert

Path to a PEM-encoded certificate authority to secure the docker connection.

+
+
tls_client_cert

Path to the PEM-encoded certificate used to authenticate docker client.

+
+
tls_client_key

Path to the PEM-encoded key used to authenticate docker client.

+
+
tls_verify

Set True to verify the validity of the provided certificate.

+
+
tls_hostname

Hostname to match against the docker server certificate or False to disable the check.

+
+
tls_ssl_version

Version of SSL to use when communicating with docker daemon.

+
+
mount_tmp_dir

Specify whether the temporary directory should be bind-mounted from the host to the container.

+
+
tmp_dir

Mount point inside the container to +a temporary directory created on the host by the operator. +The path is also made available via the environment variable +AIRFLOW_TMP_DIR inside the container.

+
+
user

Default user inside the docker container.

+
+
mounts

List of mounts to mount into the container, e.g. +['/host/path:/container/path', '/host/path2:/container/path2:ro'].

+
+
working_dir

Working directory to set on the container (equivalent to the -w switch the docker client)

+
+
entrypoint

Overwrite the default ENTRYPOINT of the image

+
+
xcom_all

Push all the stdout or just the last line. The default is False (last line).

+
+
docker_conn_id

ID of the Airflow connection to use

+
+
dns

Docker custom DNS servers

+
+
dns_search

Docker custom DNS search domain

+
+
auto_remove

Enable removal of the container when the container’s process exits. Possible values

+
    +
  • never: (default) do not remove container

  • +
  • success: remove on success

  • +
  • force: always remove container

  • +
+
+
shm_size

Size of /dev/shm in bytes. The size must be greater than 0. +If omitted uses system default.

+
+
tty

Allocate pseudo-TTY to the container +This needs to be set see logs of the Docker container.

+
+
hostname

Optional hostname for the container.

+
+
privileged

Give extended privileges to this container.

+
+
cap_add

Include container capabilities

+
+
extra_hosts

Additional hostnames to resolve inside the container, as a mapping of hostname to IP address.

+
+
retrieve_output

Should this docker image consistently attempt to pull from and output +file before manually shutting down the image. Useful for cases where users want a pickle serialized +output that is not posted to logs

+
+
retrieve_output_path

path for output file that will be retrieved and passed to xcom

+
+
timeout

Default timeout for API calls, in seconds.

+
+
device_requests

Expose host resources such as GPUs to the container.

+
+
log_opts_max_size

The maximum size of the log before it is rolled. +A positive integer plus a modifier representing the unit of measure (k, m, or g). +Eg: 10m or 1g Defaults to -1 (unlimited).

+
+
log_opts_max_file

The maximum number of log files that can be present. +If rolling the logs creates excess files, the oldest file is removed. +Only effective when max-size is also set. A positive integer. Defaults to 1.

+
+
ipc_mode

Set the IPC mode for the container.

+
+
skip_on_exit_code

If task exits with this exit code, leave the task +in skipped state (default: None). If set to None, any non-zero +exit code will be treated as a failure.

+
+
port_bindings

Publish a container’s port(s) to the host. It is a +dictionary of value where the key indicates the port to open inside the container +and value indicates the host port that binds to the container port. +Incompatible with "host" in network_mode.

+
+
ulimits

List of ulimit options to set for the container. +Each item should be a docker.types.Ulimit instance.

+
+
+
+
+

Usage Example

+
+

tests/system/providers/docker/example_taskflow_api_docker_virtualenv.py[source]

+
    @task.docker(image="python:3.9-slim-bookworm", multiple_outputs=True)
+    def transform(order_data_dict: dict):
+        """
+        #### Transform task
+        A simple Transform task which takes in the collection of order data and
+        computes the total order value.
+        """
+        total_order_value = 0
+
+        for value in order_data_dict.values():
+            total_order_value += value
+
+        return {"total_order_value": total_order_value}
+
+
+
+
+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/genindex.html b/docs-archive/apache-airflow-providers-docker/3.9.0/genindex.html new file mode 100644 index 00000000000..72c3a054718 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/genindex.html @@ -0,0 +1,1182 @@ + + + + + + + + + + + + Index — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ + +

Index

+ +
+ _ + | A + | C + | D + | E + | F + | G + | H + | L + | M + | O + | S + | T + | U + +
+

_

+ + +
+ +

A

+ + + +
    +
  • + airflow.providers.docker + +
  • +
  • + airflow.providers.docker.decorators + +
  • +
  • + airflow.providers.docker.decorators.docker + +
  • +
  • + airflow.providers.docker.exceptions + +
  • +
  • + airflow.providers.docker.hooks + +
  • +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + +
+ +

G

+ + + +
+ +

H

+ + + +
+ +

L

+ + +
+ +

M

+ + +
+ +

O

+ + +
+ +

S

+ + +
+ +

T

+ + + +
    +
  • + tests.system.providers.docker + +
  • +
  • + tests.system.providers.docker.example_docker + +
  • +
  • + tests.system.providers.docker.example_docker_copy_data + +
  • +
  • + tests.system.providers.docker.example_docker_swarm + +
  • +
+ +

U

+ + +
+ + + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/index.html b/docs-archive/apache-airflow-providers-docker/3.9.0/index.html new file mode 100644 index 00000000000..517c35533bd --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/index.html @@ -0,0 +1,916 @@ + + + + + + + + + + + + apache-airflow-providers-docker — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+
+
+

apache-airflow-providers-docker

+
+
+
+
+
+
+
+
+
+
+
+

Package apache-airflow-providers-docker

+

Docker

+

Release: 3.9.0

+
+
+

Provider package

+

This is a provider package for docker provider. All classes for this provider package +are in airflow.providers.docker python package.

+
+
+

Installation

+

You can install this package on top of an existing Airflow 2 installation (see Requirements below) +for the minimum Airflow version supported) via +pip install apache-airflow-providers-docker

+
+
+

Requirements

+

The minimum Apache Airflow version supported by this provider package is 2.6.0.

+ ++++ + + + + + + + + + + + + + + + + +

PIP package

Version required

apache-airflow

>=2.6.0

docker

>=5.0.3

python-dotenv

>=0.21.0

+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/installing-providers-from-sources.html b/docs-archive/apache-airflow-providers-docker/3.9.0/installing-providers-from-sources.html new file mode 100644 index 00000000000..d22a1e973fe --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/installing-providers-from-sources.html @@ -0,0 +1,968 @@ + + + + + + + + + + + + Installing from sources — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+
+
+
+
+

Installing from sources

+
+

Released packages

+

This page describes downloading and verifying apache-airflow-providers-docker provider version +3.9.0 using officially released packages. +You can also install the provider package - as most Python packages - via +PyPI . +You can choose different version of the provider by selecting different version from the drop-down at +the top-left of the page.

+

The sdist and whl packages released are the “official” sources of installation that you can use if +you want to verify the origin of the packages and want to verify checksums and signatures of the packages. +The packages are available via the +Official Apache Software Foundations Downloads

+

The downloads are available at:

+ +

If you want to install from the source code, you can download from the sources link above, it will contain +a INSTALL file containing details on how you can build and install the provider.

+
+
+

Release integrity

+

PGP signatures KEYS

+

It is essential that you verify the integrity of the downloaded files using the PGP or SHA signatures. +The PGP signatures can be verified using GPG or PGP. Please download the KEYS as well as the asc +signature files for relevant distribution. It is recommended to get these files from the +main distribution directory and not from the mirrors.

+
gpg -i KEYS
+
+
+

or

+
pgpk -a KEYS
+
+
+

or

+
pgp -ka KEYS
+
+
+

To verify the binaries/sources you can download the relevant asc files for it from main +distribution directory and follow the below guide.

+
gpg --verify apache-airflow-providers-********.asc apache-airflow-*********
+
+
+

or

+
pgpv apache-airflow-providers-********.asc
+
+
+

or

+
pgp apache-airflow-providers-********.asc
+
+
+

Example:

+
$ gpg --verify apache-airflow-providers-docker-3.9.0.tar.gz.asc apache-airflow-providers-docker-3.9.0.tar.gz
+  gpg: Signature made Sat 11 Sep 12:49:54 2021 BST
+  gpg:                using RSA key CDE15C6E4D3A8EC4ECF4BA4B6674E08AD7DE406F
+  gpg:                issuer "kaxilnaik@apache.org"
+  gpg: Good signature from "Kaxil Naik <kaxilnaik@apache.org>" [unknown]
+  gpg:                 aka "Kaxil Naik <kaxilnaik@gmail.com>" [unknown]
+  gpg: WARNING: The key's User ID is not certified with a trusted signature!
+  gpg:          There is no indication that the signature belongs to the owner.
+  Primary key fingerprint: CDE1 5C6E 4D3A 8EC4 ECF4  BA4B 6674 E08A D7DE 406F
+
+
+

The “Good signature from …” is indication that the signatures are correct. +Do not worry about the “not certified with a trusted signature” warning. Most of the certificates used +by release managers are self signed, that’s why you get this warning. By importing the server in the +previous step and importing it via ID from KEYS page, you know that this is a valid Key already.

+

For SHA512 sum check, download the relevant sha512 and run the following:

+
shasum -a 512 apache-airflow-providers-********  | diff - apache-airflow-providers-********.sha512
+
+
+

The SHASUM of the file should match the one provided in .sha512 file.

+

Example:

+
shasum -a 512 apache-airflow-providers-docker-3.9.0.tar.gz  | diff - apache-airflow-providers-docker-3.9.0.tar.gz.sha512
+
+
+
+
+

Verifying PyPI releases

+

You can verify the Provider .whl packages from PyPI by locally downloading the package and signature +and SHA sum files with the script below:

+
#!/bin/bash
+PACKAGE_VERSION=3.9.0
+PACKAGE_NAME=apache-airflow-providers-docker
+provider_download_dir=$(mktemp -d)
+pip download --no-deps "${PACKAGE_NAME}==${PACKAGE_VERSION}" --dest "${provider_download_dir}"
+curl "https://downloads.apache.org/airflow/providers/apache_airflow_providers_docker-3.9.0-py3-none-any.whl.asc" \
+    -L -o "${provider_download_dir}/apache_airflow_providers_docker-3.9.0-py3-none-any.whl.asc"
+curl "https://downloads.apache.org/airflow/providers/apache_airflow_providers_docker-3.9.0-py3-none-any.whl.sha512" \
+    -L -o "${provider_download_dir}/apache_airflow_providers_docker-3.9.0-py3-none-any.whl.sha512"
+echo
+echo "Please verify files downloaded to ${provider_download_dir}"
+ls -la "${provider_download_dir}"
+echo
+
+
+

Once you verify the files following the instructions from previous chapter you can remove the temporary +folder created.

+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/objects.inv b/docs-archive/apache-airflow-providers-docker/3.9.0/objects.inv new file mode 100644 index 00000000000..c654ba3b4e0 Binary files /dev/null and b/docs-archive/apache-airflow-providers-docker/3.9.0/objects.inv differ diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/output-spelling-results-apache-airflow-providers-docker/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/docs-archive/apache-airflow-providers-docker/3.9.0/output-spelling-results-apache-airflow-providers-docker/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css new file mode 100644 index 00000000000..eb19f698afc --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/output-spelling-results-apache-airflow-providers-docker/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/output-spelling-results-apache-airflow-providers-docker/_sphinx_design_static/design-tabs.js b/docs-archive/apache-airflow-providers-docker/3.9.0/output-spelling-results-apache-airflow-providers-docker/_sphinx_design_static/design-tabs.js new file mode 100644 index 00000000000..36b38cf0d91 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/output-spelling-results-apache-airflow-providers-docker/_sphinx_design_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/py-modindex.html b/docs-archive/apache-airflow-providers-docker/3.9.0/py-modindex.html new file mode 100644 index 00000000000..a719531d8b6 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/py-modindex.html @@ -0,0 +1,924 @@ + + + + + + + + + + + + Python Module Index — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ + +

Python Module Index

+ +
+ a | + t +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ a
+ airflow +
    + airflow.providers.docker +
    + airflow.providers.docker.decorators +
    + airflow.providers.docker.decorators.docker +
    + airflow.providers.docker.exceptions +
    + airflow.providers.docker.hooks +
    + airflow.providers.docker.hooks.docker +
    + airflow.providers.docker.operators +
    + airflow.providers.docker.operators.docker +
    + airflow.providers.docker.operators.docker_swarm +
 
+ t
+ tests +
    + tests.system.providers.docker +
    + tests.system.providers.docker.example_docker +
    + tests.system.providers.docker.example_docker_copy_data +
    + tests.system.providers.docker.example_docker_swarm +
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/search.html b/docs-archive/apache-airflow-providers-docker/3.9.0/search.html new file mode 100644 index 00000000000..b03ae8cbbc7 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/search.html @@ -0,0 +1,881 @@ + + + + + + + + + + + + Search — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + + +
+ +
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/searchindex.js b/docs-archive/apache-airflow-providers-docker/3.9.0/searchindex.js new file mode 100644 index 00000000000..f5a3738fc00 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["_api/airflow/providers/docker/decorators/docker/index", "_api/airflow/providers/docker/decorators/index", "_api/airflow/providers/docker/exceptions/index", "_api/airflow/providers/docker/hooks/docker/index", "_api/airflow/providers/docker/hooks/index", "_api/airflow/providers/docker/index", "_api/airflow/providers/docker/operators/docker/index", "_api/airflow/providers/docker/operators/docker_swarm/index", "_api/airflow/providers/docker/operators/index", "_api/tests/system/providers/docker/example_docker/index", "_api/tests/system/providers/docker/example_docker_copy_data/index", "_api/tests/system/providers/docker/example_docker_swarm/index", "_api/tests/system/providers/docker/index", "changelog", "commits", "connections/docker", "decorators/docker", "index", "installing-providers-from-sources", "security"], "filenames": ["_api/airflow/providers/docker/decorators/docker/index.rst", "_api/airflow/providers/docker/decorators/index.rst", "_api/airflow/providers/docker/exceptions/index.rst", "_api/airflow/providers/docker/hooks/docker/index.rst", "_api/airflow/providers/docker/hooks/index.rst", "_api/airflow/providers/docker/index.rst", "_api/airflow/providers/docker/operators/docker/index.rst", "_api/airflow/providers/docker/operators/docker_swarm/index.rst", "_api/airflow/providers/docker/operators/index.rst", "_api/tests/system/providers/docker/example_docker/index.rst", "_api/tests/system/providers/docker/example_docker_copy_data/index.rst", "_api/tests/system/providers/docker/example_docker_swarm/index.rst", "_api/tests/system/providers/docker/index.rst", "changelog.rst", "commits.rst", "connections/docker.rst", "decorators/docker.rst", "index.rst", "installing-providers-from-sources.rst", "security.rst"], "titles": ["airflow.providers.docker.decorators.docker", "airflow.providers.docker.decorators", "airflow.providers.docker.exceptions", "airflow.providers.docker.hooks.docker", "airflow.providers.docker.hooks", "airflow.providers.docker", "airflow.providers.docker.operators.docker", "airflow.providers.docker.operators.docker_swarm", "airflow.providers.docker.operators", "tests.system.providers.docker.example_docker", "tests.system.providers.docker.example_docker_copy_data", "tests.system.providers.docker.example_docker_swarm", "tests.system.providers.docker", "Changelog", "Package apache-airflow-providers-docker", "Docker Connection", "Task Docker Decorator", "apache-airflow-providers-docker", "Installing from sources", "Releasing security patches"], "terms": {"docker_task": 0, "python_cal": 0, "none": [0, 2, 3, 6, 7, 16, 18], "multiple_output": [0, 13, 14, 16], "kwarg": [0, 6, 7], "sourc": [0, 2, 3, 5, 6, 7, 9, 10, 11, 16], "python": [0, 6, 7, 13, 14, 16, 17, 18], "oper": [0, 5, 10, 13, 14, 15, 16], "wrap": [0, 16], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "also": [0, 6, 7, 16, 18], "accept": 0, "ani": [0, 6, 7, 16, 18], "argument": [0, 13, 14], "dockeroper": [0, 6, 7, 10, 13, 14], "via": [0, 6, 7, 16, 17, 18], "can": [0, 6, 7, 15, 16, 17, 18, 19], "reus": 0, "singl": 0, "dag": [0, 13, 14], "paramet": [0, 2, 3, 6, 7, 13, 14, 15], "callabl": [0, 16], "bool": [0, 3, 6, 7, 14, 15], "If": [0, 3, 6, 7, 13, 16, 18], "set": [0, 3, 6, 7, 13, 16], "return": [0, 2, 3, 6, 13, 14, 16], "valu": [0, 6, 7, 10, 13, 16], "unrol": [0, 16], "multipl": [0, 13, 14, 16], "xcom": [0, 6, 13, 14, 16], "dict": [0, 6, 13, 14, 16], "kei": [0, 3, 6, 7, 16, 18], "default": [0, 3, 6, 7, 14, 16, 19], "fals": [0, 3, 6, 7, 13, 15, 16], "3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 17, 18, 19], "9": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 17, 18, 19], "0": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 17, 18, 19], "2": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 17, 18, 19], "dev0": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "experiment": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "featur": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19], "us": [2, 3, 6, 7, 10, 13, 14, 15, 16, 18, 19], "dockercontainerfailedexcept": 2, "messag": 2, "log": [2, 6, 7, 13, 14, 16], "base": [2, 3, 6, 7, 14], "airflowexcept": 2, "rais": 2, "when": [2, 3, 6, 7, 13, 14, 15, 16, 19], "contain": [2, 3, 6, 7, 10, 13, 14, 16, 18], "error": [2, 13, 14], "list": [2, 6, 7, 13, 14, 16], "str": [2, 3, 6, 7, 14], "byte": [2, 6, 7, 13, 14, 16], "The": [2, 3, 6, 7, 10, 13, 15, 16, 17, 18, 19], "output": [2, 6, 16], "fail": [2, 13, 14], "dockercontainerfailedskipexcept": 2, "airflowskipexcept": 2, "task": [2, 6, 7, 13, 14], "should": [2, 6, 7, 15, 16, 18, 19], "skip": [2, 6, 13, 14, 16], "dockerhook": [3, 6, 13, 14], "docker_conn_id": [3, 6, 7, 16], "default_conn_nam": 3, "base_url": 3, "version": [3, 6, 7, 13, 14, 16, 17, 18, 19], "tl": 3, "timeout": [3, 6, 13, 14, 16], "default_timeout_second": [3, 6], "basehook": [3, 13, 14], "interact": 3, "daemon": [3, 6, 7, 16], "registri": [3, 6, 7, 15], "thin": 3, "wrapper": 3, "around": 3, "apicli": [3, 6], "connect": [3, 6, 7, 13, 14, 16], "sdk": 3, "low": 3, "level": [3, 14], "api": [3, 6, 7, 13, 14, 16], "id": [3, 6, 7, 16, 18], "where": [3, 6, 16, 19], "store": [3, 6, 7], "credenti": 3, "empti": 3, "doe": 3, "login": [3, 6, 7, 15], "url": [3, 6, 7, 15, 16], "server": [3, 6, 7, 15, 16, 18], "auto": [3, 6, 7, 13, 14, 16], "automat": [3, 6, 7, 13, 16], "detect": [3, 6, 7, 13, 14, 16], "": [3, 6, 7, 13, 14, 16, 18], "tlsconfig": 3, "requir": [3, 6, 7, 13, 19], "enabl": [3, 6, 10, 14, 15, 16], "pass": [3, 6, 7, 16], "true": [3, 6, 7, 13, 14, 16], "option": [3, 6, 13, 14, 15, 16], "object": [3, 7, 13], "custom": [3, 6, 16], "configur": [3, 6, 7], "int": [3, 6], "call": [3, 13, 14, 16], "second": [3, 16], "properti": [3, 6], "client_creat": 3, "api_cli": 3, "creat": [3, 6, 7, 16, 18], "conn_name_attr": 3, "docker_default": [3, 15], "conn_typ": 3, "hook_nam": 3, "static": [3, 6, 14], "construct_tls_config": 3, "ca_cert": 3, "client_cert": 3, "client_kei": 3, "verifi": [3, 6, 14, 16], "assert_hostnam": 3, "ssl_version": 3, "construct": 3, "from": [3, 6, 7, 13, 14, 16, 19], "part": [3, 7], "path": [3, 6, 7, 16], "pem": [3, 6, 7, 16], "encod": [3, 6, 7, 13, 14, 15, 16], "ca": 3, "certif": [3, 6, 7, 13, 14, 16, 18], "author": [3, 6, 7, 16], "file": [3, 6, 7, 10, 13, 14, 16, 18], "valid": [3, 6, 13, 14, 16, 18], "hostnam": [3, 6, 7, 13, 14, 16], "match": [3, 6, 7, 14, 16, 18], "against": [3, 6, 7, 16], "disabl": [3, 6, 7, 13, 14, 16], "check": [3, 6, 7, 14, 16, 18], "ssl": [3, 6, 7, 16], "commun": [3, 6, 7, 16], "host": [3, 6, 7, 15, 16], "cach": [3, 6], "get_conn": 3, "classmethod": 3, "get_connection_form_widget": 3, "form": [3, 14], "widget": [3, 13, 14], "get_ui_field_behaviour": 3, "field": [3, 13, 14], "behaviour": [3, 13, 14], "decor": [5, 13, 14], "hook": [5, 6, 13, 14, 15], "docker_swarm": [5, 8, 13], "except": [5, 19], "__version__": [5, 14], "implement": [6, 13, 14], "stringifi": 6, "line": [6, 13, 14, 16], "make": [6, 7, 13, 14], "sure": 6, "string": [6, 7, 10, 13, 14, 16], "even": [6, 14], "ar": [6, 7, 10, 15, 16, 17, 18, 19], "stream": [6, 13, 14], "imag": [6, 7, 13, 14, 16], "api_vers": [6, 7, 16], "command": [6, 7, 14, 16], "container_nam": [6, 16], "cpu": [6, 16], "1": [6, 10, 16], "docker_url": [6, 7, 16], "unix": [6, 7, 16], "var": [6, 7, 16], "run": [6, 7, 13, 16, 18], "sock": [6, 7, 16], "environ": [6, 7, 10, 15, 16], "private_environ": [6, 14, 16], "env_fil": [6, 16], "force_pul": [6, 7, 16], "mem_limit": [6, 7, 16], "host_tmp_dir": [6, 16], "network_mod": [6, 13, 14, 16], "tls_ca_cert": [6, 7, 16], "tls_client_cert": [6, 7, 16], "tls_client_kei": [6, 7, 16], "tls_verifi": [6, 13, 14, 16], "tls_hostnam": [6, 7, 16], "tls_ssl_version": [6, 7, 16], "mount_tmp_dir": [6, 16], "tmp_dir": [6, 7, 16], "tmp": 6, "user": [6, 7, 14, 16, 18], "mount": [6, 7, 13, 14, 16], "entrypoint": [6, 13, 14, 16], "working_dir": [6, 16], "xcom_al": [6, 13, 16], "dn": [6, 16], "dns_search": [6, 16], "auto_remov": [6, 7, 13, 14, 16], "never": [6, 16], "shm_size": [6, 16], "tty": [6, 7, 16], "privileg": [6, 13, 14, 16], "cap_add": [6, 16], "extra_host": [6, 14, 16], "retrieve_output": [6, 16], "retrieve_output_path": [6, 16], "device_request": [6, 13, 14, 16], "log_opts_max_s": [6, 16], "log_opts_max_fil": [6, 16], "ipc_mod": [6, 13, 14, 16], "skip_on_exit_cod": [6, 16], "port_bind": [6, 16], "ulimit": [6, 13, 14, 16], "model": [6, 7, 19], "baseoper": 6, "execut": [6, 7, 13, 14, 16], "insid": [6, 7, 14, 16], "By": [6, 18], "temporari": [6, 7, 13, 14, 16, 18], "directori": [6, 7, 10, 16, 18], "allow": [6, 7, 13, 14], "togeth": [6, 7], "exce": [6, 7], "disk": [6, 7], "size": [6, 7, 16], "10gb": [6, 7], "In": [6, 13, 14], "case": [6, 7, 13, 16, 19], "access": [6, 7], "variabl": [6, 7, 15, 16], "airflow_tmp_dir": [6, 7, 16], "volum": [6, 13, 14], "cannot": 6, "warn": [6, 13, 14, 18], "print": [6, 10], "attempt": [6, 16], "made": [6, 7, 16, 18], "without": 6, "folder": [6, 13, 14, 18], "work": [6, 13, 14, 16], "remot": [6, 7, 13, 16], "engin": [6, 7, 13], "you": [6, 13, 15, 17, 18, 19], "solut": 6, "share": 6, "know": [6, 18], "still": 6, "alreadi": [6, 18], "exist": [6, 15, 17], "name": [6, 7, 13, 14, 16], "your": [6, 10, 13], "achiev": 6, "similar": 6, "capabl": [6, 14, 16], "exceed": 6, "privat": [6, 7, 16], "prior": [6, 7], "pull": [6, 7, 14, 16], "need": [6, 7, 16], "which": [6, 7, 13, 16, 19], "tag": [6, 7, 16], "omit": [6, 7, 16], "latest": [6, 7, 14, 16, 19], "templat": [6, 7, 13, 14, 16], "float": [6, 7, 16], "number": [6, 14, 16], "assign": [6, 16], "get": [6, 7, 13, 14, 16, 18, 19], "multipli": [6, 16], "1024": [6, 16], "see": [6, 7, 14, 16, 17], "http": [6, 7, 15, 18], "doc": [6, 13, 14], "com": [6, 15, 18], "refer": [6, 7, 14], "constraint": [6, 7], "These": [6, 16], "hidden": [6, 16], "websit": [6, 16], "rel": [6, 16], "env": [6, 13, 14, 16], "overridden": [6, 16], "everi": [6, 7, 16], "maximum": [6, 7, 16], "amount": [6, 7, 16], "memori": [6, 7, 16], "either": [6, 7, 16], "repres": [6, 7, 16], "limit": [6, 7, 16], "like": [6, 7, 16], "128m": [6, 7, 16], "1g": [6, 7, 16], "specifi": [6, 15, 16], "locat": [6, 16], "map": [6, 16], "standard": [6, 16], "system": [6, 13, 14, 16], "temp": [6, 16], "network": [6, 7, 13, 14, 16], "mode": [6, 7, 13, 16], "It": [6, 16, 18], "one": [6, 7, 16, 18], "follow": [6, 10, 13, 14, 15, 16, 18, 19], "bridg": [6, 16], "new": [6, 10, 13, 14, 16, 19], "stack": [6, 16], "No": [6, 16], "anoth": [6, 16], "incompat": [6, 16], "secur": [6, 7, 16], "authent": [6, 7, 16], "client": [6, 7, 16], "whether": [6, 7, 13, 14, 15, 16], "bind": [6, 13, 16], "point": [6, 7, 14, 16], "avail": [6, 7, 13, 16, 18], "type": [6, 7, 10, 13, 14, 15, 16], "each": [6, 16], "item": [6, 16], "instanc": [6, 7, 16], "overwrit": [6, 16], "equival": [6, 16], "w": [6, 16], "switch": [6, 14, 16], "push": [6, 16], "all": [6, 13, 14, 15, 16, 17, 19], "stdout": [6, 16], "just": [6, 16], "last": [6, 13, 16], "search": [6, 16], "domain": [6, 16], "typing_extens": 6, "liter": [6, 13, 14], "success": [6, 16], "forc": [6, 13, 14, 16], "remov": [6, 7, 13, 14, 16, 18], "process": [6, 7, 16], "exit": [6, 7, 13, 14, 16], "possibl": [6, 16], "do": [6, 16, 18], "alwai": [6, 13, 14, 16, 19], "dev": [6, 14, 16], "shm": [6, 16], "must": [6, 16], "greater": [6, 16], "than": [6, 16], "alloc": [6, 7, 16], "pseudo": [6, 7, 16], "give": [6, 13, 14, 16], "extend": [6, 16], "iter": 6, "includ": [6, 13, 14, 16, 19], "addit": [6, 16], "resolv": [6, 16], "ip": [6, 16], "address": [6, 16], "consist": [6, 16], "befor": [6, 14, 16], "manual": [6, 13, 16], "shut": [6, 16], "down": [6, 13, 14, 16, 18], "want": [6, 13, 16, 18, 19], "pickl": [6, 13, 14, 16], "serial": [6, 16], "post": [6, 16], "retriev": [6, 16], "devicerequest": 6, "expos": [6, 7, 14, 16], "resourc": [6, 16], "gpu": [6, 16], "roll": [6, 16], "A": [6, 7, 16], "posit": [6, 16], "integ": [6, 16], "plu": [6, 16], "modifi": [6, 16], "unit": [6, 16], "measur": [6, 16], "k": [6, 16], "m": [6, 16], "g": [6, 16], "eg": [6, 16], "10m": [6, 16], "unlimit": [6, 16], "present": [6, 16], "excess": [6, 16], "oldest": [6, 16], "onli": [6, 7, 13, 16, 19], "effect": [6, 13, 16], "max": [6, 16], "ipc": [6, 16], "collect": [6, 16], "abc": 6, "code": [6, 10, 13, 14, 16, 18], "leav": [6, 7, 16], "state": [6, 13, 14, 16], "non": [6, 14, 16], "zero": [6, 16], "treat": [6, 16], "failur": [6, 16], "publish": [6, 16, 19], "port": [6, 14, 15, 16], "dictionari": [6, 7, 15, 16], "indic": [6, 7, 16, 18], "open": [6, 16], "cli": [6, 13, 14], "template_field": [6, 13, 14], "sequenc": [6, 13, 14], "template_fields_render": 6, "template_ext": 6, "sh": 6, "bash": [6, 18], "get_hook": [6, 13, 14], "context": [6, 7, 14], "deriv": [6, 7], "same": [6, 7], "render": [6, 7], "jinja": [6, 7], "get_template_context": [6, 7], "more": [6, 7, 14, 15], "format_command": 6, "start": 6, "pars": 6, "on_kil": [6, 7], "overrid": [6, 7], "method": [6, 7, 13, 14], "clean": [6, 7, 14], "up": [6, 7, 14], "subprocess": [6, 7], "kill": [6, 7, 13, 14], "thread": [6, 7], "multiprocess": [6, 7], "within": [6, 7, 16], "ghost": [6, 7], "behind": [6, 7], "unpack_environment_vari": 6, "env_str": 6, "format": [6, 13, 14], "separ": [6, 13, 14, 19], "n": [6, 13], "newlin": 6, "ephemer": 7, "swarm": [7, 13, 14], "servic": 7, "dockerswarmoper": [7, 13, 14], "enable_log": [7, 13, 14], "config": [7, 13, 14], "secret": [7, 13, 14], "placement": [7, 13, 14], "exampl": [7, 13, 14, 15, 18], "orchestr": 7, "time": 7, "script": [7, 14, 18], "highli": 7, "side": [7, 13], "show": [7, 10], "applic": 7, "support": [7, 13, 14, 16, 17], "json": [7, 13, 14, 15], "journald": 7, "driver": 7, "configrefer": 7, "per": [7, 14], "py": [7, 14, 16], "readthedoc": 7, "io": [7, 14, 15], "en": 7, "stabl": 7, "html": 7, "servicecollect": 7, "_": 7, "secretrefer": 7, "create_servic": 7, "servicemod": 7, "deploi": 7, "replic": 7, "global": 7, "associ": 7, "networkattachmentconfig": 7, "attach": 7, "instruct": [7, 18, 19], "schedul": 7, "instead": [7, 13, 14], "assum": 7, "env_id": [9, 10, 11], "dag_id": [9, 10, 11], "docker_test": 9, "t1": [9, 11], "test_run": [9, 10, 11], "sampl": 10, "listen": 10, "move": [10, 13, 14], "being": 10, "bashoper": 10, "shortcircuitoper": 10, "todo": 10, "review": 10, "workflow": 10, "chang": [10, 14, 19], "accordingli": 10, "docker_sample_copy_data": 10, "locate_file_cmd": 10, "multilin": 10, "sleep": 10, "10": [10, 13, 14], "find": 10, "param": [10, 13, 14], "source_loc": 10, "f": [10, 14], "printf": 10, "head": 10, "docker_swarm_dag": 11, "example_dock": 12, "example_docker_copy_data": 12, "example_docker_swarm": 12, "apach": [13, 18], "airflow": [13, 16, 18, 19], "provid": [13, 16, 18, 19], "docker": [13, 18], "releas": [13, 14, 17], "explain": 13, "polici": [13, 19], "35677": [13, 14], "broken": [13, 14], "36127": [13, 14], "bump": [13, 14], "minimum": [13, 14, 17], "36017": [13, 14], "signatur": [13, 14, 18], "child": [13, 14], "class": [13, 14, 17], "36086": [13, 14], "refactor": [13, 14], "attribut": [13, 14], "35571": [13, 14], "_dockerdecoratedoper": [13, 14], "modul": [13, 14], "35293": [13, 14], "add": [13, 14], "34284": [13, 14], "min": [13, 14], "34728": [13, 14], "deprec": [13, 14], "34432": [13, 14], "cleanup": [13, 14], "33914": [13, 14], "replac": [13, 14], "concaten": [13, 14], "unpack": [13, 14], "33933": [13, 14], "33761": [13, 14], "func": [13, 14], "isinst": [13, 14], "33759": [13, 14], "improv": [13, 14], "duplic": [13, 14], "sort": [13, 14], "33675": [13, 14], "simplifi": [13, 14], "condit": [13, 14], "len": [13, 14], "33569": [13, 14], "repr": [13, 14], "proper": [13, 14], "33520": [13, 14], "33232": [13, 14], "rid": [13, 14], "python2": [13, 14], "numer": [13, 14], "relic": [13, 14], "33050": [13, 14], "drop": [13, 14, 18], "30963": [13, 14], "30917": [13, 14], "handl": [13, 14], "logic": [13, 14], "kubernetespodoper": [13, 14], "30769": [13, 14], "ad": [13, 14], "choos": [13, 14, 18], "30309": [13, 14], "30310": [13, 14], "skip_exit_cod": [13, 14], "30733": [13, 14], "29586": [13, 14], "correct": [13, 14, 18], "28700": [13, 14], "28363": [13, 14], "28996": [13, 14], "label": [13, 14], "reauth": [13, 14, 15], "28974": [13, 14], "27822": [13, 14], "28648": [13, 14], "27196": 13, "27553": [13, 14], "26951": [13, 14], "26653": [13, 14], "pre": [13, 14], "commit": [13, 14], "custom_operator_nam": [13, 14], "25786": [13, 14], "externalpythonoper": [13, 14], "25780": [13, 14], "after": [13, 14], "23160": [13, 14], "charact": [13, 14], "arrai": [13, 14], "24726": [13, 14], "xcom_push": [13, 14], "23981": [13, 14], "test": [13, 14, 16, 19], "23167": [13, 14], "23554": [13, 14], "mypi": [13, 14], "main": [13, 14, 18, 19], "22884": [13, 14], "22502": [13, 14], "mistakenli": 13, "install_requir": 13, "22382": 13, "descript": [13, 14], "mention": [13, 14], "tupl": [13, 14], "22371": [13, 14], "avoid": [13, 14], "try": [13, 14], "did": [13, 14], "succe": [13, 14], "22145": [13, 14], "trove": 13, "classifi": [13, 14], "pypi": [13, 14, 19], "framework": 13, "21986": [13, 14], "function": [13, 14, 16], "21175": [13, 14], "21429": [13, 14], "19997": [13, 14], "18990": [13, 14], "fixup": [13, 14], "19099": [13, 14], "workaround": [13, 14], "18872": [13, 14], "18739": [13, 14], "taskflow": [13, 14], "15330": [13, 14], "ha": 13, "attributeerror": 13, "_taskdecor": 13, "replica": [13, 14], "17474": [13, 14], "optimis": 13, "import": [13, 14, 18], "16932": [13, 14], "retri": [13, 14], "17061": [13, 14], "13536": [13, 14], "That": 13, "wa": 13, "unintend": 13, "15843": [13, 14], "been": 13, "There": [13, 18], "fallback": 13, "abl": 13, "appli": [13, 14], "apply_default": [13, 14], "15667": [13, 14], "due": 13, "instal": [13, 14, 19], "first": 13, "upgrad": [13, 14, 19], "least": 13, "otherwis": 13, "packag": 13, "have": [13, 14, 19], "db": 13, "complet": 13, "migrat": 13, "arg": [13, 14, 16], "newer": 13, "syntax": [13, 15], "14642": [13, 14], "pythonvirtualenvdecor": [13, 14], "14761": [13, 14], "terminu": [13, 14], "14960": [13, 14], "14157": [13, 14], "tool": [13, 14], "rc": [13, 14], "14082": [13, 14], "updat": [13, 14], "document": [13, 14], "readm": [13, 14], "13532": [13, 14], "13993": [13, 14], "13852": [13, 14], "initi": 13, "detail": [14, 18], "For": [14, 15, 18], "high": 14, "changelog": 14, "inform": [14, 15, 19], "2023": 14, "12": [14, 18], "11": [14, 18], "subject": 14, "cd476acd8f": 14, "f9c952bb7f": 14, "09": 14, "fix": [14, 19], "999b70178a": 14, "08": 14, "prepar": [14, 19], "1st": 14, "wave": 14, "decemb": 14, "36112": 14, "d0918d77ee": 14, "07": 14, "882108862d": 14, "06": 14, "c905fe88d": 14, "25": 14, "about": [14, 18, 19], "link": [14, 18], "yaml": 14, "35837": 14, "24": 14, "0b23d5601c": 14, "2nd": 14, "novemb": 14, "35836": 14, "99534e47f3": 14, "19": 14, "reproduc": 14, "build": [14, 18], "35693": 14, "99df205f42": 14, "16": 14, "reappli": 14, "35686": 14, "5a6dcfd865": 14, "1b059c57d6": 14, "35537": 14, "1c9d1c2f8a": 14, "31": 14, "d1c58d86de": 14, "28": 14, "3rd": 14, "octob": 14, "35233": 14, "3592ff4046": 14, "35187": 14, "dd7ba3cae1": 14, "ruff": 14, "292": 14, "35053": 14, "7a93b19138": 14, "d401": 14, "daskexecutor": 14, "github": 14, "inclus": 14, "34935": 14, "13": 14, "e9987d5059": 14, "34916": 14, "8e26865763": 14, "consolid": 14, "34378": 14, "0c8e30e43b": 14, "05": 14, "7ebf4220c9": 14, "usag": 14, "34320": 14, "d75e5ef00a": 14, "18": 14, "c668245b57": 14, "c5016f754d": 14, "textwrap": 14, "34220": 14, "21990ed894": 14, "34201": 14, "3d27504a62": 14, "04": 14, "55976af32": 14, "concatin": 14, "b11525702c": 14, "26": 14, "e16e9f3439": 14, "c077d19060": 14, "aug": 14, "33730": 14, "2dbb963324": 14, "1cdd82391e": 14, "21": [14, 17], "other": 14, "abef61ff3d": 14, "20": 14, "b5a4d36383": 14, "33291": 14, "55424d41b4": 14, "60677b0ba3": 14, "33128": 14, "e3d82c6be0": 14, "225e3041d2": 14, "juli": 14, "rc2": 14, "32381": 14, "3878fe6fab": 14, "spuriou": 14, "header": 14, "32373": 14, "cb4927a018": 14, "32298": 14, "d1aa509bbd": 14, "d205": 14, "databrick": 14, "32243": 14, "09d4718d3a": 14, "27": 14, "structur": 14, "32125": 14, "79bcc2e668": 14, "rc1": 14, "june": 14, "32001": 14, "8b146152d6": 14, "note": [14, 15], "32015": 14, "07ea574f": 14, "d400": 14, "pydocstyl": 14, "31742": 14, "9276310a43": 14, "docstr": 14, "31681": 14, "a59076eae": 14, "02": 14, "31427": 14, "9fa75aaf7a": 14, "29": 14, "45548b9451": 14, "mai": 14, "31416": 14, "abea189022": 14, "31393": 14, "f5aed58d9f": 14, "circular": 14, "caus": 14, "31379": 14, "d8c0e3009a": 14, "17": 14, "30730": 14, "d9ff55cf6d": 14, "31252": 14, "0a30706aa7": 14, "03": 14, "airflowproviderdeprecationwarn": 14, "30975": 14, "eef5bc7f16": 14, "full": 14, "autom": 14, "30994": 14, "a7eb32a5b2": 14, "30": 14, "e46ce78b66": 14, "adhoc": 14, "30787": 14, "afdc95435b": 14, "99a3bf2318": 14, "c1a685f752": 14, "14": 14, "d23a3bbed8": 14, "mechan": 14, "suspend": 14, "30422": 14, "b8ab594130": 14, "15": 14, "boilerpl": 14, "30118": 14, "dba390e323": 14, "22": 14, "augment": 14, "languag": 14, "ci": 14, "29549": 14, "470fdaea27": 14, "midmonth": 14, "29589": 14, "7bd87e75d": 14, "01": 14, "23": 14, "dd6cef7889": 14, "hoc": 14, "cassandra": 14, "papermil": 14, "28999": 14, "3a7bfce601": 14, "cd637c223f": 14, "911b708ffd": 14, "jan": 14, "mid": 14, "month": 14, "28929": 14, "af2c22a00a": 14, "57a889de35": 14, "5246c009c5": 14, "28651": 14, "ea08989db1": 14, "2022": 14, "1aa3da543a": 14, "12c3c39d1a": 14, "27613": 14, "a504a8267d": 14, "1add2f7c41": 14, "9ab1a6a3e7": 14, "old": 14, "style": 14, "26872": 14, "2a34dc9e84": 14, "normal": 14, "27205": 14, "f8db64c35c": 14, "septemb": 14, "26731": 14, "19d6f54704": 14, "06acf40a43": 14, "pep": 14, "563": 14, "postpon": 14, "evalu": 14, "annot": 14, "core": 14, "26289": 14, "55928b9da6": 14, "762235fd77": 14, "d2459a241b": 14, "25030": 14, "cc6a44bdc3": 14, "237d2225d6": 14, "0de31bd73a": 14, "depend": [14, 19], "24672": 14, "510a6bab45": 14, "24702": 14, "40f08900f2": 14, "hint": 14, "24667": 14, "dcdcf3a2b8": 14, "24307": 14, "717a7588bc": 14, "doubl": 14, "specif": 14, "24292": 14, "aeabe994b3": 14, "24231": 14, "06856337a5": 14, "027b707d21": 14, "explanatori": 14, "contributor": 14, "24229": 14, "97b443aa59": 14, "75c60923e0": 14, "23631": 14, "24bb9f3a6f": 14, "8b6b0848a3": 14, "brees": 14, "23104": 14, "6933022e94": 14, "56ab82ed7a": 14, "april": 14, "22819": 14, "e1a42c4fc8": 14, "d7dbfb7e26": 14, "bugfix": [14, 19], "22383": 14, "31096cc883": 14, "16adc035b1": 14, "march": 14, "22226": 14, "03cdfe701b": 14, "f5b96315fe": 14, "feb": 14, "22056": 14, "188ac51996": 14, "python3": [14, 16], "21973": 14, "7acc190a23": 14, "3035d3ab16": 14, "debian": 14, "bullsey": 14, "our": 14, "dockerfil": 14, "21378": 14, "21875": 14, "8299adec91": 14, "revert": 14, "21874": 14, "5d89dea568": 14, "d94fa37830": 14, "januari": 14, "delai": 14, "21439": 14, "63fa257231": 14, "6c3a67d4fc": 14, "2021": [14, 18], "21257": 14, "2f4a3d4d40": 14, "cb73053211": 14, "21074": 14, "602abe8394": 14, "now": 14, "sphinx": 14, "autoapi": 14, "typehint": 14, "20951": 14, "2c840670c0": 14, "rewrit": 14, "composit": 14, "20868": 14, "f77417eb0d": 14, "k8": 14, "compat": 14, "20614": 14, "97496ba2b4": 14, "20523": 14, "83f8e178ba": 14, "ext": 14, "20608": 14, "d56e7b56bb": 14, "friendli": 14, "20571": 14, "a0821235fb": 14, "everywher": 14, "20565": 14, "59e4b78daa": 14, "20034": 14, "b20e6d3f06": 14, "20235": 14, "1924e29fa2": 14, "853576d901": 14, "19882": 14, "aa2cb5545f": 14, "remain": 14, "pylint": 14, "comment": 14, "19541": 14, "d9567eb106": 14, "19321": 14, "45c70f397a": 14, "f5ad26dcdd": 14, "3154935138": 14, "43f334f4bd": 14, "840ea3efb9": 14, "18613": 14, "ef037e7021": 14, "start_dat": 14, "misc": 14, "18597": 14, "2a3cbabbf8": 14, "cope": 14, "anyth": 14, "18463": 14, "a9772cf287": 14, "0a68588479": 14, "august": 14, "17890": 14, "be75dcd39c": 14, "meta": 14, "data": [14, 16], "76ed2a49c6": 14, "lazili": 14, "individu": 14, "manag": [14, 18], "17682": 14, "4da4c186ec": 14, "87f408b1e7": 14, "17116": 14, "b10ed95a2a": 14, "xcomarg": 14, "16871": 14, "cd3307ff21": 14, "24d02bfa84": 14, "17066": 14, "b076ac5925": 14, "d02ded65ea": 14, "wrongli": 14, "escap": 14, "amazon": 14, "17020": 14, "b916b75079": 14, "17015": 14, "bc004151ed": 14, "866a601b76": 14, "toolchain": 14, "16682": 14, "bbc627a3da": 14, "16501": 14, "cbf8001d76": 14, "synchron": 14, "buggfix": 14, "16464": 14, "8a9c337838": 14, "16454": 14, "1fba5402bb": 14, "16405": 14, "9c94b72d44": 14, "16294": 14, "12995cfb9a": 14, "37681bca00": 14, "807ad32ce5": 14, "pip": [14, 17, 18], "15576": 14, "5b2fe0e740": 14, "popular": 14, "15393": 14, "594d93d3b0": 14, "566127308f": 14, "ab47717699": 14, "042be2e4e0": 14, "15236": 14, "68e4c4dcb0": 14, "backport": 14, "14886": 14, "3064bf0442": 14, "589d6dec92": 14, "next": [14, 19], "14487": 14, "10343ec29f": 14, "88bdcfa0df": 14, "14013": 14, "ac2f72c98d": 14, "13767": 14, "ba54afe58b": 14, "25d68a7a9": 14, "a9ac2b040b": 14, "flynt": 14, "13732": 14, "3fd5ef3555": 14, "miss": 14, "logo": 14, "integr": 14, "13717": 14, "295d66f914": 14, "2020": 14, "grammar": 14, "13380": 14, "6cf76d7ac0": 14, "typo": 14, "13148": 14, "32971a1a2d": 14, "12955": 14, "b40dffa085": 14, "renam": 14, "rema": 14, "aip": 14, "12917": 14, "9b39f24780": 14, "dynam": 14, "12558": 14, "6b339c70c4": 14, "spam": 14, "meaning": 14, "12763": 14, "2037303eef": 14, "discoveri": 14, "12466": 14, "c34ef853c8": 14, "out": [14, 19], "12444": 14, "0080354502": 14, "0b2": 14, "batch": 14, "12449": 14, "ae7cb4a1e2": 14, "wrong": 14, "hash": 14, "12390": 14, "6889a333cf": 14, "ref": 14, "12366": 14, "7825e8f590": 14, "12304": 14, "85a18e13d9": 14, "project": 14, "page": [14, 18], "cross": 14, "12212": 14, "59eb5de78c": 14, "come": 14, "0beta1": 14, "12206": 14, "b2a28d1590": 14, "12082": 14, "4e8f9cc8d0": 14, "black": 14, "formmatt": 14, "9550": 14, "8c42cf1b00": 14, "pyupgrad": 14, "11447": 14, "0314a3a218": 14, "10806": 14, "5a439e84eb": 14, "2a1": 14, "11855": 14, "872b1566a1": 14, "gener": 14, "setup": 14, "11826": 14, "349b0811c3": 14, "d200": 14, "11688": 14, "16e7129719": 14, "11487": 14, "0a0e1af800": 14, "markdown": 14, "toc": 14, "11249": 14, "ca4238eb4d": 14, "11242": 14, "5220e4c384": 14, "11238": 14, "e3f96ce7a8": 14, "incorrect": 14, "11138": 14, "2e56ee7b22": 14, "10546": 14, "fdd9b6f65b": 14, "10543": 14, "3696c34c28": 14, "word": 14, "10528": 14, "2f2d8dbfaf": 14, "noinspect": 14, "nativ": 14, "intellij": 14, "10525": 14, "ee7ca128a1": 14, "refernc": 14, "10483": 14, "cdec301254": 14, "sensor": 14, "10205": 14, "d79e7221d": 14, "9733": 14, "aeea71274d": 14, "constructor": 14, "10097": 14, "7d24b088cd": 14, "stop": 14, "default_arg": 14, "example_dag": 14, "9985": 14, "c2db0dfeb1": 14, "strict": [14, 19], "rule": [14, 19], "9705": 14, "9906": 14, "5d61580c57": 14, "public": 14, "9463": 14, "d0e7db4024": 14, "fresh": 14, "9408": 14, "12af6a0800": 14, "final": 14, "23rc1": 14, "9404": 14, "c7e5bce57f": 14, "candid": 14, "9370": 14, "f6bd817a3a": 14, "introduc": 14, "transfer": 14, "9320": 14, "4a74cf1a34": 14, "9173": 14, "b4b84a1933": 14, "kernel": 14, "9142": 14, "0b0e4f7a4c": 14, "rc3": 14, "relas": 14, "9026": 14, "00642a46d0": 14, "8994": 14, "375d1ca229": 14, "8898": 14, "12c5e5d8a": 14, "8891": 14, "f3521fb0e3": 14, "regener": 14, "8886": 14, "92585ca4cb": 14, "8807": 14, "511d98e30d": 14, "4363": 14, "8287": 14, "0a1de16682": 14, "8533": 14, "3237c7e31d": 14, "5850": 14, "captur": 14, "6552": 14, "9626b03d19": 14, "6574": 14, "7671": 14, "733d3d3c32": 14, "7628": 14, "4bde99f132": 14, "7802": 14, "cd546b664f": 14, "super": 14, "cncf": 14, "7825": 14, "3320e432a1": 14, "6817": 14, "lazi": 14, "load": 14, "keep": 14, "face": 14, "untouch": 14, "7517": 14, "4d03e33c11": 14, "__init__": 14, "implicit": 14, "explicit": 14, "entri": 14, "md": 14, "squash": 14, "rebas": 14, "7456": 14, "dbcd3d8787": 14, "6804": 14, "basic": 14, "7419": 14, "9cbd7de6d1": 14, "6792": 14, "_oper": 14, "_hook": 14, "_sensor": 14, "7412": 14, "97a429f9d0": 14, "6714": 14, "magic": 14, "utf": 14, "7338": 14, "83c037873f": 14, "6674": [14, 18], "accord": 14, "7287": 14, "059eda05f8": 14, "6610": 14, "softwar": [14, 18], "7231": 14, "here": 15, "some": 15, "relat": 15, "usernam": 15, "password": 15, "plaintext": 15, "ex": 15, "index": 15, "v1": 15, "extra": 15, "azur": 15, "email": 15, "account": 15, "refresh": 15, "uri": 15, "compon": 15, "export": 15, "airflow_conn_docker_default": 15, "3a": 15, "2f": 15, "2findex": 15, "2fv1": 15, "80": 15, "myemail": 15, "40my": 15, "use_dil": 16, "dill": 16, "python_command": 16, "e": 16, "path2": 16, "ro": 16, "example_taskflow_api_docker_virtualenv": 16, "slim": 16, "bookworm": 16, "def": 16, "transform": 16, "order_data_dict": 16, "simpl": 16, "take": 16, "order": 16, "comput": 16, "total": 16, "total_order_valu": 16, "top": [17, 18], "below": [17, 18], "6": 17, "5": 17, "dotenv": 17, "describ": 18, "download": 18, "offici": 18, "most": 18, "differ": 18, "select": 18, "left": 18, "sdist": 18, "whl": 18, "origin": 18, "checksum": 18, "foundat": 18, "asc": 18, "sha512": 18, "those": 18, "abov": 18, "how": 18, "pgp": 18, "essenti": 18, "sha": 18, "gpg": 18, "pleas": 18, "well": 18, "relev": 18, "distribut": 18, "recommend": 18, "mirror": 18, "pgpk": 18, "ka": 18, "To": 18, "binari": 18, "guid": 18, "pgpv": 18, "tar": 18, "gz": 18, "sat": 18, "sep": 18, "49": 18, "54": 18, "bst": 18, "rsa": 18, "cde15c6e4d3a8ec4ecf4ba4b6674e08ad7de406f": 18, "issuer": 18, "kaxilnaik": 18, "org": 18, "good": [18, 19], "kaxil": 18, "naik": 18, "unknown": 18, "aka": 18, "gmail": 18, "certifi": 18, "trust": 18, "belong": 18, "owner": 18, "primari": 18, "fingerprint": 18, "cde1": 18, "5c6e": 18, "4d3a": 18, "8ec4": 18, "ecf4": 18, "ba4b": 18, "e08a": 18, "d7de": 18, "406f": 18, "worri": 18, "self": 18, "sign": 18, "why": 18, "previou": 18, "step": 18, "sum": 18, "shasum": 18, "512": 18, "diff": 18, "local": 18, "bin": 18, "package_vers": 18, "package_nam": 18, "provider_download_dir": 18, "mktemp": 18, "d": 18, "dep": 18, "dest": 18, "curl": 18, "apache_airflow_providers_dock": 18, "py3": 18, "l": 18, "o": 18, "echo": 18, "la": 18, "onc": 18, "chapter": 18, "independ": 19, "itself": 19, "vulner": 19, "found": 19, "we": 19, "develop": 19, "done": 19, "branch": 19, "semver": 19, "scope": 19, "major": 19, "break": 19, "minor": 19, "patchlevel": 19, "bug": 19, "receiv": 19, "so": 19, "critic": 19, "reason": 19, "band": 19, "stakehold": 19, "might": 19, "decid": 19, "cherri": 19, "pick": 19, "older": 19, "mix": 19, "govern": 19, "interest": 19, "parti": 19}, "objects": {"airflow.providers": [[5, 0, 0, "-", "docker"]], "airflow.providers.docker": [[5, 1, 1, "", "__version__"], [1, 0, 0, "-", "decorators"], [2, 0, 0, "-", "exceptions"], [4, 0, 0, "-", "hooks"], [8, 0, 0, "-", "operators"]], "airflow.providers.docker.decorators": [[0, 0, 0, "-", "docker"]], "airflow.providers.docker.decorators.docker": [[0, 2, 1, "", "docker_task"]], "airflow.providers.docker.exceptions": [[2, 3, 1, "", "DockerContainerFailedException"], [2, 3, 1, "", "DockerContainerFailedSkipException"]], "airflow.providers.docker.hooks": [[3, 0, 0, "-", "docker"]], "airflow.providers.docker.hooks.docker": [[3, 4, 1, "", "DockerHook"]], "airflow.providers.docker.hooks.docker.DockerHook": [[3, 5, 1, "", "api_client"], [3, 6, 1, "", "client_created"], [3, 7, 1, "", "conn_name_attr"], [3, 7, 1, "", "conn_type"], [3, 5, 1, "", "construct_tls_config"], [3, 7, 1, "", "default_conn_name"], [3, 5, 1, "", "get_conn"], [3, 5, 1, "", "get_connection_form_widgets"], [3, 5, 1, "", "get_ui_field_behaviour"], [3, 7, 1, "", "hook_name"]], "airflow.providers.docker.operators": [[6, 0, 0, "-", "docker"], [7, 0, 0, "-", "docker_swarm"]], "airflow.providers.docker.operators.docker": [[6, 4, 1, "", "DockerOperator"], [6, 2, 1, "", "stringify"]], "airflow.providers.docker.operators.docker.DockerOperator": [[6, 6, 1, "", "cli"], [6, 5, 1, "", "execute"], [6, 5, 1, "", "format_command"], [6, 5, 1, "", "get_hook"], [6, 5, 1, "", "hook"], [6, 5, 1, "", "on_kill"], [6, 7, 1, "", "template_ext"], [6, 7, 1, "", "template_fields"], [6, 7, 1, "", "template_fields_renderers"], [6, 5, 1, "", "unpack_environment_variables"]], "airflow.providers.docker.operators.docker_swarm": [[7, 4, 1, "", "DockerSwarmOperator"]], "airflow.providers.docker.operators.docker_swarm.DockerSwarmOperator": [[7, 5, 1, "", "execute"], [7, 5, 1, "", "on_kill"]], "tests.system.providers": [[12, 0, 0, "-", "docker"]], "tests.system.providers.docker": [[9, 0, 0, "-", "example_docker"], [10, 0, 0, "-", "example_docker_copy_data"], [11, 0, 0, "-", "example_docker_swarm"]], "tests.system.providers.docker.example_docker": [[9, 1, 1, "", "DAG_ID"], [9, 1, 1, "", "ENV_ID"], [9, 1, 1, "", "t1"], [9, 1, 1, "", "test_run"]], "tests.system.providers.docker.example_docker_copy_data": [[10, 1, 1, "", "DAG_ID"], [10, 1, 1, "", "ENV_ID"], [10, 1, 1, "", "locate_file_cmd"], [10, 1, 1, "", "test_run"]], "tests.system.providers.docker.example_docker_swarm": [[11, 1, 1, "", "DAG_ID"], [11, 1, 1, "", "ENV_ID"], [11, 1, 1, "", "t1"], [11, 1, 1, "", "test_run"]]}, "objtypes": {"0": "py:module", "1": "py:data", "2": "py:function", "3": "py:exception", "4": "py:class", "5": "py:method", "6": "py:property", "7": "py:attribute"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "data", "Python data"], "2": ["py", "function", "Python function"], "3": ["py", "exception", "Python exception"], "4": ["py", "class", "Python class"], "5": ["py", "method", "Python method"], "6": ["py", "property", "Python property"], "7": ["py", "attribute", "Python attribute"]}, "titleterms": {"airflow": [0, 1, 2, 3, 4, 5, 6, 7, 8, 14, 17], "provid": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 17], "docker": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17], "decor": [0, 1, 16], "modul": [0, 2, 3, 6, 7, 9, 10, 11], "content": [0, 2, 3, 5, 6, 7, 9, 10, 11], "function": [0, 6], "submodul": [1, 4, 5, 8, 12], "except": 2, "hook": [3, 4], "class": [3, 6, 7], "subpackag": 5, "packag": [5, 14, 17, 18], "oper": [6, 7, 8], "docker_swarm": 7, "test": [9, 10, 11, 12], "system": [9, 10, 11, 12], "example_dock": 9, "example_docker_copy_data": 10, "example_docker_swarm": 11, "changelog": 13, "3": [13, 14], "9": [13, 14], "0": [13, 14], "bug": 13, "fix": 13, "misc": 13, "8": [13, 14], "2": [13, 14], "1": [13, 14], "featur": 13, "7": [13, 14], "5": [13, 14], "4": [13, 14], "6": [13, 14], "break": 13, "chang": 13, "other": 13, "apach": [14, 17], "connect": 15, "authent": 15, "default": 15, "id": 15, "configur": 15, "task": 16, "paramet": 16, "usag": 16, "exampl": 16, "instal": [17, 18], "requir": 17, "from": 18, "sourc": 18, "releas": [18, 19], "integr": 18, "verifi": 18, "pypi": 18, "secur": 19, "patch": 19}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"airflow.providers.docker.decorators.docker": [[0, "module-airflow.providers.docker.decorators.docker"]], "Module Contents": [[0, "module-contents"], [2, "module-contents"], [3, "module-contents"], [6, "module-contents"], [7, "module-contents"], [9, "module-contents"], [10, "module-contents"], [11, "module-contents"]], "Functions": [[0, "functions"], [6, "functions"]], "airflow.providers.docker.decorators": [[1, "module-airflow.providers.docker.decorators"]], "Submodules": [[1, "submodules"], [4, "submodules"], [5, "submodules"], [8, "submodules"], [12, "submodules"]], "airflow.providers.docker.exceptions": [[2, "module-airflow.providers.docker.exceptions"]], "airflow.providers.docker.hooks.docker": [[3, "module-airflow.providers.docker.hooks.docker"]], "Classes": [[3, "classes"], [6, "classes"], [7, "classes"]], "airflow.providers.docker.hooks": [[4, "module-airflow.providers.docker.hooks"]], "airflow.providers.docker": [[5, "module-airflow.providers.docker"]], "Subpackages": [[5, "subpackages"]], "Package Contents": [[5, "package-contents"]], "airflow.providers.docker.operators.docker": [[6, "module-airflow.providers.docker.operators.docker"]], "airflow.providers.docker.operators.docker_swarm": [[7, "module-airflow.providers.docker.operators.docker_swarm"]], "airflow.providers.docker.operators": [[8, "module-airflow.providers.docker.operators"]], "tests.system.providers.docker.example_docker": [[9, "module-tests.system.providers.docker.example_docker"]], "tests.system.providers.docker.example_docker_copy_data": [[10, "module-tests.system.providers.docker.example_docker_copy_data"]], "tests.system.providers.docker.example_docker_swarm": [[11, "module-tests.system.providers.docker.example_docker_swarm"]], "tests.system.providers.docker": [[12, "module-tests.system.providers.docker"]], "Changelog": [[13, "changelog"]], "3.9.0": [[13, "id1"], [14, "id1"]], "Bug Fixes": [[13, "bug-fixes"], [13, "id5"], [13, "id26"], [13, "id29"], [13, "id38"], [13, "id41"], [13, "id47"], [13, "id51"], [13, "id54"], [13, "id60"], [13, "id65"], [13, "id73"]], "Misc": [[13, "misc"], [13, "id3"], [13, "id8"], [13, "id10"], [13, "id12"], [13, "id14"], [13, "id16"], [13, "id18"], [13, "id21"], [13, "id24"], [13, "id34"], [13, "id44"], [13, "id52"], [13, "id55"], [13, "id58"], [13, "id70"]], "3.8.2": [[13, "id2"], [14, "id2"]], "3.8.1": [[13, "id4"], [14, "id3"]], "3.8.0": [[13, "id6"], [14, "id4"]], "Features": [[13, "features"], [13, "id23"], [13, "id28"], [13, "id31"], [13, "id35"], [13, "id37"], [13, "id40"], [13, "id46"], [13, "id49"], [13, "id57"], [13, "id62"], [13, "id64"], [13, "id67"], [13, "id69"], [13, "id72"], [13, "id77"], [13, "id79"]], "3.7.5": [[13, "id9"], [14, "id5"]], "3.7.4": [[13, "id11"], [14, "id6"]], "3.7.3": [[13, "id13"], [14, "id7"]], "3.7.2": [[13, "id15"], [14, "id8"]], "3.7.1": [[13, "id17"], [14, "id9"]], "3.7.0": [[13, "id19"], [14, "id10"]], "3.6.0": [[13, "id22"], [14, "id11"]], "3.5.1": [[13, "id25"], [14, "id12"]], "3.5.0": [[13, "id27"], [14, "id13"]], "3.4.0": [[13, "id30"], [14, "id14"]], "3.3.0": [[13, "id32"], [14, "id15"]], "3.2.0": [[13, "id36"], [14, "id16"]], "3.1.0": [[13, "id39"], [14, "id17"]], "3.0.0": [[13, "id42"], [14, "id18"]], "Breaking changes": [[13, "breaking-changes"], [13, "id75"]], "2.7.0": [[13, "id45"], [14, "id19"]], "2.6.0": [[13, "id48"], [14, "id20"]], "2.5.2": [[13, "id50"], [14, "id21"]], "2.5.1": [[13, "id53"], [14, "id22"]], "2.5.0": [[13, "id56"], [14, "id23"]], "2.4.1": [[13, "id59"], [14, "id24"]], "2.4.0": [[13, "id61"], [14, "id25"]], "2.3.0": [[13, "id63"], [14, "id26"]], "Other": [[13, "other"]], "2.2.0": [[13, "id66"], [14, "id28"]], "2.1.1": [[13, "id68"], [14, "id29"]], "2.1.0": [[13, "id71"], [14, "id30"]], "2.0.0": [[13, "id74"], [14, "id31"]], "1.2.0": [[13, "id76"], [14, "id32"]], "1.1.0": [[13, "id78"], [14, "id33"]], "1.0.2": [[13, "id80"], [14, "id34"]], "Bug fixes": [[13, "id81"], [13, "id83"]], "1.0.1": [[13, "id82"], [14, "id35"]], "1.0.0": [[13, "id84"], [14, "id36"]], "Package apache-airflow-providers-docker": [[14, "package-apache-airflow-providers-docker"], [17, "package-apache-airflow-providers-docker"]], "Docker Connection": [[15, "docker-connection"]], "Authenticating to Docker": [[15, "authenticating-to-docker"]], "Default Connection IDs": [[15, "default-connection-ids"]], "Configuring the Connection": [[15, "configuring-the-connection"]], "Task Docker Decorator": [[16, "task-docker-decorator"]], "Parameters": [[16, "parameters"]], "Usage Example": [[16, "usage-example"]], "apache-airflow-providers-docker": [[17, "apache-airflow-providers-docker"]], "Provider package": [[17, "provider-package"]], "Installation": [[17, "installation"]], "Requirements": [[17, "requirements"]], "Installing from sources": [[18, "installing-from-sources"]], "Released packages": [[18, "released-packages"]], "Release integrity": [[18, "release-integrity"]], "Verifying PyPI releases": [[18, "verifying-pypi-releases"]], "Releasing security patches": [[19, "releasing-security-patches"]]}, "indexentries": {"airflow.providers.docker.decorators.docker": [[0, "module-airflow.providers.docker.decorators.docker"]], "docker_task() (in module airflow.providers.docker.decorators.docker)": [[0, "airflow.providers.docker.decorators.docker.docker_task"]], "module": [[0, "module-airflow.providers.docker.decorators.docker"], [1, "module-airflow.providers.docker.decorators"], [2, "module-airflow.providers.docker.exceptions"], [3, "module-airflow.providers.docker.hooks.docker"], [4, "module-airflow.providers.docker.hooks"], [5, "module-airflow.providers.docker"], [6, "module-airflow.providers.docker.operators.docker"], [7, "module-airflow.providers.docker.operators.docker_swarm"], [8, "module-airflow.providers.docker.operators"], [9, "module-tests.system.providers.docker.example_docker"], [10, "module-tests.system.providers.docker.example_docker_copy_data"], [11, "module-tests.system.providers.docker.example_docker_swarm"], [12, "module-tests.system.providers.docker"]], "airflow.providers.docker.decorators": [[1, "module-airflow.providers.docker.decorators"]], "dockercontainerfailedexception": [[2, "airflow.providers.docker.exceptions.DockerContainerFailedException"]], "dockercontainerfailedskipexception": [[2, "airflow.providers.docker.exceptions.DockerContainerFailedSkipException"]], "airflow.providers.docker.exceptions": [[2, "module-airflow.providers.docker.exceptions"]], "dockerhook (class in airflow.providers.docker.hooks.docker)": [[3, "airflow.providers.docker.hooks.docker.DockerHook"]], "airflow.providers.docker.hooks.docker": [[3, "module-airflow.providers.docker.hooks.docker"]], "api_client() (airflow.providers.docker.hooks.docker.dockerhook method)": [[3, "airflow.providers.docker.hooks.docker.DockerHook.api_client"]], "client_created (airflow.providers.docker.hooks.docker.dockerhook property)": [[3, "airflow.providers.docker.hooks.docker.DockerHook.client_created"]], "conn_name_attr (airflow.providers.docker.hooks.docker.dockerhook attribute)": [[3, "airflow.providers.docker.hooks.docker.DockerHook.conn_name_attr"]], "conn_type (airflow.providers.docker.hooks.docker.dockerhook attribute)": [[3, "airflow.providers.docker.hooks.docker.DockerHook.conn_type"]], "construct_tls_config() (airflow.providers.docker.hooks.docker.dockerhook static method)": [[3, "airflow.providers.docker.hooks.docker.DockerHook.construct_tls_config"]], "default_conn_name (airflow.providers.docker.hooks.docker.dockerhook attribute)": [[3, "airflow.providers.docker.hooks.docker.DockerHook.default_conn_name"]], "get_conn() (airflow.providers.docker.hooks.docker.dockerhook method)": [[3, "airflow.providers.docker.hooks.docker.DockerHook.get_conn"]], "get_connection_form_widgets() (airflow.providers.docker.hooks.docker.dockerhook class method)": [[3, "airflow.providers.docker.hooks.docker.DockerHook.get_connection_form_widgets"]], "get_ui_field_behaviour() (airflow.providers.docker.hooks.docker.dockerhook class method)": [[3, "airflow.providers.docker.hooks.docker.DockerHook.get_ui_field_behaviour"]], "hook_name (airflow.providers.docker.hooks.docker.dockerhook attribute)": [[3, "airflow.providers.docker.hooks.docker.DockerHook.hook_name"]], "airflow.providers.docker.hooks": [[4, "module-airflow.providers.docker.hooks"]], "__version__ (in module airflow.providers.docker)": [[5, "airflow.providers.docker.__version__"]], "airflow.providers.docker": [[5, "module-airflow.providers.docker"]], "dockeroperator (class in airflow.providers.docker.operators.docker)": [[6, "airflow.providers.docker.operators.docker.DockerOperator"]], "airflow.providers.docker.operators.docker": [[6, "module-airflow.providers.docker.operators.docker"]], "cli (airflow.providers.docker.operators.docker.dockeroperator property)": [[6, "airflow.providers.docker.operators.docker.DockerOperator.cli"]], "execute() (airflow.providers.docker.operators.docker.dockeroperator method)": [[6, "airflow.providers.docker.operators.docker.DockerOperator.execute"]], "format_command() (airflow.providers.docker.operators.docker.dockeroperator static method)": [[6, "airflow.providers.docker.operators.docker.DockerOperator.format_command"]], "get_hook() (airflow.providers.docker.operators.docker.dockeroperator method)": [[6, "airflow.providers.docker.operators.docker.DockerOperator.get_hook"]], "hook() (airflow.providers.docker.operators.docker.dockeroperator method)": [[6, "airflow.providers.docker.operators.docker.DockerOperator.hook"]], "on_kill() (airflow.providers.docker.operators.docker.dockeroperator method)": [[6, "airflow.providers.docker.operators.docker.DockerOperator.on_kill"]], "stringify() (in module airflow.providers.docker.operators.docker)": [[6, "airflow.providers.docker.operators.docker.stringify"]], "template_ext (airflow.providers.docker.operators.docker.dockeroperator attribute)": [[6, "airflow.providers.docker.operators.docker.DockerOperator.template_ext"]], "template_fields (airflow.providers.docker.operators.docker.dockeroperator attribute)": [[6, "airflow.providers.docker.operators.docker.DockerOperator.template_fields"]], "template_fields_renderers (airflow.providers.docker.operators.docker.dockeroperator attribute)": [[6, "airflow.providers.docker.operators.docker.DockerOperator.template_fields_renderers"]], "unpack_environment_variables() (airflow.providers.docker.operators.docker.dockeroperator static method)": [[6, "airflow.providers.docker.operators.docker.DockerOperator.unpack_environment_variables"]], "dockerswarmoperator (class in airflow.providers.docker.operators.docker_swarm)": [[7, "airflow.providers.docker.operators.docker_swarm.DockerSwarmOperator"]], "airflow.providers.docker.operators.docker_swarm": [[7, "module-airflow.providers.docker.operators.docker_swarm"]], "execute() (airflow.providers.docker.operators.docker_swarm.dockerswarmoperator method)": [[7, "airflow.providers.docker.operators.docker_swarm.DockerSwarmOperator.execute"]], "on_kill() (airflow.providers.docker.operators.docker_swarm.dockerswarmoperator method)": [[7, "airflow.providers.docker.operators.docker_swarm.DockerSwarmOperator.on_kill"]], "airflow.providers.docker.operators": [[8, "module-airflow.providers.docker.operators"]], "dag_id (in module tests.system.providers.docker.example_docker)": [[9, "tests.system.providers.docker.example_docker.DAG_ID"]], "env_id (in module tests.system.providers.docker.example_docker)": [[9, "tests.system.providers.docker.example_docker.ENV_ID"]], "t1 (in module tests.system.providers.docker.example_docker)": [[9, "tests.system.providers.docker.example_docker.t1"]], "test_run (in module tests.system.providers.docker.example_docker)": [[9, "tests.system.providers.docker.example_docker.test_run"]], "tests.system.providers.docker.example_docker": [[9, "module-tests.system.providers.docker.example_docker"]], "dag_id (in module tests.system.providers.docker.example_docker_copy_data)": [[10, "tests.system.providers.docker.example_docker_copy_data.DAG_ID"]], "env_id (in module tests.system.providers.docker.example_docker_copy_data)": [[10, "tests.system.providers.docker.example_docker_copy_data.ENV_ID"]], "locate_file_cmd (in module tests.system.providers.docker.example_docker_copy_data)": [[10, "tests.system.providers.docker.example_docker_copy_data.locate_file_cmd"]], "test_run (in module tests.system.providers.docker.example_docker_copy_data)": [[10, "tests.system.providers.docker.example_docker_copy_data.test_run"]], "tests.system.providers.docker.example_docker_copy_data": [[10, "module-tests.system.providers.docker.example_docker_copy_data"]], "dag_id (in module tests.system.providers.docker.example_docker_swarm)": [[11, "tests.system.providers.docker.example_docker_swarm.DAG_ID"]], "env_id (in module tests.system.providers.docker.example_docker_swarm)": [[11, "tests.system.providers.docker.example_docker_swarm.ENV_ID"]], "t1 (in module tests.system.providers.docker.example_docker_swarm)": [[11, "tests.system.providers.docker.example_docker_swarm.t1"]], "test_run (in module tests.system.providers.docker.example_docker_swarm)": [[11, "tests.system.providers.docker.example_docker_swarm.test_run"]], "tests.system.providers.docker.example_docker_swarm": [[11, "module-tests.system.providers.docker.example_docker_swarm"]], "tests.system.providers.docker": [[12, "module-tests.system.providers.docker"]]}}) \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/security.html b/docs-archive/apache-airflow-providers-docker/3.9.0/security.html new file mode 100644 index 00000000000..a5f56af35c1 --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/security.html @@ -0,0 +1,879 @@ + + + + + + + + + + + + Releasing security patches — apache-airflow-providers-docker Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+
+
+
+
+

Releasing security patches

+

Airflow providers are released independently from Airflow itself and the information about vulnerabilities +is published separately. You can upgrade providers independently from Airflow itself, following the +instructions found in Installation from PyPI.

+

When we release Provider version, the development is always done from the main branch where we prepare +the next version. The provider uses strict SemVer versioning policy. Depending on +the scope of the change, Provider will get ‘’MAJOR’’ version upgrade when there are +breaking changes, MINOR version upgrade when there are new features or PATCHLEVEL version upgrade +when there are only bug fixes (including security bugfixes) - and this is the only version that receives +security fixes by default, so you should upgrade to latest version of the provider if you want to receive +all released security fixes.

+

The only exception to that rule is when we have a critical security fix and good reason to provide an +out-of-band release for the provider, in which case stakeholders in the provider might decide to cherry-pick +and prepare a branch for an older version of the provider following the +mixed governance model +and requires interested parties to cherry-pick and test the fixes.

+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/3.9.0/security/security-model.html b/docs-archive/apache-airflow-providers-docker/3.9.0/security/security-model.html new file mode 100644 index 00000000000..9a36716bcbb --- /dev/null +++ b/docs-archive/apache-airflow-providers-docker/3.9.0/security/security-model.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-docker/stable.txt b/docs-archive/apache-airflow-providers-docker/stable.txt index a08ffae0cae..b72ad011fa9 100644 --- a/docs-archive/apache-airflow-providers-docker/stable.txt +++ b/docs-archive/apache-airflow-providers-docker/stable.txt @@ -1 +1 @@ -3.8.2 +3.9.0 \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/.buildinfo b/docs-archive/apache-airflow-providers-odbc/4.3.0/.buildinfo new file mode 100644 index 00000000000..547733b98fc --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: a5ef67f07186958d3046b0e8748569a7 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_api/airflow/providers/odbc/hooks/index.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/_api/airflow/providers/odbc/hooks/index.html new file mode 100644 index 00000000000..92cdf450b64 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_api/airflow/providers/odbc/hooks/index.html @@ -0,0 +1,861 @@ + + + + + + + + + + + + airflow.providers.odbc.hooks — apache-airflow-providers-odbc Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+ +
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_api/airflow/providers/odbc/hooks/odbc/index.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/_api/airflow/providers/odbc/hooks/odbc/index.html new file mode 100644 index 00000000000..398be9220d1 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_api/airflow/providers/odbc/hooks/odbc/index.html @@ -0,0 +1,1059 @@ + + + + + + + + + + + + airflow.providers.odbc.hooks.odbc — apache-airflow-providers-odbc Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+

airflow.providers.odbc.hooks.odbc

+

This module contains ODBC hook.

+
+

Module Contents

+
+

Classes

+ ++++ + + + + + +

OdbcHook

Interact with odbc data sources using pyodbc.

+
+
+class airflow.providers.odbc.hooks.odbc.OdbcHook(*args, database=None, driver=None, dsn=None, connect_kwargs=None, sqlalchemy_scheme=None, **kwargs)[source]
+

Bases: airflow.providers.common.sql.hooks.sql.DbApiHook

+

Interact with odbc data sources using pyodbc.

+
+
To configure driver, in addition to supplying as constructor arg, the following are also supported:
    +
  • set driver parameter in hook_params dictionary when instantiating hook by SQL operators.

  • +
  • set driver extra in the connection and set allow_driver_in_extra to True in +section providers.odbc section of airflow config.

  • +
  • patch OdbcHook.default_driver in local_settings.py file.

  • +
+
+
+

See ODBC Connection for full documentation.

+
+
Parameters
+
    +
  • args – passed to DbApiHook

  • +
  • database (str | None) – database to use – overrides connection schema

  • +
  • driver (str | None) – name of driver or path to driver. see above for more info

  • +
  • dsn (str | None) – name of DSN to use. overrides DSN supplied in connection extra

  • +
  • connect_kwargs (dict | None) – keyword arguments passed to pyodbc.connect

  • +
  • sqlalchemy_scheme (str | None) – Scheme sqlalchemy connection. Default is mssql+pyodbc Only used for +get_sqlalchemy_engine and get_sqlalchemy_connection methods.

  • +
  • kwargs – passed to DbApiHook

  • +
+
+
+
+
+property connection[source]
+

The Connection object with ID odbc_conn_id.

+
+ +
+
+property database: str | None[source]
+

Database provided in init if exists; otherwise, schema from Connection object.

+
+
+
+ +
+
+property sqlalchemy_scheme: str[source]
+

SQLAlchemy scheme either from constructor, connection extras or default.

+
+
+
+ +
+
+property connection_extra_lower: dict[source]
+

connection.extra_dejson but where keys are converted to lower case.

+

This is used internally for case-insensitive access of odbc params.

+
+
+
+ +
+
+property driver: str | None[source]
+

Driver from init param if given; else try to find one in connection extra.

+
+
+
+ +
+
+property dsn: str | None[source]
+

DSN from init param if given; else try to find one in connection extra.

+
+
+
+ +
+
+property odbc_connection_string[source]
+

ODBC connection string.

+

We build connection string instead of using pyodbc.connect params +because, for example, there is no param representing +ApplicationIntent=ReadOnly. Any key-value pairs provided in +Connection.extra will be added to the connection string.

+
+ +
+
+property connect_kwargs: dict[source]
+

Effective kwargs to be passed to pyodbc.connect.

+

The kwargs are merged from connection extra, connect_kwargs, and +the hook’s init arguments. Values received to the hook precede those +from the connection.

+

If attrs_before is provided, keys and values are converted to int, +as required by pyodbc.

+
+
+
+ +
+
+DEFAULT_SQLALCHEMY_SCHEME = 'mssql+pyodbc'[source]
+
+ +
+
+conn_name_attr = 'odbc_conn_id'[source]
+
+ +
+
+default_conn_name = 'odbc_default'[source]
+
+ +
+
+conn_type = 'odbc'[source]
+
+ +
+
+hook_name = 'ODBC'[source]
+
+ +
+
+supports_autocommit = True[source]
+
+ +
+
+default_driver: str | None[source]
+
+ +
+
+get_conn()[source]
+

Returns a pyodbc connection object.

+
+
+
+ +
+
+get_uri()[source]
+

URI invoked in get_sqlalchemy_engine().

+
+
+
+ +
+
+get_sqlalchemy_connection(connect_kwargs=None, engine_kwargs=None)[source]
+

SQLAlchemy connection object.

+
+
+
+ +
+ +
+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_api/airflow/providers/odbc/index.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/_api/airflow/providers/odbc/index.html new file mode 100644 index 00000000000..30d8198573f --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_api/airflow/providers/odbc/index.html @@ -0,0 +1,874 @@ + + + + + + + + + + + + airflow.providers.odbc — apache-airflow-providers-odbc Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+

airflow.providers.odbc

+ +
+

Package Contents

+
+
+airflow.providers.odbc.__version__ = '4.3.0'[source]
+
+ +
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_modules/airflow/providers/odbc.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/_modules/airflow/providers/odbc.html new file mode 100644 index 00000000000..355a21aa604 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_modules/airflow/providers/odbc.html @@ -0,0 +1,861 @@ + + + + + + + + + + + + airflow.providers.odbc — apache-airflow-providers-odbc Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +

Source code for airflow.providers.odbc

+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+# NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE
+# OVERWRITTEN WHEN PREPARING DOCUMENTATION FOR THE PACKAGES.
+#
+# IF YOU WANT TO MODIFY THIS FILE, YOU SHOULD MODIFY THE TEMPLATE
+# `PROVIDER__INIT__PY_TEMPLATE.py.jinja2` IN the `dev/breeze/src/airflow_breeze/templates` DIRECTORY
+#
+from __future__ import annotations
+
+import packaging.version
+
+__all__ = ["__version__"]
+
+
[docs]__version__ = "4.3.0"
+ +try: + from airflow import __version__ as airflow_version +except ImportError: + from airflow.version import version as airflow_version + +if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse( + "2.6.0" +): + raise RuntimeError( + f"The package `apache-airflow-providers-odbc:{__version__}` needs Apache Airflow 2.6.0+" + ) +
+ + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_modules/airflow/providers/odbc/hooks/odbc.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/_modules/airflow/providers/odbc/hooks/odbc.html new file mode 100644 index 00000000000..444c7033583 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_modules/airflow/providers/odbc/hooks/odbc.html @@ -0,0 +1,1049 @@ + + + + + + + + + + + + airflow.providers.odbc.hooks.odbc — apache-airflow-providers-odbc Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +

Source code for airflow.providers.odbc.hooks.odbc

+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+"""This module contains ODBC hook."""
+from __future__ import annotations
+
+from typing import Any, NamedTuple
+from urllib.parse import quote_plus
+
+import pyodbc
+
+from airflow.providers.common.sql.hooks.sql import DbApiHook
+from airflow.utils.helpers import merge_dicts
+
+
+
[docs]class OdbcHook(DbApiHook): + """ + Interact with odbc data sources using pyodbc. + + To configure driver, in addition to supplying as constructor arg, the following are also supported: + * set ``driver`` parameter in ``hook_params`` dictionary when instantiating hook by SQL operators. + * set ``driver`` extra in the connection and set ``allow_driver_in_extra`` to True in + section ``providers.odbc`` section of airflow config. + * patch ``OdbcHook.default_driver`` in ``local_settings.py`` file. + + See :doc:`/connections/odbc` for full documentation. + + :param args: passed to DbApiHook + :param database: database to use -- overrides connection ``schema`` + :param driver: name of driver or path to driver. see above for more info + :param dsn: name of DSN to use. overrides DSN supplied in connection ``extra`` + :param connect_kwargs: keyword arguments passed to ``pyodbc.connect`` + :param sqlalchemy_scheme: Scheme sqlalchemy connection. Default is ``mssql+pyodbc`` Only used for + ``get_sqlalchemy_engine`` and ``get_sqlalchemy_connection`` methods. + :param kwargs: passed to DbApiHook + """ + +
[docs] DEFAULT_SQLALCHEMY_SCHEME = "mssql+pyodbc"
+
[docs] conn_name_attr = "odbc_conn_id"
+
[docs] default_conn_name = "odbc_default"
+
[docs] conn_type = "odbc"
+
[docs] hook_name = "ODBC"
+
[docs] supports_autocommit = True
+ +
[docs] default_driver: str | None = None
+ + def __init__( + self, + *args, + database: str | None = None, + driver: str | None = None, + dsn: str | None = None, + connect_kwargs: dict | None = None, + sqlalchemy_scheme: str | None = None, + **kwargs, + ) -> None: + super().__init__(*args, **kwargs) + self._database = database + self._driver = driver + self._dsn = dsn + self._conn_str = None + self._sqlalchemy_scheme = sqlalchemy_scheme + self._connection = None + self._connect_kwargs = connect_kwargs + + @property +
[docs] def connection(self): + """The Connection object with ID ``odbc_conn_id``.""" + if not self._connection: + self._connection = self.get_connection(getattr(self, self.conn_name_attr)) + return self._connection
+ + @property +
[docs] def database(self) -> str | None: + """Database provided in init if exists; otherwise, ``schema`` from ``Connection`` object.""" + return self._database or self.connection.schema
+ + @property +
[docs] def sqlalchemy_scheme(self) -> str: + """SQLAlchemy scheme either from constructor, connection extras or default.""" + extra_scheme = self.connection_extra_lower.get("sqlalchemy_scheme") + if not self._sqlalchemy_scheme and extra_scheme and (":" in extra_scheme or "/" in extra_scheme): + raise RuntimeError("sqlalchemy_scheme in connection extra should not contain : or / characters") + return self._sqlalchemy_scheme or extra_scheme or self.DEFAULT_SQLALCHEMY_SCHEME
+ + @property +
[docs] def connection_extra_lower(self) -> dict: + """ + ``connection.extra_dejson`` but where keys are converted to lower case. + + This is used internally for case-insensitive access of odbc params. + """ + return {k.lower(): v for k, v in self.connection.extra_dejson.items()}
+ + @property +
[docs] def driver(self) -> str | None: + """Driver from init param if given; else try to find one in connection extra.""" + extra_driver = self.connection_extra_lower.get("driver") + from airflow.configuration import conf + + if extra_driver and conf.getboolean("providers.odbc", "allow_driver_in_extra", fallback=False): + self._driver = extra_driver + else: + self.log.warning( + "You have supplied 'driver' via connection extra but it will not be used. In order to " + "use 'driver' from extra you must set airflow config setting `allow_driver_in_extra = True` " + "in section `providers.odbc`. Alternatively you may specify driver via 'driver' parameter of " + "the hook constructor or via 'hook_params' dictionary with key 'driver' if using SQL " + "operators." + ) + if not self._driver: + self._driver = self.default_driver + return self._driver.strip().lstrip("{").rstrip("}").strip() if self._driver else None
+ + @property +
[docs] def dsn(self) -> str | None: + """DSN from init param if given; else try to find one in connection extra.""" + if not self._dsn: + dsn = self.connection_extra_lower.get("dsn") + if dsn: + self._dsn = dsn.strip() + return self._dsn
+ + @property +
[docs] def odbc_connection_string(self): + """ODBC connection string. + + We build connection string instead of using ``pyodbc.connect`` params + because, for example, there is no param representing + ``ApplicationIntent=ReadOnly``. Any key-value pairs provided in + ``Connection.extra`` will be added to the connection string. + """ + if not self._conn_str: + conn_str = "" + if self.driver: + conn_str += f"DRIVER={{{self.driver}}};" + if self.dsn: + conn_str += f"DSN={self.dsn};" + if self.connection.host: + conn_str += f"SERVER={self.connection.host};" + database = self.database or self.connection.schema + if database: + conn_str += f"DATABASE={database};" + if self.connection.login: + conn_str += f"UID={self.connection.login};" + if self.connection.password: + conn_str += f"PWD={self.connection.password};" + if self.connection.port: + conn_str += f"PORT={self.connection.port};" + + extra_exclude = {"driver", "dsn", "connect_kwargs", "sqlalchemy_scheme"} + extra_params = { + k: v for k, v in self.connection.extra_dejson.items() if k.lower() not in extra_exclude + } + for k, v in extra_params.items(): + conn_str += f"{k}={v};" + + self._conn_str = conn_str + return self._conn_str
+ + @property +
[docs] def connect_kwargs(self) -> dict: + """Effective kwargs to be passed to ``pyodbc.connect``. + + The kwargs are merged from connection extra, ``connect_kwargs``, and + the hook's init arguments. Values received to the hook precede those + from the connection. + + If ``attrs_before`` is provided, keys and values are converted to int, + as required by pyodbc. + """ + conn_connect_kwargs = self.connection_extra_lower.get("connect_kwargs", {}) + hook_connect_kwargs = self._connect_kwargs or {} + merged_connect_kwargs = merge_dicts(conn_connect_kwargs, hook_connect_kwargs) + + if "attrs_before" in merged_connect_kwargs: + merged_connect_kwargs["attrs_before"] = { + int(k): int(v) for k, v in merged_connect_kwargs["attrs_before"].items() + } + + return merged_connect_kwargs
+ +
[docs] def get_conn(self) -> pyodbc.Connection: + """Returns a pyodbc connection object.""" + conn = pyodbc.connect(self.odbc_connection_string, **self.connect_kwargs) + return conn
+ +
[docs] def get_uri(self) -> str: + """URI invoked in :meth:`~airflow.providers.common.sql.hooks.sql.DbApiHook.get_sqlalchemy_engine`.""" + quoted_conn_str = quote_plus(self.odbc_connection_string) + uri = f"{self.sqlalchemy_scheme}:///?odbc_connect={quoted_conn_str}" + return uri
+ +
[docs] def get_sqlalchemy_connection( + self, connect_kwargs: dict | None = None, engine_kwargs: dict | None = None + ) -> Any: + """SQLAlchemy connection object.""" + engine = self.get_sqlalchemy_engine(engine_kwargs=engine_kwargs) + cnx = engine.connect(**(connect_kwargs or {})) + return cnx
+ + @staticmethod + def _make_serializable(result: list[pyodbc.Row] | pyodbc.Row | None) -> list[NamedTuple] | None: + """Transform the pyodbc.Row objects returned from an SQL command into JSON-serializable NamedTuple.""" + # Below ignored lines respect NamedTuple docstring, but mypy do not support dynamically + # instantiated Namedtuple, and will never do: https://github.com/python/mypy/issues/848 + columns: list[tuple[str, type]] | None = None + if isinstance(result, list): + columns = [col[:2] for col in result[0].cursor_description] + row_object = NamedTuple("Row", columns) # type: ignore[misc] + return [row_object(*row) for row in result] + elif isinstance(result, pyodbc.Row): + columns = [col[:2] for col in result.cursor_description] + return NamedTuple("Row", columns)(*result) # type: ignore[misc, operator] + return result
+
+ + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_modules/index.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/_modules/index.html new file mode 100644 index 00000000000..00b8540a933 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_modules/index.html @@ -0,0 +1,819 @@ + + + + + + + + + + + + Overview: module code — apache-airflow-providers-odbc Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +

All modules for which code is available

+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/_api/airflow/providers/odbc/hooks/index.rst.txt b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/_api/airflow/providers/odbc/hooks/index.rst.txt new file mode 100644 index 00000000000..ee5a911c83b --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/_api/airflow/providers/odbc/hooks/index.rst.txt @@ -0,0 +1,15 @@ +:py:mod:`airflow.providers.odbc.hooks` +====================================== + +.. py:module:: airflow.providers.odbc.hooks + + +Submodules +---------- +.. toctree:: + :titlesonly: + :maxdepth: 1 + + odbc/index.rst + + diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/_api/airflow/providers/odbc/hooks/odbc/index.rst.txt b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/_api/airflow/providers/odbc/hooks/odbc/index.rst.txt new file mode 100644 index 00000000000..f18736fff2a --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/_api/airflow/providers/odbc/hooks/odbc/index.rst.txt @@ -0,0 +1,159 @@ +:py:mod:`airflow.providers.odbc.hooks.odbc` +=========================================== + +.. py:module:: airflow.providers.odbc.hooks.odbc + +.. autoapi-nested-parse:: + + This module contains ODBC hook. + + + +Module Contents +--------------- + +Classes +~~~~~~~ + +.. autoapisummary:: + + airflow.providers.odbc.hooks.odbc.OdbcHook + + + + +.. py:class:: OdbcHook(*args, database = None, driver = None, dsn = None, connect_kwargs = None, sqlalchemy_scheme = None, **kwargs) + + + Bases: :py:obj:`airflow.providers.common.sql.hooks.sql.DbApiHook` + + Interact with odbc data sources using pyodbc. + + To configure driver, in addition to supplying as constructor arg, the following are also supported: + * set ``driver`` parameter in ``hook_params`` dictionary when instantiating hook by SQL operators. + * set ``driver`` extra in the connection and set ``allow_driver_in_extra`` to True in + section ``providers.odbc`` section of airflow config. + * patch ``OdbcHook.default_driver`` in ``local_settings.py`` file. + + See :doc:`/connections/odbc` for full documentation. + + :param args: passed to DbApiHook + :param database: database to use -- overrides connection ``schema`` + :param driver: name of driver or path to driver. see above for more info + :param dsn: name of DSN to use. overrides DSN supplied in connection ``extra`` + :param connect_kwargs: keyword arguments passed to ``pyodbc.connect`` + :param sqlalchemy_scheme: Scheme sqlalchemy connection. Default is ``mssql+pyodbc`` Only used for + ``get_sqlalchemy_engine`` and ``get_sqlalchemy_connection`` methods. + :param kwargs: passed to DbApiHook + + .. py:property:: connection + + The Connection object with ID ``odbc_conn_id``. + + + .. py:property:: database + :type: str | None + + Database provided in init if exists; otherwise, ``schema`` from ``Connection`` object. + + + .. py:property:: sqlalchemy_scheme + :type: str + + SQLAlchemy scheme either from constructor, connection extras or default. + + + .. py:property:: connection_extra_lower + :type: dict + + ``connection.extra_dejson`` but where keys are converted to lower case. + + This is used internally for case-insensitive access of odbc params. + + + .. py:property:: driver + :type: str | None + + Driver from init param if given; else try to find one in connection extra. + + + .. py:property:: dsn + :type: str | None + + DSN from init param if given; else try to find one in connection extra. + + + .. py:property:: odbc_connection_string + + ODBC connection string. + + We build connection string instead of using ``pyodbc.connect`` params + because, for example, there is no param representing + ``ApplicationIntent=ReadOnly``. Any key-value pairs provided in + ``Connection.extra`` will be added to the connection string. + + + .. py:property:: connect_kwargs + :type: dict + + Effective kwargs to be passed to ``pyodbc.connect``. + + The kwargs are merged from connection extra, ``connect_kwargs``, and + the hook's init arguments. Values received to the hook precede those + from the connection. + + If ``attrs_before`` is provided, keys and values are converted to int, + as required by pyodbc. + + + .. py:attribute:: DEFAULT_SQLALCHEMY_SCHEME + :value: 'mssql+pyodbc' + + + + .. py:attribute:: conn_name_attr + :value: 'odbc_conn_id' + + + + .. py:attribute:: default_conn_name + :value: 'odbc_default' + + + + .. py:attribute:: conn_type + :value: 'odbc' + + + + .. py:attribute:: hook_name + :value: 'ODBC' + + + + .. py:attribute:: supports_autocommit + :value: True + + + + .. py:attribute:: default_driver + :type: str | None + + + + .. py:method:: get_conn() + + Returns a pyodbc connection object. + + + .. py:method:: get_uri() + + URI invoked in :meth:`~airflow.providers.common.sql.hooks.sql.DbApiHook.get_sqlalchemy_engine`. + + + .. py:method:: get_sqlalchemy_connection(connect_kwargs = None, engine_kwargs = None) + + SQLAlchemy connection object. + + + diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/_api/airflow/providers/odbc/index.rst.txt b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/_api/airflow/providers/odbc/index.rst.txt new file mode 100644 index 00000000000..d2d51e621e4 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/_api/airflow/providers/odbc/index.rst.txt @@ -0,0 +1,23 @@ +:py:mod:`airflow.providers.odbc` +================================ + +.. py:module:: airflow.providers.odbc + + +Subpackages +----------- +.. toctree:: + :titlesonly: + :maxdepth: 3 + + hooks/index.rst + + +Package Contents +---------------- + +.. py:data:: __version__ + :value: '4.3.0' + + + diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/changelog.rst.txt b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/changelog.rst.txt new file mode 100644 index 00000000000..1c24fdd8fe6 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/changelog.rst.txt @@ -0,0 +1,25 @@ + + .. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + .. http://www.apache.org/licenses/LICENSE-2.0 + + .. Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + + .. NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE + OVERWRITTEN WHEN PREPARING PACKAGES. + + .. IF YOU WANT TO MODIFY THIS FILE, YOU SHOULD MODIFY THE TEMPLATE + `PROVIDER_CHANGELOG_TEMPLATE.rst.jinja2` IN the `dev/breeze/src/airflow_breeze/templates` DIRECTORY + +.. include:: ../../airflow/providers/odbc/CHANGELOG.rst diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/commits.rst.txt b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/commits.rst.txt new file mode 100644 index 00000000000..d1a1ed529c9 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/commits.rst.txt @@ -0,0 +1,332 @@ + + .. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + .. http://www.apache.org/licenses/LICENSE-2.0 + + .. Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + + .. NOTE! THIS FILE IS AUTOMATICALLY GENERATED AND WILL BE + OVERWRITTEN WHEN PREPARING PACKAGES. + + .. IF YOU WANT TO MODIFY THIS FILE, YOU SHOULD MODIFY THE TEMPLATE + `PROVIDER_COMMITS_TEMPLATE.rst.jinja2` IN the `dev/breeze/src/airflow_breeze/templates` DIRECTORY + + .. THE REMAINDER OF THE FILE IS AUTOMATICALLY GENERATED. IT WILL BE OVERWRITTEN AT RELEASE TIME! + +Package apache-airflow-providers-odbc +------------------------------------------------------ + +`ODBC `__ + + +This is detailed commit list of changes for versions provider package: ``odbc``. +For high-level changelog, see :doc:`package information including changelog `. + + + +4.3.0 +..... + +Latest change: 2023-12-11 + +================================================================================================= =========== ================================================================================================ +Commit Committed Subject +================================================================================================= =========== ================================================================================================ +`36010f6d0e `_ 2023-12-11 ``Fix: Implement support for 'fetchone()' in the ODBCHook and the Databricks SQL Hook (#36161)`` +`999b70178a `_ 2023-12-08 ``Prepare docs 1st wave of Providers December 2023 (#36112)`` +`d0918d77ee `_ 2023-12-07 ``Bump minimum Airflow version in providers to Airflow 2.6.0 (#36017)`` +================================================================================================= =========== ================================================================================================ + +4.2.0 +..... + +Latest change: 2023-11-24 + +================================================================================================= =========== ==================================================================================================== +Commit Committed Subject +================================================================================================= =========== ==================================================================================================== +`0b23d5601c `_ 2023-11-24 ``Prepare docs 2nd wave of Providers November 2023 (#35836)`` +`99534e47f3 `_ 2023-11-19 ``Use reproducible builds for provider packages (#35693)`` +`064fc2b775 `_ 2023-11-17 ``Make pyodbc.Row and databricks.Row JSON-serializable via new 'make_serializable' method (#32319)`` +`99df205f42 `_ 2023-11-16 ``Fix and reapply templates for provider documentation (#35686)`` +`1b059c57d6 `_ 2023-11-08 ``Prepare docs 1st wave of Providers November 2023 (#35537)`` +`d1c58d86de `_ 2023-10-28 ``Prepare docs 3rd wave of Providers October 2023 - FIX (#35233)`` +`3592ff4046 `_ 2023-10-28 ``Prepare docs 3rd wave of Providers October 2023 (#35187)`` +`dd7ba3cae1 `_ 2023-10-19 ``Pre-upgrade 'ruff==0.0.292' changes in providers (#35053)`` +================================================================================================= =========== ==================================================================================================== + +4.1.0 +..... + +Latest change: 2023-10-13 + +================================================================================================= =========== ================================================================ +Commit Committed Subject +================================================================================================= =========== ================================================================ +`e9987d5059 `_ 2023-10-13 ``Prepare docs 1st wave of Providers in October 2023 (#34916)`` +`0c8e30e43b `_ 2023-10-05 ``Bump min airflow version of providers (#34728)`` +`21990ed894 `_ 2023-09-08 ``Prepare docs for 09 2023 - 1st wave of Providers (#34201)`` +`c077d19060 `_ 2023-08-26 ``Prepare docs for Aug 2023 3rd wave of Providers (#33730)`` +`b5a4d36383 `_ 2023-08-11 ``Prepare docs for Aug 2023 2nd wave of Providers (#33291)`` +`225e3041d2 `_ 2023-07-06 ``Prepare docs for July 2023 wave of Providers (RC2) (#32381)`` +`3878fe6fab `_ 2023-07-05 ``Remove spurious headers for provider changelogs (#32373)`` +`cb4927a018 `_ 2023-07-05 ``Prepare docs for July 2023 wave of Providers (#32298)`` +`09d4718d3a `_ 2023-06-27 ``Improve provider documentation and README structure (#32125)`` +================================================================================================= =========== ================================================================ + +4.0.0 +..... + +Latest change: 2023-06-20 + +================================================================================================= =========== ============================================================================== +Commit Committed Subject +================================================================================================= =========== ============================================================================== +`79bcc2e668 `_ 2023-06-20 ``Prepare RC1 docs for June 2023 wave of Providers (#32001)`` +`8b146152d6 `_ 2023-06-20 ``Add note about dropping Python 3.7 for providers (#32015)`` +`b683698684 `_ 2023-06-18 ``Check if sqlalchemy_scheme extra contains forbidden characters (#31984)`` +`438ba41e14 `_ 2023-06-07 ``Control permissibility of driver config in extra from airflow.cfg (#31754)`` +`2844dad1c7 `_ 2023-06-06 ``Disable setting ODBC driver via extra by default (#31713)`` +`9276310a43 `_ 2023-06-05 ``Improve docstrings in providers (#31681)`` +`a59076eaee `_ 2023-06-02 ``Add D400 pydocstyle check - Providers (#31427)`` +================================================================================================= =========== ============================================================================== + +3.3.0 +..... + +Latest change: 2023-05-19 + +================================================================================================= =========== ====================================================================================== +Commit Committed Subject +================================================================================================= =========== ====================================================================================== +`45548b9451 `_ 2023-05-19 ``Prepare RC2 docs for May 2023 wave of Providers (#31416)`` +`abea189022 `_ 2023-05-18 ``Use '__version__' in providers not 'version' (#31393)`` +`f5aed58d9f `_ 2023-05-18 ``Fixing circular import error in providers caused by airflow version check (#31379)`` +`d9ff55cf6d `_ 2023-05-16 ``Prepare docs for May 2023 wave of Providers (#31252)`` +`eef5bc7f16 `_ 2023-05-03 ``Add full automation for min Airflow version for providers (#30994)`` +`a7eb32a5b2 `_ 2023-04-30 ``Bump minimum Airflow version in providers (#30917)`` +`d23a3bbed8 `_ 2023-04-04 ``Add mechanism to suspend providers (#30422)`` +`ce858a5d71 `_ 2023-01-12 ``Switch to ruff for faster static checks (#28893)`` +================================================================================================= =========== ====================================================================================== + +3.2.1 +..... + +Latest change: 2022-11-26 + +================================================================================================= =========== ================================================================ +Commit Committed Subject +================================================================================================= =========== ================================================================ +`25bdbc8e67 `_ 2022-11-26 ``Updated docs for RC3 wave of providers (#27937)`` +`2e20e9f7eb `_ 2022-11-24 ``Prepare for follow-up relase for November providers (#27774)`` +`80c327bd3b `_ 2022-11-24 ``Bump common.sql provider to 1.3.1 (#27888)`` +================================================================================================= =========== ================================================================ + +3.2.0 +..... + +Latest change: 2022-11-15 + +================================================================================================= =========== ========================================================================= +Commit Committed Subject +================================================================================================= =========== ========================================================================= +`12c3c39d1a `_ 2022-11-15 ``pRepare docs for November 2022 wave of Providers (#27613)`` +`78b8ea2f22 `_ 2022-10-24 ``Move min airflow version to 2.3.0 for all providers (#27196)`` +`2a34dc9e84 `_ 2022-10-23 ``Enable string normalization in python formatting - providers (#27205)`` +================================================================================================= =========== ========================================================================= + +3.1.2 +..... + +Latest change: 2022-09-28 + +================================================================================================= =========== ==================================================================================== +Commit Committed Subject +================================================================================================= =========== ==================================================================================== +`f8db64c35c `_ 2022-09-28 ``Update docs for September Provider's release (#26731)`` +`06acf40a43 `_ 2022-09-13 ``Apply PEP-563 (Postponed Evaluation of Annotations) to non-core airflow (#26289)`` +`ca9229b6fe `_ 2022-08-18 ``Add common-sql lower bound for common-sql (#25789)`` +================================================================================================= =========== ==================================================================================== + +3.1.1 +..... + +Latest change: 2022-08-10 + +================================================================================================= =========== ================================================================= +Commit Committed Subject +================================================================================================= =========== ================================================================= +`e5ac6c7cfb `_ 2022-08-10 ``Prepare docs for new providers release (August 2022) (#25618)`` +`0f931c77c7 `_ 2022-08-02 ``Fix odbc hook sqlalchemy_scheme docstring (#25421)`` +================================================================================================= =========== ================================================================= + +3.1.0 +..... + +Latest change: 2022-07-13 + +================================================================================================= =========== ================================================================== +Commit Committed Subject +================================================================================================= =========== ================================================================== +`d2459a241b `_ 2022-07-13 ``Add documentation for July 2022 Provider's release (#25030)`` +`46bbfdade0 `_ 2022-07-07 ``Move all SQL classes to common-sql provider (#24836)`` +`0de31bd73a `_ 2022-06-29 ``Move provider dependencies to inside provider folders (#24672)`` +`510a6bab45 `_ 2022-06-28 ``Remove 'hook-class-names' from provider.yaml (#24702)`` +================================================================================================= =========== ================================================================== + +3.0.0 +..... + +Latest change: 2022-06-09 + +================================================================================================= =========== ================================================================================== +Commit Committed Subject +================================================================================================= =========== ================================================================================== +`dcdcf3a2b8 `_ 2022-06-09 ``Update release notes for RC2 release of Providers for May 2022 (#24307)`` +`717a7588bc `_ 2022-06-07 ``Update package description to remove double min-airflow specification (#24292)`` +`aeabe994b3 `_ 2022-06-07 ``Prepare docs for May 2022 provider's release (#24231)`` +`027b707d21 `_ 2022-06-05 ``Add explanatory note for contributors about updating Changelog (#24229)`` +================================================================================================= =========== ================================================================================== + +2.0.4 +..... + +Latest change: 2022-03-22 + +================================================================================================= =========== ============================================================== +Commit Committed Subject +================================================================================================= =========== ============================================================== +`d7dbfb7e26 `_ 2022-03-22 ``Add documentation for bugfix release of Providers (#22383)`` +================================================================================================= =========== ============================================================== + +2.0.3 +..... + +Latest change: 2022-03-14 + +================================================================================================= =========== ==================================================================== +Commit Committed Subject +================================================================================================= =========== ==================================================================== +`16adc035b1 `_ 2022-03-14 ``Add documentation for Classifier release for March 2022 (#22226)`` +================================================================================================= =========== ==================================================================== + +2.0.2 +..... + +Latest change: 2022-03-07 + +================================================================================================= =========== ======================================================== +Commit Committed Subject +================================================================================================= =========== ======================================================== +`f5b96315fe `_ 2022-03-07 ``Add documentation for Feb Providers release (#22056)`` +================================================================================================= =========== ======================================================== + +2.0.1 +..... + +Latest change: 2021-08-30 + +================================================================================================= =========== ============================================================================ +Commit Committed Subject +================================================================================================= =========== ============================================================================ +`0a68588479 `_ 2021-08-30 ``Add August 2021 Provider's documentation (#17890)`` +`be75dcd39c `_ 2021-08-23 ``Update description about the new ''connection-types'' provider meta-data`` +`76ed2a49c6 `_ 2021-08-19 ``Import Hooks lazily individually in providers manager (#17682)`` +`87f408b1e7 `_ 2021-07-26 ``Prepares docs for Rc2 release of July providers (#17116)`` +`b916b75079 `_ 2021-07-15 ``Prepare documentation for July release of providers. (#17015)`` +`866a601b76 `_ 2021-06-28 ``Removes pylint from our toolchain (#16682)`` +================================================================================================= =========== ============================================================================ + +2.0.0 +..... + +Latest change: 2021-06-18 + +================================================================================================= =========== ======================================================================= +Commit Committed Subject +================================================================================================= =========== ======================================================================= +`bbc627a3da `_ 2021-06-18 ``Prepares documentation for rc2 release of Providers (#16501)`` +`cbf8001d76 `_ 2021-06-16 ``Synchronizes updated changelog after buggfix release (#16464)`` +`1fba5402bb `_ 2021-06-15 ``More documentation update for June providers release (#16405)`` +`8a4cfd7341 `_ 2021-06-13 ``OdbcHook returns None. Related to #15016 issue. (#15510)`` +`9c94b72d44 `_ 2021-06-07 ``Updated documentation for June 2021 provider release (#16294)`` +`c8ef3a3539 `_ 2021-05-11 ``Fix OdbcHook handling of port (#15772)`` +`807ad32ce5 `_ 2021-05-01 ``Prepares provider release after PIP 21 compatibility (#15576)`` +`40a2476a5d `_ 2021-04-28 ``Adds interactivity when generating provider documentation. (#15518)`` +`68e4c4dcb0 `_ 2021-03-20 ``Remove Backport Providers (#14886)`` +`6e6526a0f6 `_ 2021-03-13 ``Update documentation for broken package releases (#14734)`` +================================================================================================= =========== ======================================================================= + +1.0.1 +..... + +Latest change: 2021-02-04 + +================================================================================================= =========== ======================================================== +Commit Committed Subject +================================================================================================= =========== ======================================================== +`88bdcfa0df `_ 2021-02-04 ``Prepare to release a new wave of providers. (#14013)`` +`ac2f72c98d `_ 2021-02-01 ``Implement provider versioning tools (#13767)`` +`3fd5ef3555 `_ 2021-01-21 ``Add missing logos for integrations (#13717)`` +`295d66f914 `_ 2020-12-30 ``Fix Grammar in PIP warning (#13380)`` +`6cf76d7ac0 `_ 2020-12-18 ``Fix typo in pip upgrade command :( (#13148)`` +================================================================================================= =========== ======================================================== + +1.0.0 +..... + +Latest change: 2020-12-09 + +================================================================================================= =========== ================================================================================== +Commit Committed Subject +================================================================================================= =========== ================================================================================== +`32971a1a2d `_ 2020-12-09 ``Updates providers versions to 1.0.0 (#12955)`` +`b40dffa085 `_ 2020-12-08 ``Rename remaing modules to match AIP-21 (#12917)`` +`9b39f24780 `_ 2020-12-08 ``Add support for dynamic connection form fields per provider (#12558)`` +`2037303eef `_ 2020-11-29 ``Adds support for Connection/Hook discovery from providers (#12466)`` +`de3b1e687b `_ 2020-11-28 ``Move connection guides to provider documentation packages (#12653)`` +`c34ef853c8 `_ 2020-11-20 ``Separate out documentation building per provider (#12444)`` +`0080354502 `_ 2020-11-18 ``Update provider READMEs for 1.0.0b2 batch release (#12449)`` +`ae7cb4a1e2 `_ 2020-11-17 ``Update wrong commit hash in backport provider changes (#12390)`` +`6889a333cf `_ 2020-11-15 ``Improvements for operators and hooks ref docs (#12366)`` +`7825e8f590 `_ 2020-11-13 ``Docs installation improvements (#12304)`` +`85a18e13d9 `_ 2020-11-09 ``Point at pypi project pages for cross-dependency of provider packages (#12212)`` +`59eb5de78c `_ 2020-11-09 ``Update provider READMEs for up-coming 1.0.0beta1 releases (#12206)`` +`b2a28d1590 `_ 2020-11-09 ``Moves provider packages scripts to dev (#12082)`` +`41bf172c1d `_ 2020-11-04 ``Simplify string expressions (#12093)`` +`4e8f9cc8d0 `_ 2020-11-03 ``Enable Black - Python Auto Formmatter (#9550)`` +`5a439e84eb `_ 2020-10-26 ``Prepare providers release 0.0.2a1 (#11855)`` +`872b1566a1 `_ 2020-10-25 ``Generated backport providers readmes/setup for 2020.10.29 (#11826)`` +`349b0811c3 `_ 2020-10-20 ``Add D200 pydocstyle check (#11688)`` +`16e7129719 `_ 2020-10-13 ``Added support for provider packages for Airflow 2.0 (#11487)`` +`0a0e1af800 `_ 2020-10-03 ``Fix Broken Markdown links in Providers README TOC (#11249)`` +`ca4238eb4d `_ 2020-10-02 ``Fixed month in backport packages to October (#11242)`` +`5220e4c384 `_ 2020-10-02 ``Prepare Backport release 2020.09.07 (#11238)`` +`54353f8745 `_ 2020-09-27 ``Increase type coverage for five different providers (#11170)`` +`fdd9b6f65b `_ 2020-08-25 ``Enable Black on Providers Packages (#10543)`` +`3696c34c28 `_ 2020-08-24 ``Fix typo in the word "release" (#10528)`` +`ee7ca128a1 `_ 2020-08-22 ``Fix broken Markdown refernces in Providers README (#10483)`` +`d0e7db4024 `_ 2020-06-19 ``Fixed release number for fresh release (#9408)`` +`12af6a0800 `_ 2020-06-19 ``Final cleanup for 2020.6.23rc1 release preparation (#9404)`` +`c7e5bce57f `_ 2020-06-19 ``Prepare backport release candidate for 2020.6.23rc1 (#9370)`` +`f6bd817a3a `_ 2020-06-16 ``Introduce 'transfers' packages (#9320)`` +`0b0e4f7a4c `_ 2020-05-26 ``Preparing for RC3 relase of backports (#9026)`` +`00642a46d0 `_ 2020-05-26 ``Fixed name of 20 remaining wrongly named operators. (#8994)`` +`375d1ca229 `_ 2020-05-19 ``Release candidate 2 for backport packages 2020.05.20 (#8898)`` +`12c5e5d8ae `_ 2020-05-17 ``Prepare release candidate for backport packages (#8891)`` +`f3521fb0e3 `_ 2020-05-16 ``Regenerate readme files for backport package release (#8886)`` +`92585ca4cb `_ 2020-05-15 ``Added automated release notes generation for backport operators (#8807)`` +`2b06d0a3de `_ 2020-01-21 ``[AIRFLOW-6603] Remove unnecessary pylint warnings (#7224)`` +`2a819b11fb `_ 2020-01-19 ``[AIRFLOW-6296] add OdbcHook & deprecation warning for pymssql (#6850)`` +================================================================================================= =========== ================================================================================== diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/connections/odbc.rst.txt b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/connections/odbc.rst.txt new file mode 100644 index 00000000000..3c53870f8ee --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/connections/odbc.rst.txt @@ -0,0 +1,129 @@ + .. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + .. http://www.apache.org/licenses/LICENSE-2.0 + + .. Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +.. _howto/connection/odbc: + +ODBC Connection +=============== + +The ``odbc`` connection type provides connection to ODBC data sources including MS SQL Server. + +Enable with ``pip install apache-airflow[odbc]``. + + +System prerequisites +-------------------- + +This connection type uses `pyodbc `_, which has some system +dependencies, as documented on the `pyodbc wiki `_. + +You must also install a driver: + +* `MS SQL ODBC drivers `_. + +* `Exasol ODBC drivers `_. + + +Configuring the Connection +-------------------------- + +To use the hook :py:class:`~airflow.providers.odbc.hooks.odbc.OdbcHook` you must specify the +driver you want to use either in ``Connection.extra`` or as a parameter at hook initialization. + +Host (required) + The host to connect to. + +Schema (optional) + Specify the schema name to be used in the database. + +Login (required) + Specify the user name to connect. + +Password (required) + Specify the password to connect. + +Extra (optional) + Any key / value parameters supplied here will be added to the ODBC connection string. + + Additionally there a few special optional keywords that are handled separately. + + - ``connect_kwargs`` + * key-value pairs under ``connect_kwargs`` will be passed onto ``pyodbc.connect`` as kwargs + - ``sqlalchemy_scheme`` + * This is only used when ``get_uri`` is invoked in + :py:meth:`~airflow.providers.common.sql.hooks.sql.DbApiHook.get_sqlalchemy_engine`. By default, the hook uses + scheme ``mssql+pyodbc``. You may pass a string value here to override. + - ``driver`` + * The name of the driver to use on your system. Note that this is only considered if ``allow_driver_in_extra`` + is set to True in airflow config section ``providers.odbc`` (by default it is not considered). Note: if setting + this config from env vars, use ``AIRFLOW__PROVIDERS_ODBC__ALLOW_DRIVER_IN_EXTRA=true``. + + .. note:: + If setting ``allow_driver_extra`` to True, this allows users to set the driver via the Airflow Connection's + ``extra`` field. By default this is not allowed. If enabling this functionality, you should make sure + that you trust the users who can edit connections in the UI to not use it maliciously. + + .. note:: + You are responsible for installing an ODBC driver on your system. + + The following examples demonstrate usage of the `Microsoft ODBC driver `_. + + For example, consider the following value for ``extra``: + + .. code-block:: json + + { + "Driver": "ODBC Driver 18 for SQL Server", + "ApplicationIntent": "ReadOnly", + "TrustedConnection": "Yes" + } + + This would produce a connection string containing these params: + + .. code-block:: + + DRIVER={ODBC Driver 17 for SQL Server};ApplicationIntent=ReadOnly;TrustedConnection=Yes; + + See `DSN and Connection String Keywords and Attributes `_ + for more info. + + Example connection URI for use with environment variables etc: + + .. code-block:: bash + + export AIRFLOW_CONN_MSSQL_DEFAULT='mssql-odbc://my_user:XXXXXXXXXXXX@1.1.1.1:1433/my_database?Driver=ODBC+Driver+18+for+SQL+Server&ApplicationIntent=ReadOnly&TrustedConnection=Yes' + + If you want to pass keyword arguments to ``pyodbc.connect``, you may supply a dictionary + under ``connect_kwargs``. + + For example with ``extra`` as below, ``pyodbc.connect`` will be called with ``autocommit=False`` and + ``ansi=True``. + + .. code-block:: json + + { + "Driver": "ODBC Driver 18 for SQL Server", + "ApplicationIntent": "ReadOnly", + "TrustedConnection": "Yes", + "connect_kwargs": { + "autocommit": false, + "ansi": true + } + } + + See `pyodbc documentation `_ for more details on what + kwargs you can pass to ``connect`` diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/index.rst.txt b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/index.rst.txt new file mode 100644 index 00000000000..376f65314fc --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/index.rst.txt @@ -0,0 +1,120 @@ + + .. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + .. http://www.apache.org/licenses/LICENSE-2.0 + + .. Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +``apache-airflow-providers-odbc`` +================================= + + +.. toctree:: + :hidden: + :maxdepth: 1 + :caption: Basics + + Home + Changelog + Security + +.. toctree:: + :hidden: + :maxdepth: 1 + :caption: Guides + + Connection types + +.. toctree:: + :hidden: + :maxdepth: 1 + :caption: References + + Python API <_api/airflow/providers/odbc/index> + + PyPI Repository + Installing from sources + +.. THE REMAINDER OF THE FILE IS AUTOMATICALLY GENERATED. IT WILL BE OVERWRITTEN AT RELEASE TIME! + + +.. toctree:: + :hidden: + :maxdepth: 1 + :caption: Commits + + Detailed list of commits + + +Package apache-airflow-providers-odbc +------------------------------------------------------ + +`ODBC `__ + + +Release: 4.3.0 + +Provider package +---------------- + +This is a provider package for ``odbc`` provider. All classes for this provider package +are in ``airflow.providers.odbc`` python package. + +Installation +------------ + +You can install this package on top of an existing Airflow 2 installation (see ``Requirements`` below) +for the minimum Airflow version supported) via +``pip install apache-airflow-providers-odbc`` + +Requirements +------------ + +The minimum Apache Airflow version supported by this provider package is ``2.6.0``. + +======================================= ================== +PIP package Version required +======================================= ================== +``apache-airflow`` ``>=2.6.0`` +``apache-airflow-providers-common-sql`` ``>=1.8.1`` +``pyodbc`` +======================================= ================== + +Cross provider package dependencies +----------------------------------- + +Those are dependencies that might be needed in order to use all the features of the package. +You need to install the specified provider packages in order to use them. + +You can install such cross-provider dependencies when installing from PyPI. For example: + +.. code-block:: bash + + pip install apache-airflow-providers-odbc[common.sql] + + +============================================================================================================ ============== +Dependent package Extra +============================================================================================================ ============== +`apache-airflow-providers-common-sql `_ ``common.sql`` +============================================================================================================ ============== + +Downloading official packages +----------------------------- + +You can download officially released packages and verify their checksums and signatures from the +`Official Apache Download site `_ + +* `The apache-airflow-providers-odbc 4.3.0 sdist package `_ (`asc `__, `sha512 `__) +* `The apache-airflow-providers-odbc 4.3.0 wheel package `_ (`asc `__, `sha512 `__) diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/installing-providers-from-sources.rst.txt b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/installing-providers-from-sources.rst.txt new file mode 100644 index 00000000000..b4e730f4ff2 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/installing-providers-from-sources.rst.txt @@ -0,0 +1,18 @@ + .. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + .. http://www.apache.org/licenses/LICENSE-2.0 + + .. Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +.. include:: ../exts/includes/installing-providers-from-sources.rst diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/security.rst.txt b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/security.rst.txt new file mode 100644 index 00000000000..afa13dac6fc --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sources/security.rst.txt @@ -0,0 +1,18 @@ + .. Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + .. http://www.apache.org/licenses/LICENSE-2.0 + + .. Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + +.. include:: ../exts/includes/security.rst diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css new file mode 100644 index 00000000000..eb19f698afc --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_sphinx_design_static/design-tabs.js b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sphinx_design_static/design-tabs.js new file mode 100644 index 00000000000..36b38cf0d91 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_sphinx_design_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/_gen/css/main-custom.min.css b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/_gen/css/main-custom.min.css new file mode 100644 index 00000000000..46f1de59325 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/_gen/css/main-custom.min.css @@ -0,0 +1 @@ +@charset "UTF-8";@import "https://fonts.googleapis.com/css?family=Rubik:500&display=swap";@import "https://fonts.googleapis.com/css?family=Roboto:400,400i,500,700&display=swap";@import "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700&display=swap";.header__large--cerulean-blue{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#017cee}.header__large--shamrock{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#00ad46}.header__large--bright-sky-blue{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#0cb6ff}.header__large--melon{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#ff7557}.header__large--vermillion{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#e43921}.header__large--aqua{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#11e1ee}.header__large--shamrock-green{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#04d659}.header__large--aqua-blue{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#00c7d4}.header__large--white{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#fff}.header__large--brownish-grey{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#707070}.header__large--very-light-pink{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#cbcbcb}.header__large--slate-grey{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#636365}.header__large--greyish-brown,#header-canvas .text-area--header{font-family:rubik,sans-serif;font-weight:500;font-size:72px;line-height:1.17;color:#51504f}.header__medium--cerulean-blue{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#017cee}.header__medium--shamrock{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#00ad46}.header__medium--bright-sky-blue{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#0cb6ff}.header__medium--melon{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#ff7557}.header__medium--vermillion{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#e43921}.header__medium--aqua{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#11e1ee}.header__medium--shamrock-green{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#04d659}.header__medium--aqua-blue{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#00c7d4}.header__medium--white{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#fff}.header__medium--brownish-grey{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#707070}.header__medium--very-light-pink{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#cbcbcb}.header__medium--slate-grey{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#636365}.header__medium--greyish-brown,.page-header{font-family:rubik,sans-serif;font-weight:500;font-size:60px;line-height:1.23;color:#51504f}.header__small--cerulean-blue{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#017cee}.header__small--shamrock{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#00ad46}.header__small--bright-sky-blue{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#0cb6ff}.header__small--melon{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#ff7557}.header__small--vermillion{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#e43921}.header__small--aqua{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#11e1ee}.header__small--shamrock-green{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#04d659}.header__small--aqua-blue{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#00c7d4}.header__small--white{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#fff}.header__small--brownish-grey{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#707070}.header__small--very-light-pink{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#cbcbcb}.header__small--slate-grey{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#636365}.header__small--greyish-brown,.blogpost-content__metadata--title,.community--header-join,.community--committers-header{font-family:rubik,sans-serif;font-weight:500;font-size:48px;line-height:1.25;color:#51504f}.header__xsmall--cerulean-blue{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#017cee}.header__xsmall--shamrock{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#00ad46}.header__xsmall--bright-sky-blue{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#0cb6ff}.header__xsmall--melon{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#ff7557}.header__xsmall--vermillion{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#e43921}.header__xsmall--aqua{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#11e1ee}.header__xsmall--shamrock-green{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#04d659}.header__xsmall--aqua-blue{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#00c7d4}.header__xsmall--white{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#fff}.header__xsmall--brownish-grey{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#707070}.header__xsmall--very-light-pink{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#cbcbcb}.header__xsmall--slate-grey{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#636365}.header__xsmall--greyish-brown,.feature-item--header,.text-with-icon-item--header{font-family:rubik,sans-serif;font-weight:500;font-size:36px;line-height:1.22;color:#51504f}.subtitle__large--cerulean-blue,.box-event__meetup--location{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#017cee}.subtitle__large--shamrock{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#00ad46}.subtitle__large--bright-sky-blue{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#0cb6ff}.subtitle__large--melon{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#ff7557}.subtitle__large--vermillion{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#e43921}.subtitle__large--aqua{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#11e1ee}.subtitle__large--shamrock-green{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#04d659}.subtitle__large--aqua-blue{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#00c7d4}.subtitle__large--white{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#fff}.subtitle__large--brownish-grey,.quote--text,.page-subtitle,.blogpost-content__metadata--description,#header-canvas .text-area--subheader{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#707070}.subtitle__large--very-light-pink{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#cbcbcb}.subtitle__large--slate-grey{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#636365}.subtitle__large--greyish-brown,.box-event__blogpost--header,.markdown-content h1,.markdown-content h2,.markdown-content h3,.markdown-content h4,.markdown-content h5{font-family:roboto,sans-serif;font-weight:500;font-size:24px;line-height:1.5;color:#51504f}.subtitle__medium--cerulean-blue,ol.counter-blue li::before{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#017cee}.subtitle__medium--shamrock{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#00ad46}.subtitle__medium--bright-sky-blue{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#0cb6ff}.subtitle__medium--melon{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#ff7557}.subtitle__medium--vermillion{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#e43921}.subtitle__medium--aqua{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#11e1ee}.subtitle__medium--shamrock-green{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#04d659}.subtitle__medium--aqua-blue{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#00c7d4}.subtitle__medium--white{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#fff}.subtitle__medium--brownish-grey,.box-event__integration--name{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#707070}.subtitle__medium--very-light-pink{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#cbcbcb}.subtitle__medium--slate-grey{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#636365}.subtitle__medium--greyish-brown,.roadmap .td-sidebar nav>ul>li>a{font-family:roboto,sans-serif;font-weight:500;font-size:18px;line-height:1.33;color:#51504f}.bodytext__medium--cerulean-blue,.box-event__blogpost--author,.box-event__meetup--next-meetup,.tag,.new-entry--link,.blogpost-content__metadata--author{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#017cee}.bodytext__medium--shamrock{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#00ad46}.bodytext__medium--bright-sky-blue{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#0cb6ff}.bodytext__medium--melon{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#ff7557}.bodytext__medium--vermillion{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#e43921}.bodytext__medium--aqua{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#11e1ee}.bodytext__medium--shamrock-green{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#04d659}.bodytext__medium--aqua-blue{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#00c7d4}.bodytext__medium--white,footer .footer-section span{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#fff}.bodytext__medium--brownish-grey,ol.counter-blue li,ul.ticks-blue li,.box-event__blogpost--description,.box-event__blogpost--date,.box-event__case-study--quote,.box-event__meetup--members,.markdown-content p,.markdown-content span,.feature-item--text,.text-with-icon-item--text,.video-list__item .video-list__item--title,.blogpost-content__metadata--date,.install--description,.roadmap .breadcrumb-item a,.roadmap .td-sidebar li>a,.sidebar__version-selector a{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#707070}.bodytext__medium--very-light-pink{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#cbcbcb}.bodytext__medium--slate-grey{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#636365}.bodytext__medium--greyish-brown,.box-event__committer--nick,.quote--author,.list-link,.install__accordions-content--header,.navbar__text-link{font-family:roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.63;color:#51504f}.bodytext__mobile--cerulean-blue{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#017cee}.bodytext__mobile--shamrock{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#00ad46}.bodytext__mobile--bright-sky-blue{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#0cb6ff}.bodytext__mobile--melon{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#ff7557}.bodytext__mobile--vermillion{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#e43921}.bodytext__mobile--aqua{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#11e1ee}.bodytext__mobile--shamrock-green{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#04d659}.bodytext__mobile--aqua-blue{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#00c7d4}.bodytext__mobile--white{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#fff}.bodytext__mobile--brownish-grey{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#707070}.bodytext__mobile--very-light-pink{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#cbcbcb}.bodytext__mobile--slate-grey{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#636365}.bodytext__mobile--greyish-brown{font-family:roboto,sans-serif;font-weight:400;font-size:14px;line-height:1.57;color:#51504f}.bodytext__small--cerulean-blue{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#017cee}.bodytext__small--shamrock{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#00ad46}.bodytext__small--bright-sky-blue{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#0cb6ff}.bodytext__small--melon{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#ff7557}.bodytext__small--vermillion{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#e43921}.bodytext__small--aqua{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#11e1ee}.bodytext__small--shamrock-green{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#04d659}.bodytext__small--aqua-blue{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#00c7d4}.bodytext__small--white{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#fff}.bodytext__small--brownish-grey{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#707070}.bodytext__small--very-light-pink{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#cbcbcb}.bodytext__small--slate-grey{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#636365}.bodytext__small--greyish-brown{font-family:roboto,sans-serif;font-weight:400;font-size:12px;line-height:1.33;color:#51504f}.bodytext__xsmall--cerulean-blue{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#017cee}.bodytext__xsmall--shamrock{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#00ad46}.bodytext__xsmall--bright-sky-blue{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#0cb6ff}.bodytext__xsmall--melon{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#ff7557}.bodytext__xsmall--vermillion{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#e43921}.bodytext__xsmall--aqua{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#11e1ee}.bodytext__xsmall--shamrock-green{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#04d659}.bodytext__xsmall--aqua-blue{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#00c7d4}.bodytext__xsmall--white{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#fff}.bodytext__xsmall--brownish-grey{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#707070}.bodytext__xsmall--very-light-pink{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#cbcbcb}.bodytext__xsmall--slate-grey{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#636365}.bodytext__xsmall--greyish-brown{font-family:roboto,sans-serif;font-weight:400;font-size:10px;line-height:2.6;color:#51504f}.monotext--cerulean-blue{font-family:roboto mono,monospace;color:#017cee;font-size:14px;line-height:1.71}.monotext--shamrock{font-family:roboto mono,monospace;color:#00ad46;font-size:14px;line-height:1.71}.monotext--bright-sky-blue{font-family:roboto mono,monospace;color:#0cb6ff;font-size:14px;line-height:1.71}.monotext--melon{font-family:roboto mono,monospace;color:#ff7557;font-size:14px;line-height:1.71}.monotext--vermillion{font-family:roboto mono,monospace;color:#e43921;font-size:14px;line-height:1.71}.monotext--aqua{font-family:roboto mono,monospace;color:#11e1ee;font-size:14px;line-height:1.71}.monotext--shamrock-green{font-family:roboto mono,monospace;color:#04d659;font-size:14px;line-height:1.71}.monotext--aqua-blue{font-family:roboto mono,monospace;color:#00c7d4;font-size:14px;line-height:1.71}.monotext--white{font-family:roboto mono,monospace;color:#fff;font-size:14px;line-height:1.71}.monotext--brownish-grey,.markdown-content pre span,pre span{font-family:roboto mono,monospace;color:#707070;font-size:14px;line-height:1.71}.monotext--very-light-pink{font-family:roboto mono,monospace;color:#cbcbcb;font-size:14px;line-height:1.71}.monotext--slate-grey{font-family:roboto mono,monospace;color:#636365;font-size:14px;line-height:1.71}.monotext--greyish-brown{font-family:roboto mono,monospace;color:#51504f;font-size:14px;line-height:1.71}.font-weight-normal{font-weight:400!important}.font-weight-500{font-weight:500!important}.font-weight-bold{font-weight:700!important}details.accordion{padding:40px 30px;border-bottom:solid 1px #cbcbcb;-webkit-transition:ease 1s;-o-transition:ease 1s;transition:ease 1s}details.accordion:first-of-type{border-top:solid 1px #cbcbcb}details.accordion summary{position:relative;display:block;outline:none}details.accordion summary::-webkit-details-marker{display:none}details.accordion .accordion__summary-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;max-width:750px;margin-right:40px}details.accordion .accordion__summary-content--icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:60px;margin-right:42px}details.accordion .accordion__summary-content--header{margin-bottom:20px}details.accordion .accordion__arrow{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:absolute;width:36px;height:36px;top:0;right:0;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:solid 1px #017cee;border-radius:50%}details.accordion .accordion__arrow svg{-webkit-transition:ease-out .2s;-o-transition:ease-out .2s;transition:ease-out .2s}details.accordion[open] .accordion__arrow svg{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}details.accordion .accordion__content{margin-top:30px;margin-right:36px}details.accordion .accordion__content.indented{margin-left:102px}@media(max-width:1280px){details.accordion{padding:30px 0}details.accordion .accordion__summary-content--icon{-webkit-box-align:unset;-webkit-align-items:unset;-ms-flex-align:unset;align-items:unset;margin-right:20px;margin-top:28px}details.accordion .accordion__arrow{width:28px;height:28px;top:5px}details.accordion .accordion__content.indented{margin-left:80px}details.accordion .accordion__content ol.counter-blue{margin-left:-38px!important}}button{cursor:pointer;border:1px solid;border-radius:5px;padding:9px 29px;-webkit-transition:all ease-out .2s;-o-transition:all ease-out .2s;transition:all ease-out .2s}button:disabled{cursor:not-allowed}button.btn-filled{border-color:#017cee;background-color:#017cee}button.btn-filled:hover{border-color:#0cb6ff;background-color:#0cb6ff}button.btn-with-icon{padding:14px 20px}button.btn-with-icon svg{height:30px;width:auto;padding-right:15px}button.btn-with-icon span{display:inline-block;line-height:30px;vertical-align:middle}button.btn-hollow{background-color:#fff}button.btn-hollow.btn-blue{color:#017cee;border-color:#017cee}button.btn-hollow.btn-blue:disabled{color:#cbcbcb;border-color:#cbcbcb}button.btn-hollow.btn-blue:hover:enabled{color:#fff;background-color:#017cee}button.btn-hollow.btn-brown{border-color:#cbcbcb}button.btn-hollow.btn-brown:hover{background-color:#51504f;border-color:#51504f}button.btn-hollow.btn-brown:hover span{color:#fff}button.btn-hollow.btn-brown:hover svg path{fill:#fff}button.with-box-shadow{-webkit-box-shadow:0 2px 6px 0 rgba(0,0,0,.12);box-shadow:0 2px 6px 0 rgba(0,0,0,.12)}@media(max-width:1280px){button{padding:4px 17px}}ol.counter-blue,ul.ticks-blue{list-style:none;margin-bottom:0}ol.counter-blue li,ul.ticks-blue li{position:relative;padding-left:10px}ol.counter-blue li::before,ul.ticks-blue li::before{position:absolute;border:solid 1px #017cee;border-radius:50%}ol.counter-blue{counter-reset:custom-counter;padding-left:-webkit-calc(26px + 2px);padding-left:calc(26px + 2px)}ol.counter-blue li{counter-increment:custom-counter;margin-bottom:25px}ol.counter-blue li::before{content:counter(custom-counter);-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;top:-2px;left:-webkit-calc(-1 * 26px);left:calc(-1 * 26px);width:26px;height:26px;text-align:center;line-height:26px}ul.ticks-blue{padding-left:-webkit-calc(24px + 2px);padding-left:calc(24px + 2px)}ul.ticks-blue li{margin-bottom:22px}ul.ticks-blue li::before{content:"";left:-webkit-calc(-1 * 24px);left:calc(-1 * 24px);width:24px;height:24px;background-position:50%;background-repeat:no-repeat;background-image:url(/images/tick.svg)}.list-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:-20px;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch}@media(max-width:1280px){.list-items{margin:auto;max-width:580px}}@media(max-width:640px){.list-items{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}}.list-item{width:25%;padding:20px}@media(min-width:1920px){.list-item{width:20%}}@media(max-width:1280px){.list-item{padding:10px;width:50%}}@media(max-width:640px){.list-item{width:100%}}.list-item--wide{width:50%}@media(max-width:1280px){.list-item--wide{width:100%}}.card{border:solid 1px #cbcbcb;border-radius:5px;padding:30px 10px;height:100%}.box-event{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.box-event__blogpost{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;padding:0 20px}.box-event__blogpost--metadata{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:20px}.box-event__blogpost--header{margin-bottom:4px}.box-event__blogpost--author{font-weight:500}.box-event__blogpost--description{margin-bottom:20px}.box-event__case-study{padding:18px 18px 0;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.box-event__case-study--logo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:60px;width:100%;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.box-event__case-study--logo svg,.box-event__case-study--logo img{max-height:100%;max-width:100%}.box-event__case-study--quote{font-style:italic;margin:30px 0 20px;text-align:center}.box-event__case-study--quote::before{content:"“"}.box-event__case-study--quote::after{content:"”"}.box-event__committer--nick{font-weight:500;margin-top:12px}.box-event__committer--social-media-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.box-event__committer--social-media-icon{margin:0 6px}.box-event__meetup--location{margin-bottom:10px;text-align:center}.box-event__meetup--members{margin-bottom:30px}.box-event__meetup--members span{vertical-align:middle}.box-event__meetup--next-meetup{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;min-height:52px;margin-bottom:20px;text-align:center}.box-event__integration{height:208px;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.box-event__integration--logo{margin:auto 0;-webkit-filter:grayscale(1);filter:grayscale(1);opacity:.6;max-width:100%;max-height:100%}.box-event__integration--name{font-weight:700;text-align:center}.box-event__integration:hover .box-event__integration--logo{-webkit-filter:none;filter:none;opacity:1}.box-event.hoverable-icon svg,.box-event.hoverable-icon img{-webkit-filter:grayscale(1);filter:grayscale(1);opacity:.6;-webkit-transition:all .2s;-o-transition:all .2s;transition:all .2s}.box-event.hoverable-icon:hover svg,.box-event.hoverable-icon:hover img{-webkit-filter:none;filter:none;opacity:1}@media(max-width:640px){.box-event__blogpost--metadata{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.box-event__blogpost--date{margin-top:17px}}.avatar{border-radius:50%;width:80px;height:80px}.quote{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;border-bottom:solid 1px #cbcbcb;padding:0 78px 60px}.quote--text{text-align:center;font-weight:400}.quote--text::before{content:"“"}.quote--text::after{content:"”"}.quote--author{text-align:center;font-weight:500;margin-bottom:32px}.quote--logo{max-height:140px;margin:0 auto}@media(max-width:640px){.quote{padding:0 0 40px}}.pager{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:60px}.case-study-page{max-width:790px!important;margin:60px auto 0}@media(max-width:640px){.case-study-page{margin-top:40px}}.markdown-content h1,.markdown-content h2,.markdown-content h3,.markdown-content h4,.markdown-content h5{margin-top:40px;margin-bottom:20px}.markdown-content p,.markdown-content span{margin-bottom:30px;margin-top:20px}.markdown-content img{width:100%}.markdown-content table{border-collapse:collapse;width:100%}.markdown-content th{background:#ccc}.markdown-content th,.markdown-content td{border:1px solid #ccc;padding:8px}.markdown-content tr:nth-child(even){background:#efefef}.markdown-content tr:hover{background:#d1d1d1}.markdown-content li{color:#707070}.base-layout{padding:123px 0 40px}.base-layout--button{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:-webkit-sticky;position:sticky;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin-left:auto;margin-right:40px;bottom:40px;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;z-index:1}@media(max-width:1280px){.base-layout{padding:76px 0 60px}.base-layout--button{display:none}}.page-header{text-align:center;margin-bottom:16px}@media(max-width:1280px){.page-header{font-size:36px!important;line-height:1.22!important}}.page-subtitle{text-align:center;font-weight:400!important;margin-bottom:80px}@media(max-width:1280px){.page-subtitle{font-family:roboto,sans-serif!important;font-size:16px!important;line-height:1.63!important;margin-bottom:30px}}.container{margin-top:44px;max-width:1200px}@media(min-width:1920px){.container{max-width:1510px}}@media(max-width:1280px){.container>*{max-width:630px;margin-left:auto;margin-right:auto}.container .no-width-restriction{max-width:none}}@media(max-width:640px){.container>*{max-width:306px}}.container-fluid{padding-left:20px;padding-right:20px}.show-more-button{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin:60px auto 0}@media(max-width:1280px){.show-more-button{margin-top:30px}}@media(max-width:1280px){.desktop-only{display:none}}@media(min-width:calc(1280px + 1px)){.no-desktop{display:none}}@media(min-width:calc(640px + 1px)){.mobile-only{display:none}}.features-list{margin:76px auto 100px;max-width:720px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}@media(min-width:1920px){.features-list{max-width:unset;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-top:0}}@media(max-width:640px){.features-list{margin-top:0}}.feature-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:44px auto 0}.feature-item--icon-box{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;max-width:150px;width:100%;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-top:18px}.feature-item--text-box{margin-left:60px}@media(min-width:1920px),(max-width:1280px){.feature-item{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.feature-item--icon-box{margin-top:0;margin-bottom:20px;max-width:unset}.feature-item--text-box{margin-left:0;text-align:center}}@media(min-width:1920px){.feature-item{margin-top:60px;max-width:392px;margin-left:40px;margin-right:40px}}@media(max-width:1280px){.feature-item{margin-top:40px;max-width:260px}.feature-item svg{height:60px;width:auto}.feature-item--header{font-family:roboto,sans-serif!important;font-size:24px!important;line-height:1.5!important}.feature-item--text{font-size:14px!important;line-height:1.57!important}}.text-with-icon-list{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:940px;margin:0 auto 100px;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.text-with-icon-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-width:410px;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;margin-top:54px}.text-with-icon-item svg{height:100px}.text-with-icon-item--header{text-align:center;margin-top:23px}.text-with-icon-item--text{text-align:center}@media(min-width:1920px){.text-with-icon-list{max-width:unset}.text-with-icon-item{max-width:305px}}@media(max-width:1280px){.text-with-icon-item{margin-top:30px;max-width:276px}.text-with-icon-item svg{width:70px;height:70px}.text-with-icon-item--header{font-family:roboto,sans-serif;font-size:24px;line-height:1.5;margin-top:16px}.text-with-icon-item--text{font-size:14px;line-height:1.57}}@media(max-width:640px){.text-with-icon-list{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}}.video-section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border:solid 1px #cbcbcb;padding:40px}@media(max-width:1280px){.video-section{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;max-width:560px;margin:0 auto;padding:20px}}.video-wrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.video-wrapper .video-container{display:none}.video-wrapper .video-container:last-child{display:block}.video-wrapper .anchor{position:fixed}.video-wrapper .anchor:target+.video-container{display:block}.video-wrapper .anchor:target+.video-container~.video-container{display:none}.video-list-wrapper{overflow-y:auto;max-height:403px;max-width:370px;width:100%;margin-left:40px}@media(max-width:1280px){.video-list-wrapper{max-width:unset;margin-left:0}}.video-list-wrapper::-webkit-scrollbar{-webkit-appearance:none}.video-list-wrapper::-webkit-scrollbar-thumb{border-radius:8px;border:2px solid #fff;background-color:rgba(0,0,0,.5)}.video-list-wrapper::-webkit-scrollbar:vertical{width:9px}.video-list{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.video-list__item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border-bottom:solid 1px #cbcbcb;padding:16px 0}.video-list__item .video-list__item--title{margin-left:9px;vertical-align:middle}.video-list__item--icon-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.video-list__item:hover .video-list__item--title,.video-list__item.active .video-list__item--title{font-weight:500}.video-list__item:hover svg path,.video-list__item.active svg path{fill:#707070;stroke:none}.tag{display:block;background-color:rgba(1,124,238,.25);padding:1px 15px;border-radius:5px;-webkit-transition:.2s;-o-transition:.2s;transition:.2s;margin:7px}.tag.active,.tag:hover{background-color:#017cee;color:#fff}.tags-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;margin:-7px}@media(max-width:640px){.tags-container{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:7px}}.all-tags-container{margin:30px 0}.blog__list-items-wrapper{max-width:1200px;margin:30px auto 0}@media(max-width:1280px){.blog__list-items-wrapper{max-width:580px}}.new-entry{margin-bottom:20px}.new-entry--link{font-weight:500}@media(max-width:1280px){.new-entry{margin-bottom:10px;padding-left:10px}}.blogpost-content{max-width:790px;margin:0 auto}.blogpost-content--header-wrapper{border-bottom:solid 1px #cbcbcb}.blogpost-content__metadata--container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:30px}.blogpost-content__metadata--title{margin-bottom:20px}.blogpost-content__metadata--author{font-weight:500;margin-bottom:30px;margin-right:17px}.blogpost-content__metadata--social-media-icon{margin-right:7px}.blogpost-content__metadata--description{font-weight:400;margin-bottom:30px}.blogpost-content__metadata--date{margin-top:17px}@media(max-width:640px){.blogpost-content__metadata--container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin-bottom:19px}.blogpost-content__metadata--title{font-family:roboto,sans-serif!important;font-size:24px!important;line-height:1.5!important;max-width:272px;margin-bottom:13px}.blogpost-content__metadata--author{margin-bottom:20px}.blogpost-content__metadata--description{font-family:roboto,sans-serif!important;font-weight:400!important;font-size:16px!important;line-height:1.63!important;margin-bottom:20px}}.blog-pager{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;max-width:1200px;margin:60px auto 0}.blog-pager .pager{margin-top:40px;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.home-page-layout.base-layout{padding-top:70px}@media(max-width:640px){.home-page-layout.base-layout{padding-top:16px}}.principles-header{margin-top:20px;margin-bottom:4px}.integrations-header{margin-bottom:60px}@media(max-width:640px){.integrations-header{margin-bottom:30px}}#integrations .list-items{margin-top:40px}@media(max-width:640px){#integrations .list-items{margin-top:20px}}.video-section-container{margin:80px auto;max-width:1200px}@media(max-width:640px){.video-section-container{margin:60px 0}}.host-header{margin-bottom:6px}.meetups{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.meetups>.list-items{margin-top:40px;margin-bottom:40px;width:100%}@media(max-width:1280px){.meetups>.list-items{margin-top:30px;margin-bottom:30px}}@media(max-width:640px){.meetups>.list-items{margin-bottom:10px}}.meetups-page.page-subtitle{margin-bottom:0}.list-link{text-decoration:underline}.community--header-container{max-width:936px;margin:0 auto}.community--header-join{text-align:center}.community--accordion-container{margin:60px 18px}.community--committers-header{text-align:center;margin-top:70px;margin-bottom:40px}.community--committers-header.large-margin{margin-top:100px;margin-bottom:40px}@media(min-width:1920px){.community .list-items{max-width:1220px;margin-right:auto;margin-left:auto}.community .list-item{width:25%}}@media(max-width:1280px){.community--header-container{max-width:580px}.community--header-join{font-family:roboto,sans-serif!important;font-size:24px!important;line-height:1.5!important}.community--accordion-container{margin:40px 0}.community--committers-header{font-size:36px!important;line-height:1.22!important;margin-top:60px}.community--committers-header.large-margin{margin-top:60px;margin-bottom:40px}.community--button-container{margin-top:20px}}.install .page-subtitle{margin-bottom:45px}.install--headers-wrapper{max-width:936px;margin:0 auto}.install--description{text-align:center;margin:45px 0 60px}.install--description a{color:#017cee;text-decoration:underline}.install__accordions--wrapper{max-width:900px;margin:60px auto}.install__accordions-content--header{font-weight:500}.install__accordions-content--list-wrapper{margin-bottom:40px}.install__accordions-content--methods-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-bottom:20px}.install__accordions-content--method-box{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:270px;height:160px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;border:solid 1px #cbcbcb;border-radius:5px;margin-right:40px}@media(max-width:1280px){.install .page-subtitle{margin-bottom:30px}.install--headers-wrapper{max-width:580px}.install--description{margin-top:30px;margin-bottom:30px}.install__accordions--wrapper{max-width:580px;margin-top:40px;margin-bottom:0}}@media(max-width:640px){.install__accordions-content--methods-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;margin-bottom:0;margin-right:-36px}.install__accordions-content--method-box{margin-right:0;margin-bottom:20px}}footer{min-height:unset}footer .footer-section{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}footer .footer-section__media-section{padding:60px 60px 30px;background-color:#51504f}footer .footer-section__media-section--link{margin-right:30px}footer .footer-section__media-section--button-with-text{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}footer .footer-section__media-section--text{margin-right:20px}footer .footer-section__policies-section{padding:30px 60px;background-color:#636365;font-size:12px;-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}footer .footer-section__policies-section span{font-size:12px}footer .footer-section__policies-section--policies{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}footer .footer-section__policies-section--policy-item::before{content:"\00a0\00a0"}footer .footer-section__policies-section--policy-item::after{content:"\00a0\00a0|";color:#fff}footer .footer-section__policies-section--policy-item:last-of-type::after{content:"\00a0\00a0|\00a0\00a0"}footer .footer-section__policies-section--disclaimer{display:block;max-width:600px;color:#cbcbcb!important;margin-top:16px}@media(min-width:1920px){footer .footer-section__policies-section--disclaimer{max-width:800px}}footer .dropdown-toggle::after{color:#fff;vertical-align:middle}@media(max-width:1280px){footer .footer-section{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}footer .footer-section span{font-size:14px!important;line-height:1.57!important}footer .footer-section__media-section{padding:30px 40px}footer .footer-section__media-section svg{height:31px;width:auto}footer .footer-section__media-section--link{margin-right:20px}footer .footer-section__media-section--button-with-text{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;margin-bottom:47px}footer .footer-section__media-section--text{margin-right:0;margin-bottom:16px}footer .footer-section__policies-section{padding:30px 40px}footer .footer-section__policies-section--policies{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}footer .footer-section__policies-section--policy-item::before,footer .footer-section__policies-section--policy-item::after,footer .footer-section__policies-section--policy-item:last-of-type::before,footer .footer-section__policies-section--policy-item:last-of-type::after{content:""}footer .footer-section__policies-section--language-toggle{margin:17px 0 35px}}.navbar{position:fixed;top:0;width:100%;background-color:#fff;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;border-bottom:solid 1px #cbcbcb;z-index:32;padding:30px 60px}.navbar__menu-container{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.navbar__menu-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding-top:16px;padding-left:88px}.navbar__links-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.navbar__text-link{margin-right:30px;position:relative;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.navbar__text-link::before,.navbar__text-link::after{content:"";position:absolute;top:100%;width:0;right:0;height:2px;background-color:#017cee;-webkit-transition:.2s ease-out;-o-transition:.2s ease-out;transition:.2s ease-out}.navbar__text-link:hover,.navbar__text-link.active{color:#51504f}.navbar__text-link:hover::before,.navbar__text-link:hover::after,.navbar__text-link.active::before,.navbar__text-link.active::after{width:100%;left:0}.navbar--box-shadow{-webkit-box-shadow:0 2px 6px 0 rgba(0,0,0,.12);box-shadow:0 2px 6px 0 rgba(0,0,0,.12)}@media(max-width:1280px){.navbar{padding:20px}.navbar__icon-container svg{width:93px;height:auto}.navbar__menu-content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;padding-left:0;padding-top:0}.navbar__drawer-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.navbar__toggle-button{border:none;background:0 0;padding:0;position:relative;width:26px;height:20px}.navbar__toggle-button--icon{position:absolute;top:0;bottom:0;left:0;right:0;visibility:hidden;opacity:0;-webkit-transition:.2s ease-out;-o-transition:.2s ease-out;transition:.2s ease-out}.navbar__toggle-button--icon.visible{visibility:visible;opacity:1}.navbar__drawer{position:fixed;top:77px;left:0;width:100%;height:-webkit-calc(100% - 77px);height:calc(100% - 77px);background-color:#fff;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);-o-transform:translateX(100%);transform:translateX(100%);-webkit-transition:.2s ease-out;-o-transition:.2s ease-out;transition:.2s ease-out;padding:40px 40px 30px}.navbar__drawer--open{-webkit-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}.navbar__links-container{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.navbar__text-link{margin-right:0;margin-bottom:10px}.navbar__text-link:last-child{margin-bottom:20px}}#header{position:relative;margin:123px -20px 0;min-height:-webkit-calc(100vh - 123px);min-height:calc(100vh - 123px)}#header-canvas{padding:0;margin:0;position:absolute;width:100%;height:100%;top:0;left:0;right:0;bottom:0}#header-canvas .text-area{max-width:706px;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}#header-canvas .text-area--header{text-align:center;margin-bottom:20px}#header-canvas .text-area--subheader{font-weight:400!important;text-align:center;margin-bottom:20px}#header-canvas canvas{position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1}@media(min-width:1920px){#header-canvas .text-area--header{font-size:90px}}@media(max-width:1280px){#header{margin:77px -20px 0;min-height:-webkit-calc(100vh - 77px);min-height:calc(100vh - 77px)}#header-canvas .text-area{max-width:450px}#header-canvas .text-area--header{margin-bottom:14px}#header-canvas .text-area--subheader{margin-bottom:26px}}@media(max-width:640px){#header-canvas .text-area{max-width:290px}#header-canvas .text-area--header{font-size:48px!important;line-height:1.25!important}#header-canvas .text-area--subheader{font-size:16px!important;line-height:1.63!important}}.roadmap{margin-top:40px}.roadmap main{padding-left:40px}.roadmap .breadcrumb{padding-bottom:0;margin-bottom:30px}.roadmap .breadcrumb-item+.breadcrumb-item{padding-left:4px}.roadmap .breadcrumb-item+.breadcrumb-item::before{color:#707070;padding-right:0}.roadmap .td-sidebar{position:-webkit-sticky;position:sticky;top:163px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;max-height:-webkit-calc(100vh - 163px);max-height:calc(100vh - 163px);max-width:270px;min-width:270px;width:100%;overflow-y:auto;padding-top:12px;padding-left:15px;padding-bottom:30px;margin-left:40px;background-color:#f9f9f9;border:none}.roadmap .td-sidebar::-webkit-scrollbar{-webkit-appearance:none}.roadmap .td-sidebar::-webkit-scrollbar-thumb{border-radius:8px;border:2px solid #fff;background-color:rgba(0,0,0,.5)}.roadmap .td-sidebar::-webkit-scrollbar:vertical{width:9px}.roadmap .td-sidebar__inner{position:static;height:unset}.roadmap .td-sidebar li>a{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.roadmap .td-sidebar li>a.active{color:#017cee}.roadmap .td-sidebar .searchb-box{margin-bottom:26px}.roadmap .td-sidebar .searchb-box .search-form{width:100%}.roadmap .td-sidebar .toctree li{list-style:none;font-family:roboto,sans-serif;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.63;letter-spacing:normal;color:#707070}.roadmap .td-sidebar .toctree ul{padding-left:15px;display:none}.roadmap .td-sidebar .toctree>ul,.roadmap .td-sidebar .toctree li.current>ul{display:block}.roadmap .td-sidebar .toctree .caption{font-family:roboto,sans-serif;font-size:18px;font-weight:700;font-stretch:normal;font-style:normal;line-height:1.33;letter-spacing:normal;color:#51504f;padding-bottom:13px;text-transform:uppercase;margin-bottom:0}.roadmap .td-sidebar .toctree .current{color:#017cee;font-weight:500}.roadmap .td-sidebar .toctree .current>a:not([href="#"]){color:#017cee}.roadmap .td-sidebar .toctree a .toctree-expand{display:inline-block;position:relative;height:1em}.roadmap .td-sidebar .toctree a .toctree-expand::before{position:absolute;top:6px;left:-12px;content:'►';font-size:7px}.roadmap .td-sidebar .toctree .current>a>.toctree-expand:before{content:'▼'}.roadmap .td-sidebar-nav__section{padding-right:0}.roadmap .td-sidebar-nav>.td-sidebar-nav__section .td-sidebar-nav__section{list-style:none;position:relative;margin-left:10px}.roadmap .td-sidebar-nav>.td-sidebar-nav__section .td-sidebar-nav__section::before{content:'►';position:absolute;top:6px;left:-12px;font-size:8px;color:#51504f}.roadmap .td-sidebar-nav>.td-sidebar-nav__section .td-sidebar-nav__section>ul{display:none}.roadmap .td-sidebar-nav>.td-sidebar-nav__section .td-sidebar-nav__section.current-section::before{content:'▼'}.roadmap .td-sidebar-nav>.td-sidebar-nav__section .td-sidebar-nav__section.current-section>ul{display:block}.roadmap .wy-nav-side-toc{position:-webkit-sticky;position:sticky;top:163px;overflow-x:hidden;overflow-y:auto;width:280px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;max-height:-webkit-calc(100vh - 163px);max-height:calc(100vh - 163px);font-size:14px;line-height:1.43}.roadmap .wy-nav-side-toc::-webkit-scrollbar{-webkit-appearance:none}.roadmap .wy-nav-side-toc::-webkit-scrollbar-thumb{border-radius:8px;border:2px solid #fff;background-color:rgba(0,0,0,.5)}.roadmap .wy-nav-side-toc::-webkit-scrollbar:vertical{width:9px}.roadmap .wy-nav-side-toc ul,.roadmap .wy-nav-side-toc ol{padding:0;list-style:none none}.roadmap .wy-nav-side-toc li{list-style:none}.roadmap .wy-nav-side-toc .wy-menu-vertical>ul,.roadmap .wy-nav-side-toc .wy-menu-vertical li.current>ul{padding-left:1px}.roadmap .wy-nav-side-toc .wy-menu-vertical a{display:inline-block;padding:.4045em 0;color:#707070}.roadmap .wy-nav-side-toc .wy-menu-vertical li a{border-left:solid 2px #cbcbcb;padding-left:-webkit-calc(1.25em + 1px);padding-left:calc(1.25em + 1px)}.roadmap .wy-nav-side-toc .wy-menu-vertical li.current{margin-left:-1px}.roadmap .wy-nav-side-toc .wy-menu-vertical li.current>a{border-left:solid 4px #017cee;color:#017cee}.roadmap .wy-nav-side-toc .wy-menu-vertical li li>a{padding-left:2.427em}.roadmap .wy-nav-side-toc .wy-menu-vertical li li li>a{padding-left:4.045em}.roadmap .wy-nav-side-toc .wy-menu-vertical li li li li>a{padding-left:5.663em}@media(max-width:1280px){.roadmap main{padding-left:0}.roadmap .td-sidebar{position:static;background-color:transparent;padding:0;margin:0;max-width:unset;height:530px}}.search-form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:344px;padding:8px 20px;border:solid 1px #cbcbcb;border-radius:5px;margin:60px auto 0}.search-form__input{font-family:roboto,sans-serif;font-size:16px;color:#707070;line-height:1.63;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-right:10px;border:none;background:0 0;outline:none;float:left}.search-form__button{border:none;background-color:transparent;padding:0}@media(max-width:1280px){.search-form{width:270px;padding:3px 20px;margin-top:30px}}.rating-container{margin-top:40px}.rating{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.rate-star{cursor:pointer;margin-right:13px}.rate-star svg path{fill:none;stroke:#51504f}.rate-star:hover svg path,.rate-star:hover~.rate-star svg path{fill:#017cee;stroke:none}.rst-content{color:#707070}.rst-content h1{margin-top:0;margin-bottom:30px;font-weight:500;font-family:rubik,sans-serif;color:#51504f;font-size:225%}.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6,.rst-content p{font-family:roboto,sans-serif;color:#707070}.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-top:40px;margin-bottom:20px;font-weight:500}.rst-content p{line-height:1.63;margin:0 0 30px;font-size:16px;overflow-wrap:break-word}.rst-content h2{font-size:150%}.rst-content h3{font-size:125%}.rst-content h4{font-size:115%}.rst-content h5{font-size:110%}.rst-content h6{font-size:100%}.rst-content code{max-width:100%;color:#51504f;padding:0 5px;font-family:roboto mono,monospace;overflow-x:auto}.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .admonition-todo,.rst-content .admonition{padding:9px 10px;line-height:24px;margin-bottom:24px;background:#e7f2fa}@media(max-width:768px){.rst-content .admonition p:not(.admonition-title){font-size:12px;line-height:1.83}}.rst-content .admonition-title:before{content:"!";background-color:#fff;border-radius:50%;padding:0 4px;margin-right:5px}.rst-content .admonition-title{color:#fff;font-weight:500;font-size:10px;line-height:2.1;display:block;background:#68d1ff;margin:-10px;padding:0 12px;margin-bottom:9px}.rst-content .danger,.rst-content .error{background:#fdece9}.rst-content .danger::before,.rst-content .error::before{color:#fdece9}.rst-content .danger .admonition-title,.rst-content .error .admonition-title{background:#ee8170}.rst-content .danger .admonition-title::before,.rst-content .error .admonition-title::before{color:#ee8170}.rst-content .attention,.rst-content .caution{background:#fff8f6}.rst-content .warning{background:#f8f8f8}.rst-content .attention .admonition-title,.rst-content .caution .admonition-title{background:#ffa996}.rst-content .attention .admonition-title::before,.rst-content .caution .admonition-title::before{color:#ffa996}.rst-content .warning .admonition-title{background:#a6a6a6}.rst-content .warning .admonition-title::before{color:#a6a6a6}.rst-content .note,.rst-content .seealso{background:#f3fbff}.rst-content .note .admonition-title,.rst-content .seealso .admonition-title{background:#68d2fe}.rst-content .note .admonition-title::before,.rst-content .seealso .admonition-title::before{color:#68d2fe}.rst-content .hint{background:#f2fef6}.rst-content .important{background:#e6f9fc}.rst-content .tip{background:#e5f7ec}.rst-content .hint .admonition-title{background:#63e598}.rst-content .hint .admonition-title::before{color:#63e598}.rst-content .important .admonition-title{background:#5bdae3}.rst-content .important .admonition-title::before{color:#5bdae3}.rst-content .tip .admonition-title{background:#5bcb88}.rst-content .tip .admonition-title::before{color:#5bcb88}.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition p:last-child{margin-bottom:0}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre{background-color:#f2f8fe}.rst-content pre.literal-block,.rst-content .linenodiv pre{font-family:roboto mono,monospace;font-size:12px;line-height:1.4}@media print{.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .section ol li p:last-child,.rst-content .section ul li p:last-child{margin-bottom:0}.rst-content .section ol p:last-child,.rst-content .section ul p:last-child{margin-bottom:24px}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:inherit}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink{visibility:hidden;font-size:0}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after,.rst-content .code-block-caption .headerlink:after{content:url(/images/anchor.svg);vertical-align:bottom;padding-left:8px}.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content .toctree-wrapper p.caption:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after,.rst-content .code-block-caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption{padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list th{margin:0;overflow:visible}.rst-content table.docutils td{padding:10px 31px}.rst-content table.docutils th,.rst-content table.field-list th{padding:11px 31px}.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead{text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th{border-bottom:solid 1px rgba(81,80,79,.3);border-left:solid 1px rgba(81,80,79,.3)}.rst-content table.docutils thead th p,.rst-content table.field-list thead th p{font-weight:700;font-size:18px;color:#51504f;line-height:1.33;margin-bottom:0}.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.rst-content td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:rgba(112,112,112,.05)}.rst-content table.docutils{border:1px solid rgba(81,80,79,.3)}.rst-content table.docutils td{border-bottom:1px solid rgba(81,80,79,.3);border-left:1px solid rgba(81,80,79,.3)}.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.rst-content .wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.rst-content .wy-table-responsive table{margin-bottom:0!important}.rst-content .wy-table-responsive table td,.rst-content .wy-table-responsive table th{white-space:nowrap}.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100%!important;line-height:normal}.rst-content code.literal{color:#e74c3c}.rst-content code.xref,.rst-content a code{font-weight:700;color:#707070}.rst-content pre,.rst-content kbd{font-family:roboto mono,monospace}.rst-content kbd{background-color:inherit;color:inherit;-webkit-box-shadow:none;box-shadow:none;border:none;font-size:100%}.rst-content a code{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px;word-break:break-word}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px!important}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{font-family:roboto mono,monospace;display:table;margin:6px 0;font-size:100%;line-height:1.63;background:#f3fbff;color:#51504f;border-top:solid 4px #68d1ff;padding:8px 10px;position:relative}@media(max-width:768px){.rst-content dl:not(.docutils) dt{font-size:10px}}.rst-content dl:not(.docutils) dt:before{color:#68d1ff}.rst-content dl:not(.docutils) dt .headerlink{color:#707070;font-size:100%!important}.rst-content dl:not(.docutils) dt .fn-backref{color:#0cb6ff}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 8px #a6a6a6;background:#f8f8f8;color:#707070}.rst-content dl:not(.docutils) dl dt .headerlink{color:#707070;font-size:100%!important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) code{font-weight:700}.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100%!important}.rst-content dl:not(.docutils) code.descname{font-weight:700}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#51504f;font-weight:700}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content .versionmodified{font-style:italic}.rst-content .example-header{position:relative;background:#017cee;padding:8px 16px;margin-bottom:0}.rst-content .example-block-wrapper pre{margin:0;width:unset;border-top-left-radius:0;border-top-right-radius:0}.rst-content .example-header--with-button{padding-right:166px}@media(max-width:768px){.rst-content .example-header--with-button{padding-right:100px}}.rst-content .example-header:after{content:'';display:table;clear:both}.rst-content .example-title{display:block;padding:4px;margin-right:16px;color:#fff;overflow-x:auto}@media(max-width:768px){.rst-content .example-title{overflow-wrap:initial;font-size:12px}}.rst-content .example-header-button{top:8px;right:16px;position:absolute}.rst-content .example-header+.highlight-python{margin-top:0!important}.rst-content .viewcode-button{display:inline-block;padding:8px 16px;border:0;margin:0;color:#fff;font-weight:700;line-height:1;text-decoration:underline;text-overflow:ellipsis;overflow:hidden;text-transform:lowercase;vertical-align:middle;white-space:nowrap}@media(max-width:768px){.rst-content .viewcode-button{font-size:12px;padding:7px 0}}.rst-content .viewcode-button:visited{color:#404040}.rst-content .viewcode-button:hover,.rst-content .viewcode-button:focus{color:#404040}@media(min-width:1024px){.rst-content .section::before{display:block;content:" ";margin-top:-83px;height:83px;visibility:hidden}}.content-drawer-wrapper{display:none}@media(max-width:1280px){.content-drawer-wrapper{display:block;margin-bottom:30px}}.content-drawer-wrapper .navbar{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;left:0}.content-drawer-wrapper .navbar--hidden{display:none}.content-drawer-container{position:fixed;top:77px;left:0;width:100%;height:100%;background-color:#fff;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);-o-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition:.2s ease-out;-o-transition:.2s ease-out;transition:.2s ease-out;z-index:100}.content-drawer-container--open{-webkit-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}.content-drawer{padding:20px 40px}.content-drawer__toggle-button{border:none;background:0 0;padding:0;position:relative;width:26px;height:20px}.content-drawer__toggle-button--icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;visibility:hidden;opacity:0;-webkit-transition:.2s ease-out;-o-transition:.2s ease-out;transition:.2s ease-out}.content-drawer__toggle-button--icon svg{margin-right:10px}.content-drawer__toggle-button--icon.visible{visibility:visible;opacity:1}.dropdown-menu{font-family:roboto,sans-serif}.dropdown-toggle::after{color:#51504f}.sidebar__version-selector{margin-bottom:22px}.chroma,.highlight{background-color:#fff}.chroma .lntd,.highlight .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable,.highlight .lntable{border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block}.chroma .hl,.highlight .hl{display:block;width:100%;background-color:#ffc}.chroma .lnt,.chroma .ln,.highlight .lnt,.highlight .ln{margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.highlight .k,.highlight .kc,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr{color:#00f}.chroma .kt,.chroma .nc,.highlight .kt,.highlight .nc{color:#2b91af}.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .sr,.chroma .s1,.chroma .ss,.highlight .s,.highlight .sa,.highlight .sb,.highlight .sc,.highlight .dl,.highlight .sd,.highlight .s2,.highlight .se,.highlight .sh,.highlight .si,.highlight .sx,.highlight .sr,.highlight .s1,.highlight .ss{color:#a31515}.chroma .ow,.highlight .ow{color:#00f}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs,.highlight .c,.highlight .ch,.highlight .cm,.highlight .c1,.highlight .cs{color:green}.chroma .cp,.chroma .cpf,.highlight .cp,.highlight .cpf{color:#00f}.chroma .ge,.highlight .ge{font-style:italic}.chroma .gh,.chroma .gp,.chroma .gs,.chroma .gu,.highlight .gh,.highlight .gp,.highlight .gs,.highlight .gu{font-weight:700}pre{margin:40px 0;padding:16px 20px;border:solid 1px #cbcbcb;border-radius:5px;width:100%}.share-section--icons-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.share-section--icon{margin-right:12px;cursor:pointer}.four-oh-four{height:-webkit-calc(100vh - 123px);height:calc(100vh - 123px);position:relative}.four-oh-four__text-container{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center} \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/_gen/css/main.min.css b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/_gen/css/main.min.css new file mode 100644 index 00000000000..603f3cb39ff --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/_gen/css/main.min.css @@ -0,0 +1,7 @@ +@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,700,700i";@fa-font-path:"../webfonts";/*!* Bootstrap v4.1.3 (https://getbootstrap.com/) +* Copyright 2011-2018 The Bootstrap Authors +* Copyright 2011-2018 Twitter, Inc. +* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)*/:root{--blue: #72A1E5;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #dc3545;--orange: #BA5A31;--yellow: #ffc107;--green: #28a745;--teal: #20c997;--cyan: #17a2b8;--white: #fff;--gray: #888;--gray-dark: #333;--primary: #30638E;--secondary: #FFA630;--success: #3772FF;--info: #C0E0DE;--warning: #ED6A5A;--danger: #ED6A5A;--light: #D3F3EE;--dark: #403F4C;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width;}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:open sans,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol;font-size:1rem;font-weight:400;line-height:1.5;color:#222;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#3176d9;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#1e53a0;text-decoration:none}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):hover,a:not([href]):not([tabindex]):focus{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#888;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}h1,.h1{font-size:2.25rem}h2,.h2{font-size:2rem}h3,.h3{font-size:1.5rem}h4,.h4{font-size:1.35rem}h5,.h5{font-size:1.15rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:3rem;font-weight:700;line-height:1.2}.display-2{font-size:2.5rem;font-weight:700;line-height:1.2}.display-3{font-size:2rem;font-weight:700;line-height:1.2}.display-4{font-size:1.75rem;font-weight:700;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}small,.small{font-size:80%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#888}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid,.td-content img{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#888}code{font-size:87.5%;color:#c97300;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#222;border-radius:.2rem;-webkit-box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25);box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;font-size:87.5%;color:#222}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media(min-width:576px){.container{max-width:540px}}@media(min-width:768px){.container{max-width:720px}}@media(min-width:992px){.container{max-width:960px}}@media(min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-webkit-box-flex:0;-webkit-flex:0 0 8.33333333%;-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-2{-webkit-box-flex:0;-webkit-flex:0 0 16.66666667%;-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-webkit-flex:0 0 33.33333333%;-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-5{-webkit-box-flex:0;-webkit-flex:0 0 41.66666667%;-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-webkit-flex:0 0 58.33333333%;-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-8{-webkit-box-flex:0;-webkit-flex:0 0 66.66666667%;-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-webkit-flex:0 0 83.33333333%;-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-11{-webkit-box-flex:0;-webkit-flex:0 0 91.66666667%;-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}@media(min-width:576px){.col-sm{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-webkit-box-flex:0;-webkit-flex:0 0 8.33333333%;-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-sm-2{-webkit-box-flex:0;-webkit-flex:0 0 16.66666667%;-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-sm-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-webkit-flex:0 0 33.33333333%;-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-sm-5{-webkit-box-flex:0;-webkit-flex:0 0 41.66666667%;-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-sm-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-webkit-flex:0 0 58.33333333%;-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-sm-8{-webkit-box-flex:0;-webkit-flex:0 0 66.66666667%;-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-sm-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-webkit-flex:0 0 83.33333333%;-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-sm-11{-webkit-box-flex:0;-webkit-flex:0 0 91.66666667%;-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-sm-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}}@media(min-width:768px){.col-md{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-webkit-box-flex:0;-webkit-flex:0 0 8.33333333%;-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-md-2{-webkit-box-flex:0;-webkit-flex:0 0 16.66666667%;-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-md-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-webkit-flex:0 0 33.33333333%;-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-md-5{-webkit-box-flex:0;-webkit-flex:0 0 41.66666667%;-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-md-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-webkit-flex:0 0 58.33333333%;-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-md-8{-webkit-box-flex:0;-webkit-flex:0 0 66.66666667%;-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-md-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-webkit-flex:0 0 83.33333333%;-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-md-11{-webkit-box-flex:0;-webkit-flex:0 0 91.66666667%;-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-md-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}}@media(min-width:992px){.col-lg{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-webkit-box-flex:0;-webkit-flex:0 0 8.33333333%;-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-lg-2{-webkit-box-flex:0;-webkit-flex:0 0 16.66666667%;-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-lg-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-webkit-flex:0 0 33.33333333%;-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-lg-5{-webkit-box-flex:0;-webkit-flex:0 0 41.66666667%;-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-lg-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-webkit-flex:0 0 58.33333333%;-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-lg-8{-webkit-box-flex:0;-webkit-flex:0 0 66.66666667%;-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-lg-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-webkit-flex:0 0 83.33333333%;-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-lg-11{-webkit-box-flex:0;-webkit-flex:0 0 91.66666667%;-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-lg-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}}@media(min-width:1200px){.col-xl{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-webkit-box-flex:0;-webkit-flex:0 0 8.33333333%;-ms-flex:0 0 8.33333333%;flex:0 0 8.33333333%;max-width:8.33333333%}.col-xl-2{-webkit-box-flex:0;-webkit-flex:0 0 16.66666667%;-ms-flex:0 0 16.66666667%;flex:0 0 16.66666667%;max-width:16.66666667%}.col-xl-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-webkit-flex:0 0 33.33333333%;-ms-flex:0 0 33.33333333%;flex:0 0 33.33333333%;max-width:33.33333333%}.col-xl-5{-webkit-box-flex:0;-webkit-flex:0 0 41.66666667%;-ms-flex:0 0 41.66666667%;flex:0 0 41.66666667%;max-width:41.66666667%}.col-xl-6{-webkit-box-flex:0;-webkit-flex:0 0 50%;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-webkit-flex:0 0 58.33333333%;-ms-flex:0 0 58.33333333%;flex:0 0 58.33333333%;max-width:58.33333333%}.col-xl-8{-webkit-box-flex:0;-webkit-flex:0 0 66.66666667%;-ms-flex:0 0 66.66666667%;flex:0 0 66.66666667%;max-width:66.66666667%}.col-xl-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-webkit-flex:0 0 83.33333333%;-ms-flex:0 0 83.33333333%;flex:0 0 83.33333333%;max-width:83.33333333%}.col-xl-11{-webkit-box-flex:0;-webkit-flex:0 0 91.66666667%;-ms-flex:0 0 91.66666667%;flex:0 0 91.66666667%;max-width:91.66666667%}.col-xl-12{-webkit-box-flex:0;-webkit-flex:0 0 100%;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-webkit-order:-1;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-webkit-order:13;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-webkit-order:11;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-webkit-order:12;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}}.table,.td-box .row.section>table,.td-content>table{width:100%;margin-bottom:1rem;background-color:transparent}.table th,.td-box .row.section>table th,.td-content>table th,.table td,.td-box .row.section>table td,.td-content>table td{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th,.td-box .row.section>table thead th,.td-content>table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody,.td-box .row.section>table tbody+tbody,.td-content>table tbody+tbody{border-top:2px solid #dee2e6}.table .table,.td-box .row.section>table .table,.td-content>table .table,.table .td-box .row.section>table,.td-box .table .row.section>table,.td-box .row.section>table .row.section>table,.td-content>table .td-box .row.section>table,.td-box .td-content>table .row.section>table,.table .td-content>table,.td-box .row.section>table .td-content>table,.td-content>table .td-content>table{background-color:#fff}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered th,.table-bordered td{border:1px solid #dee2e6}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd),.td-box .row.section>table tbody tr:nth-of-type(odd),.td-content>table tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>th,.table-primary>td{background-color:#c5d3df}.table-hover .table-primary:hover{background-color:#b5c7d6}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#b5c7d6}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#ffe6c5}.table-hover .table-secondary:hover{background-color:#ffdbac}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#ffdbac}.table-success,.table-success>th,.table-success>td{background-color:#c7d8ff}.table-hover .table-success:hover{background-color:#aec6ff}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#aec6ff}.table-info,.table-info>th,.table-info>td{background-color:#edf6f6}.table-hover .table-info:hover{background-color:#dceeee}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#dceeee}.table-warning,.table-warning>th,.table-warning>td{background-color:#fad5d1}.table-hover .table-warning:hover{background-color:#f8c0ba}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#f8c0ba}.table-danger,.table-danger>th,.table-danger>td{background-color:#fad5d1}.table-hover .table-danger:hover{background-color:#f8c0ba}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f8c0ba}.table-light,.table-light>th,.table-light>td{background-color:#f3fcfa}.table-hover .table-light:hover{background-color:#dff7f2}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#dff7f2}.table-dark,.table-dark>th,.table-dark>td{background-color:#cac9cd}.table-hover .table-dark:hover{background-color:#bdbcc1}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#bdbcc1}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th,.td-box .row.section>table .thead-dark th,.td-content>table .thead-dark th{color:#fff;background-color:#222;border-color:#353535}.table .thead-light th,.td-box .row.section>table .thead-light th,.td-content>table .thead-light th{color:#495057;background-color:#eee;border-color:#dee2e6}.table-dark{color:#fff;background-color:#222}.table-dark th,.table-dark td,.table-dark thead th{border-color:#353535}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd),.td-box .row.section>table.table-dark tbody tr:nth-of-type(odd),.td-content>table.table-dark tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media(max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media(max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media(max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media(max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive,.td-box .row.section>table,.td-content>table{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered,.td-box .row.section>table>.table-bordered,.td-content>table>.table-bordered{border:0}.form-control{display:block;width:100%;height:-webkit-calc(2.25rem + 2px);height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border-radius:.25rem;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{-webkit-transition:none;-o-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#6fa3ce;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(48,99,142,.25);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(48,99,142,.25)}.form-control::-webkit-input-placeholder{color:#888;opacity:1}.form-control::-moz-placeholder{color:#888;opacity:1}.form-control:-ms-input-placeholder{color:#888;opacity:1}.form-control::placeholder{color:#888;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#eee;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:-webkit-calc(0.375rem + 1px);padding-top:calc(0.375rem + 1px);padding-bottom:-webkit-calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:-webkit-calc(0.5rem + 1px);padding-top:calc(0.5rem + 1px);padding-bottom:-webkit-calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:-webkit-calc(0.25rem + 1px);padding-top:calc(0.25rem + 1px);padding-bottom:-webkit-calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#222;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:-webkit-calc(1.8125rem + 2px);height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:-webkit-calc(2.875rem + 2px);height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#888}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#3772ff}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(55,114,255,.9);border-radius:.25rem}.was-validated .form-control:valid,.form-control.is-valid,.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#3772ff}.was-validated .form-control:valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#3772ff;-webkit-box-shadow:0 0 0 .2rem rgba(55,114,255,.25);box-shadow:0 0 0 .2rem rgba(55,114,255,.25)}.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip{display:block}.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip{display:block}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#3772ff}.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip,.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip{display:block}.was-validated .custom-control-input:valid~.custom-control-label,.custom-control-input.is-valid~.custom-control-label{color:#3772ff}.was-validated .custom-control-input:valid~.custom-control-label::before,.custom-control-input.is-valid~.custom-control-label::before{background-color:#b7ccff}.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip,.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip{display:block}.was-validated .custom-control-input:valid:checked~.custom-control-label::before,.custom-control-input.is-valid:checked~.custom-control-label::before{background:#6a96ff -webkit-gradient(linear,left top,left bottom,from(#80a6ff),to(#6a96ff)) repeat-x;background:#6a96ff -webkit-linear-gradient(top,#80a6ff,#6a96ff) repeat-x;background:#6a96ff -o-linear-gradient(top,#80a6ff,#6a96ff) repeat-x;background:#6a96ff linear-gradient(180deg,#80a6ff,#6a96ff) repeat-x}.was-validated .custom-control-input:valid:focus~.custom-control-label::before,.custom-control-input.is-valid:focus~.custom-control-label::before{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(55,114,255,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(55,114,255,.25)}.was-validated .custom-file-input:valid~.custom-file-label,.custom-file-input.is-valid~.custom-file-label{border-color:#3772ff}.was-validated .custom-file-input:valid~.custom-file-label::after,.custom-file-input.is-valid~.custom-file-label::after{border-color:inherit}.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip,.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip{display:block}.was-validated .custom-file-input:valid:focus~.custom-file-label,.custom-file-input.is-valid:focus~.custom-file-label{-webkit-box-shadow:0 0 0 .2rem rgba(55,114,255,.25);box-shadow:0 0 0 .2rem rgba(55,114,255,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#ed6a5a}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(237,106,90,.9);border-radius:.25rem}.was-validated .form-control:invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#ed6a5a}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#ed6a5a;-webkit-box-shadow:0 0 0 .2rem rgba(237,106,90,.25);box-shadow:0 0 0 .2rem rgba(237,106,90,.25)}.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip{display:block}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#ed6a5a}.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip,.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip{display:block}.was-validated .custom-control-input:invalid~.custom-control-label,.custom-control-input.is-invalid~.custom-control-label{color:#ed6a5a}.was-validated .custom-control-input:invalid~.custom-control-label::before,.custom-control-input.is-invalid~.custom-control-label::before{background-color:#fad2cd}.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip,.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip{display:block}.was-validated .custom-control-input:invalid:checked~.custom-control-label::before,.custom-control-input.is-invalid:checked~.custom-control-label::before{background:#f29488 -webkit-gradient(linear,left top,left bottom,from(#f4a49a),to(#f29488)) repeat-x;background:#f29488 -webkit-linear-gradient(top,#f4a49a,#f29488) repeat-x;background:#f29488 -o-linear-gradient(top,#f4a49a,#f29488) repeat-x;background:#f29488 linear-gradient(180deg,#f4a49a,#f29488) repeat-x}.was-validated .custom-control-input:invalid:focus~.custom-control-label::before,.custom-control-input.is-invalid:focus~.custom-control-label::before{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(237,106,90,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(237,106,90,.25)}.was-validated .custom-file-input:invalid~.custom-file-label,.custom-file-input.is-invalid~.custom-file-label{border-color:#ed6a5a}.was-validated .custom-file-input:invalid~.custom-file-label::after,.custom-file-input.is-invalid~.custom-file-label::after{border-color:inherit}.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip,.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip{display:block}.was-validated .custom-file-input:invalid:focus~.custom-file-label,.custom-file-input.is-invalid:focus~.custom-file-label{-webkit-box-shadow:0 0 0 .2rem rgba(237,106,90,.25);box-shadow:0 0 0 .2rem rgba(237,106,90,.25)}.form-inline{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media(min-width:576px){.form-inline label{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{-webkit-transition:none;-o-transition:none;transition:none}}.btn:hover,.btn:focus{text-decoration:none}.btn:focus,.btn.focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(48,99,142,.25);box-shadow:0 0 0 .2rem rgba(48,99,142,.25)}.btn.disabled,.btn:disabled{opacity:.65;-webkit-box-shadow:none;box-shadow:none}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled):active,.btn:not(:disabled):not(.disabled).active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:not(:disabled):not(.disabled):active:focus,.btn:not(:disabled):not(.disabled).active:focus{-webkit-box-shadow:0 0 0 .2rem rgba(48,99,142,.25),inset 0 3px 5px rgba(0,0,0,.125);box-shadow:0 0 0 .2rem rgba(48,99,142,.25),inset 0 3px 5px rgba(0,0,0,.125)}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x;border-color:#30638e;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-primary:hover{color:#fff;background:#264f71 -webkit-gradient(linear,left top,left bottom,from(#476987),to(#264f71)) repeat-x;background:#264f71 -webkit-linear-gradient(top,#476987,#264f71) repeat-x;background:#264f71 -o-linear-gradient(top,#476987,#264f71) repeat-x;background:#264f71 linear-gradient(180deg,#476987,#264f71) repeat-x;border-color:#234868}.btn-primary:focus,.btn-primary.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(48,99,142,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(48,99,142,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#30638e;border-color:#30638e}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#234868;background-image:none;border-color:#20425e}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(48,99,142,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(48,99,142,.5)}.btn-secondary{color:#fff;background:#FFA630 -webkit-gradient(linear,left top,left bottom,from(#ffb34f),to(#FFA630)) repeat-x;background:#ffa630 -webkit-linear-gradient(top,#ffb34f,#FFA630) repeat-x;background:#ffa630 -o-linear-gradient(top,#ffb34f,#FFA630) repeat-x;background:#ffa630 linear-gradient(180deg,#ffb34f,#FFA630) repeat-x;border-color:#ffa630;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-secondary:hover{color:#fff;background:#ff960a -webkit-gradient(linear,left top,left bottom,from(#ffa52f),to(#ff960a)) repeat-x;background:#ff960a -webkit-linear-gradient(top,#ffa52f,#ff960a) repeat-x;background:#ff960a -o-linear-gradient(top,#ffa52f,#ff960a) repeat-x;background:#ff960a linear-gradient(180deg,#ffa52f,#ff960a) repeat-x;border-color:#fc9000}.btn-secondary:focus,.btn-secondary.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(255,166,48,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(255,166,48,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#ffa630;border-color:#ffa630}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#fc9000;background-image:none;border-color:#ef8800}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,166,48,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,166,48,.5)}.btn-success{color:#fff;background:#3772FF -webkit-gradient(linear,left top,left bottom,from(#5587ff),to(#3772FF)) repeat-x;background:#3772ff -webkit-linear-gradient(top,#5587ff,#3772FF) repeat-x;background:#3772ff -o-linear-gradient(top,#5587ff,#3772FF) repeat-x;background:#3772ff linear-gradient(180deg,#5587ff,#3772FF) repeat-x;border-color:#3772ff;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-success:hover{color:#fff;background:#1157ff -webkit-gradient(linear,left top,left bottom,from(#3470ff),to(#1157ff)) repeat-x;background:#1157ff -webkit-linear-gradient(top,#3470ff,#1157ff) repeat-x;background:#1157ff -o-linear-gradient(top,#3470ff,#1157ff) repeat-x;background:#1157ff linear-gradient(180deg,#3470ff,#1157ff) repeat-x;border-color:#044eff}.btn-success:focus,.btn-success.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(55,114,255,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(55,114,255,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#3772ff;border-color:#3772ff}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#044eff;background-image:none;border-color:#0049f6}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(55,114,255,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(55,114,255,.5)}.btn-info{color:#222;background:#C0E0DE -webkit-gradient(linear,left top,left bottom,from(#c9e5e3),to(#C0E0DE)) repeat-x;background:#c0e0de -webkit-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x;background:#c0e0de -o-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x;background:#c0e0de linear-gradient(180deg,#c9e5e3,#C0E0DE) repeat-x;border-color:#c0e0de;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-info:hover{color:#fff;background:#a6d3d1 -webkit-gradient(linear,left top,left bottom,from(#b4dad8),to(#a6d3d1)) repeat-x;background:#a6d3d1 -webkit-linear-gradient(top,#b4dad8,#a6d3d1) repeat-x;background:#a6d3d1 -o-linear-gradient(top,#b4dad8,#a6d3d1) repeat-x;background:#a6d3d1 linear-gradient(180deg,#b4dad8,#a6d3d1) repeat-x;border-color:#9ecfcc}.btn-info:focus,.btn-info.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(192,224,222,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(192,224,222,.5)}.btn-info.disabled,.btn-info:disabled{color:#222;background-color:#c0e0de;border-color:#c0e0de}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#9ecfcc;background-image:none;border-color:#95cbc8}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(192,224,222,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(192,224,222,.5)}.btn-warning{color:#fff;background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x;border-color:#ed6a5a;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-warning:hover{color:#fff;background:#e94b38 -webkit-gradient(linear,left top,left bottom,from(#ed6655),to(#e94b38)) repeat-x;background:#e94b38 -webkit-linear-gradient(top,#ed6655,#e94b38) repeat-x;background:#e94b38 -o-linear-gradient(top,#ed6655,#e94b38) repeat-x;background:#e94b38 linear-gradient(180deg,#ed6655,#e94b38) repeat-x;border-color:#e8402c}.btn-warning:focus,.btn-warning.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(237,106,90,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(237,106,90,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#ed6a5a;border-color:#ed6a5a}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#e8402c;background-image:none;border-color:#e73621}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5)}.btn-danger{color:#fff;background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x;border-color:#ed6a5a;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger:hover{color:#fff;background:#e94b38 -webkit-gradient(linear,left top,left bottom,from(#ed6655),to(#e94b38)) repeat-x;background:#e94b38 -webkit-linear-gradient(top,#ed6655,#e94b38) repeat-x;background:#e94b38 -o-linear-gradient(top,#ed6655,#e94b38) repeat-x;background:#e94b38 linear-gradient(180deg,#ed6655,#e94b38) repeat-x;border-color:#e8402c}.btn-danger:focus,.btn-danger.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(237,106,90,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(237,106,90,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#ed6a5a;border-color:#ed6a5a}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#e8402c;background-image:none;border-color:#e73621}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5)}.btn-light{color:#222;background:#D3F3EE -webkit-gradient(linear,left top,left bottom,from(#daf5f1),to(#D3F3EE)) repeat-x;background:#d3f3ee -webkit-linear-gradient(top,#daf5f1,#D3F3EE) repeat-x;background:#d3f3ee -o-linear-gradient(top,#daf5f1,#D3F3EE) repeat-x;background:#d3f3ee linear-gradient(180deg,#daf5f1,#D3F3EE) repeat-x;border-color:#d3f3ee;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-light:hover{color:#222;background:#b5ebe2 -webkit-gradient(linear,left top,left bottom,from(#c0eee7),to(#b5ebe2)) repeat-x;background:#b5ebe2 -webkit-linear-gradient(top,#c0eee7,#b5ebe2) repeat-x;background:#b5ebe2 -o-linear-gradient(top,#c0eee7,#b5ebe2) repeat-x;background:#b5ebe2 linear-gradient(180deg,#c0eee7,#b5ebe2) repeat-x;border-color:#abe8df}.btn-light:focus,.btn-light.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(211,243,238,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(211,243,238,.5)}.btn-light.disabled,.btn-light:disabled{color:#222;background-color:#d3f3ee;border-color:#d3f3ee}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#222;background-color:#abe8df;background-image:none;border-color:#a1e5db}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(211,243,238,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(211,243,238,.5)}.btn-dark{color:#fff;background:#403F4C -webkit-gradient(linear,left top,left bottom,from(#5d5c67),to(#403F4C)) repeat-x;background:#403f4c -webkit-linear-gradient(top,#5d5c67,#403F4C) repeat-x;background:#403f4c -o-linear-gradient(top,#5d5c67,#403F4C) repeat-x;background:#403f4c linear-gradient(180deg,#5d5c67,#403F4C) repeat-x;border-color:#403f4c;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-dark:hover{color:#fff;background:#2e2e37 -webkit-gradient(linear,left top,left bottom,from(#4e4d55),to(#2e2e37)) repeat-x;background:#2e2e37 -webkit-linear-gradient(top,#4e4d55,#2e2e37) repeat-x;background:#2e2e37 -o-linear-gradient(top,#4e4d55,#2e2e37) repeat-x;background:#2e2e37 linear-gradient(180deg,#4e4d55,#2e2e37) repeat-x;border-color:#292830}.btn-dark:focus,.btn-dark.focus{-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(64,63,76,.5);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(64,63,76,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#403f4c;border-color:#403f4c}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#292830;background-image:none;border-color:#232229}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(64,63,76,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(64,63,76,.5)}.btn-outline-primary{color:#30638e;background-color:transparent;background-image:none;border-color:#30638e}.btn-outline-primary:hover{color:#fff;background-color:#30638e;border-color:#30638e}.btn-outline-primary:focus,.btn-outline-primary.focus{-webkit-box-shadow:0 0 0 .2rem rgba(48,99,142,.5);box-shadow:0 0 0 .2rem rgba(48,99,142,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#30638e;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#30638e;border-color:#30638e}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(48,99,142,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(48,99,142,.5)}.btn-outline-secondary{color:#ffa630;background-color:transparent;background-image:none;border-color:#ffa630}.btn-outline-secondary:hover{color:#fff;background-color:#ffa630;border-color:#ffa630}.btn-outline-secondary:focus,.btn-outline-secondary.focus{-webkit-box-shadow:0 0 0 .2rem rgba(255,166,48,.5);box-shadow:0 0 0 .2rem rgba(255,166,48,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#ffa630;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#ffa630;border-color:#ffa630}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,166,48,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,166,48,.5)}.btn-outline-success{color:#3772ff;background-color:transparent;background-image:none;border-color:#3772ff}.btn-outline-success:hover{color:#fff;background-color:#3772ff;border-color:#3772ff}.btn-outline-success:focus,.btn-outline-success.focus{-webkit-box-shadow:0 0 0 .2rem rgba(55,114,255,.5);box-shadow:0 0 0 .2rem rgba(55,114,255,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#3772ff;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#3772ff;border-color:#3772ff}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(55,114,255,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(55,114,255,.5)}.btn-outline-info{color:#c0e0de;background-color:transparent;background-image:none;border-color:#c0e0de}.btn-outline-info:hover{color:#222;background-color:#c0e0de;border-color:#c0e0de}.btn-outline-info:focus,.btn-outline-info.focus{-webkit-box-shadow:0 0 0 .2rem rgba(192,224,222,.5);box-shadow:0 0 0 .2rem rgba(192,224,222,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#c0e0de;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#222;background-color:#c0e0de;border-color:#c0e0de}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(192,224,222,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(192,224,222,.5)}.btn-outline-warning{color:#ed6a5a;background-color:transparent;background-image:none;border-color:#ed6a5a}.btn-outline-warning:hover{color:#fff;background-color:#ed6a5a;border-color:#ed6a5a}.btn-outline-warning:focus,.btn-outline-warning.focus{-webkit-box-shadow:0 0 0 .2rem rgba(237,106,90,.5);box-shadow:0 0 0 .2rem rgba(237,106,90,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ed6a5a;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#ed6a5a;border-color:#ed6a5a}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5)}.btn-outline-danger{color:#ed6a5a;background-color:transparent;background-image:none;border-color:#ed6a5a}.btn-outline-danger:hover{color:#fff;background-color:#ed6a5a;border-color:#ed6a5a}.btn-outline-danger:focus,.btn-outline-danger.focus{-webkit-box-shadow:0 0 0 .2rem rgba(237,106,90,.5);box-shadow:0 0 0 .2rem rgba(237,106,90,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#ed6a5a;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#ed6a5a;border-color:#ed6a5a}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(237,106,90,.5)}.btn-outline-light{color:#d3f3ee;background-color:transparent;background-image:none;border-color:#d3f3ee}.btn-outline-light:hover{color:#222;background-color:#d3f3ee;border-color:#d3f3ee}.btn-outline-light:focus,.btn-outline-light.focus{-webkit-box-shadow:0 0 0 .2rem rgba(211,243,238,.5);box-shadow:0 0 0 .2rem rgba(211,243,238,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#d3f3ee;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#222;background-color:#d3f3ee;border-color:#d3f3ee}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(211,243,238,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(211,243,238,.5)}.btn-outline-dark{color:#403f4c;background-color:transparent;background-image:none;border-color:#403f4c}.btn-outline-dark:hover{color:#fff;background-color:#403f4c;border-color:#403f4c}.btn-outline-dark:focus,.btn-outline-dark.focus{-webkit-box-shadow:0 0 0 .2rem rgba(64,63,76,.5);box-shadow:0 0 0 .2rem rgba(64,63,76,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#403f4c;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#403f4c;border-color:#403f4c}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(64,63,76,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(64,63,76,.5)}.btn-link{font-weight:400;color:#3176d9;background-color:transparent}.btn-link:hover{color:#1e53a0;text-decoration:none;background-color:transparent;border-color:transparent}.btn-link:focus,.btn-link.focus{text-decoration:none;border-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link:disabled,.btn-link.disabled{color:#888;pointer-events:none}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{-webkit-transition:none;-o-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{-webkit-transition:none;-o-transition:none;transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#222;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.175);box-shadow:0 .5rem 1rem rgba(0,0,0,.175)}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=top],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #eee}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#222;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#151515;text-decoration:none;background:#f8f9fa -webkit-gradient(linear,left top,left bottom,from(#f9fafb),to(#f8f9fa)) repeat-x;background:#f8f9fa -webkit-linear-gradient(top,#f9fafb,#f8f9fa) repeat-x;background:#f8f9fa -o-linear-gradient(top,#f9fafb,#f8f9fa) repeat-x;background:#f8f9fa linear-gradient(180deg,#f9fafb,#f8f9fa) repeat-x}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x}.dropdown-item.disabled,.dropdown-item:disabled{color:#888;background-color:transparent;background-image:none}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#888;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#222}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group.show .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.custom-select,.input-group>.custom-file{position:relative;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus~.custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:last-child),.input-group>.custom-select:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-prepend,.input-group-append{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.input-group-prepend .btn,.input-group-append .btn{position:relative;z-index:2}.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#eee;border:1px solid #ccc;border-radius:.25rem}.input-group-text input[type=radio],.input-group-text input[type=checkbox]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-append>.btn{height:-webkit-calc(2.875rem + 2px);height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-append>.btn{height:-webkit-calc(1.8125rem + 2px);height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text,.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x;-webkit-box-shadow:none;box-shadow:none}.custom-control-input:focus~.custom-control-label::before{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(48,99,142,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(48,99,142,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#95bbdb;-webkit-box-shadow:none;box-shadow:none}.custom-control-input:disabled~.custom-control-label{color:#888}.custom-control-input:disabled~.custom-control-label::before{background-color:#eee}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6;-webkit-box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1);box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:50%;-webkit-background-size:50% 50%;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA4IDgiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik02LjU2NC43NWwtMy41OSAzLjYxMi0xLjUzOC0xLjU1TDAgNC4yNiAyLjk3NCA3LjI1IDggMi4xOTN6Ii8+PC9zdmc+)}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x;-webkit-box-shadow:none;box-shadow:none}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0IDQiPjxwYXRoIHN0cm9rZT0iI2ZmZiIgZD0iTTAgMmg0Ii8+PC9zdmc+)}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(48,99,142,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(48,99,142,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii00IC00IDggOCI+PGNpcmNsZSByPSIzIiBmaWxsPSIjZmZmIi8+PC9zdmc+)}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(48,99,142,.5)}.custom-select{display:inline-block;width:100%;height:-webkit-calc(2.25rem + 2px);height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0IDUiPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik0yIDAgMCAyaDR6bTAgNUwwIDNoNHoiLz48L3N2Zz4=) no-repeat 100% .75rem 50%;-webkit-background-size:8px 10px;background-size:8px 10px;border:1px solid #ccc;border-radius:.25rem;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.075);box-shadow:inset 0 1px 2px rgba(0,0,0,.075);-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#6fa3ce;outline:0;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 0 .2rem rgba(111,163,206,.5);box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 0 .2rem rgba(111,163,206,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#888;background-color:#eee}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:-webkit-calc(1.8125rem + 2px);height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:-webkit-calc(2.875rem + 2px);height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:-webkit-calc(2.25rem + 2px);height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:-webkit-calc(2.25rem + 2px);height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#6fa3ce;-webkit-box-shadow:0 0 0 .2rem rgba(48,99,142,.25);box-shadow:0 0 0 .2rem rgba(48,99,142,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#6fa3ce}.custom-file-input:disabled~.custom-file-label{background-color:#eee}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:-webkit-calc(2.25rem + 2px);height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ccc;border-radius:.25rem;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background:#eee -webkit-gradient(linear,left top,left bottom,from(#f1f1f1),to(#eee)) repeat-x;background:#eee -webkit-linear-gradient(top,#f1f1f1,#eee) repeat-x;background:#eee -o-linear-gradient(top,#f1f1f1,#eee) repeat-x;background:#eee linear-gradient(180deg,#f1f1f1,#eee) repeat-x;border-left:1px solid #ccc;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(48,99,142,.25);box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(48,99,142,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(48,99,142,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(48,99,142,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x;border:0;border-radius:1rem;-webkit-box-shadow:0 .1rem .25rem rgba(0,0,0,.1);box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;-o-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background:#95bbdb -webkit-gradient(linear,left top,left bottom,from(#a5c5e1),to(#95bbdb)) repeat-x;background:#95bbdb -webkit-linear-gradient(top,#a5c5e1,#95bbdb) repeat-x;background:#95bbdb linear-gradient(180deg,#a5c5e1,#95bbdb) repeat-x}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem;-webkit-box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1);box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-webkit-transition:none;-o-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background:#95bbdb linear-gradient(180deg,#a5c5e1,#95bbdb) repeat-x}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem;box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-webkit-transition:none;-o-transition:none;transition:none}}.custom-range::-ms-thumb:active{background:#95bbdb linear-gradient(180deg,#a5c5e1,#95bbdb) repeat-x}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem;box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;-o-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{-webkit-transition:none;-o-transition:none;transition:none}}.nav{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#888}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#eee #eee #dee2e6}.nav-tabs .nav-link.disabled{color:#888;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#30638e}.nav-fill .nav-item{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-webkit-flex-basis:0;-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;-webkit-background-size:100% 100%;background-size:100% 100%}@media(max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media(min-width:576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media(max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media(min-width:768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media(max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media(min-width:992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media(max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media(min-width:1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important;-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzAgMzAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggc3Ryb2tlPSJyZ2JhKDAsIDAsIDAsIDAuNSkiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIGQ9Ik00IDdoMjJNNCAxNWgyMk00IDIzaDIyIi8+PC9zdmc+)}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.75);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzAgMzAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggc3Ryb2tlPSJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiBkPSJNNCA3aDIyTTQgMTVoMjJNNCAyM2gyMiIvPjwvc3ZnPg==)}.navbar-dark .navbar-text{color:rgba(255,255,255,.75)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card,.td-content .highlight{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr,.td-content .highlight>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child,.td-content .highlight>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child,.td-content .highlight>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:-webkit-calc(0.25rem - 1px) -webkit-calc(0.25rem - 1px) 0 0;border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 -webkit-calc(0.25rem - 1px) -webkit-calc(0.25rem - 1px);border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:-webkit-calc(0.25rem - 1px);border-radius:calc(0.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:-webkit-calc(0.25rem - 1px);border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:-webkit-calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:-webkit-calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:-webkit-calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card-deck{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.card-deck .card,.card-deck .td-content .highlight,.td-content .card-deck .highlight{margin-bottom:15px}@media(min-width:576px){.card-deck{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card,.card-deck .td-content .highlight,.td-content .card-deck .highlight{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1 0 0%;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.card-group>.card,.td-content .card-group>.highlight{margin-bottom:15px}@media(min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card,.td-content .card-group>.highlight{-webkit-box-flex:1;-webkit-flex:1 0 0%;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card,.td-content .card-group>.highlight+.card,.td-content .card-group>.card+.highlight,.td-content .card-group>.highlight+.highlight{margin-left:0;border-left:0}.card-group>.card:first-child,.td-content .card-group>.highlight:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-img-top,.td-content .card-group>.highlight:first-child .card-img-top,.card-group>.card:first-child .card-header,.td-content .card-group>.highlight:first-child .card-header{border-top-right-radius:0}.card-group>.card:first-child .card-img-bottom,.td-content .card-group>.highlight:first-child .card-img-bottom,.card-group>.card:first-child .card-footer,.td-content .card-group>.highlight:first-child .card-footer{border-bottom-right-radius:0}.card-group>.card:last-child,.td-content .card-group>.highlight:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-img-top,.td-content .card-group>.highlight:last-child .card-img-top,.card-group>.card:last-child .card-header,.td-content .card-group>.highlight:last-child .card-header{border-top-left-radius:0}.card-group>.card:last-child .card-img-bottom,.td-content .card-group>.highlight:last-child .card-img-bottom,.card-group>.card:last-child .card-footer,.td-content .card-group>.highlight:last-child .card-footer{border-bottom-left-radius:0}.card-group>.card:only-child,.td-content .card-group>.highlight:only-child{border-radius:.25rem}.card-group>.card:only-child .card-img-top,.td-content .card-group>.highlight:only-child .card-img-top,.card-group>.card:only-child .card-header,.td-content .card-group>.highlight:only-child .card-header{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-img-bottom,.td-content .card-group>.highlight:only-child .card-img-bottom,.card-group>.card:only-child .card-footer,.td-content .card-group>.highlight:only-child .card-footer{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child),.td-content .card-group>.highlight:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,.td-content .card-group>.highlight:not(:first-child):not(:last-child):not(:only-child) .card-img-top,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.td-content .card-group>.highlight:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.td-content .card-group>.highlight:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.td-content .card-group>.highlight:not(:first-child):not(:last-child):not(:only-child) .card-footer{border-radius:0}}.card-columns .card,.card-columns .td-content .highlight,.td-content .card-columns .highlight{margin-bottom:.75rem}@media(min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card,.card-columns .td-content .highlight,.td-content .card-columns .highlight{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type),.accordion .td-content .highlight:not(:first-of-type):not(:last-of-type),.td-content .accordion .highlight:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child,.accordion .td-content .highlight:not(:first-of-type) .card-header:first-child,.td-content .accordion .highlight:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type,.accordion .td-content .highlight:first-of-type,.td-content .accordion .highlight:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type,.accordion .td-content .highlight:last-of-type,.td-content .accordion .highlight:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#eee;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#888;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#888}.pagination{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#888;background-color:#fff;border:1px solid rgba(0,0,0,.1)}.page-link:hover{z-index:2;color:#1e53a0;text-decoration:none;background-color:#eee;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(48,99,142,.25);box-shadow:0 0 0 .2rem rgba(48,99,142,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#30638e;border-color:#2a567b}.page-item.disabled .page-link{color:#dee2e6;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#30638e}.badge-primary[href]:hover,.badge-primary[href]:focus{color:#fff;text-decoration:none;background-color:#234868}.badge-secondary{color:#fff;background-color:#ffa630}.badge-secondary[href]:hover,.badge-secondary[href]:focus{color:#fff;text-decoration:none;background-color:#fc9000}.badge-success{color:#fff;background-color:#3772ff}.badge-success[href]:hover,.badge-success[href]:focus{color:#fff;text-decoration:none;background-color:#044eff}.badge-info{color:#222;background-color:#c0e0de}.badge-info[href]:hover,.badge-info[href]:focus{color:#222;text-decoration:none;background-color:#9ecfcc}.badge-warning{color:#fff;background-color:#ed6a5a}.badge-warning[href]:hover,.badge-warning[href]:focus{color:#fff;text-decoration:none;background-color:#e8402c}.badge-danger{color:#fff;background-color:#ed6a5a}.badge-danger[href]:hover,.badge-danger[href]:focus{color:#fff;text-decoration:none;background-color:#e8402c}.badge-light{color:#222;background-color:#d3f3ee}.badge-light[href]:hover,.badge-light[href]:focus{color:#222;text-decoration:none;background-color:#abe8df}.badge-dark{color:#fff;background-color:#403f4c}.badge-dark[href]:hover,.badge-dark[href]:focus{color:#fff;text-decoration:none;background-color:#292830}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#eee;border-radius:.3rem}@media(min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#19334a;background:#d6e0e8 -webkit-gradient(linear,left top,left bottom,from(#dce5eb),to(#d6e0e8)) repeat-x;background:#d6e0e8 -webkit-linear-gradient(top,#dce5eb,#d6e0e8) repeat-x;background:#d6e0e8 -o-linear-gradient(top,#dce5eb,#d6e0e8) repeat-x;background:#d6e0e8 linear-gradient(180deg,#dce5eb,#d6e0e8) repeat-x;border-color:#c5d3df}.alert-primary hr{border-top-color:#b5c7d6}.alert-primary .alert-link{color:#0c1924}.alert-secondary{color:#855619;background:#ffedd6 -webkit-gradient(linear,left top,left bottom,from(#fff0dc),to(#ffedd6)) repeat-x;background:#ffedd6 -webkit-linear-gradient(top,#fff0dc,#ffedd6) repeat-x;background:#ffedd6 -o-linear-gradient(top,#fff0dc,#ffedd6) repeat-x;background:#ffedd6 linear-gradient(180deg,#fff0dc,#ffedd6) repeat-x;border-color:#ffe6c5}.alert-secondary hr{border-top-color:#ffdbac}.alert-secondary .alert-link{color:#5a3a11}.alert-success{color:#1d3b85;background:#d7e3ff -webkit-gradient(linear,left top,left bottom,from(#dde7ff),to(#d7e3ff)) repeat-x;background:#d7e3ff -webkit-linear-gradient(top,#dde7ff,#d7e3ff) repeat-x;background:#d7e3ff -o-linear-gradient(top,#dde7ff,#d7e3ff) repeat-x;background:#d7e3ff linear-gradient(180deg,#dde7ff,#d7e3ff) repeat-x;border-color:#c7d8ff}.alert-success hr{border-top-color:#aec6ff}.alert-success .alert-link{color:#14285b}.alert-info{color:#647473;background:#f2f9f8 -webkit-gradient(linear,left top,left bottom,from(#f4faf9),to(#f2f9f8)) repeat-x;background:#f2f9f8 -webkit-linear-gradient(top,#f4faf9,#f2f9f8) repeat-x;background:#f2f9f8 -o-linear-gradient(top,#f4faf9,#f2f9f8) repeat-x;background:#f2f9f8 linear-gradient(180deg,#f4faf9,#f2f9f8) repeat-x;border-color:#edf6f6}.alert-info hr{border-top-color:#dceeee}.alert-info .alert-link{color:#4c5958}.alert-warning{color:#7b372f;background:#fbe1de -webkit-gradient(linear,left top,left bottom,from(#fce6e3),to(#fbe1de)) repeat-x;background:#fbe1de -webkit-linear-gradient(top,#fce6e3,#fbe1de) repeat-x;background:#fbe1de -o-linear-gradient(top,#fce6e3,#fbe1de) repeat-x;background:#fbe1de linear-gradient(180deg,#fce6e3,#fbe1de) repeat-x;border-color:#fad5d1}.alert-warning hr{border-top-color:#f8c0ba}.alert-warning .alert-link{color:#562721}.alert-danger{color:#7b372f;background:#fbe1de -webkit-gradient(linear,left top,left bottom,from(#fce6e3),to(#fbe1de)) repeat-x;background:#fbe1de -webkit-linear-gradient(top,#fce6e3,#fbe1de) repeat-x;background:#fbe1de -o-linear-gradient(top,#fce6e3,#fbe1de) repeat-x;background:#fbe1de linear-gradient(180deg,#fce6e3,#fbe1de) repeat-x;border-color:#fad5d1}.alert-danger hr{border-top-color:#f8c0ba}.alert-danger .alert-link{color:#562721}.alert-light{color:#6e7e7c;background:#f6fdfc -webkit-gradient(linear,left top,left bottom,from(#f7fdfc),to(#f6fdfc)) repeat-x;background:#f6fdfc -webkit-linear-gradient(top,#f7fdfc,#f6fdfc) repeat-x;background:#f6fdfc -o-linear-gradient(top,#f7fdfc,#f6fdfc) repeat-x;background:#f6fdfc linear-gradient(180deg,#f7fdfc,#f6fdfc) repeat-x;border-color:#f3fcfa}.alert-light hr{border-top-color:#dff7f2}.alert-light .alert-link{color:#566361}.alert-dark{color:#212128;background:#d9d9db -webkit-gradient(linear,left top,left bottom,from(#dfdfe0),to(#d9d9db)) repeat-x;background:#d9d9db -webkit-linear-gradient(top,#dfdfe0,#d9d9db) repeat-x;background:#d9d9db -o-linear-gradient(top,#dfdfe0,#d9d9db) repeat-x;background:#d9d9db linear-gradient(180deg,#dfdfe0,#d9d9db) repeat-x;border-color:#cac9cd}.alert-dark hr{border-top-color:#bdbcc1}.alert-dark .alert-link{color:#0a0a0c}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#eee;border-radius:.25rem;-webkit-box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1);box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1)}.progress-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#30638e;-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{-webkit-transition:none;-o-transition:none;transition:none}}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:1rem 1rem;background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;-o-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#222;background-color:#eee}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:hover,.list-group-item:focus{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#888;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#30638e;border-color:#30638e}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#19334a;background-color:#c5d3df}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#19334a;background-color:#b5c7d6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#19334a;border-color:#19334a}.list-group-item-secondary{color:#855619;background-color:#ffe6c5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#855619;background-color:#ffdbac}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#855619;border-color:#855619}.list-group-item-success{color:#1d3b85;background-color:#c7d8ff}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#1d3b85;background-color:#aec6ff}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#1d3b85;border-color:#1d3b85}.list-group-item-info{color:#647473;background-color:#edf6f6}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#647473;background-color:#dceeee}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#647473;border-color:#647473}.list-group-item-warning{color:#7b372f;background-color:#fad5d1}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#7b372f;background-color:#f8c0ba}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#7b372f;border-color:#7b372f}.list-group-item-danger{color:#7b372f;background-color:#fad5d1}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#7b372f;background-color:#f8c0ba}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#7b372f;border-color:#7b372f}.list-group-item-light{color:#6e7e7c;background-color:#f3fcfa}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#6e7e7c;background-color:#dff7f2}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#6e7e7c;border-color:#6e7e7c}.list-group-item-dark{color:#212128;background-color:#cac9cd}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#212128;background-color:#bdbcc1}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#212128;border-color:#212128}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out,-o-transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{-webkit-transition:none;-o-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;min-height:-webkit-calc(100% - (0.5rem * 2));min-height:calc(100% - (0.5rem * 2))}.modal-dialog-centered::before{display:block;height:-webkit-calc(100vh - (0.5rem * 2));height:calc(100vh - (0.5rem * 2));content:""}.modal-content{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;-webkit-box-shadow:0 .25rem .5rem rgba(0,0,0,.5);box-shadow:0 .25rem .5rem rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #eee;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #eee}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media(min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:-webkit-calc(100% - (1.75rem * 2));min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:-webkit-calc(100vh - (1.75rem * 2));height:calc(100vh - (1.75rem * 2))}.modal-content{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.5);box-shadow:0 .5rem 1rem rgba(0,0,0,.5)}.modal-sm{max-width:300px}}@media(min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:open sans,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^=top]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^=top] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^=top] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^=right]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^=right] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^=right] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^=bottom]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^=bottom] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^=bottom] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^=left]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^=left] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^=left] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:open sans,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;-webkit-box-shadow:0 .25rem .5rem rgba(0,0,0,.2);box-shadow:0 .25rem .5rem rgba(0,0,0,.2)}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^=top]{margin-bottom:.5rem}.bs-popover-top .arrow,.bs-popover-auto[x-placement^=top] .arrow{bottom:-webkit-calc((0.5rem + 1px) * -1);bottom:calc((0.5rem + 1px) * -1)}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::after{border-width:.5rem .5rem 0}.bs-popover-top .arrow::before,.bs-popover-auto[x-placement^=top] .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-top .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-right,.bs-popover-auto[x-placement^=right]{margin-left:.5rem}.bs-popover-right .arrow,.bs-popover-auto[x-placement^=right] .arrow{left:-webkit-calc((0.5rem + 1px) * -1);left:calc((0.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::after{border-width:.5rem .5rem .5rem 0}.bs-popover-right .arrow::before,.bs-popover-auto[x-placement^=right] .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-right .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::after{left:1px;border-right-color:#fff}.bs-popover-bottom,.bs-popover-auto[x-placement^=bottom]{margin-top:.5rem}.bs-popover-bottom .arrow,.bs-popover-auto[x-placement^=bottom] .arrow{top:-webkit-calc((0.5rem + 1px) * -1);top:calc((0.5rem + 1px) * -1)}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::after{border-width:0 .5rem .5rem}.bs-popover-bottom .arrow::before,.bs-popover-auto[x-placement^=bottom] .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-bottom .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-left,.bs-popover-auto[x-placement^=left]{margin-right:.5rem}.bs-popover-left .arrow,.bs-popover-auto[x-placement^=left] .arrow{right:-webkit-calc((0.5rem + 1px) * -1);right:calc((0.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::after{border-width:.5rem 0 .5rem .5rem}.bs-popover-left .arrow::before,.bs-popover-auto[x-placement^=left] .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-left .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:-webkit-calc(0.3rem - 1px);border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:-webkit-calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#222}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block;-webkit-transition:-webkit-transform .6s ease;transition:-webkit-transform .6s ease;-o-transition:-o-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease,-o-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item.active,.carousel-item-next,.carousel-item-prev{-webkit-transition:none;-o-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}@supports((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-item-next,.active.carousel-item-right{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);-o-transform:translateX(100%);transform:translateX(100%)}@supports((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next,.active.carousel-item-right{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.carousel-item-prev,.active.carousel-item-left{-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);-o-transform:translateX(-100%);transform:translateX(-100%)}@supports((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-prev,.active.carousel-item-left{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;-webkit-transition-duration:.6s;-o-transition-duration:.6s;transition-duration:.6s;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active,.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev{-webkit-transform:translateX(0);-ms-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}@supports((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active,.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0;background:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,0.25)),to(rgba(0,0,0,0.001)));background:-webkit-linear-gradient(left,rgba(0,0,0,0.25),rgba(0,0,0,0.001));background:-o-linear-gradient(left,rgba(0,0,0,0.25),rgba(0,0,0,0.001));background:linear-gradient(90deg,rgba(0,0,0,0.25),rgba(0,0,0,0.001))}.carousel-control-next{right:0;background:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,0.25)),to(rgba(0,0,0,0.001)));background:-webkit-linear-gradient(right,rgba(0,0,0,0.25),rgba(0,0,0,0.001));background:-o-linear-gradient(right,rgba(0,0,0,0.25),rgba(0,0,0,0.001));background:linear-gradient(270deg,rgba(0,0,0,0.25),rgba(0,0,0,0.001))}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat 50%;-webkit-background-size:100% 100%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiNmZmYiIHZpZXdCb3g9IjAgMCA4IDgiPjxwYXRoIGQ9Ik01LjI1LjBsLTQgNCA0IDQgMS41LTEuNUw0LjI1IDRsMi41LTIuNUw1LjI1LjB6Ii8+PC9zdmc+)}.carousel-control-next-icon{background-image:url(data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9IiNmZmYiIHZpZXdCb3g9IjAgMCA4IDgiPjxwYXRoIGQ9Ik0yLjc1LjBsLTEuNSAxLjVMMy43NSA0bC0yLjUgMi41TDIuNzUgOGw0LTQtNC00eiIvPjwvc3ZnPg==)}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-webkit-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#30638e!important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#234868!important}.bg-secondary{background-color:#ffa630!important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#fc9000!important}.bg-success{background-color:#3772ff!important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#044eff!important}.bg-info{background-color:#c0e0de!important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#9ecfcc!important}.bg-warning{background-color:#ed6a5a!important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#e8402c!important}.bg-danger{background-color:#ed6a5a!important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#e8402c!important}.bg-light{background-color:#d3f3ee!important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#abe8df!important}.bg-dark{background-color:#403f4c!important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#292830!important}.bg-gradient-primary{background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x!important;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x!important}.bg-gradient-secondary{background:#FFA630 -webkit-gradient(linear,left top,left bottom,from(#ffb34f),to(#FFA630)) repeat-x!important;background:#ffa630 -webkit-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 -o-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 linear-gradient(180deg,#ffb34f,#FFA630) repeat-x!important}.bg-gradient-success{background:#3772FF -webkit-gradient(linear,left top,left bottom,from(#5587ff),to(#3772FF)) repeat-x!important;background:#3772ff -webkit-linear-gradient(top,#5587ff,#3772FF) repeat-x!important;background:#3772ff -o-linear-gradient(top,#5587ff,#3772FF) repeat-x!important;background:#3772ff linear-gradient(180deg,#5587ff,#3772FF) repeat-x!important}.bg-gradient-info{background:#C0E0DE -webkit-gradient(linear,left top,left bottom,from(#c9e5e3),to(#C0E0DE)) repeat-x!important;background:#c0e0de -webkit-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de -o-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de linear-gradient(180deg,#c9e5e3,#C0E0DE) repeat-x!important}.bg-gradient-warning{background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x!important;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x!important}.bg-gradient-danger{background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x!important;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x!important}.bg-gradient-light{background:#D3F3EE -webkit-gradient(linear,left top,left bottom,from(#daf5f1),to(#D3F3EE)) repeat-x!important;background:#d3f3ee -webkit-linear-gradient(top,#daf5f1,#D3F3EE) repeat-x!important;background:#d3f3ee -o-linear-gradient(top,#daf5f1,#D3F3EE) repeat-x!important;background:#d3f3ee linear-gradient(180deg,#daf5f1,#D3F3EE) repeat-x!important}.bg-gradient-dark{background:#403F4C -webkit-gradient(linear,left top,left bottom,from(#5d5c67),to(#403F4C)) repeat-x!important;background:#403f4c -webkit-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c -o-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c linear-gradient(180deg,#5d5c67,#403F4C) repeat-x!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#30638e!important}.border-secondary{border-color:#ffa630!important}.border-success{border-color:#3772ff!important}.border-info{border-color:#c0e0de!important}.border-warning{border-color:#ed6a5a!important}.border-danger{border-color:#ed6a5a!important}.border-light{border-color:#d3f3ee!important}.border-dark{border-color:#403f4c!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media(min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media(min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media(min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media(min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-webkit-flex!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-webkit-inline-flex!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714286%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-webkit-box-flex:1!important;-webkit-flex:1 1 auto!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-webkit-box-flex:0!important;-webkit-flex-grow:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-webkit-box-flex:1!important;-webkit-flex-grow:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-webkit-flex-shrink:0!important;-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-webkit-flex-shrink:1!important;-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;align-self:stretch!important}@media(min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-webkit-box-flex:1!important;-webkit-flex:1 1 auto!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-webkit-box-flex:0!important;-webkit-flex-grow:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-webkit-box-flex:1!important;-webkit-flex-grow:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-webkit-flex-shrink:0!important;-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-webkit-flex-shrink:1!important;-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media(min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-webkit-box-flex:1!important;-webkit-flex:1 1 auto!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-webkit-box-flex:0!important;-webkit-flex-grow:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-webkit-box-flex:1!important;-webkit-flex-grow:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-webkit-flex-shrink:0!important;-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-webkit-flex-shrink:1!important;-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media(min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-webkit-box-flex:1!important;-webkit-flex:1 1 auto!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-webkit-box-flex:0!important;-webkit-flex-grow:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-webkit-box-flex:1!important;-webkit-flex-grow:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-webkit-flex-shrink:0!important;-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-webkit-flex-shrink:1!important;-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media(min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-webkit-box-direction:normal!important;-webkit-flex-direction:row!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-webkit-flex-direction:column!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:row-reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-webkit-flex-direction:column-reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-webkit-flex-wrap:wrap!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-webkit-flex-wrap:nowrap!important;-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-webkit-flex-wrap:wrap-reverse!important;-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-webkit-box-flex:1!important;-webkit-flex:1 1 auto!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-webkit-box-flex:0!important;-webkit-flex-grow:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-webkit-box-flex:1!important;-webkit-flex-grow:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-webkit-flex-shrink:0!important;-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-webkit-flex-shrink:1!important;-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-webkit-box-pack:start!important;-webkit-justify-content:flex-start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-webkit-justify-content:flex-end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-webkit-justify-content:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-webkit-justify-content:space-between!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-webkit-justify-content:space-around!important;-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-webkit-align-items:flex-start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-webkit-align-items:flex-end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-webkit-align-items:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-webkit-align-items:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-webkit-align-items:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-webkit-align-content:flex-start!important;-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-webkit-align-content:flex-end!important;-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-webkit-align-content:center!important;-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-webkit-align-content:space-between!important;-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-webkit-align-content:space-around!important;-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-webkit-align-content:stretch!important;-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-webkit-align-self:auto!important;-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-webkit-align-self:flex-start!important;-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-webkit-align-self:flex-end!important;-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-webkit-align-self:center!important;-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-webkit-align-self:baseline!important;-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-webkit-align-self:stretch!important;-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media(min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media(min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media(min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media(min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{-webkit-box-shadow:none!important;box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media(min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media(min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media(min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media(min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media(min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media(min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media(min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media(min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#30638e!important}a.text-primary:hover,a.text-primary:focus{color:#234868!important}.text-secondary{color:#ffa630!important}a.text-secondary:hover,a.text-secondary:focus{color:#fc9000!important}.text-success{color:#3772ff!important}a.text-success:hover,a.text-success:focus{color:#044eff!important}.text-info{color:#c0e0de!important}a.text-info:hover,a.text-info:focus{color:#9ecfcc!important}.text-warning{color:#ed6a5a!important}a.text-warning:hover,a.text-warning:focus{color:#e8402c!important}.text-danger{color:#ed6a5a!important}a.text-danger:hover,a.text-danger:focus{color:#e8402c!important}.text-light{color:#d3f3ee!important}a.text-light:hover,a.text-light:focus{color:#abe8df!important}.text-dark{color:#403f4c!important}a.text-dark:hover,a.text-dark:focus{color:#292830!important}.text-body{color:#222!important}.text-muted{color:#888!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,*::before,*::after{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}pre,blockquote{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table,.td-box .row.section>table,.td-content>table{border-collapse:collapse!important}.table td,.td-box .row.section>table td,.td-content>table td,.table th,.td-box .row.section>table th,.td-content>table th{background-color:#fff!important}.table-bordered th,.table-bordered td{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#dee2e6}.table .thead-dark th,.td-box .row.section>table .thead-dark th,.td-content>table .thead-dark th{color:inherit;border-color:#dee2e6}}/*!* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com +* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/.fa,.fas,.far,.fal,.fad,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fas.fa-pull-left,.far.fa-pull-left,.fal.fa-pull-left,.fab.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fas.fa-pull-right,.far.fa-pull-right,.fal.fa-pull-right,.fab.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;-o-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);-o-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes fa-spin{0%{-o-transform:rotate(0deg);transform:rotate(0deg)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(-1,-1);-ms-transform:scale(-1,-1);-o-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-flip-both{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}/*!* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com +* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/@font-face{font-family:'font awesome 5 free';font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:'font awesome 5 free';font-weight:900}/*!* Font Awesome Free 5.10.1 by @fontawesome - https://fontawesome.com +* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)*/@font-face{font-family:'font awesome 5 brands';font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:'font awesome 5 brands'}.td-border-top{border:none;border-top:1px solid #eee}.td-border-none{border:none}.td-block-padding,.td-default main section{padding-top:4rem;padding-bottom:4rem}@media(min-width:768px){.td-block-padding,.td-default main section{padding-top:5rem;padding-bottom:5rem}}.td-overlay{position:relative}.td-overlay::after{content:"";position:absolute;top:0;right:0;bottom:0;left:0}.td-overlay--dark::after{background-color:rgba(64,63,76,.3)}.td-overlay--light::after{background-color:rgba(211,243,238,.3)}.td-overlay__inner{position:relative;z-index:1}@media(min-width:992px){.td-max-width-on-larger-screens,.td-content>pre,.td-content>.highlight,.td-content>.lead,.td-content>h1,.td-content>h2,.td-content>ul,.td-content>ol,.td-content>p,.td-content>blockquote,.td-content>dl dd,.td-content .footnotes,.td-content>.alert{max-width:80%}}.td-box--height-min{min-height:300px}.td-box--height-med{min-height:400px}.td-box--height-max{min-height:500px}.td-box--height-full{min-height:100vh}@media(min-width:768px){.td-box--height-min{min-height:450px}.td-box--height-med{min-height:500px}.td-box--height-max{min-height:650px}}.td-box .row.section{padding-left:5rem;padding-right:5rem;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.td-box .row{padding-left:5rem;padding-right:5rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.td-box.linkbox{padding:5rem}.td-box--0{color:#fff;background-color:#403f4c}.td-box--0 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#403f4c transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--0 p>a{color:#d9e5f8}.td-box--10.td-box--gradient{background:#403F4C -webkit-gradient(linear,left top,left bottom,from(#5d5c67),to(#403F4C)) repeat-x!important;background:#403f4c -webkit-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c -o-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c linear-gradient(180deg,#5d5c67,#403F4C) repeat-x!important}.td-box--1{color:#fff;background-color:#30638e}.td-box--1 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#30638e transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--1 p>a{color:#cadcf5}.td-box--11.td-box--gradient{background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x!important;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x!important}.td-box--2{color:#fff;background-color:#ffa630}.td-box--2 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ffa630 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--2 p>a{color:#abc7f0}.td-box--12.td-box--gradient{background:#FFA630 -webkit-gradient(linear,left top,left bottom,from(#ffb34f),to(#FFA630)) repeat-x!important;background:#ffa630 -webkit-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 -o-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 linear-gradient(180deg,#ffb34f,#FFA630) repeat-x!important}.td-box--3{color:#222;background-color:#c0e0de}.td-box--3 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#c0e0de transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--3 p>a{color:#638ac1}.td-box--13.td-box--gradient{background:#C0E0DE -webkit-gradient(linear,left top,left bottom,from(#c9e5e3),to(#C0E0DE)) repeat-x!important;background:#c0e0de -webkit-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de -o-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de linear-gradient(180deg,#c9e5e3,#C0E0DE) repeat-x!important}.td-box--4{color:#222;background-color:#fff}.td-box--4 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#fff transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--4 p>a{color:#72a1e5}.td-box--14.td-box--gradient{background:white -webkit-gradient(linear,left top,left bottom,from(white),to(white)) repeat-x!important;background:#fff -webkit-linear-gradient(top,white,white) repeat-x!important;background:#fff -o-linear-gradient(top,white,white) repeat-x!important;background:#fff linear-gradient(180deg,white,white) repeat-x!important}.td-box--5{color:#fff;background-color:#888}.td-box--5 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#888 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--5 p>a{color:#b4cdf1}.td-box--15.td-box--gradient{background:#888 -webkit-gradient(linear,left top,left bottom,from(#9a9a9a),to(#888)) repeat-x!important;background:#888 -webkit-linear-gradient(top,#9a9a9a,#888) repeat-x!important;background:#888 -o-linear-gradient(top,#9a9a9a,#888) repeat-x!important;background:#888 linear-gradient(180deg,#9a9a9a,#888) repeat-x!important}.td-box--6{color:#fff;background-color:#3772ff}.td-box--6 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#3772ff transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--6 p>a{color:#a9c6ef}.td-box--16.td-box--gradient{background:#3772FF -webkit-gradient(linear,left top,left bottom,from(#5587ff),to(#3772FF)) repeat-x!important;background:#3772ff -webkit-linear-gradient(top,#5587ff,#3772FF) repeat-x!important;background:#3772ff -o-linear-gradient(top,#5587ff,#3772FF) repeat-x!important;background:#3772ff linear-gradient(180deg,#5587ff,#3772FF) repeat-x!important}.td-box--7{color:#fff;background-color:#ed6a5a}.td-box--7 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ed6a5a transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--7 p>a{color:#a5c3ee}.td-box--17.td-box--gradient{background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x!important;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x!important}.td-box--8{color:#fff;background-color:#403f4c}.td-box--8 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#403f4c transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--8 p>a{color:#d9e5f8}.td-box--18.td-box--gradient{background:#403F4C -webkit-gradient(linear,left top,left bottom,from(#5d5c67),to(#403F4C)) repeat-x!important;background:#403f4c -webkit-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c -o-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c linear-gradient(180deg,#5d5c67,#403F4C) repeat-x!important}.td-box--9{color:#fff;background-color:#ed6a5a}.td-box--9 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ed6a5a transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--9 p>a{color:#a5c3ee}.td-box--19.td-box--gradient{background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x!important;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x!important}.td-box--10{color:#fff;background-color:#30638e}.td-box--10 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#30638e transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--10 p>a{color:#cadcf5}.td-box--110.td-box--gradient{background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x!important;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x!important}.td-box--11{color:#fff;background-color:#ffa630}.td-box--11 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ffa630 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--11 p>a{color:#abc7f0}.td-box--111.td-box--gradient{background:#FFA630 -webkit-gradient(linear,left top,left bottom,from(#ffb34f),to(#FFA630)) repeat-x!important;background:#ffa630 -webkit-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 -o-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 linear-gradient(180deg,#ffb34f,#FFA630) repeat-x!important}.td-box--12{color:#222;background-color:#fff}.td-box--12 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#fff transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--12 p>a{color:#72a1e5}.td-box--112.td-box--gradient{background:white -webkit-gradient(linear,left top,left bottom,from(white),to(white)) repeat-x!important;background:#fff -webkit-linear-gradient(top,white,white) repeat-x!important;background:#fff -o-linear-gradient(top,white,white) repeat-x!important;background:#fff linear-gradient(180deg,white,white) repeat-x!important}.td-box--13{color:#222;background-color:#c0e0de}.td-box--13 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#c0e0de transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--13 p>a{color:#638ac1}.td-box--113.td-box--gradient{background:#C0E0DE -webkit-gradient(linear,left top,left bottom,from(#c9e5e3),to(#C0E0DE)) repeat-x!important;background:#c0e0de -webkit-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de -o-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de linear-gradient(180deg,#c9e5e3,#C0E0DE) repeat-x!important}.td-box--cerulean-blue{color:#fff;background-color:#017cee}.td-box--cerulean-blue .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#017cee transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--cerulean-blue p>a{color:#bdd3f3}.td-box--1cerulean-blue.td-box--gradient{background:#017cee -webkit-gradient(linear,left top,left bottom,from(#2790f1),to(#017cee)) repeat-x!important;background:#017cee -webkit-linear-gradient(top,#2790f1,#017cee) repeat-x!important;background:#017cee -o-linear-gradient(top,#2790f1,#017cee) repeat-x!important;background:#017cee linear-gradient(180deg,#2790f1,#017cee) repeat-x!important}.td-box--shamrock{color:#fff;background-color:#00ad46}.td-box--shamrock .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#00ad46 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--shamrock p>a{color:#cfdff6}.td-box--1shamrock.td-box--gradient{background:#00ad46 -webkit-gradient(linear,left top,left bottom,from(#26b962),to(#00ad46)) repeat-x!important;background:#00ad46 -webkit-linear-gradient(top,#26b962,#00ad46) repeat-x!important;background:#00ad46 -o-linear-gradient(top,#26b962,#00ad46) repeat-x!important;background:#00ad46 linear-gradient(180deg,#26b962,#00ad46) repeat-x!important}.td-box--bright-sky-blue{color:#fff;background-color:#0cb6ff}.td-box--bright-sky-blue .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#0cb6ff transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--bright-sky-blue p>a{color:#b5cef1}.td-box--1bright-sky-blue.td-box--gradient{background:#0cb6ff -webkit-gradient(linear,left top,left bottom,from(#30c1ff),to(#0cb6ff)) repeat-x!important;background:#0cb6ff -webkit-linear-gradient(top,#30c1ff,#0cb6ff) repeat-x!important;background:#0cb6ff -o-linear-gradient(top,#30c1ff,#0cb6ff) repeat-x!important;background:#0cb6ff linear-gradient(180deg,#30c1ff,#0cb6ff) repeat-x!important}.td-box--melon{color:#fff;background-color:#ff7557}.td-box--melon .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ff7557 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--melon p>a{color:#a0c0ee}.td-box--1melon.td-box--gradient{background:#ff7557 -webkit-gradient(linear,left top,left bottom,from(#ff8a70),to(#ff7557)) repeat-x!important;background:#ff7557 -webkit-linear-gradient(top,#ff8a70,#ff7557) repeat-x!important;background:#ff7557 -o-linear-gradient(top,#ff8a70,#ff7557) repeat-x!important;background:#ff7557 linear-gradient(180deg,#ff8a70,#ff7557) repeat-x!important}.td-box--vermillion{color:#fff;background-color:#e43921}.td-box--vermillion .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#e43921 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--vermillion p>a{color:#b7cff2}.td-box--1vermillion.td-box--gradient{background:#e43921 -webkit-gradient(linear,left top,left bottom,from(#e85742),to(#e43921)) repeat-x!important;background:#e43921 -webkit-linear-gradient(top,#e85742,#e43921) repeat-x!important;background:#e43921 -o-linear-gradient(top,#e85742,#e43921) repeat-x!important;background:#e43921 linear-gradient(180deg,#e85742,#e43921) repeat-x!important}.td-box--aqua{color:#fff;background-color:#11e1ee}.td-box--aqua .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#11e1ee transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--aqua p>a{color:#b9d0f2}.td-box--1aqua.td-box--gradient{background:#11e1ee -webkit-gradient(linear,left top,left bottom,from(#35e6f1),to(#11e1ee)) repeat-x!important;background:#11e1ee -webkit-linear-gradient(top,#35e6f1,#11e1ee) repeat-x!important;background:#11e1ee -o-linear-gradient(top,#35e6f1,#11e1ee) repeat-x!important;background:#11e1ee linear-gradient(180deg,#35e6f1,#11e1ee) repeat-x!important}.td-box--shamrock-green{color:#fff;background-color:#04d659}.td-box--shamrock-green .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#04d659 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--shamrock-green p>a{color:#c3d7f4}.td-box--1shamrock-green.td-box--gradient{background:#04d659 -webkit-gradient(linear,left top,left bottom,from(#2adc72),to(#04d659)) repeat-x!important;background:#04d659 -webkit-linear-gradient(top,#2adc72,#04d659) repeat-x!important;background:#04d659 -o-linear-gradient(top,#2adc72,#04d659) repeat-x!important;background:#04d659 linear-gradient(180deg,#2adc72,#04d659) repeat-x!important}.td-box--aqua-blue{color:#fff;background-color:#00c7d4}.td-box--aqua-blue .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#00c7d4 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--aqua-blue p>a{color:#c4d8f4}.td-box--1aqua-blue.td-box--gradient{background:#00c7d4 -webkit-gradient(linear,left top,left bottom,from(#26cfda),to(#00c7d4)) repeat-x!important;background:#00c7d4 -webkit-linear-gradient(top,#26cfda,#00c7d4) repeat-x!important;background:#00c7d4 -o-linear-gradient(top,#26cfda,#00c7d4) repeat-x!important;background:#00c7d4 linear-gradient(180deg,#26cfda,#00c7d4) repeat-x!important}.td-box--white{color:#222;background-color:#fff}.td-box--white .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#fff transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--white p>a{color:#72a1e5}.td-box--1white.td-box--gradient{background:#ffffff -webkit-gradient(linear,left top,left bottom,from(white),to(#ffffff)) repeat-x!important;background:#fff -webkit-linear-gradient(top,white,#ffffff) repeat-x!important;background:#fff -o-linear-gradient(top,white,#ffffff) repeat-x!important;background:#fff linear-gradient(180deg,white,#ffffff) repeat-x!important}.td-box--brownish-grey{color:#fff;background-color:#707070}.td-box--brownish-grey .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#707070 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--brownish-grey p>a{color:#c1d6f4}.td-box--1brownish-grey.td-box--gradient{background:#707070 -webkit-gradient(linear,left top,left bottom,from(#858585),to(#707070)) repeat-x!important;background:#707070 -webkit-linear-gradient(top,#858585,#707070) repeat-x!important;background:#707070 -o-linear-gradient(top,#858585,#707070) repeat-x!important;background:#707070 linear-gradient(180deg,#858585,#707070) repeat-x!important}.td-box--very-light-pink{color:#222;background-color:#cbcbcb}.td-box--very-light-pink .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#cbcbcb transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--very-light-pink p>a{color:#6287bd}.td-box--1very-light-pink.td-box--gradient{background:#cbcbcb -webkit-gradient(linear,left top,left bottom,from(lightgray),to(#cbcbcb)) repeat-x!important;background:#cbcbcb -webkit-linear-gradient(top,lightgray,#cbcbcb) repeat-x!important;background:#cbcbcb -o-linear-gradient(top,lightgray,#cbcbcb) repeat-x!important;background:#cbcbcb linear-gradient(180deg,lightgray,#cbcbcb) repeat-x!important}.td-box--slate-grey{color:#fff;background-color:#636365}.td-box--slate-grey .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#636365 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--slate-grey p>a{color:#c8daf5}.td-box--1slate-grey.td-box--gradient{background:#636365 -webkit-gradient(linear,left top,left bottom,from(#7a7a7c),to(#636365)) repeat-x!important;background:#636365 -webkit-linear-gradient(top,#7a7a7c,#636365) repeat-x!important;background:#636365 -o-linear-gradient(top,#7a7a7c,#636365) repeat-x!important;background:#636365 linear-gradient(180deg,#7a7a7c,#636365) repeat-x!important}.td-box--greyish-brown{color:#fff;background-color:#51504f}.td-box--greyish-brown .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#51504f transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--greyish-brown p>a{color:#d3e2f7}.td-box--1greyish-brown.td-box--gradient{background:#51504f -webkit-gradient(linear,left top,left bottom,from(#6b6a69),to(#51504f)) repeat-x!important;background:#51504f -webkit-linear-gradient(top,#6b6a69,#51504f) repeat-x!important;background:#51504f -o-linear-gradient(top,#6b6a69,#51504f) repeat-x!important;background:#51504f linear-gradient(180deg,#6b6a69,#51504f) repeat-x!important}.td-box--primary{color:#fff;background-color:#30638e}.td-box--primary .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#30638e transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--primary p>a{color:#cadcf5}.td-box--1primary.td-box--gradient{background:#30638E -webkit-gradient(linear,left top,left bottom,from(#4f7a9f),to(#30638E)) repeat-x!important;background:#30638e -webkit-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e -o-linear-gradient(top,#4f7a9f,#30638E) repeat-x!important;background:#30638e linear-gradient(180deg,#4f7a9f,#30638E) repeat-x!important}.td-box--secondary{color:#fff;background-color:#ffa630}.td-box--secondary .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ffa630 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--secondary p>a{color:#abc7f0}.td-box--1secondary.td-box--gradient{background:#FFA630 -webkit-gradient(linear,left top,left bottom,from(#ffb34f),to(#FFA630)) repeat-x!important;background:#ffa630 -webkit-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 -o-linear-gradient(top,#ffb34f,#FFA630) repeat-x!important;background:#ffa630 linear-gradient(180deg,#ffb34f,#FFA630) repeat-x!important}.td-box--success{color:#fff;background-color:#3772ff}.td-box--success .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#3772ff transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--success p>a{color:#a9c6ef}.td-box--1success.td-box--gradient{background:#3772FF -webkit-gradient(linear,left top,left bottom,from(#5587ff),to(#3772FF)) repeat-x!important;background:#3772ff -webkit-linear-gradient(top,#5587ff,#3772FF) repeat-x!important;background:#3772ff -o-linear-gradient(top,#5587ff,#3772FF) repeat-x!important;background:#3772ff linear-gradient(180deg,#5587ff,#3772FF) repeat-x!important}.td-box--info{color:#222;background-color:#c0e0de}.td-box--info .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#c0e0de transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--info p>a{color:#638ac1}.td-box--1info.td-box--gradient{background:#C0E0DE -webkit-gradient(linear,left top,left bottom,from(#c9e5e3),to(#C0E0DE)) repeat-x!important;background:#c0e0de -webkit-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de -o-linear-gradient(top,#c9e5e3,#C0E0DE) repeat-x!important;background:#c0e0de linear-gradient(180deg,#c9e5e3,#C0E0DE) repeat-x!important}.td-box--warning{color:#fff;background-color:#ed6a5a}.td-box--warning .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ed6a5a transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--warning p>a{color:#a5c3ee}.td-box--1warning.td-box--gradient{background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x!important;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x!important}.td-box--danger{color:#fff;background-color:#ed6a5a}.td-box--danger .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ed6a5a transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--danger p>a{color:#a5c3ee}.td-box--1danger.td-box--gradient{background:#ED6A5A -webkit-gradient(linear,left top,left bottom,from(#f08073),to(#ED6A5A)) repeat-x!important;background:#ed6a5a -webkit-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a -o-linear-gradient(top,#f08073,#ED6A5A) repeat-x!important;background:#ed6a5a linear-gradient(180deg,#f08073,#ED6A5A) repeat-x!important}.td-box--light{color:#222;background-color:#d3f3ee}.td-box--light .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#d3f3ee transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--light p>a{color:#6993d0}.td-box--1light.td-box--gradient{background:#D3F3EE -webkit-gradient(linear,left top,left bottom,from(#daf5f1),to(#D3F3EE)) repeat-x!important;background:#d3f3ee -webkit-linear-gradient(top,#daf5f1,#D3F3EE) repeat-x!important;background:#d3f3ee -o-linear-gradient(top,#daf5f1,#D3F3EE) repeat-x!important;background:#d3f3ee linear-gradient(180deg,#daf5f1,#D3F3EE) repeat-x!important}.td-box--dark{color:#fff;background-color:#403f4c}.td-box--dark .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#403f4c transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--dark p>a{color:#d9e5f8}.td-box--1dark.td-box--gradient{background:#403F4C -webkit-gradient(linear,left top,left bottom,from(#5d5c67),to(#403F4C)) repeat-x!important;background:#403f4c -webkit-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c -o-linear-gradient(top,#5d5c67,#403F4C) repeat-x!important;background:#403f4c linear-gradient(180deg,#5d5c67,#403F4C) repeat-x!important}.td-box--100{color:#222;background-color:#f8f9fa}.td-box--100 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#f8f9fa transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--100 p>a{color:#709ee0}.td-box--1100.td-box--gradient{background:#f8f9fa -webkit-gradient(linear,left top,left bottom,from(#f9fafb),to(#f8f9fa)) repeat-x!important;background:#f8f9fa -webkit-linear-gradient(top,#f9fafb,#f8f9fa) repeat-x!important;background:#f8f9fa -o-linear-gradient(top,#f9fafb,#f8f9fa) repeat-x!important;background:#f8f9fa linear-gradient(180deg,#f9fafb,#f8f9fa) repeat-x!important}.td-box--200{color:#222;background-color:#eee}.td-box--200 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#eee transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--200 p>a{color:#6d99d8}.td-box--1200.td-box--gradient{background:#eee -webkit-gradient(linear,left top,left bottom,from(#f1f1f1),to(#eee)) repeat-x!important;background:#eee -webkit-linear-gradient(top,#f1f1f1,#eee) repeat-x!important;background:#eee -o-linear-gradient(top,#f1f1f1,#eee) repeat-x!important;background:#eee linear-gradient(180deg,#f1f1f1,#eee) repeat-x!important}.td-box--300{color:#222;background-color:#dee2e6}.td-box--300 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#dee2e6 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--300 p>a{color:#6993cf}.td-box--1300.td-box--gradient{background:#dee2e6 -webkit-gradient(linear,left top,left bottom,from(#e3e6ea),to(#dee2e6)) repeat-x!important;background:#dee2e6 -webkit-linear-gradient(top,#e3e6ea,#dee2e6) repeat-x!important;background:#dee2e6 -o-linear-gradient(top,#e3e6ea,#dee2e6) repeat-x!important;background:#dee2e6 linear-gradient(180deg,#e3e6ea,#dee2e6) repeat-x!important}.td-box--400{color:#222;background-color:#ccc}.td-box--400 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#ccc transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--400 p>a{color:#6288be}.td-box--1400.td-box--gradient{background:#ccc -webkit-gradient(linear,left top,left bottom,from(#d4d4d4),to(#ccc)) repeat-x!important;background:#ccc -webkit-linear-gradient(top,#d4d4d4,#ccc) repeat-x!important;background:#ccc -o-linear-gradient(top,#d4d4d4,#ccc) repeat-x!important;background:#ccc linear-gradient(180deg,#d4d4d4,#ccc) repeat-x!important}.td-box--500{color:#fff;background-color:#adb5bd}.td-box--500 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#adb5bd transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--500 p>a{color:#9bbced}.td-box--1500.td-box--gradient{background:#adb5bd -webkit-gradient(linear,left top,left bottom,from(#b9c0c7),to(#adb5bd)) repeat-x!important;background:#adb5bd -webkit-linear-gradient(top,#b9c0c7,#adb5bd) repeat-x!important;background:#adb5bd -o-linear-gradient(top,#b9c0c7,#adb5bd) repeat-x!important;background:#adb5bd linear-gradient(180deg,#b9c0c7,#adb5bd) repeat-x!important}.td-box--600{color:#fff;background-color:#888}.td-box--600 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#888 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--600 p>a{color:#b4cdf1}.td-box--1600.td-box--gradient{background:#888 -webkit-gradient(linear,left top,left bottom,from(#9a9a9a),to(#888)) repeat-x!important;background:#888 -webkit-linear-gradient(top,#9a9a9a,#888) repeat-x!important;background:#888 -o-linear-gradient(top,#9a9a9a,#888) repeat-x!important;background:#888 linear-gradient(180deg,#9a9a9a,#888) repeat-x!important}.td-box--700{color:#fff;background-color:#495057}.td-box--700 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#495057 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--700 p>a{color:#d3e2f7}.td-box--1700.td-box--gradient{background:#495057 -webkit-gradient(linear,left top,left bottom,from(#646a70),to(#495057)) repeat-x!important;background:#495057 -webkit-linear-gradient(top,#646a70,#495057) repeat-x!important;background:#495057 -o-linear-gradient(top,#646a70,#495057) repeat-x!important;background:#495057 linear-gradient(180deg,#646a70,#495057) repeat-x!important}.td-box--800{color:#fff;background-color:#333}.td-box--800 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#333 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--800 p>a{color:#e3ecfa}.td-box--1800.td-box--gradient{background:#333 -webkit-gradient(linear,left top,left bottom,from(#525252),to(#333)) repeat-x!important;background:#333 -webkit-linear-gradient(top,#525252,#333) repeat-x!important;background:#333 -o-linear-gradient(top,#525252,#333) repeat-x!important;background:#333 linear-gradient(180deg,#525252,#333) repeat-x!important}.td-box--900{color:#fff;background-color:#222}.td-box--900 .td-arrow-down::before{left:50%;margin-left:-30px;bottom:-25px;border-style:solid;border-width:25px 30px 0;border-color:#222 transparent transparent transparent;z-index:3;position:absolute;content:""}.td-box--900 p>a{color:#ecf2fc}.td-box--1900.td-box--gradient{background:#222 -webkit-gradient(linear,left top,left bottom,from(#434343),to(#222)) repeat-x!important;background:#222 -webkit-linear-gradient(top,#434343,#222) repeat-x!important;background:#222 -o-linear-gradient(top,#434343,#222) repeat-x!important;background:#222 linear-gradient(180deg,#434343,#222) repeat-x!important}.td-blog .td-rss-button{position:absolute;top:5.5rem;right:1rem;z-index:22}.td-content .highlight{margin:2rem 0;padding:1rem;background-color:#f8f9fa}.td-content .highlight pre,.td-content .highlight div{background-color:inherit!important}.td-content .highlight pre{margin:0;padding:0}.td-content p code,.td-content li>code,.td-content table code{color:inherit;padding:.2em .4em;margin:0;font-size:85%;word-break:normal;background-color:rgba(0,0,0,.05);border-radius:.25rem}.td-content p code br,.td-content li>code br,.td-content table code br{display:none}.td-content pre{word-wrap:normal;background-color:#f8f9fa;padding:1rem}.td-content pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;border:0}.td-navbar-cover{background:#30638e}@media(min-width:768px){.td-navbar-cover{background:transparent!important}.td-navbar-cover .nav-link{text-shadow:1px 1px 2px #403f4c}}.td-navbar-cover.navbar-bg-onscroll .nav-link{text-shadow:none}.navbar-bg-onscroll{background:#30638e!important;opacity:inherit}.td-navbar{background:#30638e;min-height:4rem;margin:0;z-index:32}@media(min-width:768px){.td-navbar{position:fixed;top:0;width:100%}}.td-navbar .navbar-brand{text-transform:none;text-align:middle}.td-navbar .navbar-brand .nav-link{display:inline-block;margin-right:-30px}.td-navbar .navbar-brand svg{display:inline-block;margin:0 10px;height:30px}.td-navbar .nav-link{text-transform:none;font-weight:700}.td-navbar .td-search-input{border:none}.td-navbar .td-search-input::-webkit-input-placeholder{color:rgba(255,255,255,.75)}.td-navbar .td-search-input:-moz-placeholder{color:rgba(255,255,255,.75)}.td-navbar .td-search-input::-moz-placeholder{color:rgba(255,255,255,.75)}.td-navbar .td-search-input:-ms-input-placeholder{color:rgba(255,255,255,.75)}.td-navbar .dropdown{min-width:100px}@media(max-width:991.98px){.td-navbar{padding-right:.5rem;padding-left:.75rem}.td-navbar .td-navbar-nav-scroll{max-width:100%;height:2.5rem;margin-top:.25rem;overflow:hidden;font-size:.875rem}.td-navbar .td-navbar-nav-scroll .nav-link{padding-right:.25rem;padding-left:0}.td-navbar .td-navbar-nav-scroll .navbar-nav{padding-bottom:2rem;overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch}}.td-sidebar-nav{padding-right:.5rem;margin-right:-15px;margin-left:-15px}@media(min-width:768px){@supports((position:-webkit-sticky) or (position:sticky)){.td-sidebar-nav{max-height:-webkit-calc(100vh - 10rem);max-height:calc(100vh - 10rem);overflow-y:auto}}}@media(min-width:768px){.td-sidebar-nav{display:block!important}}.td-sidebar-nav__section{padding-left:0}.td-sidebar-nav__section li{list-style:none}.td-sidebar-nav__section ul{padding:0;margin:0}@media(min-width:768px){.td-sidebar-nav__section>ul{padding-left:.5rem}}.td-sidebar-nav__section-title{display:block;font-weight:500}.td-sidebar-nav__section-title .active{font-weight:700}.td-sidebar-nav__section-title a{color:#222}.td-sidebar-nav .td-sidebar-link{display:block;padding-bottom:.375rem}.td-sidebar-nav .td-sidebar-link__page{color:#495057;font-weight:300}.td-sidebar-nav a:hover{color:#72a1e5;text-decoration:none}.td-sidebar-nav a.active{font-weight:700}.td-sidebar-nav .dropdown a{color:#495057}.td-sidebar-nav .dropdown .nav-link{padding:0 0 1rem}.td-sidebar{padding-bottom:1rem}@media(min-width:768px){.td-sidebar{padding-top:4rem;background-color:rgba(48,99,142,.03);padding-right:1rem;border-right:1px solid #dee2e6}}.td-sidebar__toggle{line-height:1;color:#222;margin:1rem}.td-sidebar__search{padding:1rem 15px;margin-right:-15px;margin-left:-15px}.td-sidebar__inner{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}@media(min-width:768px){@supports((position:-webkit-sticky) or (position:sticky)){.td-sidebar__inner{position:-webkit-sticky;position:sticky;top:4rem;z-index:10;height:-webkit-calc(100vh - 6rem);height:calc(100vh - 6rem)}}}@media(min-width:1200px){.td-sidebar__inner{-webkit-box-flex:0;-webkit-flex:0 1 320px;-ms-flex:0 1 320px;flex:0 1 320px}}.td-sidebar__inner .td-search-box{width:100%}.td-toc{border-left:1px solid #dee2e6;-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2;padding-top:.75rem;padding-bottom:1.5rem;vertical-align:top}@supports((position:-webkit-sticky) or (position:sticky)){.td-toc{position:-webkit-sticky;position:sticky;top:4rem;height:-webkit-calc(100vh - 10rem);height:calc(100vh - 10rem);overflow-y:auto}}.td-toc a{display:block;font-weight:300;padding-bottom:.25rem}.td-toc li{list-style:none;display:block}.td-toc li li{margin-left:.5rem}.td-toc .td-page-meta a{font-weight:500}.td-toc #TableOfContents a{color:#888}.td-toc #TableOfContents a:hover{color:#72a1e5;text-decoration:none}.td-toc ul{padding-left:0}button{cursor:pointer;border:1px solid;border-radius:5px;padding:9px 29px;-webkit-transition:all ease-out .2s;-o-transition:all ease-out .2s;transition:all ease-out .2s}button:disabled{cursor:not-allowed}button.btn-filled{border-color:#017cee;background-color:#017cee}button.btn-filled:hover{border-color:#0cb6ff;background-color:#0cb6ff}button.btn-with-icon{padding:14px 20px}button.btn-with-icon svg{height:30px;width:auto;padding-right:15px}button.btn-with-icon span{display:inline-block;line-height:30px;vertical-align:middle}button.btn-hollow{background-color:#fff}button.btn-hollow.btn-blue{color:#017cee;border-color:#017cee}button.btn-hollow.btn-blue:disabled{color:#cbcbcb;border-color:#cbcbcb}button.btn-hollow.btn-blue:hover:enabled{color:#fff;background-color:#017cee}button.btn-hollow.btn-brown{border-color:#cbcbcb}button.btn-hollow.btn-brown:hover{background-color:#51504f;border-color:#51504f}button.btn-hollow.btn-brown:hover span{color:#fff}button.btn-hollow.btn-brown:hover svg path{fill:#fff}button.with-box-shadow{-webkit-box-shadow:0 2px 6px 0 rgba(0,0,0,.12);box-shadow:0 2px 6px 0 rgba(0,0,0,.12)}@media(max-width:1280px){button{padding:4px 17px}}.breadcrumb{background:0 0;padding-left:0;padding-top:0}.alert{font-weight:500;background:#fff;color:inherit;border-radius:0}.alert-primary{border-style:solid;border-color:#30638e;border-width:0 0 0 4px}.alert-primary .alert-heading{color:#30638e}.alert-secondary{border-style:solid;border-color:#ffa630;border-width:0 0 0 4px}.alert-secondary .alert-heading{color:#ffa630}.alert-success{border-style:solid;border-color:#3772ff;border-width:0 0 0 4px}.alert-success .alert-heading{color:#3772ff}.alert-info{border-style:solid;border-color:#c0e0de;border-width:0 0 0 4px}.alert-info .alert-heading{color:#c0e0de}.alert-warning{border-style:solid;border-color:#ed6a5a;border-width:0 0 0 4px}.alert-warning .alert-heading{color:#ed6a5a}.alert-danger{border-style:solid;border-color:#ed6a5a;border-width:0 0 0 4px}.alert-danger .alert-heading{color:#ed6a5a}.alert-light{border-style:solid;border-color:#d3f3ee;border-width:0 0 0 4px}.alert-light .alert-heading{color:#d3f3ee}.alert-dark{border-style:solid;border-color:#403f4c;border-width:0 0 0 4px}.alert-dark .alert-heading{color:#403f4c}.td-content{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.td-content p,.td-content li,.td-content td{font-weight:400}.td-content>h1{font-weight:700;margin-bottom:1rem}.td-content>h2{margin-bottom:1rem}.td-content>h2:not(:first-child){margin-top:3rem}.td-content>h2+h3{margin-top:1rem}.td-content>h3,.td-content>h4,.td-content>h5,.td-content>h6{margin-bottom:1rem;margin-top:2rem}.td-content>blockquote{padding:0 0 0 1rem;margin-bottom:1rem;color:#888;border-left:6px solid #ffa630}.td-content>ul li,.td-content>ol li{margin-bottom:.25rem}.td-content strong{font-weight:700}.td-content .alert:not(:first-child){margin-top:2rem;margin-bottom:2rem}.td-content .lead{margin-bottom:1.5rem}.td-title{margin-top:1rem;margin-bottom:.5rem}@media(min-width:576px){.td-title{font-size:3rem}}.search-form{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:344px;padding:8px 20px;border:solid 1px #cbcbcb;border-radius:5px;margin:60px auto 0}.search-form__input{font-family:roboto,sans-serif;font-size:16px;color:#707070;line-height:1.63;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-right:10px;border:none;background:0 0;outline:none;float:left}.search-form__button{border:none;background-color:transparent;padding:0}@media(max-width:1280px){.search-form{width:270px;padding:3px 20px;margin-top:30px}}.td-outer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100vh}@media(min-width:768px){.td-default main section:first-of-type{padding-top:8rem}}.td-main{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.td-main main{padding-bottom:2rem}@media(min-width:768px){.td-main main{padding-top:5.5rem}}.td-cover-block--height-min{min-height:300px}.td-cover-block--height-med{min-height:400px}.td-cover-block--height-max{min-height:500px}.td-cover-block--height-full{min-height:100vh}@media(min-width:768px){.td-cover-block--height-min{min-height:450px}.td-cover-block--height-med{min-height:500px}.td-cover-block--height-max{min-height:650px}}.td-cover-logo{margin-right:.5em}.td-cover-block{position:relative;padding-top:5rem;padding-bottom:5rem;background-repeat:no-repeat;background-position:50% 0;-webkit-background-size:cover;background-size:cover}.td-bg-arrow-wrapper{position:relative}.section-index .entry{padding:.75rem}.section-index h5{margin-bottom:0}.section-index h5 a{font-weight:700}.section-index p{margin-top:0}.pageinfo{font-weight:500;background:#f8f9fa;color:inherit;border-radius:0;margin:2rem;padding:1.5rem;padding-bottom:.5rem}.pageinfo-primary{border-style:solid;border-color:#30638e}.pageinfo-secondary{border-style:solid;border-color:#ffa630}.pageinfo-success{border-style:solid;border-color:#3772ff}.pageinfo-info{border-style:solid;border-color:#c0e0de}.pageinfo-warning{border-style:solid;border-color:#ed6a5a}.pageinfo-danger{border-style:solid;border-color:#ed6a5a}.pageinfo-light{border-style:solid;border-color:#d3f3ee}.pageinfo-dark{border-style:solid;border-color:#403f4c}footer{min-height:150px}@media(max-width:991.98px){footer{min-height:200px}}@media(min-width:768px){.td-offset-anchor:target{display:block;position:relative;top:-4rem;visibility:hidden}h2[id]:before,h3[id]:before,h4[id]:before,h5[id]:before{display:block;content:" ";margin-top:-5rem;height:5rem;visibility:hidden}} \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/_gen/js/docs.js b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/_gen/js/docs.js new file mode 100644 index 00000000000..90898d86d50 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/_gen/js/docs.js @@ -0,0 +1 @@ +!function(r){var n={};function o(t){if(n[t])return n[t].exports;var e=n[t]={i:t,l:!1,exports:{}};return r[t].call(e.exports,e,e.exports,o),e.l=!0,e.exports}o.m=r,o.c=n,o.d=function(t,e,r){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(o.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)o.d(r,n,function(t){return e[t]}.bind(null,n));return r},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,"a",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p="/",o(o.s=54)}([function(t,e,r){var m=r(1),w=r(14),g=r(15),E=Math.max,x=Math.min;t.exports=function(n,r,t){var o,i,a,s,u,c,f=0,l=!1,d=!1,e=!0;if("function"!=typeof n)throw new TypeError("Expected a function");function h(t){var e=o,r=i;return o=i=void 0,f=t,s=n.apply(r,e)}function p(t){var e=t-c;return void 0===c||r<=e||e<0||d&&a<=t-f}function y(){var t=w();if(p(t))return b(t);u=setTimeout(y,function(t){var e=r-(t-c);return d?x(e,a-(t-f)):e}(t))}function b(t){return u=void 0,e&&o?h(t):(o=i=void 0,s)}function v(){var t=w(),e=p(t);if(o=arguments,i=this,c=t,e){if(void 0===u)return function(t){return f=t,u=setTimeout(y,r),l?h(t):s}(c);if(d)return clearTimeout(u),u=setTimeout(y,r),h(c)}return void 0===u&&(u=setTimeout(y,r)),s}return r=g(r)||0,m(t)&&(l=!!t.leading,a=(d="maxWait"in t)?E(g(t.maxWait)||0,r):a,e="trailing"in t?!!t.trailing:e),v.cancel=function(){void 0!==u&&clearTimeout(u),o=c=i=u=void(f=0)},v.flush=function(){return void 0===u?s:b(w())},v}},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,r){var n=r(8),o="object"==typeof self&&self&&self.Object===Object&&self,i=n||o||Function("return this")();t.exports=i},function(t,e,r){var n=r(6),o=r(17),i=r(18),a=n?n.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":a&&a in Object(t)?o(t):i(t)}},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,r){!function(s){"use strict";var u={searchParams:"URLSearchParams"in self,iterable:"Symbol"in self&&"iterator"in Symbol,blob:"FileReader"in self&&"Blob"in self&&function(){try{return new Blob,!0}catch(t){return!1}}(),formData:"FormData"in self,arrayBuffer:"ArrayBuffer"in self};if(u.arrayBuffer)var e=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],r=ArrayBuffer.isView||function(t){return t&&-1 nav").offsetHeight,n=function(){var t;e.sort(function(t,e){return t.targetElement.offsetTop-e.targetElement.offsetTop}),t=e[0].targetElement.offsetTop+r>window.scrollY?0:e[e.length-1].targetElement.offsetTop+rwindow.scrollY})-1,e.forEach(function(t){return t.navElement.classList.remove("current")}),e[t].navElement.classList.add("current")};window.addEventListener("scroll",o()(n,10)),window.addEventListener("resize",o()(n,10)),n()}}()},function(t,e,r){var n=r(2);t.exports=function(){return n.Date.now()}},function(t,e,r){var n=r(1),o=r(16),i=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,u=/^0o[0-7]+$/i,c=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(o(t))return NaN;if(n(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=n(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(i,"");var r=s.test(t);return r||u.test(t)?c(t.slice(2),r?2:8):a.test(t)?NaN:+t}},function(t,e,r){var n=r(3),o=r(4);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==n(t)}},function(t,e,r){var n=r(6),o=Object.prototype,i=o.hasOwnProperty,a=o.toString,s=n?n.toStringTag:void 0;t.exports=function(t){var e=i.call(t,s),r=t[s];try{var n=!(t[s]=void 0)}catch(t){}var o=a.call(t);return n&&(e?t[s]=r:delete t[s]),o}},function(t,e){var r=Object.prototype.toString;t.exports=function(t){return r.call(t)}},function(t,e){!function(){var e=window.document.querySelector(".rating");if(e){function t(t){e.querySelector("#rate-star-".concat(t)).addEventListener("click",function(){!function(t){window._paq.push(["trackEvent","Docs","Rating",window.location.pathname,t])}(t),e.innerHTML="

Thank you!

"})}for(var r=1;r<=5;r++)t(r)}}()},function(t,e){var r=window.document.querySelector(".rst-content");!function(){if(r){var t=r.querySelectorAll("table");t&&0!==t.length&&t.forEach(function(t){if(!t.parentNode.classList.contains("wy-table-responsive")){var e=document.createElement("div");e.classList.add("wy-table-responsive"),t.parentNode.insertBefore(e,t),e.appendChild(t)}})}}()},function(t,e,n){"use strict";(function(t){var i=n(7);function r(t){return function(t){if(Array.isArray(t))return t}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function f(){var t=r(document.location.pathname.split("/")),e=t[2];return{currentVersion:t[3],currentPackageName:e,pagePath:t.slice(4).join("/")}}var a;(a=window.document.querySelectorAll(".docs-version-selector"))&&0!==a.length&&t("/_gen/packages-metadata.json").then(function(t){return t.json()}).then(function(t){var e=f().currentPackageName,r=t.find(function(t){return t["package-name"]===e});if(r){var n=r["all-versions"].sort(i.a).reverse(),o=r["stable-version"];a.forEach(function(t){return function(t,e,r){var n=t.querySelector("#version-item-template").innerText,o=document.createElement("div");function i(t,e){var r=o.cloneNode(!0),n="/docs/".concat(u,"/").concat(t,"/").concat(c);r.setAttribute("href",n),r.innerText=e,a.appendChild(r)}o.innerHTML=n,o=o.firstElementChild;var a=t.querySelector(".dropdown-menu"),s=f(),u=s.currentPackageName,c=s.pagePath;i("stable","Stable (".concat(r,")")),e.forEach(function(t){return i(t,t)})}(t,n,o)})}})}).call(this,n(5))},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,r){"use strict";r.r(e);r(10),r(11),r(12),r(13),r(19),r(20),r(55),r(21)},function(t,e){Array.from(document.querySelectorAll(".toctree ul")).forEach(function(t){Array.from(t.parentNode.children).filter(function(t){return"A"===t.tagName}).forEach(function(t){var e=document.createElement("span");e.classList.add("toctree-expand"),t.insertBefore(e,t.firstChild)})})}]); \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/_sphinx_javascript_frameworks_compat.js b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 00000000000..8549469dc29 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,134 @@ +/* + * _sphinx_javascript_frameworks_compat.js + * ~~~~~~~~~~ + * + * Compatability shim for jQuery and underscores.js. + * + * WILL BE REMOVED IN Sphinx 6.0 + * xref RemovedInSphinx60Warning + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/basic.css b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/basic.css new file mode 100644 index 00000000000..eeb0519a69b --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/basic.css @@ -0,0 +1,899 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} +dl.field-list > dt:after { + content: ":"; +} + + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/check-solid.svg b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/check-solid.svg new file mode 100644 index 00000000000..92fad4b5c0b --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/clipboard.min.js b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/clipboard.min.js new file mode 100644 index 00000000000..54b3c463811 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/copybutton.css b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/copybutton.css new file mode 100644 index 00000000000..f1916ec7d1b --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/copybutton.js b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/copybutton.js new file mode 100644 index 00000000000..2ea7ff3e217 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/copybutton_funcs.js b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/copybutton_funcs.js new file mode 100644 index 00000000000..dbe1aaad79c --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/custom.css b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/custom.css new file mode 100644 index 00000000000..b1cf49f37d4 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/custom.css @@ -0,0 +1,33 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + /* + This file contains style overrides for the sphinx-design extension. + + The original defaults can be found here: + https://sphinx-design.readthedocs.io/en/alabaster-theme/css_variables.html + */ + +:root { + --sd-color-tabs-label-active: #017cee; + --sd-color-tabs-label-hover: #68d1ff; + --sd-color-tabs-underline-active: #017cee; + --sd-color-tabs-underline-hover: #68d1ff; + --sd-color-tabs-underline: transparent; +} diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css new file mode 100644 index 00000000000..eb19f698afc --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/design-tabs.js b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/design-tabs.js new file mode 100644 index 00000000000..36b38cf0d91 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/doctools.js b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/doctools.js new file mode 100644 index 00000000000..527b876ca63 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/documentation_options.js b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/documentation_options.js new file mode 100644 index 00000000000..762b5f20b17 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '4.3.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/file.png b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/file.png new file mode 100644 index 00000000000..a858a410e4f Binary files /dev/null and b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/file.png differ diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/graphviz.css b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/graphviz.css new file mode 100644 index 00000000000..19e7afd385b --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/graphviz.css @@ -0,0 +1,19 @@ +/* + * graphviz.css + * ~~~~~~~~~~~~ + * + * Sphinx stylesheet -- graphviz extension. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +img.graphviz { + border: 0; + max-width: 100%; +} + +object.graphviz { + max-width: 100%; +} diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/jquery-3.6.0.js b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/jquery-3.6.0.js new file mode 100644 index 00000000000..fc6c299b73e --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/_static/jquery-3.6.0.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+
+
+
+

apache-airflow-providers-odbc

+
+

Changelog

+
+

4.3.0

+
+

Note

+

This release of provider is only available for Airflow 2.6+ as explained in the +Apache Airflow providers support policy.

+
+
+

Bug Fixes

+
    +
  • Fix: Implement support for 'fetchone()' in the ODBCHook and the Databricks SQL Hook (#36161)

  • +
+
+
+

Misc

+
    +
  • Bump minimum Airflow version in providers to Airflow 2.6.0 (#36017)

  • +
+
+
+
+

4.2.0

+
+

Features

+
    +
  • Make pyodbc.Row and databricks.Row JSON-serializable via new 'make_serializable' method (#32319)

  • +
+
+
+
+

4.1.0

+
+

Note

+

This release of provider is only available for Airflow 2.5+ as explained in the +Apache Airflow providers support policy.

+
+
+

Misc

+
    +
  • Bump min airflow version of providers (#34728)

  • +
+
+
+
+

4.0.0

+
+

Note

+

This release dropped support for Python 3.7

+
+
+

Breaking changes

+

The driver parameter has to be passed via keyword driver argument when initializing the Hook or via +hook_params dictionary (with driver key) when instantiating Hook from SQL Operators. It was possible +to instantiate it via extras before, but in this version, only setting it via constructor is supported.

+
    +
  • Disable setting ODBC driver via extra by default (#31713)

  • +
+
+
+

Bug Fixes

+
    +
  • Check if sqlalchemy_scheme extra contains forbidden characters (#31984)

  • +
+
+
+

Misc

+
    +
  • Control permissibility of driver config in extra from airflow.cfg (#31754)

  • +
+
+
+
+

3.3.0

+
+

Note

+

This release of provider is only available for Airflow 2.4+ as explained in the +Apache Airflow providers support policy.

+
+
+

Misc

+
    +
  • Bump minimum Airflow version in providers (#30917)

  • +
+
+
+
+

3.2.1

+
+

Bug Fixes

+
    +
  • Bump common.sql provider to 1.3.1 (#27888)

  • +
+
+
+
+

3.2.0

+
+

Note

+

This release of provider is only available for Airflow 2.3+ as explained in the +Apache Airflow providers support policy.

+
+
+

Misc

+
    +
  • Move min airflow version to 2.3.0 for all providers (#27196)

  • +
+
+
+
+

3.1.2

+
+

Misc

+
    +
  • Add common-sql lower bound for common-sql (#25789)

  • +
+
+
+
+

3.1.1

+
+

Bug Fixes

+
    +
  • Fix odbc hook sqlalchemy_scheme docstring (#25421)

  • +
+
+
+
+

3.1.0

+
+

Features

+
    +
  • Move all SQL classes to common-sql provider (#24836)

  • +
+
+
+
+

3.0.0

+
+

Breaking changes

+
+

Note

+

This release of provider is only available for Airflow 2.2+ as explained in the +Apache Airflow providers support policy.

+
+
+
+
+

2.0.4

+
+

Bug Fixes

+
    +
  • Fix mistakenly added install_requires for all providers (#22382)

  • +
+
+
+
+

2.0.3

+
+

Misc

+
    +
  • Add Trove classifiers in PyPI (Framework :: Apache Airflow :: Provider)

  • +
+
+
+
+

2.0.2

+
+

Misc

+
    +
  • Support for Python 3.10

  • +
+
+
+
+

2.0.1

+
+

Misc

+
    +
  • Optimise connection importing for Airflow 2.2.0

  • +
+
+
+
+

2.0.0

+
+

Breaking changes

+
    +
  • Auto-apply apply_default decorator (#15667)

  • +
+
+

Warning

+

Due to apply_default decorator removal, this version of the provider requires Airflow 2.1.0+. +If your Airflow version is < 2.1.0, and you want to install this provider version, first upgrade +Airflow to at least version 2.1.0. Otherwise your Airflow package version will be upgraded +automatically and you will have to manually run airflow upgrade db to complete the migration.

+
+
    +
  • OdbcHook returns None. Related to #15016 issue. (#15510)

    +

    When you pass kwargs to the connection (for example autocommit and ansi) in connect_kwargs +extra you should bass those as booleans. Previously strings were also supported.

    +
  • +
+
"connect_kwargs": {
+   "autocommit": "false",
+   "ansi": "true"
+}
+
+
+

should become

+
"connect_kwargs": {
+   "autocommit": false,
+   "ansi": true
+}
+
+
+
+
+

Bug Fixes

+
    +
  • Fix OdbcHook handling of port (#15772)

  • +
+
+
+
+

1.0.1

+

Updated documentation and readme files.

+
+
+

1.0.0

+

Initial version of the provider.

+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/commits.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/commits.html new file mode 100644 index 00000000000..9b0d9b94e79 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/commits.html @@ -0,0 +1,1675 @@ + + + + + + + + + + + + Package apache-airflow-providers-odbc — apache-airflow-providers-odbc Documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+
+
+

Package apache-airflow-providers-odbc

+

ODBC

+

This is detailed commit list of changes for versions provider package: odbc. +For high-level changelog, see package information including changelog.

+
+

4.3.0

+

Latest change: 2023-12-11

+ +++++ + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

36010f6d0e

2023-12-11

Fix: Implement support for 'fetchone()' in the ODBCHook and the Databricks SQL Hook (#36161)

999b70178a

2023-12-08

Prepare docs 1st wave of Providers December 2023 (#36112)

d0918d77ee

2023-12-07

Bump minimum Airflow version in providers to Airflow 2.6.0 (#36017)

+
+
+

4.2.0

+

Latest change: 2023-11-24

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

0b23d5601c

2023-11-24

Prepare docs 2nd wave of Providers November 2023 (#35836)

99534e47f3

2023-11-19

Use reproducible builds for provider packages (#35693)

064fc2b775

2023-11-17

Make pyodbc.Row and databricks.Row JSON-serializable via new 'make_serializable' method (#32319)

99df205f42

2023-11-16

Fix and reapply templates for provider documentation (#35686)

1b059c57d6

2023-11-08

Prepare docs 1st wave of Providers November 2023 (#35537)

d1c58d86de

2023-10-28

Prepare docs 3rd wave of Providers October 2023 - FIX (#35233)

3592ff4046

2023-10-28

Prepare docs 3rd wave of Providers October 2023 (#35187)

dd7ba3cae1

2023-10-19

Pre-upgrade 'ruff==0.0.292' changes in providers (#35053)

+
+
+

4.1.0

+

Latest change: 2023-10-13

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

e9987d5059

2023-10-13

Prepare docs 1st wave of Providers in October 2023 (#34916)

0c8e30e43b

2023-10-05

Bump min airflow version of providers (#34728)

21990ed894

2023-09-08

Prepare docs for 09 2023 - 1st wave of Providers (#34201)

c077d19060

2023-08-26

Prepare docs for Aug 2023 3rd wave of Providers (#33730)

b5a4d36383

2023-08-11

Prepare docs for Aug 2023 2nd wave of Providers (#33291)

225e3041d2

2023-07-06

Prepare docs for July 2023 wave of Providers (RC2) (#32381)

3878fe6fab

2023-07-05

Remove spurious headers for provider changelogs (#32373)

cb4927a018

2023-07-05

Prepare docs for July 2023 wave of Providers (#32298)

09d4718d3a

2023-06-27

Improve provider documentation and README structure (#32125)

+
+
+

4.0.0

+

Latest change: 2023-06-20

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

79bcc2e668

2023-06-20

Prepare RC1 docs for June 2023 wave of Providers (#32001)

8b146152d6

2023-06-20

Add note about dropping Python 3.7 for providers (#32015)

b683698684

2023-06-18

Check if sqlalchemy_scheme extra contains forbidden characters (#31984)

438ba41e14

2023-06-07

Control permissibility of driver config in extra from airflow.cfg (#31754)

2844dad1c7

2023-06-06

Disable setting ODBC driver via extra by default (#31713)

9276310a43

2023-06-05

Improve docstrings in providers (#31681)

a59076eaee

2023-06-02

Add D400 pydocstyle check - Providers (#31427)

+
+
+

3.3.0

+

Latest change: 2023-05-19

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

45548b9451

2023-05-19

Prepare RC2 docs for May 2023 wave of Providers (#31416)

abea189022

2023-05-18

Use '__version__' in providers not 'version' (#31393)

f5aed58d9f

2023-05-18

Fixing circular import error in providers caused by airflow version check (#31379)

d9ff55cf6d

2023-05-16

Prepare docs for May 2023 wave of Providers (#31252)

eef5bc7f16

2023-05-03

Add full automation for min Airflow version for providers (#30994)

a7eb32a5b2

2023-04-30

Bump minimum Airflow version in providers (#30917)

d23a3bbed8

2023-04-04

Add mechanism to suspend providers (#30422)

ce858a5d71

2023-01-12

Switch to ruff for faster static checks (#28893)

+
+
+

3.2.1

+

Latest change: 2022-11-26

+ +++++ + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

25bdbc8e67

2022-11-26

Updated docs for RC3 wave of providers (#27937)

2e20e9f7eb

2022-11-24

Prepare for follow-up relase for November providers (#27774)

80c327bd3b

2022-11-24

Bump common.sql provider to 1.3.1 (#27888)

+
+
+

3.2.0

+

Latest change: 2022-11-15

+ +++++ + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

12c3c39d1a

2022-11-15

pRepare docs for November 2022 wave of Providers (#27613)

78b8ea2f22

2022-10-24

Move min airflow version to 2.3.0 for all providers (#27196)

2a34dc9e84

2022-10-23

Enable string normalization in python formatting - providers (#27205)

+
+
+

3.1.2

+

Latest change: 2022-09-28

+ +++++ + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

f8db64c35c

2022-09-28

Update docs for September Provider's release (#26731)

06acf40a43

2022-09-13

Apply PEP-563 (Postponed Evaluation of Annotations) to non-core airflow (#26289)

ca9229b6fe

2022-08-18

Add common-sql lower bound for common-sql (#25789)

+
+
+

3.1.1

+

Latest change: 2022-08-10

+ +++++ + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

e5ac6c7cfb

2022-08-10

Prepare docs for new providers release (August 2022) (#25618)

0f931c77c7

2022-08-02

Fix odbc hook sqlalchemy_scheme docstring (#25421)

+
+
+

3.1.0

+

Latest change: 2022-07-13

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

d2459a241b

2022-07-13

Add documentation for July 2022 Provider's release (#25030)

46bbfdade0

2022-07-07

Move all SQL classes to common-sql provider (#24836)

0de31bd73a

2022-06-29

Move provider dependencies to inside provider folders (#24672)

510a6bab45

2022-06-28

Remove 'hook-class-names' from provider.yaml (#24702)

+
+
+

3.0.0

+

Latest change: 2022-06-09

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

dcdcf3a2b8

2022-06-09

Update release notes for RC2 release of Providers for May 2022 (#24307)

717a7588bc

2022-06-07

Update package description to remove double min-airflow specification (#24292)

aeabe994b3

2022-06-07

Prepare docs for May 2022 provider's release (#24231)

027b707d21

2022-06-05

Add explanatory note for contributors about updating Changelog (#24229)

+
+
+

2.0.4

+

Latest change: 2022-03-22

+ +++++ + + + + + + + + + + + + +

Commit

Committed

Subject

d7dbfb7e26

2022-03-22

Add documentation for bugfix release of Providers (#22383)

+
+
+

2.0.3

+

Latest change: 2022-03-14

+ +++++ + + + + + + + + + + + + +

Commit

Committed

Subject

16adc035b1

2022-03-14

Add documentation for Classifier release for March 2022 (#22226)

+
+
+

2.0.2

+

Latest change: 2022-03-07

+ +++++ + + + + + + + + + + + + +

Commit

Committed

Subject

f5b96315fe

2022-03-07

Add documentation for Feb Providers release (#22056)

+
+
+

2.0.1

+

Latest change: 2021-08-30

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

0a68588479

2021-08-30

Add August 2021 Provider's documentation (#17890)

be75dcd39c

2021-08-23

Update description about the new ''connection-types'' provider meta-data

76ed2a49c6

2021-08-19

Import Hooks lazily individually in providers manager (#17682)

87f408b1e7

2021-07-26

Prepares docs for Rc2 release of July providers (#17116)

b916b75079

2021-07-15

Prepare documentation for July release of providers. (#17015)

866a601b76

2021-06-28

Removes pylint from our toolchain (#16682)

+
+
+

2.0.0

+

Latest change: 2021-06-18

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

bbc627a3da

2021-06-18

Prepares documentation for rc2 release of Providers (#16501)

cbf8001d76

2021-06-16

Synchronizes updated changelog after buggfix release (#16464)

1fba5402bb

2021-06-15

More documentation update for June providers release (#16405)

8a4cfd7341

2021-06-13

OdbcHook returns None. Related to #15016 issue. (#15510)

9c94b72d44

2021-06-07

Updated documentation for June 2021 provider release (#16294)

c8ef3a3539

2021-05-11

Fix OdbcHook handling of port (#15772)

807ad32ce5

2021-05-01

Prepares provider release after PIP 21 compatibility (#15576)

40a2476a5d

2021-04-28

Adds interactivity when generating provider documentation. (#15518)

68e4c4dcb0

2021-03-20

Remove Backport Providers (#14886)

6e6526a0f6

2021-03-13

Update documentation for broken package releases (#14734)

+
+
+

1.0.1

+

Latest change: 2021-02-04

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

88bdcfa0df

2021-02-04

Prepare to release a new wave of providers. (#14013)

ac2f72c98d

2021-02-01

Implement provider versioning tools (#13767)

3fd5ef3555

2021-01-21

Add missing logos for integrations (#13717)

295d66f914

2020-12-30

Fix Grammar in PIP warning (#13380)

6cf76d7ac0

2020-12-18

Fix typo in pip upgrade command :( (#13148)

+
+
+

1.0.0

+

Latest change: 2020-12-09

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Commit

Committed

Subject

32971a1a2d

2020-12-09

Updates providers versions to 1.0.0 (#12955)

b40dffa085

2020-12-08

Rename remaing modules to match AIP-21 (#12917)

9b39f24780

2020-12-08

Add support for dynamic connection form fields per provider (#12558)

2037303eef

2020-11-29

Adds support for Connection/Hook discovery from providers (#12466)

de3b1e687b

2020-11-28

Move connection guides to provider documentation packages (#12653)

c34ef853c8

2020-11-20

Separate out documentation building per provider  (#12444)

0080354502

2020-11-18

Update provider READMEs for 1.0.0b2 batch release (#12449)

ae7cb4a1e2

2020-11-17

Update wrong commit hash in backport provider changes (#12390)

6889a333cf

2020-11-15

Improvements for operators and hooks ref docs (#12366)

7825e8f590

2020-11-13

Docs installation improvements (#12304)

85a18e13d9

2020-11-09

Point at pypi project pages for cross-dependency of provider packages (#12212)

59eb5de78c

2020-11-09

Update provider READMEs for up-coming 1.0.0beta1 releases (#12206)

b2a28d1590

2020-11-09

Moves provider packages scripts to dev (#12082)

41bf172c1d

2020-11-04

Simplify string expressions (#12093)

4e8f9cc8d0

2020-11-03

Enable Black - Python Auto Formmatter (#9550)

5a439e84eb

2020-10-26

Prepare providers release 0.0.2a1 (#11855)

872b1566a1

2020-10-25

Generated backport providers readmes/setup for 2020.10.29 (#11826)

349b0811c3

2020-10-20

Add D200 pydocstyle check (#11688)

16e7129719

2020-10-13

Added support for provider packages for Airflow 2.0 (#11487)

0a0e1af800

2020-10-03

Fix Broken Markdown links in Providers README TOC (#11249)

ca4238eb4d

2020-10-02

Fixed month in backport packages to October (#11242)

5220e4c384

2020-10-02

Prepare Backport release 2020.09.07 (#11238)

54353f8745

2020-09-27

Increase type coverage for five different providers (#11170)

fdd9b6f65b

2020-08-25

Enable Black on Providers Packages (#10543)

3696c34c28

2020-08-24

Fix typo in the word "release" (#10528)

ee7ca128a1

2020-08-22

Fix broken Markdown refernces in Providers README (#10483)

d0e7db4024

2020-06-19

Fixed release number for fresh release (#9408)

12af6a0800

2020-06-19

Final cleanup for 2020.6.23rc1 release preparation (#9404)

c7e5bce57f

2020-06-19

Prepare backport release candidate for 2020.6.23rc1 (#9370)

f6bd817a3a

2020-06-16

Introduce 'transfers' packages (#9320)

0b0e4f7a4c

2020-05-26

Preparing for RC3 relase of backports (#9026)

00642a46d0

2020-05-26

Fixed name of 20 remaining wrongly named operators. (#8994)

375d1ca229

2020-05-19

Release candidate 2 for backport packages 2020.05.20 (#8898)

12c5e5d8ae

2020-05-17

Prepare release candidate for backport packages (#8891)

f3521fb0e3

2020-05-16

Regenerate readme files for backport package release (#8886)

92585ca4cb

2020-05-15

Added automated release notes generation for backport operators (#8807)

2b06d0a3de

2020-01-21

[AIRFLOW-6603] Remove unnecessary pylint warnings (#7224)

2a819b11fb

2020-01-19

[AIRFLOW-6296] add OdbcHook & deprecation warning for pymssql (#6850)

+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/connections/index.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/connections/index.html new file mode 100644 index 00000000000..30ef33f81c7 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/connections/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/connections/odbc.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/connections/odbc.html new file mode 100644 index 00000000000..7f8dc76f72a --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/connections/odbc.html @@ -0,0 +1,957 @@ + + + + + + + + + + + + ODBC Connection — apache-airflow-providers-odbc Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+
+
+

ODBC Connection

+

The odbc connection type provides connection to ODBC data sources including MS SQL Server.

+

Enable with pip install apache-airflow[odbc].

+
+

System prerequisites

+

This connection type uses pyodbc, which has some system +dependencies, as documented on the pyodbc wiki.

+

You must also install a driver:

+ +
+
+

Configuring the Connection

+

To use the hook OdbcHook you must specify the +driver you want to use either in Connection.extra or as a parameter at hook initialization.

+
+
Host (required)

The host to connect to.

+
+
Schema (optional)

Specify the schema name to be used in the database.

+
+
Login (required)

Specify the user name to connect.

+
+
Password (required)

Specify the password to connect.

+
+
Extra (optional)

Any key / value parameters supplied here will be added to the ODBC connection string.

+

Additionally there a few special optional keywords that are handled separately.

+
    +
  • +
    connect_kwargs
      +
    • key-value pairs under connect_kwargs will be passed onto pyodbc.connect as kwargs

    • +
    +
    +
    +
  • +
  • +
    sqlalchemy_scheme
      +
    • This is only used when get_uri is invoked in +get_sqlalchemy_engine(). By default, the hook uses +scheme mssql+pyodbc. You may pass a string value here to override.

    • +
    +
    +
    +
  • +
  • +
    driver
      +
    • The name of the driver to use on your system. Note that this is only considered if allow_driver_in_extra +is set to True in airflow config section providers.odbc (by default it is not considered). Note: if setting +this config from env vars, use AIRFLOW__PROVIDERS_ODBC__ALLOW_DRIVER_IN_EXTRA=true.

    • +
    +
    +
    +
  • +
+
+

Note

+

If setting allow_driver_extra to True, this allows users to set the driver via the Airflow Connection’s +extra field. By default this is not allowed. If enabling this functionality, you should make sure +that you trust the users who can edit connections in the UI to not use it maliciously.

+
+
+

Note

+

You are responsible for installing an ODBC driver on your system.

+

The following examples demonstrate usage of the Microsoft ODBC driver.

+
+

For example, consider the following value for extra:

+
{
+  "Driver": "ODBC Driver 18 for SQL Server",
+  "ApplicationIntent": "ReadOnly",
+  "TrustedConnection": "Yes"
+}
+
+
+

This would produce a connection string containing these params:

+
DRIVER={ODBC Driver 17 for SQL Server};ApplicationIntent=ReadOnly;TrustedConnection=Yes;
+
+
+

See DSN and Connection String Keywords and Attributes +for more info.

+

Example connection URI for use with environment variables etc:

+
export AIRFLOW_CONN_MSSQL_DEFAULT='mssql-odbc://my_user:XXXXXXXXXXXX@1.1.1.1:1433/my_database?Driver=ODBC+Driver+18+for+SQL+Server&ApplicationIntent=ReadOnly&TrustedConnection=Yes'
+
+
+

If you want to pass keyword arguments to pyodbc.connect, you may supply a dictionary +under connect_kwargs.

+

For example with extra as below, pyodbc.connect will be called with autocommit=False and +ansi=True.

+
{
+  "Driver": "ODBC Driver 18 for SQL Server",
+  "ApplicationIntent": "ReadOnly",
+  "TrustedConnection": "Yes",
+  "connect_kwargs": {
+    "autocommit": false,
+    "ansi": true
+  }
+}
+
+
+

See pyodbc documentation for more details on what +kwargs you can pass to connect

+
+
+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/genindex.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/genindex.html new file mode 100644 index 00000000000..bf810f7b7f6 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/genindex.html @@ -0,0 +1,987 @@ + + + + + + + + + + + + Index — apache-airflow-providers-odbc Documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ + +

Index

+ +
+ _ + | A + | C + | D + | G + | H + | M + | O + | S + +
+

_

+ + +
+ +

A

+ + + +
    +
  • + airflow.providers.odbc + +
  • +
  • + airflow.providers.odbc.hooks + +
  • +
    +
  • + airflow.providers.odbc.hooks.odbc + +
  • +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

G

+ + + +
+ +

H

+ + +
+ +

M

+ + +
+ +

O

+ + + +
+ +

S

+ + + +
+ + + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/index.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/index.html new file mode 100644 index 00000000000..3f902c734aa --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/index.html @@ -0,0 +1,938 @@ + + + + + + + + + + + + apache-airflow-providers-odbc — apache-airflow-providers-odbc Documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+
+
+

apache-airflow-providers-odbc

+
+
+
+
+
+
+
+
+
+

Package apache-airflow-providers-odbc

+

ODBC

+

Release: 4.3.0

+
+
+

Provider package

+

This is a provider package for odbc provider. All classes for this provider package +are in airflow.providers.odbc python package.

+
+
+

Installation

+

You can install this package on top of an existing Airflow 2 installation (see Requirements below) +for the minimum Airflow version supported) via +pip install apache-airflow-providers-odbc

+
+
+

Requirements

+

The minimum Apache Airflow version supported by this provider package is 2.6.0.

+ ++++ + + + + + + + + + + + + + + + + +

PIP package

Version required

apache-airflow

>=2.6.0

apache-airflow-providers-common-sql

>=1.8.1

pyodbc

+
+
+

Cross provider package dependencies

+

Those are dependencies that might be needed in order to use all the features of the package. +You need to install the specified provider packages in order to use them.

+

You can install such cross-provider dependencies when installing from PyPI. For example:

+
pip install apache-airflow-providers-odbc[common.sql]
+
+
+ ++++ + + + + + + + + + + +

Dependent package

Extra

apache-airflow-providers-common-sql

common.sql

+
+
+

Downloading official packages

+

You can download officially released packages and verify their checksums and signatures from the +Official Apache Download site

+ +
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/installing-providers-from-sources.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/installing-providers-from-sources.html new file mode 100644 index 00000000000..0a9f9138ed8 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/installing-providers-from-sources.html @@ -0,0 +1,956 @@ + + + + + + + + + + + + Installing from sources — apache-airflow-providers-odbc Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+
+
+
+
+

Installing from sources

+
+

Released packages

+

This page describes downloading and verifying apache-airflow-providers-odbc provider version +4.3.0 using officially released packages. +You can also install the provider package - as most Python packages - via +PyPI . +You can choose different version of the provider by selecting different version from the drop-down at +the top-left of the page.

+

The sdist and whl packages released are the “official” sources of installation that you can use if +you want to verify the origin of the packages and want to verify checksums and signatures of the packages. +The packages are available via the +Official Apache Software Foundations Downloads

+

The downloads are available at:

+ +

If you want to install from the source code, you can download from the sources link above, it will contain +a INSTALL file containing details on how you can build and install the provider.

+
+
+

Release integrity

+

PGP signatures KEYS

+

It is essential that you verify the integrity of the downloaded files using the PGP or SHA signatures. +The PGP signatures can be verified using GPG or PGP. Please download the KEYS as well as the asc +signature files for relevant distribution. It is recommended to get these files from the +main distribution directory and not from the mirrors.

+
gpg -i KEYS
+
+
+

or

+
pgpk -a KEYS
+
+
+

or

+
pgp -ka KEYS
+
+
+

To verify the binaries/sources you can download the relevant asc files for it from main +distribution directory and follow the below guide.

+
gpg --verify apache-airflow-providers-********.asc apache-airflow-*********
+
+
+

or

+
pgpv apache-airflow-providers-********.asc
+
+
+

or

+
pgp apache-airflow-providers-********.asc
+
+
+

Example:

+
$ gpg --verify apache-airflow-providers-odbc-4.3.0.tar.gz.asc apache-airflow-providers-odbc-4.3.0.tar.gz
+  gpg: Signature made Sat 11 Sep 12:49:54 2021 BST
+  gpg:                using RSA key CDE15C6E4D3A8EC4ECF4BA4B6674E08AD7DE406F
+  gpg:                issuer "kaxilnaik@apache.org"
+  gpg: Good signature from "Kaxil Naik <kaxilnaik@apache.org>" [unknown]
+  gpg:                 aka "Kaxil Naik <kaxilnaik@gmail.com>" [unknown]
+  gpg: WARNING: The key's User ID is not certified with a trusted signature!
+  gpg:          There is no indication that the signature belongs to the owner.
+  Primary key fingerprint: CDE1 5C6E 4D3A 8EC4 ECF4  BA4B 6674 E08A D7DE 406F
+
+
+

The “Good signature from …” is indication that the signatures are correct. +Do not worry about the “not certified with a trusted signature” warning. Most of the certificates used +by release managers are self signed, that’s why you get this warning. By importing the server in the +previous step and importing it via ID from KEYS page, you know that this is a valid Key already.

+

For SHA512 sum check, download the relevant sha512 and run the following:

+
shasum -a 512 apache-airflow-providers-********  | diff - apache-airflow-providers-********.sha512
+
+
+

The SHASUM of the file should match the one provided in .sha512 file.

+

Example:

+
shasum -a 512 apache-airflow-providers-odbc-4.3.0.tar.gz  | diff - apache-airflow-providers-odbc-4.3.0.tar.gz.sha512
+
+
+
+
+

Verifying PyPI releases

+

You can verify the Provider .whl packages from PyPI by locally downloading the package and signature +and SHA sum files with the script below:

+
#!/bin/bash
+PACKAGE_VERSION=4.3.0
+PACKAGE_NAME=apache-airflow-providers-odbc
+provider_download_dir=$(mktemp -d)
+pip download --no-deps "${PACKAGE_NAME}==${PACKAGE_VERSION}" --dest "${provider_download_dir}"
+curl "https://downloads.apache.org/airflow/providers/apache_airflow_providers_odbc-4.3.0-py3-none-any.whl.asc" \
+    -L -o "${provider_download_dir}/apache_airflow_providers_odbc-4.3.0-py3-none-any.whl.asc"
+curl "https://downloads.apache.org/airflow/providers/apache_airflow_providers_odbc-4.3.0-py3-none-any.whl.sha512" \
+    -L -o "${provider_download_dir}/apache_airflow_providers_odbc-4.3.0-py3-none-any.whl.sha512"
+echo
+echo "Please verify files downloaded to ${provider_download_dir}"
+ls -la "${provider_download_dir}"
+echo
+
+
+

Once you verify the files following the instructions from previous chapter you can remove the temporary +folder created.

+
+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/objects.inv b/docs-archive/apache-airflow-providers-odbc/4.3.0/objects.inv new file mode 100644 index 00000000000..dcaceed4caa Binary files /dev/null and b/docs-archive/apache-airflow-providers-odbc/4.3.0/objects.inv differ diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/output-spelling-results-apache-airflow-providers-odbc/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css b/docs-archive/apache-airflow-providers-odbc/4.3.0/output-spelling-results-apache-airflow-providers-odbc/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css new file mode 100644 index 00000000000..eb19f698afc --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/output-spelling-results-apache-airflow-providers-odbc/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/output-spelling-results-apache-airflow-providers-odbc/_sphinx_design_static/design-tabs.js b/docs-archive/apache-airflow-providers-odbc/4.3.0/output-spelling-results-apache-airflow-providers-odbc/_sphinx_design_static/design-tabs.js new file mode 100644 index 00000000000..36b38cf0d91 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/output-spelling-results-apache-airflow-providers-odbc/_sphinx_design_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/py-modindex.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/py-modindex.html new file mode 100644 index 00000000000..e3fe55aaf2e --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/py-modindex.html @@ -0,0 +1,852 @@ + + + + + + + + + + + + Python Module Index — apache-airflow-providers-odbc Documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ + +

Python Module Index

+ +
+ a +
+ + + + + + + + + + + + + + + + +
 
+ a
+ airflow +
    + airflow.providers.odbc +
    + airflow.providers.odbc.hooks +
    + airflow.providers.odbc.hooks.odbc +
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/search.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/search.html new file mode 100644 index 00000000000..4e76514b6e6 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/search.html @@ -0,0 +1,869 @@ + + + + + + + + + + + + Search — apache-airflow-providers-odbc Documentation + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + + +
+ +
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/searchindex.js b/docs-archive/apache-airflow-providers-odbc/4.3.0/searchindex.js new file mode 100644 index 00000000000..0a724af1e4d --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["_api/airflow/providers/odbc/hooks/index", "_api/airflow/providers/odbc/hooks/odbc/index", "_api/airflow/providers/odbc/index", "changelog", "commits", "connections/odbc", "index", "installing-providers-from-sources", "security"], "filenames": ["_api/airflow/providers/odbc/hooks/index.rst", "_api/airflow/providers/odbc/hooks/odbc/index.rst", "_api/airflow/providers/odbc/index.rst", "changelog.rst", "commits.rst", "connections/odbc.rst", "index.rst", "installing-providers-from-sources.rst", "security.rst"], "titles": ["airflow.providers.odbc.hooks", "airflow.providers.odbc.hooks.odbc", "airflow.providers.odbc", "Changelog", "Package apache-airflow-providers-odbc", "ODBC Connection", "apache-airflow-providers-odbc", "Installing from sources", "Releasing security patches"], "terms": {"4": [0, 1, 2, 5, 6, 7, 8], "3": [0, 1, 2, 5, 6, 7, 8], "0": [0, 1, 2, 5, 6, 7, 8], "2": [0, 1, 2, 5, 6, 7, 8], "9": [0, 1, 2, 3, 4, 5, 6, 7, 8], "dev0": [0, 1, 2, 3, 4, 5, 6, 7, 8], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8], "experiment": [0, 1, 2, 3, 4, 5, 6, 7, 8], "featur": [0, 1, 2, 4, 5, 6, 7, 8], "contain": [1, 3, 4, 5, 7], "odbchook": [1, 3, 4, 5], "arg": 1, "databas": [1, 5], "none": [1, 3, 4, 7], "driver": [1, 3, 4, 5], "dsn": [1, 5], "connect_kwarg": [1, 3, 5], "sqlalchemy_schem": [1, 3, 4, 5], "kwarg": [1, 3, 5], "sourc": [1, 2, 5], "base": 1, "common": [1, 3, 4, 6], "sql": [1, 3, 4, 5, 6], "dbapihook": 1, "interact": [1, 4], "data": [1, 4, 5], "us": [1, 4, 5, 6, 7, 8], "pyodbc": [1, 3, 4, 5, 6], "To": [1, 5, 7], "configur": 1, "addit": 1, "suppli": [1, 5], "constructor": [1, 3], "follow": [1, 4, 5, 7, 8], "ar": [1, 5, 6, 7, 8], "also": [1, 3, 5, 7], "support": [1, 3, 4, 6], "set": [1, 3, 4, 5], "paramet": [1, 3, 5], "hook_param": [1, 3], "dictionari": [1, 3, 5], "when": [1, 3, 4, 5, 6, 8], "instanti": [1, 3], "oper": [1, 3, 4], "extra": [1, 3, 4, 5, 6], "connect": [1, 3, 4], "allow_driver_in_extra": [1, 5], "true": [1, 3, 5], "section": [1, 5], "config": [1, 3, 4, 5], "patch": 1, "default_driv": 1, "local_set": 1, "py": 1, "file": [1, 3, 4, 7], "see": [1, 4, 5, 6], "full": [1, 4], "document": [1, 3, 4, 5], "pass": [1, 3, 5], "str": 1, "overrid": [1, 5], "schema": [1, 5], "name": [1, 4, 5], "path": 1, "abov": [1, 7], "more": [1, 4, 5], "info": [1, 5], "dict": 1, "keyword": [1, 3, 5], "argument": [1, 3, 5], "scheme": [1, 5], "sqlalchemi": 1, "default": [1, 3, 4, 5, 8], "mssql": [1, 5], "onli": [1, 3, 5, 8], "get_sqlalchemy_engin": [1, 5], "get_sqlalchemy_connect": 1, "method": [1, 3, 4], "properti": 1, "The": [1, 3, 5, 6, 7, 8], "object": 1, "id": [1, 7], "odbc_conn_id": 1, "init": 1, "exist": [1, 6], "otherwis": [1, 3], "from": [1, 3, 4, 5, 6, 8], "either": [1, 5], "connection_extra_low": 1, "extra_dejson": 1, "where": [1, 8], "kei": [1, 3, 5, 7], "convert": 1, "lower": [1, 3, 4], "case": [1, 8], "intern": 1, "insensit": 1, "access": 1, "param": [1, 5], "given": 1, "els": 1, "try": 1, "find": 1, "one": [1, 7], "odbc_connection_str": 1, "string": [1, 3, 4, 5], "we": [1, 8], "build": [1, 4, 7], "instead": 1, "becaus": 1, "exampl": [1, 3, 5, 6, 7], "repres": 1, "applicationint": [1, 5], "readonli": [1, 5], "ani": [1, 5, 7], "valu": [1, 5], "pair": [1, 5], "ad": [1, 3, 4, 5], "effect": 1, "merg": 1, "": [1, 4, 5, 7], "receiv": [1, 8], "preced": 1, "those": [1, 3, 6, 7], "If": [1, 3, 5, 7], "attrs_befor": 1, "int": 1, "requir": [1, 3, 5, 8], "default_sqlalchemy_schem": 1, "conn_name_attr": 1, "default_conn_nam": 1, "odbc_default": 1, "conn_typ": 1, "hook_nam": 1, "supports_autocommit": 1, "get_conn": 1, "return": [1, 3, 4], "get_uri": [1, 5], "uri": [1, 5], "invok": [1, 5], "engine_kwarg": 1, "hook": [2, 3, 4, 5], "__version__": [2, 4], "apach": [3, 5, 7], "airflow": [3, 5, 7, 8], "provid": [3, 5, 7, 8], "odbc": [3, 7], "releas": [3, 4, 6], "avail": [3, 7], "6": [3, 4, 6], "explain": 3, "polici": [3, 8], "implement": [3, 4], "fetchon": [3, 4], "databrick": [3, 4], "36161": [3, 4], "bump": [3, 4], "minimum": [3, 4, 6], "version": [3, 4, 6, 7, 8], "36017": [3, 4], "make": [3, 4, 5], "row": [3, 4], "json": [3, 4], "serializ": [3, 4], "via": [3, 4, 5, 6, 7], "new": [3, 4, 8], "make_serializ": [3, 4], "32319": [3, 4], "5": 3, "min": [3, 4], "34728": [3, 4], "drop": [3, 4, 7], "python": [3, 4, 6, 7], "7": [3, 4], "ha": [3, 5], "initi": [3, 5], "It": [3, 7], "wa": 3, "possibl": 3, "befor": 3, "disabl": [3, 4], "31713": [3, 4], "check": [3, 4, 7], "forbidden": [3, 4], "charact": [3, 4], "31984": [3, 4], "control": [3, 4], "permiss": [3, 4], "cfg": [3, 4], "31754": [3, 4], "30917": [3, 4], "27888": [3, 4], "move": [3, 4], "all": [3, 4, 6, 8], "27196": [3, 4], "add": [3, 4], "bound": [3, 4], "25789": [3, 4], "docstr": [3, 4], "25421": [3, 4], "class": [3, 4, 6], "24836": [3, 4], "mistakenli": 3, "install_requir": 3, "22382": 3, "trove": 3, "classifi": [3, 4], "pypi": [3, 4, 6, 8], "framework": 3, "10": [3, 4], "optimis": 3, "import": [3, 4, 7], "auto": [3, 4], "appli": [3, 4], "apply_default": 3, "decor": 3, "15667": 3, "due": 3, "remov": [3, 4, 7], "your": [3, 5], "you": [3, 5, 6, 7, 8], "want": [3, 5, 7, 8], "instal": [3, 4, 5, 8], "first": 3, "upgrad": [3, 4, 8], "least": 3, "packag": 3, "automat": 3, "have": [3, 8], "manual": 3, "run": [3, 7], "db": 3, "complet": 3, "migrat": 3, "relat": [3, 4], "15016": [3, 4], "issu": [3, 4], "15510": [3, 4], "autocommit": [3, 5], "ansi": [3, 5], "should": [3, 5, 7, 8], "bass": 3, "boolean": 3, "previous": 3, "were": 3, "fals": [3, 5], "becom": 3, "handl": [3, 4, 5], "port": [3, 4], "15772": [3, 4], "updat": [3, 4], "readm": [3, 4], "detail": [4, 5, 7], "commit": 4, "list": 4, "chang": [4, 8], "For": [4, 5, 6, 7], "high": 4, "level": 4, "changelog": 4, "inform": [4, 8], "includ": [4, 5, 8], "latest": [4, 8], "2023": 4, "12": [4, 7], "11": [4, 7], "subject": 4, "36010f6d0e": 4, "fix": [4, 8], "999b70178a": 4, "08": 4, "prepar": [4, 8], "doc": 4, "1st": 4, "wave": 4, "decemb": 4, "36112": 4, "d0918d77ee": 4, "07": 4, "24": 4, "0b23d5601c": 4, "2nd": 4, "novemb": 4, "35836": 4, "99534e47f3": 4, "19": 4, "reproduc": 4, "35693": 4, "064fc2b775": 4, "17": [4, 5], "99df205f42": 4, "16": 4, "reappli": 4, "templat": 4, "35686": 4, "1b059c57d6": 4, "35537": 4, "d1c58d86de": 4, "28": 4, "3rd": 4, "octob": 4, "35233": 4, "3592ff4046": 4, "35187": 4, "dd7ba3cae1": 4, "pre": 4, "ruff": 4, "292": 4, "35053": 4, "13": 4, "e9987d5059": 4, "34916": 4, "0c8e30e43b": 4, "05": 4, "21990ed894": 4, "09": 4, "34201": 4, "c077d19060": 4, "26": 4, "aug": 4, "33730": 4, "b5a4d36383": 4, "33291": 4, "225e3041d2": 4, "06": 4, "juli": 4, "rc2": 4, "32381": 4, "3878fe6fab": 4, "spuriou": 4, "header": 4, "32373": 4, "cb4927a018": 4, "32298": 4, "09d4718d3a": 4, "27": 4, "improv": 4, "structur": 4, "32125": 4, "20": 4, "79bcc2e668": 4, "rc1": 4, "june": 4, "32001": 4, "8b146152d6": 4, "note": [4, 5], "about": [4, 7, 8], "32015": 4, "b683698684": 4, "18": [4, 5], "438ba41e14": 4, "2844dad1c7": 4, "9276310a43": 4, "31681": 4, "a59076eae": 4, "02": 4, "d400": 4, "pydocstyl": 4, "31427": 4, "45548b9451": 4, "mai": [4, 5], "31416": 4, "abea189022": 4, "31393": 4, "f5aed58d9f": 4, "circular": 4, "error": 4, "caus": 4, "31379": 4, "d9ff55cf6d": 4, "31252": 4, "eef5bc7f16": 4, "03": 4, "autom": 4, "30994": 4, "a7eb32a5b2": 4, "04": 4, "30": 4, "d23a3bbed8": 4, "mechan": 4, "suspend": 4, "30422": 4, "ce858a5d71": 4, "01": 4, "switch": 4, "faster": 4, "static": 4, "28893": 4, "2022": 4, "25bdbc8e67": 4, "rc3": 4, "27937": 4, "2e20e9f7eb": 4, "up": 4, "relas": 4, "27774": 4, "80c327bd3b": 4, "15": 4, "12c3c39d1a": 4, "27613": 4, "78b8ea2f22": 4, "2a34dc9e84": 4, "23": 4, "enabl": [4, 5], "normal": 4, "format": 4, "27205": 4, "f8db64c35c": 4, "septemb": 4, "26731": 4, "06acf40a43": 4, "pep": 4, "563": 4, "postpon": 4, "evalu": 4, "annot": 4, "non": 4, "core": 4, "26289": 4, "ca9229b6f": 4, "e5ac6c7cfb": 4, "august": 4, "25618": 4, "0f931c77c7": 4, "d2459a241b": 4, "25030": 4, "46bbfdade0": 4, "0de31bd73a": 4, "29": 4, "depend": [4, 5, 8], "insid": 4, "folder": [4, 7], "24672": 4, "510a6bab45": 4, "yaml": 4, "24702": 4, "dcdcf3a2b8": 4, "24307": 4, "717a7588bc": 4, "descript": 4, "doubl": 4, "specif": 4, "24292": 4, "aeabe994b3": 4, "24231": 4, "027b707d21": 4, "explanatori": 4, "contributor": 4, "24229": 4, "22": 4, "d7dbfb7e26": 4, "bugfix": [4, 8], "22383": 4, "14": 4, "16adc035b1": 4, "march": 4, "22226": 4, "f5b96315fe": 4, "feb": 4, "22056": 4, "2021": [4, 7], "0a68588479": 4, "17890": 4, "be75dcd39c": 4, "type": [4, 5], "meta": 4, "76ed2a49c6": 4, "lazili": 4, "individu": 4, "manag": [4, 7], "17682": 4, "87f408b1e7": 4, "17116": 4, "b916b75079": 4, "17015": 4, "866a601b76": 4, "pylint": 4, "our": 4, "toolchain": 4, "16682": 4, "bbc627a3da": 4, "16501": 4, "cbf8001d76": 4, "synchron": 4, "after": 4, "buggfix": 4, "16464": 4, "1fba5402bb": 4, "16405": 4, "8a4cfd7341": 4, "9c94b72d44": 4, "16294": 4, "c8ef3a3539": 4, "807ad32ce5": 4, "pip": [4, 5, 6, 7], "21": 4, "compat": 4, "15576": 4, "40a2476a5d": 4, "gener": 4, "15518": 4, "68e4c4dcb0": 4, "backport": 4, "14886": 4, "6e6526a0f6": 4, "broken": 4, "14734": 4, "88bdcfa0df": 4, "14013": 4, "ac2f72c98d": 4, "tool": 4, "13767": 4, "3fd5ef3555": 4, "miss": 4, "logo": 4, "integr": 4, "13717": 4, "295d66f914": 4, "2020": 4, "grammar": 4, "warn": [4, 7], "13380": 4, "6cf76d7ac0": 4, "typo": 4, "command": 4, "13148": 4, "32971a1a2d": 4, "12955": 4, "b40dffa085": 4, "renam": 4, "rema": 4, "modul": 4, "match": [4, 7], "aip": 4, "12917": 4, "9b39f24780": 4, "dynam": 4, "form": 4, "field": [4, 5], "per": 4, "12558": 4, "2037303eef": 4, "discoveri": 4, "12466": 4, "de3b1e687b": 4, "guid": [4, 7], "12653": 4, "c34ef853c8": 4, "separ": [4, 5, 8], "out": [4, 8], "12444": 4, "0080354502": 4, "0b2": 4, "batch": 4, "12449": 4, "ae7cb4a1e2": 4, "wrong": 4, "hash": 4, "12390": 4, "6889a333cf": 4, "ref": 4, "12366": 4, "7825e8f590": 4, "12304": 4, "85a18e13d9": 4, "point": 4, "project": 4, "page": [4, 7], "cross": 4, "12212": 4, "59eb5de78c": 4, "come": 4, "0beta1": 4, "12206": 4, "b2a28d1590": 4, "script": [4, 7], "dev": 4, "12082": 4, "41bf172c1d": 4, "simplifi": 4, "express": 4, "12093": 4, "4e8f9cc8d0": 4, "black": 4, "formmatt": 4, "9550": 4, "5a439e84eb": 4, "2a1": 4, "11855": 4, "872b1566a1": 4, "25": 4, "setup": 4, "11826": 4, "349b0811c3": 4, "d200": 4, "11688": 4, "16e7129719": 4, "11487": 4, "0a0e1af800": 4, "markdown": 4, "link": [4, 7], "toc": 4, "11249": 4, "ca4238eb4d": 4, "month": 4, "11242": 4, "5220e4c384": 4, "11238": 4, "54353f8745": 4, "increas": 4, "coverag": 4, "five": 4, "differ": [4, 7], "11170": 4, "fdd9b6f65b": 4, "10543": 4, "3696c34c28": 4, "word": 4, "10528": 4, "ee7ca128a1": 4, "refernc": 4, "10483": 4, "d0e7db4024": 4, "number": 4, "fresh": 4, "9408": 4, "12af6a0800": 4, "final": 4, "cleanup": 4, "23rc1": 4, "9404": 4, "c7e5bce57f": 4, "candid": 4, "9370": 4, "f6bd817a3a": 4, "introduc": 4, "transfer": 4, "9320": 4, "0b0e4f7a4c": 4, "9026": 4, "00642a46d0": 4, "remain": 4, "wrongli": 4, "8994": 4, "375d1ca229": 4, "8898": 4, "12c5e5d8a": 4, "8891": 4, "f3521fb0e3": 4, "regener": 4, "8886": 4, "92585ca4cb": 4, "8807": 4, "2b06d0a3d": 4, "6603": 4, "unnecessari": 4, "7224": 4, "2a819b11fb": 4, "6296": 4, "deprec": 4, "pymssql": 4, "6850": 4, "m": 5, "server": [5, 7], "which": [5, 8], "some": 5, "wiki": 5, "must": 5, "exasol": 5, "specifi": [5, 6], "host": 5, "option": 5, "login": 5, "user": [5, 7], "password": 5, "here": 5, "addition": 5, "few": 5, "special": 5, "under": 5, "onto": 5, "By": [5, 7], "consid": 5, "env": 5, "var": 5, "airflow__providers_odbc__allow_driver_in_extra": 5, "allow_driver_extra": 5, "allow": 5, "function": 5, "sure": 5, "trust": [5, 7], "who": 5, "can": [5, 6, 7, 8], "edit": 5, "ui": 5, "malici": 5, "respons": 5, "demonstr": 5, "usag": 5, "microsoft": 5, "trustedconnect": 5, "ye": 5, "would": 5, "produc": 5, "attribut": 5, "environ": 5, "variabl": 5, "etc": 5, "export": 5, "airflow_conn_mssql_default": 5, "my_us": 5, "xxxxxxxxxxxx": 5, "1": [5, 6], "1433": 5, "my_databas": 5, "below": [5, 6, 7], "call": 5, "what": 5, "top": [6, 7], "8": 6, "might": [6, 8], "need": 6, "order": 6, "them": 6, "verifi": 6, "checksum": [6, 7], "signatur": [6, 7], "site": 6, "sdist": [6, 7], "asc": [6, 7], "sha512": [6, 7], "wheel": 6, "describ": 7, "download": 7, "offici": 7, "most": 7, "choos": 7, "select": 7, "down": 7, "left": 7, "whl": 7, "origin": 7, "softwar": 7, "foundat": 7, "code": 7, "how": 7, "pgp": 7, "essenti": 7, "sha": 7, "gpg": 7, "pleas": 7, "well": 7, "relev": 7, "distribut": 7, "recommend": 7, "get": [7, 8], "main": [7, 8], "directori": 7, "mirror": 7, "pgpk": 7, "ka": 7, "binari": 7, "pgpv": 7, "tar": 7, "gz": 7, "made": 7, "sat": 7, "sep": 7, "49": 7, "54": 7, "bst": 7, "rsa": 7, "cde15c6e4d3a8ec4ecf4ba4b6674e08ad7de406f": 7, "issuer": 7, "kaxilnaik": 7, "org": 7, "good": [7, 8], "kaxil": 7, "naik": 7, "unknown": 7, "aka": 7, "gmail": 7, "com": 7, "certifi": 7, "There": 7, "indic": 7, "belong": 7, "owner": 7, "primari": 7, "fingerprint": 7, "cde1": 7, "5c6e": 7, "4d3a": 7, "8ec4": 7, "ecf4": 7, "ba4b": 7, "6674": 7, "e08a": 7, "d7de": 7, "406f": 7, "correct": 7, "do": 7, "worri": 7, "certif": 7, "self": 7, "sign": 7, "why": 7, "previou": 7, "step": 7, "know": 7, "valid": 7, "alreadi": 7, "sum": 7, "shasum": 7, "512": 7, "diff": 7, "local": 7, "bin": 7, "bash": 7, "package_vers": 7, "package_nam": 7, "provider_download_dir": 7, "mktemp": 7, "d": 7, "dep": 7, "dest": 7, "curl": 7, "http": 7, "apache_airflow_providers_odbc": 7, "py3": 7, "l": 7, "o": 7, "echo": 7, "la": 7, "onc": 7, "instruct": [7, 8], "chapter": 7, "temporari": 7, "creat": 7, "independ": 8, "itself": 8, "vulner": 8, "publish": 8, "found": 8, "develop": 8, "alwai": 8, "done": 8, "branch": 8, "next": 8, "strict": 8, "semver": 8, "scope": 8, "major": 8, "break": 8, "minor": 8, "patchlevel": 8, "bug": 8, "so": 8, "except": 8, "rule": 8, "critic": 8, "reason": 8, "band": 8, "stakehold": 8, "decid": 8, "cherri": 8, "pick": 8, "older": 8, "mix": 8, "govern": 8, "model": 8, "interest": 8, "parti": 8, "test": 8}, "objects": {"airflow.providers": [[2, 0, 0, "-", "odbc"]], "airflow.providers.odbc": [[2, 1, 1, "", "__version__"], [0, 0, 0, "-", "hooks"]], "airflow.providers.odbc.hooks": [[1, 0, 0, "-", "odbc"]], "airflow.providers.odbc.hooks.odbc": [[1, 2, 1, "", "OdbcHook"]], "airflow.providers.odbc.hooks.odbc.OdbcHook": [[1, 3, 1, "", "DEFAULT_SQLALCHEMY_SCHEME"], [1, 3, 1, "", "conn_name_attr"], [1, 3, 1, "", "conn_type"], [1, 4, 1, "", "connect_kwargs"], [1, 4, 1, "", "connection"], [1, 4, 1, "", "connection_extra_lower"], [1, 4, 1, "", "database"], [1, 3, 1, "", "default_conn_name"], [1, 3, 1, "", "default_driver"], [1, 4, 1, "", "driver"], [1, 4, 1, "", "dsn"], [1, 5, 1, "", "get_conn"], [1, 5, 1, "", "get_sqlalchemy_connection"], [1, 5, 1, "", "get_uri"], [1, 3, 1, "", "hook_name"], [1, 4, 1, "", "odbc_connection_string"], [1, 4, 1, "", "sqlalchemy_scheme"], [1, 3, 1, "", "supports_autocommit"]]}, "objtypes": {"0": "py:module", "1": "py:data", "2": "py:class", "3": "py:attribute", "4": "py:property", "5": "py:method"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "data", "Python data"], "2": ["py", "class", "Python class"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "property", "Python property"], "5": ["py", "method", "Python method"]}, "titleterms": {"airflow": [0, 1, 2, 4, 6], "provid": [0, 1, 2, 4, 6], "odbc": [0, 1, 2, 4, 5, 6], "hook": [0, 1], "submodul": 0, "modul": 1, "content": [1, 2], "class": 1, "subpackag": 2, "packag": [2, 4, 6, 7], "changelog": 3, "4": [3, 4], "3": [3, 4], "0": [3, 4], "bug": 3, "fix": 3, "misc": 3, "2": [3, 4], "featur": 3, "1": [3, 4], "break": 3, "chang": 3, "apach": [4, 6], "connect": 5, "system": 5, "prerequisit": 5, "configur": 5, "instal": [6, 7], "requir": 6, "cross": 6, "depend": 6, "download": 6, "offici": 6, "from": 7, "sourc": 7, "releas": [7, 8], "integr": 7, "verifi": 7, "pypi": 7, "secur": 8, "patch": 8}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"airflow.providers.odbc.hooks": [[0, "module-airflow.providers.odbc.hooks"]], "Submodules": [[0, "submodules"]], "airflow.providers.odbc.hooks.odbc": [[1, "module-airflow.providers.odbc.hooks.odbc"]], "Module Contents": [[1, "module-contents"]], "Classes": [[1, "classes"]], "airflow.providers.odbc": [[2, "module-airflow.providers.odbc"]], "Subpackages": [[2, "subpackages"]], "Package Contents": [[2, "package-contents"]], "Changelog": [[3, "changelog"]], "4.3.0": [[3, "id1"], [4, "id1"]], "Bug Fixes": [[3, "bug-fixes"], [3, "id7"], [3, "id13"], [3, "id20"], [3, "id27"], [3, "id36"]], "Misc": [[3, "misc"], [3, "id5"], [3, "id8"], [3, "id11"], [3, "id16"], [3, "id18"], [3, "id29"], [3, "id31"], [3, "id33"]], "4.2.0": [[3, "id2"], [4, "id2"]], "Features": [[3, "features"], [3, "id22"]], "4.1.0": [[3, "id3"], [4, "id3"]], "4.0.0": [[3, "id6"], [4, "id4"]], "Breaking changes": [[3, "breaking-changes"], [3, "id24"], [3, "id35"]], "3.3.0": [[3, "id9"], [4, "id5"]], "3.2.1": [[3, "id12"], [4, "id6"]], "3.2.0": [[3, "id14"], [4, "id7"]], "3.1.2": [[3, "id17"], [4, "id8"]], "3.1.1": [[3, "id19"], [4, "id9"]], "3.1.0": [[3, "id21"], [4, "id10"]], "3.0.0": [[3, "id23"], [4, "id11"]], "2.0.4": [[3, "id26"], [4, "id12"]], "2.0.3": [[3, "id28"], [4, "id13"]], "2.0.2": [[3, "id30"], [4, "id14"]], "2.0.1": [[3, "id32"], [4, "id15"]], "2.0.0": [[3, "id34"], [4, "id16"]], "1.0.1": [[3, "id37"], [4, "id17"]], "1.0.0": [[3, "id38"], [4, "id18"]], "Package apache-airflow-providers-odbc": [[4, "package-apache-airflow-providers-odbc"], [6, "package-apache-airflow-providers-odbc"]], "ODBC Connection": [[5, "odbc-connection"]], "System prerequisites": [[5, "system-prerequisites"]], "Configuring the Connection": [[5, "configuring-the-connection"]], "apache-airflow-providers-odbc": [[6, "apache-airflow-providers-odbc"]], "Provider package": [[6, "provider-package"]], "Installation": [[6, "installation"]], "Requirements": [[6, "requirements"]], "Cross provider package dependencies": [[6, "cross-provider-package-dependencies"]], "Downloading official packages": [[6, "downloading-official-packages"]], "Installing from sources": [[7, "installing-from-sources"]], "Released packages": [[7, "released-packages"]], "Release integrity": [[7, "release-integrity"]], "Verifying PyPI releases": [[7, "verifying-pypi-releases"]], "Releasing security patches": [[8, "releasing-security-patches"]]}, "indexentries": {"airflow.providers.odbc.hooks": [[0, "module-airflow.providers.odbc.hooks"]], "module": [[0, "module-airflow.providers.odbc.hooks"], [1, "module-airflow.providers.odbc.hooks.odbc"], [2, "module-airflow.providers.odbc"]], "default_sqlalchemy_scheme (airflow.providers.odbc.hooks.odbc.odbchook attribute)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.DEFAULT_SQLALCHEMY_SCHEME"]], "odbchook (class in airflow.providers.odbc.hooks.odbc)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook"]], "airflow.providers.odbc.hooks.odbc": [[1, "module-airflow.providers.odbc.hooks.odbc"]], "conn_name_attr (airflow.providers.odbc.hooks.odbc.odbchook attribute)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.conn_name_attr"]], "conn_type (airflow.providers.odbc.hooks.odbc.odbchook attribute)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.conn_type"]], "connect_kwargs (airflow.providers.odbc.hooks.odbc.odbchook property)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.connect_kwargs"]], "connection (airflow.providers.odbc.hooks.odbc.odbchook property)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.connection"]], "connection_extra_lower (airflow.providers.odbc.hooks.odbc.odbchook property)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.connection_extra_lower"]], "database (airflow.providers.odbc.hooks.odbc.odbchook property)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.database"]], "default_conn_name (airflow.providers.odbc.hooks.odbc.odbchook attribute)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.default_conn_name"]], "default_driver (airflow.providers.odbc.hooks.odbc.odbchook attribute)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.default_driver"]], "driver (airflow.providers.odbc.hooks.odbc.odbchook property)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.driver"]], "dsn (airflow.providers.odbc.hooks.odbc.odbchook property)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.dsn"]], "get_conn() (airflow.providers.odbc.hooks.odbc.odbchook method)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.get_conn"]], "get_sqlalchemy_connection() (airflow.providers.odbc.hooks.odbc.odbchook method)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.get_sqlalchemy_connection"]], "get_uri() (airflow.providers.odbc.hooks.odbc.odbchook method)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.get_uri"]], "hook_name (airflow.providers.odbc.hooks.odbc.odbchook attribute)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.hook_name"]], "odbc_connection_string (airflow.providers.odbc.hooks.odbc.odbchook property)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.odbc_connection_string"]], "sqlalchemy_scheme (airflow.providers.odbc.hooks.odbc.odbchook property)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.sqlalchemy_scheme"]], "supports_autocommit (airflow.providers.odbc.hooks.odbc.odbchook attribute)": [[1, "airflow.providers.odbc.hooks.odbc.OdbcHook.supports_autocommit"]], "__version__ (in module airflow.providers.odbc)": [[2, "airflow.providers.odbc.__version__"]], "airflow.providers.odbc": [[2, "module-airflow.providers.odbc"]]}}) \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/security.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/security.html new file mode 100644 index 00000000000..2c899ca7ce1 --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/security.html @@ -0,0 +1,867 @@ + + + + + + + + + + + + Releasing security patches — apache-airflow-providers-odbc Documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ + +
+ + +
+
+
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+
+
+
+ +
+ + +
+ + + +
+
+ + + + + +
+
+ + + + + + + + +
+ + + + +
+ + + + + + + + + + +
+
+
+
+
+ +
+
+
+
+
+

Releasing security patches

+

Airflow providers are released independently from Airflow itself and the information about vulnerabilities +is published separately. You can upgrade providers independently from Airflow itself, following the +instructions found in Installation from PyPI.

+

When we release Provider version, the development is always done from the main branch where we prepare +the next version. The provider uses strict SemVer versioning policy. Depending on +the scope of the change, Provider will get ‘’MAJOR’’ version upgrade when there are +breaking changes, MINOR version upgrade when there are new features or PATCHLEVEL version upgrade +when there are only bug fixes (including security bugfixes) - and this is the only version that receives +security fixes by default, so you should upgrade to latest version of the provider if you want to receive +all released security fixes.

+

The only exception to that rule is when we have a critical security fix and good reason to provide an +out-of-band release for the provider, in which case stakeholders in the provider might decide to cherry-pick +and prepare a branch for an older version of the provider following the +mixed governance model +and requires interested parties to cherry-pick and test the fixes.

+
+ + + +
+ +
+
+
+
+
+

Was this entry helpful?

+
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+ + + + + + +
+ +
+
+ +
+ + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/4.3.0/security/security-model.html b/docs-archive/apache-airflow-providers-odbc/4.3.0/security/security-model.html new file mode 100644 index 00000000000..9a36716bcbb --- /dev/null +++ b/docs-archive/apache-airflow-providers-odbc/4.3.0/security/security-model.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers-odbc/stable.txt b/docs-archive/apache-airflow-providers-odbc/stable.txt index 6aba2b245a8..81911389142 100644 --- a/docs-archive/apache-airflow-providers-odbc/stable.txt +++ b/docs-archive/apache-airflow-providers-odbc/stable.txt @@ -1 +1 @@ -4.2.0 +4.3.0 \ No newline at end of file diff --git a/docs-archive/apache-airflow-providers/core-extensions/configurations.html b/docs-archive/apache-airflow-providers/core-extensions/configurations.html index 832627dab17..00cf5bc4d2e 100644 --- a/docs-archive/apache-airflow-providers/core-extensions/configurations.html +++ b/docs-archive/apache-airflow-providers/core-extensions/configurations.html @@ -581,7 +581,7 @@

ConfigurationsConfiguration Reference.

Those provided by the community-managed providers:

diff --git a/docs-archive/apache-airflow-providers/core-extensions/connections.html b/docs-archive/apache-airflow-providers/core-extensions/connections.html index a7f540161c4..3bcd9975364 100644 --- a/docs-archive/apache-airflow-providers/core-extensions/connections.html +++ b/docs-archive/apache-airflow-providers/core-extensions/connections.html @@ -601,10 +601,10 @@

Alibaba

Amazon

@@ -790,25 +790,25 @@

Github

Google

gRPC

Hashicorp

@@ -949,7 +949,7 @@

Presto

Redis

@@ -967,7 +967,7 @@

Samba

Segment

@@ -992,7 +992,7 @@

Simple Mail Transfer Protocol (SMTP)

Snowflake

@@ -1010,7 +1010,7 @@

SSH

Tableau

@@ -1022,7 +1022,7 @@

Tabular

Trino

@@ -1034,13 +1034,13 @@

Vertica

Weaviate

Yandex

diff --git a/docs-archive/apache-airflow-providers/core-extensions/executors.html b/docs-archive/apache-airflow-providers/core-extensions/executors.html index ef7939fef21..c435c6c7eea 100644 --- a/docs-archive/apache-airflow-providers/core-extensions/executors.html +++ b/docs-archive/apache-airflow-providers/core-extensions/executors.html @@ -586,7 +586,7 @@

Executors

Amazon

diff --git a/docs-archive/apache-airflow-providers/core-extensions/extra-links.html b/docs-archive/apache-airflow-providers/core-extensions/extra-links.html index dfe44c2b22e..8dceabbe0e2 100644 --- a/docs-archive/apache-airflow-providers/core-extensions/extra-links.html +++ b/docs-archive/apache-airflow-providers/core-extensions/extra-links.html @@ -587,13 +587,13 @@

Extra Links

Amazon

@@ -611,112 +611,112 @@

dbt Cloud

Google

diff --git a/docs-archive/apache-airflow-providers/core-extensions/logging.html b/docs-archive/apache-airflow-providers/core-extensions/logging.html index bdbdbc70878..55c47e309f1 100644 --- a/docs-archive/apache-airflow-providers/core-extensions/logging.html +++ b/docs-archive/apache-airflow-providers/core-extensions/logging.html @@ -589,10 +589,10 @@

Alibaba

Amazon

-

Logging for Tasks

+

Logging for Tasks

@@ -619,7 +619,7 @@

Microsoft Azure

Redis

-

Writing logs to Redis

+

Writing logs to Redis

  • RedisTaskHandler

diff --git a/docs-archive/apache-airflow-providers/core-extensions/notifications.html b/docs-archive/apache-airflow-providers/core-extensions/notifications.html index b2c17c6f9f2..bbcd272ca8b 100644 --- a/docs-archive/apache-airflow-providers/core-extensions/notifications.html +++ b/docs-archive/apache-airflow-providers/core-extensions/notifications.html @@ -583,9 +583,9 @@

Notifications

Amazon

diff --git a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html b/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html index 2f4e53ab223..5e30cd70720 100644 --- a/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html +++ b/docs-archive/apache-airflow-providers/core-extensions/secrets-backends.html @@ -588,20 +588,20 @@

Secret backends

Amazon

diff --git a/docs-archive/apache-airflow-providers/installing-from-sources.html b/docs-archive/apache-airflow-providers/installing-from-sources.html index 540c7f43b9d..b8f608ef1d0 100644 --- a/docs-archive/apache-airflow-providers/installing-from-sources.html +++ b/docs-archive/apache-airflow-providers/installing-from-sources.html @@ -636,6 +636,8 @@

Released packagesExasol +
  • Fab
  • +
  • Facebook
  • File Transfer Protocol (FTP)
  • diff --git a/docs-archive/apache-airflow-providers/objects.inv b/docs-archive/apache-airflow-providers/objects.inv index a1f25385453..9024bf86902 100644 Binary files a/docs-archive/apache-airflow-providers/objects.inv and b/docs-archive/apache-airflow-providers/objects.inv differ diff --git a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/apache.html b/docs-archive/apache-airflow-providers/operators-and-hooks-ref/apache.html index a286aae1a2f..ad25f11875d 100644 --- a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/apache.html +++ b/docs-archive/apache-airflow-providers/operators-and-hooks-ref/apache.html @@ -877,10 +877,10 @@

    Apache Hive to Amazon DynamoDB

    Amazon DynamoDB

    Operator guide
    -

    Apache Hive to Amazon DynamoDB

    +

    Apache Hive to Amazon DynamoDB

    Python API
    -

    airflow.providers.amazon.aws.transfers.hive_to_dynamodb

    +

    airflow.providers.amazon.aws.transfers.hive_to_dynamodb

    Provider

    apache-airflow-providers-amazon

    @@ -1016,7 +1016,7 @@

    Apache Cassandra to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Python API
    -

    airflow.providers.google.cloud.transfers.cassandra_to_gcs

    +

    airflow.providers.google.cloud.transfers.cassandra_to_gcs

    Provider

    apache-airflow-providers-google

    diff --git a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/aws.html b/docs-archive/apache-airflow-providers/operators-and-hooks-ref/aws.html index 11a972bf53d..47ad047b32a 100644 --- a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/aws.html +++ b/docs-archive/apache-airflow-providers/operators-and-hooks-ref/aws.html @@ -573,7 +573,7 @@

    AWS: Amazon Web Services

    Airflow has support for Amazon Web Services.

    -

    All hooks are based on airflow.providers.amazon.aws.hooks.base_aws.

    +

    All hooks are based on airflow.providers.amazon.aws.hooks.base_aws.

    Services

    These integrations allow you to perform various operations within the Amazon Web Services.

    @@ -581,13 +581,13 @@

    Services

    Operators
    -

    airflow.providers.amazon.aws.operators.appflow.

    +

    airflow.providers.amazon.aws.operators.appflow.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.appflow.

    +

    airflow.providers.amazon.aws.hooks.appflow.

    Guides
    -

    Amazon AppFlow.

    +

    Amazon AppFlow.

    Provider

    apache-airflow-providers-amazon

    @@ -601,16 +601,16 @@

    Amazon Appflow

    Operators
    -

    airflow.providers.amazon.aws.operators.athena.

    +

    airflow.providers.amazon.aws.operators.athena.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.athena.

    +

    airflow.providers.amazon.aws.hooks.athena.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.athena.

    +

    airflow.providers.amazon.aws.sensors.athena.

    Guides
    -

    Amazon Athena.

    +

    Amazon Athena.

    Provider

    apache-airflow-providers-amazon

    @@ -624,7 +624,7 @@

    Amazon Athena

    Hooks
    -

    airflow.providers.amazon.aws.hooks.chime.

    +

    airflow.providers.amazon.aws.hooks.chime.

    Provider

    apache-airflow-providers-amazon

    @@ -638,16 +638,16 @@

    Amazon Chime

    Operators
    -

    airflow.providers.amazon.aws.operators.cloud_formation.

    +

    airflow.providers.amazon.aws.operators.cloud_formation.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.cloud_formation.

    +

    airflow.providers.amazon.aws.hooks.cloud_formation.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.cloud_formation.

    +

    airflow.providers.amazon.aws.sensors.cloud_formation.

    Guides
    -

    AWS CloudFormation.

    +

    AWS CloudFormation.

    Provider

    apache-airflow-providers-amazon

    @@ -661,7 +661,7 @@

    Amazon CloudFormationAmazon CloudWatch Logs

    Hooks
    -

    airflow.providers.amazon.aws.hooks.logs.

    +

    airflow.providers.amazon.aws.hooks.logs.

    Provider

    apache-airflow-providers-amazon

    @@ -675,13 +675,13 @@

    Amazon CloudWatch LogsAmazon DataSync

    Operators
    -

    airflow.providers.amazon.aws.operators.datasync.

    +

    airflow.providers.amazon.aws.operators.datasync.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.datasync.

    +

    airflow.providers.amazon.aws.hooks.datasync.

    Guides
    -

    AWS DataSync.

    +

    AWS DataSync.

    Provider

    apache-airflow-providers-amazon

    @@ -695,10 +695,10 @@

    Amazon DataSync

    Hooks
    -

    airflow.providers.amazon.aws.hooks.dynamodb.

    +

    airflow.providers.amazon.aws.hooks.dynamodb.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.dynamodb.

    +

    airflow.providers.amazon.aws.sensors.dynamodb.

    Provider

    apache-airflow-providers-amazon

    @@ -712,16 +712,16 @@

    Amazon DynamoDB

    Operators
    -

    airflow.providers.amazon.aws.operators.ec2.

    +

    airflow.providers.amazon.aws.operators.ec2.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.ec2.

    +

    airflow.providers.amazon.aws.hooks.ec2.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.ec2.

    +

    airflow.providers.amazon.aws.sensors.ec2.

    Guides
    -

    Amazon Elastic Compute Cloud (EC2).

    +

    Amazon Elastic Compute Cloud (EC2).

    Provider

    apache-airflow-providers-amazon

    @@ -735,13 +735,13 @@

    Amazon EC2

    Operators
    -

    airflow.providers.amazon.aws.operators.ecs.

    +

    airflow.providers.amazon.aws.operators.ecs.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.ecs.

    +

    airflow.providers.amazon.aws.hooks.ecs.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.ecs.

    +

    airflow.providers.amazon.aws.sensors.ecs.

    Provider

    apache-airflow-providers-amazon

    @@ -755,7 +755,7 @@

    Amazon ECS

    Hooks
    -

    airflow.providers.amazon.aws.hooks.ecr.

    +

    airflow.providers.amazon.aws.hooks.ecr.

    Provider

    apache-airflow-providers-amazon

    @@ -769,16 +769,16 @@

    Amazon Elastic Container Registry (ECR)

    Operators
    -

    airflow.providers.amazon.aws.operators.eks.

    +

    airflow.providers.amazon.aws.operators.eks.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.eks.

    +

    airflow.providers.amazon.aws.hooks.eks.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.eks.

    +

    airflow.providers.amazon.aws.sensors.eks.

    Guides
    -

    Amazon Elastic Kubernetes Service (EKS).

    +

    Amazon Elastic Kubernetes Service (EKS).

    Provider

    apache-airflow-providers-amazon

    @@ -792,7 +792,7 @@

    Amazon Elastic Kubernetes Service (EKS)

    Hooks
    -

    airflow.providers.amazon.aws.hooks.elasticache_replication_group.

    +

    airflow.providers.amazon.aws.hooks.elasticache_replication_group.

    Provider

    apache-airflow-providers-amazon

    @@ -806,16 +806,16 @@

    Amazon ElastiCache

    Operators
    -

    airflow.providers.amazon.aws.operators.emr.

    +

    airflow.providers.amazon.aws.operators.emr.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.emr.

    +

    airflow.providers.amazon.aws.hooks.emr.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.emr.

    +

    airflow.providers.amazon.aws.sensors.emr.

    Guides
    -

    Amazon EMR.

    +

    Amazon EMR.

    Provider

    apache-airflow-providers-amazon

    @@ -829,16 +829,16 @@

    Amazon EMR

    Operators
    -

    airflow.providers.amazon.aws.operators.emr.

    +

    airflow.providers.amazon.aws.operators.emr.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.emr.

    +

    airflow.providers.amazon.aws.hooks.emr.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.emr.

    +

    airflow.providers.amazon.aws.sensors.emr.

    Guides
    -

    Amazon EMR on Amazon EKS.

    +

    Amazon EMR on Amazon EKS.

    Provider

    apache-airflow-providers-amazon

    @@ -852,13 +852,13 @@

    Amazon EMR on EKS

    Operators
    -

    airflow.providers.amazon.aws.operators.eventbridge.

    +

    airflow.providers.amazon.aws.operators.eventbridge.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.eventbridge.

    +

    airflow.providers.amazon.aws.hooks.eventbridge.

    Guides
    -

    Amazon EventBridge.

    +

    Amazon EventBridge.

    Provider

    apache-airflow-providers-amazon

    @@ -872,16 +872,16 @@

    Amazon EventBridge

    Operators
    -

    airflow.providers.amazon.aws.operators.glacier.

    +

    airflow.providers.amazon.aws.operators.glacier.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.glacier.

    +

    airflow.providers.amazon.aws.hooks.glacier.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.glacier.

    +

    airflow.providers.amazon.aws.sensors.glacier.

    Guides
    -

    Amazon S3 Glacier.

    +

    Amazon S3 Glacier.

    Provider

    apache-airflow-providers-amazon

    @@ -895,7 +895,7 @@

    Amazon Glacier

    Hooks
    -

    airflow.providers.amazon.aws.hooks.kinesis.

    +

    airflow.providers.amazon.aws.hooks.kinesis.

    Provider

    apache-airflow-providers-amazon

    @@ -909,16 +909,16 @@

    Amazon Kinesis Data Firehose

    Operators
    -

    airflow.providers.amazon.aws.operators.quicksight.

    +

    airflow.providers.amazon.aws.operators.quicksight.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.quicksight.

    +

    airflow.providers.amazon.aws.hooks.quicksight.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.quicksight.

    +

    airflow.providers.amazon.aws.sensors.quicksight.

    Guides
    -

    Amazon QuickSight.

    +

    Amazon QuickSight.

    Provider

    apache-airflow-providers-amazon

    @@ -932,16 +932,16 @@

    Amazon QuickSight

    Operators
    -

    airflow.providers.amazon.aws.operators.rds.

    +

    airflow.providers.amazon.aws.operators.rds.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.rds.

    +

    airflow.providers.amazon.aws.hooks.rds.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.rds.

    +

    airflow.providers.amazon.aws.sensors.rds.

    Guides
    -

    Amazon Relational Database Service (RDS).

    +

    Amazon Relational Database Service (RDS).

    Provider

    apache-airflow-providers-amazon

    @@ -955,16 +955,16 @@

    Amazon RDS

    Operators
    -

    airflow.providers.amazon.aws.operators.redshift_cluster, airflow.providers.amazon.aws.operators.redshift_data.

    +

    airflow.providers.amazon.aws.operators.redshift_cluster, airflow.providers.amazon.aws.operators.redshift_data.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.redshift_sql, airflow.providers.amazon.aws.hooks.redshift_cluster, airflow.providers.amazon.aws.hooks.redshift_data.

    +

    airflow.providers.amazon.aws.hooks.redshift_sql, airflow.providers.amazon.aws.hooks.redshift_cluster, airflow.providers.amazon.aws.hooks.redshift_data.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.redshift_cluster.

    +

    airflow.providers.amazon.aws.sensors.redshift_cluster.

    Guides
    -

    Amazon Redshift SQL, Amazon Redshift (Cluster).

    +

    Amazon Redshift SQL, Amazon Redshift (Cluster).

    Provider

    apache-airflow-providers-amazon

    @@ -978,16 +978,16 @@

    Amazon Redshift

    Operators
    -

    airflow.providers.amazon.aws.operators.sagemaker.

    +

    airflow.providers.amazon.aws.operators.sagemaker.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.sagemaker.

    +

    airflow.providers.amazon.aws.hooks.sagemaker.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.sagemaker.

    +

    airflow.providers.amazon.aws.sensors.sagemaker.

    Guides
    -

    Amazon SageMaker.

    +

    Amazon SageMaker.

    Provider

    apache-airflow-providers-amazon

    @@ -1001,7 +1001,7 @@

    Amazon SageMaker

    Hooks
    -

    airflow.providers.amazon.aws.hooks.secrets_manager.

    +

    airflow.providers.amazon.aws.hooks.secrets_manager.

    Provider

    apache-airflow-providers-amazon

    @@ -1015,7 +1015,7 @@

    Amazon SecretsManagerAmazon Simple Email Service (SES)

    Hooks
    -

    airflow.providers.amazon.aws.hooks.ses.

    +

    airflow.providers.amazon.aws.hooks.ses.

    Provider

    apache-airflow-providers-amazon

    @@ -1029,13 +1029,13 @@

    Amazon Simple Email Service (SES)

    Operators
    -

    airflow.providers.amazon.aws.operators.sns.

    +

    airflow.providers.amazon.aws.operators.sns.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.sns.

    +

    airflow.providers.amazon.aws.hooks.sns.

    Guides
    -

    Amazon Simple Notification Service (SNS).

    +

    Amazon Simple Notification Service (SNS).

    Provider

    apache-airflow-providers-amazon

    @@ -1049,16 +1049,16 @@

    Amazon Simple Notification Service (SNS)

    Operators
    -

    airflow.providers.amazon.aws.operators.sqs.

    +

    airflow.providers.amazon.aws.operators.sqs.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.sqs.

    +

    airflow.providers.amazon.aws.hooks.sqs.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.sqs.

    +

    airflow.providers.amazon.aws.sensors.sqs.

    Guides
    -

    Amazon Simple Queue Service (SQS).

    +

    Amazon Simple Queue Service (SQS).

    Provider

    apache-airflow-providers-amazon

    @@ -1072,16 +1072,16 @@

    Amazon Simple Queue Service (SQS)

    Operators
    -

    airflow.providers.amazon.aws.operators.s3.

    +

    airflow.providers.amazon.aws.operators.s3.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.s3.

    +

    airflow.providers.amazon.aws.hooks.s3.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.s3.

    +

    airflow.providers.amazon.aws.sensors.s3.

    Guides
    -

    Amazon S3.

    +

    Amazon S3.

    Provider

    apache-airflow-providers-amazon

    @@ -1095,7 +1095,7 @@

    Amazon Simple Storage Service (S3)

    Hooks
    -

    airflow.providers.amazon.aws.hooks.ssm.

    +

    airflow.providers.amazon.aws.hooks.ssm.

    Provider

    apache-airflow-providers-amazon

    @@ -1109,7 +1109,7 @@

    Amazon Systems Manager (SSM)

    Hooks
    -

    airflow.providers.amazon.aws.hooks.verified_permissions.

    +

    airflow.providers.amazon.aws.hooks.verified_permissions.

    Provider

    apache-airflow-providers-amazon

    @@ -1123,13 +1123,13 @@

    Amazon Verified Permissions

    Operators
    -

    airflow.providers.amazon.aws.operators.base_aws.

    +

    airflow.providers.amazon.aws.operators.base_aws.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.base_aws.

    +

    airflow.providers.amazon.aws.hooks.base_aws.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.base_aws.

    +

    airflow.providers.amazon.aws.sensors.base_aws.

    Provider

    apache-airflow-providers-amazon

    @@ -1143,16 +1143,16 @@

    Amazon Web Services

    Operators
    -

    airflow.providers.amazon.aws.operators.batch.

    +

    airflow.providers.amazon.aws.operators.batch.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.batch_client, airflow.providers.amazon.aws.hooks.batch_waiters.

    +

    airflow.providers.amazon.aws.hooks.batch_client, airflow.providers.amazon.aws.hooks.batch_waiters.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.batch.

    +

    airflow.providers.amazon.aws.sensors.batch.

    Guides
    -

    AWS Batch.

    +

    AWS Batch.

    Provider

    apache-airflow-providers-amazon

    @@ -1166,16 +1166,16 @@

    AWS Batch

    Operators
    -

    airflow.providers.amazon.aws.operators.dms.

    +

    airflow.providers.amazon.aws.operators.dms.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.dms.

    +

    airflow.providers.amazon.aws.hooks.dms.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.dms.

    +

    airflow.providers.amazon.aws.sensors.dms.

    Guides
    -

    AWS Database Migration Service (DMS).

    +

    AWS Database Migration Service (DMS).

    Provider

    apache-airflow-providers-amazon

    @@ -1189,16 +1189,16 @@

    AWS Database Migration Service

    Operators
    -

    airflow.providers.amazon.aws.operators.glue, airflow.providers.amazon.aws.operators.glue_crawler.

    +

    airflow.providers.amazon.aws.operators.glue, airflow.providers.amazon.aws.operators.glue_crawler.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.glue, airflow.providers.amazon.aws.hooks.glue_crawler, airflow.providers.amazon.aws.hooks.glue_catalog.

    +

    airflow.providers.amazon.aws.hooks.glue, airflow.providers.amazon.aws.hooks.glue_crawler, airflow.providers.amazon.aws.hooks.glue_catalog.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.glue, airflow.providers.amazon.aws.sensors.glue_crawler, airflow.providers.amazon.aws.sensors.glue_catalog_partition.

    +

    airflow.providers.amazon.aws.sensors.glue, airflow.providers.amazon.aws.sensors.glue_crawler, airflow.providers.amazon.aws.sensors.glue_catalog_partition.

    Guides
    -

    AWS Glue.

    +

    AWS Glue.

    Provider

    apache-airflow-providers-amazon

    @@ -1212,13 +1212,13 @@

    AWS Glue

    Operators
    -

    airflow.providers.amazon.aws.operators.glue_databrew.

    +

    airflow.providers.amazon.aws.operators.glue_databrew.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.glue_databrew.

    +

    airflow.providers.amazon.aws.hooks.glue_databrew.

    Guides
    -

    AWS Glue DataBrew.

    +

    AWS Glue DataBrew.

    Provider

    apache-airflow-providers-amazon

    @@ -1232,16 +1232,16 @@

    AWS Glue DataBrew

    Operators
    -

    airflow.providers.amazon.aws.operators.lambda_function.

    +

    airflow.providers.amazon.aws.operators.lambda_function.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.lambda_function.

    +

    airflow.providers.amazon.aws.hooks.lambda_function.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.lambda_function.

    +

    airflow.providers.amazon.aws.sensors.lambda_function.

    Guides
    -

    AWS Lambda.

    +

    AWS Lambda.

    Provider

    apache-airflow-providers-amazon

    @@ -1255,7 +1255,7 @@

    AWS Lambda

    Hooks
    -

    airflow.providers.amazon.aws.hooks.sts.

    +

    airflow.providers.amazon.aws.hooks.sts.

    Provider

    apache-airflow-providers-amazon

    @@ -1269,16 +1269,16 @@

    AWS Security Token Service (STS)

    Operators
    -

    airflow.providers.amazon.aws.operators.step_function.

    +

    airflow.providers.amazon.aws.operators.step_function.

    Hooks
    -

    airflow.providers.amazon.aws.hooks.step_function.

    +

    airflow.providers.amazon.aws.hooks.step_function.

    Sensors
    -

    airflow.providers.amazon.aws.sensors.step_function.

    +

    airflow.providers.amazon.aws.sensors.step_function.

    Guides
    -

    AWS Step Functions.

    +

    AWS Step Functions.

    Provider

    apache-airflow-providers-amazon

    @@ -1302,10 +1302,10 @@

    Amazon DynamoDB to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    Amazon DynamoDB to Amazon S3

    +

    Amazon DynamoDB to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.dynamodb_to_s3

    +

    airflow.providers.amazon.aws.transfers.dynamodb_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1322,10 +1322,10 @@

    Google Cloud Storage (GCS) to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    Google Cloud Storage to Amazon S3 transfer operator

    +

    Google Cloud Storage to Amazon S3 transfer operator

    Python API
    -

    airflow.providers.amazon.aws.transfers.gcs_to_s3

    +

    airflow.providers.amazon.aws.transfers.gcs_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1342,10 +1342,10 @@

    Amazon Glacier to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Amazon S3 Glacier to GCS

    +

    Amazon S3 Glacier to GCS

    Python API
    -

    airflow.providers.amazon.aws.transfers.glacier_to_gcs

    +

    airflow.providers.amazon.aws.transfers.glacier_to_gcs

    Provider

    apache-airflow-providers-amazon

    @@ -1362,10 +1362,10 @@

    Google to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    Google API to Amazon S3

    +

    Google API to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.google_api_to_s3

    +

    airflow.providers.amazon.aws.transfers.google_api_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1382,10 +1382,10 @@

    Apache Hive to Amazon DynamoDB

    Amazon DynamoDB

    Operator guide
    -

    Apache Hive to Amazon DynamoDB

    +

    Apache Hive to Amazon DynamoDB

    Python API
    -

    airflow.providers.amazon.aws.transfers.hive_to_dynamodb

    +

    airflow.providers.amazon.aws.transfers.hive_to_dynamodb

    Provider

    apache-airflow-providers-amazon

    @@ -1402,10 +1402,10 @@

    Hypertext Transfer Protocol (HTTP) to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    HTTP to Amazon S3

    +

    HTTP to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.http_to_s3

    +

    airflow.providers.amazon.aws.transfers.http_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1422,10 +1422,10 @@

    Internet Message Access Protocol (IMAP) to Amazon Simple Storage Service (S3

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    Imap Attachment to Amazon S3

    +

    Imap Attachment to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.imap_attachment_to_s3

    +

    airflow.providers.amazon.aws.transfers.imap_attachment_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1442,10 +1442,10 @@

    MongoDB to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    MongoDB to Amazon S3

    +

    MongoDB to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.mongo_to_s3

    +

    airflow.providers.amazon.aws.transfers.mongo_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1462,10 +1462,10 @@

    Amazon Redshift to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    Amazon Redshift to Amazon S3

    +

    Amazon Redshift to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.redshift_to_s3

    +

    airflow.providers.amazon.aws.transfers.redshift_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1482,10 +1482,10 @@

    Amazon Simple Storage Service (S3) to Amazon Redshift

    Amazon Redshift

    Operator guide
    -

    Amazon S3 to Amazon Redshift

    +

    Amazon S3 to Amazon Redshift

    Python API
    -

    airflow.providers.amazon.aws.transfers.s3_to_redshift

    +

    airflow.providers.amazon.aws.transfers.s3_to_redshift

    Provider

    apache-airflow-providers-amazon

    @@ -1502,10 +1502,10 @@

    Amazon Simple Storage Service (S3) to SSH File Transfer Protocol (SFTP)

    SSH File Transfer Protocol (SFTP)

    Operator guide
    -

    Amazon S3 to SFTP

    +

    Amazon S3 to SFTP

    Python API
    -

    airflow.providers.amazon.aws.transfers.s3_to_sftp

    +

    airflow.providers.amazon.aws.transfers.s3_to_sftp

    Provider

    apache-airflow-providers-amazon

    @@ -1522,10 +1522,10 @@

    SSH File Transfer Protocol (SFTP) to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    SFTP to Amazon S3

    +

    SFTP to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.sftp_to_s3

    +

    airflow.providers.amazon.aws.transfers.sftp_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1542,10 +1542,10 @@

    Amazon Simple Storage Service (S3) to File Transfer Protocol (FTP)

    File Transfer Protocol (FTP)

    Operator guide
    -

    Amazon S3 to FTP

    +

    Amazon S3 to FTP

    Python API
    -

    airflow.providers.amazon.aws.transfers.s3_to_ftp

    +

    airflow.providers.amazon.aws.transfers.s3_to_ftp

    Provider

    apache-airflow-providers-amazon

    @@ -1562,7 +1562,7 @@

    Exasol to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Python API
    -

    airflow.providers.amazon.aws.transfers.exasol_to_s3

    +

    airflow.providers.amazon.aws.transfers.exasol_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1579,10 +1579,10 @@

    File Transfer Protocol (FTP) to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    FTP to Amazon S3

    +

    FTP to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.ftp_to_s3

    +

    airflow.providers.amazon.aws.transfers.ftp_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1599,10 +1599,10 @@

    Salesforce to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    Salesforce to Amazon S3

    +

    Salesforce to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.salesforce_to_s3

    +

    airflow.providers.amazon.aws.transfers.salesforce_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1616,10 +1616,10 @@

    Local to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    Local Filesystem to Amazon S3

    +

    Local Filesystem to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.local_to_s3

    +

    airflow.providers.amazon.aws.transfers.local_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1636,10 +1636,10 @@

    Common SQL to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    SQL to Amazon S3

    +

    SQL to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.sql_to_s3

    +

    airflow.providers.amazon.aws.transfers.sql_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1656,10 +1656,10 @@

    Amazon Simple Storage Service (S3) to Common SQL

    Common SQL

    Operator guide
    -

    Amazon S3 to SQL

    +

    Amazon S3 to SQL

    Python API
    -

    airflow.providers.amazon.aws.transfers.s3_to_sql

    +

    airflow.providers.amazon.aws.transfers.s3_to_sql

    Provider

    apache-airflow-providers-amazon

    @@ -1676,7 +1676,7 @@

    Amazon Web Services to Amazon Web Services

    Amazon Web Services

    Python API
    -

    airflow.providers.amazon.aws.transfers.base

    +

    airflow.providers.amazon.aws.transfers.base

    Provider

    apache-airflow-providers-amazon

    @@ -1693,10 +1693,10 @@

    Microsoft Azure Blob Storage to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    Azure Blob Storage to Amazon S3 transfer operator

    +

    Azure Blob Storage to Amazon S3 transfer operator

    Python API
    -

    airflow.providers.amazon.aws.transfers.azure_blob_to_s3

    +

    airflow.providers.amazon.aws.transfers.azure_blob_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1730,10 +1730,10 @@

    Amazon Simple Storage Service (S3) to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Transfer Data from Amazon S3 to Google Cloud Storage

    +

    Transfer Data from Amazon S3 to Google Cloud Storage

    Python API
    -

    airflow.providers.google.cloud.transfers.s3_to_gcs

    +

    airflow.providers.google.cloud.transfers.s3_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1767,10 +1767,10 @@

    Amazon Simple Storage Service (S3) to Snowflake

    Snowflake

    Operator guide
    -

    CopyFromExternalStageToSnowflakeOperator

    +

    CopyFromExternalStageToSnowflakeOperator

    Python API
    -

    airflow.providers.snowflake.transfers.copy_into_snowflake

    +

    airflow.providers.snowflake.transfers.copy_into_snowflake

    Provider

    apache-airflow-providers-snowflake

    diff --git a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/azure.html b/docs-archive/apache-airflow-providers/operators-and-hooks-ref/azure.html index f13e464f7ba..86027159058 100644 --- a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/azure.html +++ b/docs-archive/apache-airflow-providers/operators-and-hooks-ref/azure.html @@ -811,10 +811,10 @@

    Microsoft Azure Blob Storage to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    Azure Blob Storage to Amazon S3 transfer operator

    +

    Azure Blob Storage to Amazon S3 transfer operator

    Python API
    -

    airflow.providers.amazon.aws.transfers.azure_blob_to_s3

    +

    airflow.providers.amazon.aws.transfers.azure_blob_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -831,10 +831,10 @@

    Microsoft Azure FileShare to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Transfers data from Azure FileShare Storage to Google Cloud Storage

    +

    Transfers data from Azure FileShare Storage to Google Cloud Storage

    Python API
    -

    airflow.providers.google.cloud.transfers.azure_fileshare_to_gcs

    +

    airflow.providers.google.cloud.transfers.azure_fileshare_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -851,7 +851,7 @@

    Microsoft Azure Data Lake Storage to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Python API
    -

    airflow.providers.google.cloud.transfers.adls_to_gcs

    +

    airflow.providers.google.cloud.transfers.adls_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -868,10 +868,10 @@

    Microsoft Azure Blob Storage to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Azure Blob Storage to Google Cloud Storage (GCS) Transfer Operator

    +

    Azure Blob Storage to Google Cloud Storage (GCS) Transfer Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.azure_blob_to_gcs

    +

    airflow.providers.google.cloud.transfers.azure_blob_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -979,7 +979,7 @@

    Microsoft Azure Blob Storage to Snowflake

    Snowflake

    Python API
    -

    airflow.providers.snowflake.transfers.copy_into_snowflake

    +

    airflow.providers.snowflake.transfers.copy_into_snowflake

    Provider

    apache-airflow-providers-snowflake

    diff --git a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/google.html b/docs-archive/apache-airflow-providers/operators-and-hooks-ref/google.html index 3b425aa35ce..ee054ef37d1 100644 --- a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/google.html +++ b/docs-archive/apache-airflow-providers/operators-and-hooks-ref/google.html @@ -573,9 +573,9 @@

    Google

    Airflow has support for the Google service.

    -

    All hooks are based on airflow.providers.google.common.hooks.base_google.GoogleBaseHook. Some integration -also use airflow.providers.google.common.hooks.discovery_api.

    -

    See the Google Cloud connection type documentation to +

    All hooks are based on airflow.providers.google.common.hooks.base_google.GoogleBaseHook. Some integration +also use airflow.providers.google.common.hooks.discovery_api.

    +

    See the Google Cloud connection type documentation to configure connections to Google services.

    Google Cloud

    @@ -592,13 +592,13 @@

    Services

    Operators
    -

    airflow.providers.google.cloud.operators.automl.

    +

    airflow.providers.google.cloud.operators.automl.

    Hooks
    -

    airflow.providers.google.cloud.hooks.automl.

    +

    airflow.providers.google.cloud.hooks.automl.

    Guides
    -

    Google Cloud AutoML Operators.

    +

    Google Cloud AutoML Operators.

    Provider

    apache-airflow-providers-google

    @@ -612,16 +612,16 @@

    Google AutoML

    Operators
    -

    airflow.providers.google.cloud.operators.bigquery.

    +

    airflow.providers.google.cloud.operators.bigquery.

    Hooks
    -

    airflow.providers.google.cloud.hooks.bigquery.

    +

    airflow.providers.google.cloud.hooks.bigquery.

    Sensors
    -

    airflow.providers.google.cloud.sensors.bigquery.

    +

    airflow.providers.google.cloud.sensors.bigquery.

    Guides
    -

    Google Cloud BigQuery Operators.

    +

    Google Cloud BigQuery Operators.

    Provider

    apache-airflow-providers-google

    @@ -635,16 +635,16 @@

    Google BigQuery

    Operators
    -

    airflow.providers.google.cloud.operators.bigquery_dts.

    +

    airflow.providers.google.cloud.operators.bigquery_dts.

    Hooks
    -

    airflow.providers.google.cloud.hooks.bigquery_dts.

    +

    airflow.providers.google.cloud.hooks.bigquery_dts.

    Sensors
    -

    airflow.providers.google.cloud.sensors.bigquery_dts.

    +

    airflow.providers.google.cloud.sensors.bigquery_dts.

    Guides
    -

    Google Cloud BigQuery Data Transfer Service Operators.

    +

    Google Cloud BigQuery Data Transfer Service Operators.

    Provider

    apache-airflow-providers-google

    @@ -658,16 +658,16 @@

    Google BigQuery Data Transfer Service

    Operators
    -

    airflow.providers.google.cloud.operators.bigtable.

    +

    airflow.providers.google.cloud.operators.bigtable.

    Hooks
    -

    airflow.providers.google.cloud.hooks.bigtable.

    +

    airflow.providers.google.cloud.hooks.bigtable.

    Sensors
    -

    airflow.providers.google.cloud.sensors.bigtable.

    +

    airflow.providers.google.cloud.sensors.bigtable.

    Guides
    -

    Google Cloud Bigtable Operators.

    +

    Google Cloud Bigtable Operators.

    Provider

    apache-airflow-providers-google

    @@ -681,16 +681,16 @@

    Google Bigtable

    Operators
    -

    airflow.providers.google.marketing_platform.operators.campaign_manager.

    +

    airflow.providers.google.marketing_platform.operators.campaign_manager.

    Hooks
    -

    airflow.providers.google.marketing_platform.hooks.campaign_manager.

    +

    airflow.providers.google.marketing_platform.hooks.campaign_manager.

    Sensors
    -

    airflow.providers.google.marketing_platform.sensors.campaign_manager.

    +

    airflow.providers.google.marketing_platform.sensors.campaign_manager.

    Guides
    -

    Google Campaign Manager Operators.

    +

    Google Campaign Manager Operators.

    Provider

    apache-airflow-providers-google

    @@ -704,13 +704,13 @@

    Google Campaign ManagerGoogle Cloud Build

    Operators
    -

    airflow.providers.google.cloud.operators.cloud_build.

    +

    airflow.providers.google.cloud.operators.cloud_build.

    Hooks
    -

    airflow.providers.google.cloud.hooks.cloud_build.

    +

    airflow.providers.google.cloud.hooks.cloud_build.

    Guides
    -

    Google Cloud Build Operators.

    +

    Google Cloud Build Operators.

    Provider

    apache-airflow-providers-google

    @@ -724,7 +724,7 @@

    Google Cloud Build

    Operators
    -

    airflow.providers.google.cloud.operators.cloud_base.

    +

    airflow.providers.google.cloud.operators.cloud_base.

    Provider

    apache-airflow-providers-google

    @@ -738,13 +738,13 @@

    Google Cloud Common

    Operators
    -

    airflow.providers.google.cloud.operators.dlp.

    +

    airflow.providers.google.cloud.operators.dlp.

    Hooks
    -

    airflow.providers.google.cloud.hooks.dlp.

    +

    airflow.providers.google.cloud.hooks.dlp.

    Guides
    -

    Google Cloud Data Loss Prevention Operator.

    +

    Google Cloud Data Loss Prevention Operator.

    Provider

    apache-airflow-providers-google

    @@ -758,13 +758,13 @@

    Google Cloud Data Loss Prevention (DLP)

    Operators
    -

    airflow.providers.google.firebase.operators.firestore.

    +

    airflow.providers.google.firebase.operators.firestore.

    Hooks
    -

    airflow.providers.google.firebase.hooks.firestore.

    +

    airflow.providers.google.firebase.hooks.firestore.

    Guides
    -

    Google Cloud Firestore Operators.

    +

    Google Cloud Firestore Operators.

    Provider

    apache-airflow-providers-google

    @@ -778,13 +778,13 @@

    Google Cloud FirestoreGoogle Cloud Functions

    Operators
    -

    airflow.providers.google.cloud.operators.functions.

    +

    airflow.providers.google.cloud.operators.functions.

    Hooks
    -

    airflow.providers.google.cloud.hooks.functions.

    +

    airflow.providers.google.cloud.hooks.functions.

    Guides
    -

    Google Cloud Functions Operators.

    +

    Google Cloud Functions Operators.

    Provider

    apache-airflow-providers-google

    @@ -798,7 +798,7 @@

    Google Cloud FunctionsGoogle Cloud Key Management Service (KMS)

    Hooks
    -

    airflow.providers.google.cloud.hooks.kms.

    +

    airflow.providers.google.cloud.hooks.kms.

    Provider

    apache-airflow-providers-google

    @@ -812,13 +812,13 @@

    Google Cloud Key Management Service (KMS)

    Operators
    -

    airflow.providers.google.cloud.operators.life_sciences.

    +

    airflow.providers.google.cloud.operators.life_sciences.

    Hooks
    -

    airflow.providers.google.cloud.hooks.life_sciences.

    +

    airflow.providers.google.cloud.hooks.life_sciences.

    Guides
    -

    Google Cloud Life Sciences Operators.

    +

    Google Cloud Life Sciences Operators.

    Provider

    apache-airflow-providers-google

    @@ -832,13 +832,13 @@

    Google Cloud Life Sciences

    Operators
    -

    airflow.providers.google.cloud.operators.cloud_memorystore.

    +

    airflow.providers.google.cloud.operators.cloud_memorystore.

    Hooks
    -

    airflow.providers.google.cloud.hooks.cloud_memorystore.

    +

    airflow.providers.google.cloud.hooks.cloud_memorystore.

    Guides
    -

    Google Cloud Memorystore Operators, Google Cloud Memorystore Memcached Operators.

    +

    Google Cloud Memorystore Operators, Google Cloud Memorystore Memcached Operators.

    Provider

    apache-airflow-providers-google

    @@ -852,13 +852,13 @@

    Google Cloud Memorystore

    Operators
    -

    airflow.providers.google.cloud.operators.natural_language.

    +

    airflow.providers.google.cloud.operators.natural_language.

    Hooks
    -

    airflow.providers.google.cloud.hooks.natural_language.

    +

    airflow.providers.google.cloud.hooks.natural_language.

    Guides
    -

    Google Cloud Natural Language Operators.

    +

    Google Cloud Natural Language Operators.

    Provider

    apache-airflow-providers-google

    @@ -872,7 +872,7 @@

    Google Cloud Natural Language

    Hooks
    -

    airflow.providers.google.cloud.hooks.os_login.

    +

    airflow.providers.google.cloud.hooks.os_login.

    Provider

    apache-airflow-providers-google

    @@ -886,16 +886,16 @@

    Google Cloud OS LoginGoogle Cloud Pub/Sub

    Operators
    -

    airflow.providers.google.cloud.operators.pubsub.

    +

    airflow.providers.google.cloud.operators.pubsub.

    Hooks
    -

    airflow.providers.google.cloud.hooks.pubsub.

    +

    airflow.providers.google.cloud.hooks.pubsub.

    Sensors
    -

    airflow.providers.google.cloud.sensors.pubsub.

    +

    airflow.providers.google.cloud.sensors.pubsub.

    Guides
    -

    Google Cloud PubSub Operators.

    +

    Google Cloud PubSub Operators.

    Provider

    apache-airflow-providers-google

    @@ -909,7 +909,7 @@

    Google Cloud Pub/SubGoogle Cloud Secret Manager

    Hooks
    -

    airflow.providers.google.cloud.hooks.secret_manager.

    +

    airflow.providers.google.cloud.hooks.secret_manager.

    Provider

    apache-airflow-providers-google

    @@ -923,13 +923,13 @@

    Google Cloud Secret Manager

    Operators
    -

    airflow.providers.google.cloud.operators.spanner.

    +

    airflow.providers.google.cloud.operators.spanner.

    Hooks
    -

    airflow.providers.google.cloud.hooks.spanner.

    +

    airflow.providers.google.cloud.hooks.spanner.

    Guides
    -

    Google Cloud Spanner Operators.

    +

    Google Cloud Spanner Operators.

    Provider

    apache-airflow-providers-google

    @@ -943,13 +943,13 @@

    Google Cloud SpannerGoogle Cloud Speech-to-Text

    Operators
    -

    airflow.providers.google.cloud.operators.speech_to_text.

    +

    airflow.providers.google.cloud.operators.speech_to_text.

    Hooks
    -

    airflow.providers.google.cloud.hooks.speech_to_text.

    +

    airflow.providers.google.cloud.hooks.speech_to_text.

    Guides
    -

    Google Cloud Speech to Text Operators, Google Cloud Speech Translate Operators.

    +

    Google Cloud Speech to Text Operators, Google Cloud Speech Translate Operators.

    Provider

    apache-airflow-providers-google

    @@ -963,13 +963,13 @@

    Google Cloud Speech-to-Text

    Operators
    -

    airflow.providers.google.cloud.operators.cloud_sql.

    +

    airflow.providers.google.cloud.operators.cloud_sql.

    Hooks
    -

    airflow.providers.google.cloud.hooks.cloud_sql.

    +

    airflow.providers.google.cloud.hooks.cloud_sql.

    Guides
    -

    Google Cloud SQL Operators.

    +

    Google Cloud SQL Operators.

    Provider

    apache-airflow-providers-google

    @@ -983,13 +983,13 @@

    Google Cloud SQL

    Operators
    -

    airflow.providers.google.cloud.operators.stackdriver.

    +

    airflow.providers.google.cloud.operators.stackdriver.

    Hooks
    -

    airflow.providers.google.cloud.hooks.stackdriver.

    +

    airflow.providers.google.cloud.hooks.stackdriver.

    Guides
    -

    Google Cloud Stackdriver Operators.

    +

    Google Cloud Stackdriver Operators.

    Provider

    apache-airflow-providers-google

    @@ -1003,16 +1003,16 @@

    Google Cloud Stackdriver

    Operators
    -

    airflow.providers.google.cloud.operators.gcs.

    +

    airflow.providers.google.cloud.operators.gcs.

    Hooks
    -

    airflow.providers.google.cloud.hooks.gcs.

    +

    airflow.providers.google.cloud.hooks.gcs.

    Sensors
    -

    airflow.providers.google.cloud.sensors.gcs.

    +

    airflow.providers.google.cloud.sensors.gcs.

    Guides
    -

    Google Cloud Storage Operators.

    +

    Google Cloud Storage Operators.

    Provider

    apache-airflow-providers-google

    @@ -1026,16 +1026,16 @@

    Google Cloud Storage (GCS)

    Operators
    -

    airflow.providers.google.cloud.operators.cloud_storage_transfer_service.

    +

    airflow.providers.google.cloud.operators.cloud_storage_transfer_service.

    Hooks
    -

    airflow.providers.google.cloud.hooks.cloud_storage_transfer_service.

    +

    airflow.providers.google.cloud.hooks.cloud_storage_transfer_service.

    Sensors
    -

    airflow.providers.google.cloud.sensors.cloud_storage_transfer_service.

    +

    airflow.providers.google.cloud.sensors.cloud_storage_transfer_service.

    Guides
    -

    Google Cloud Transfer Service Operators.

    +

    Google Cloud Transfer Service Operators.

    Provider

    apache-airflow-providers-google

    @@ -1049,16 +1049,16 @@

    Google Cloud Storage Transfer Service

    Operators
    -

    airflow.providers.google.cloud.operators.tasks.

    +

    airflow.providers.google.cloud.operators.tasks.

    Hooks
    -

    airflow.providers.google.cloud.hooks.tasks.

    +

    airflow.providers.google.cloud.hooks.tasks.

    Sensors
    -

    airflow.providers.google.cloud.sensors.tasks.

    +

    airflow.providers.google.cloud.sensors.tasks.

    Guides
    -

    Google Cloud Tasks.

    +

    Google Cloud Tasks.

    Provider

    apache-airflow-providers-google

    @@ -1072,13 +1072,13 @@

    Google Cloud Tasks

    Operators
    -

    airflow.providers.google.cloud.operators.text_to_speech, airflow.providers.google.cloud.operators.translate_speech.

    +

    airflow.providers.google.cloud.operators.text_to_speech, airflow.providers.google.cloud.operators.translate_speech.

    Hooks
    -

    airflow.providers.google.cloud.hooks.text_to_speech.

    +

    airflow.providers.google.cloud.hooks.text_to_speech.

    Guides
    -

    Google Cloud Text to Speech Operators.

    +

    Google Cloud Text to Speech Operators.

    Provider

    apache-airflow-providers-google

    @@ -1092,13 +1092,13 @@

    Google Cloud Text-to-Speech

    Operators
    -

    airflow.providers.google.cloud.operators.translate, airflow.providers.google.cloud.operators.translate_speech.

    +

    airflow.providers.google.cloud.operators.translate, airflow.providers.google.cloud.operators.translate_speech.

    Hooks
    -

    airflow.providers.google.cloud.hooks.translate.

    +

    airflow.providers.google.cloud.hooks.translate.

    Guides
    -

    Google Cloud Translate Operators, Google Cloud Speech Translate Operators.

    +

    Google Cloud Translate Operators, Google Cloud Speech Translate Operators.

    Provider

    apache-airflow-providers-google

    @@ -1112,13 +1112,13 @@

    Google Cloud Translation

    Operators
    -

    airflow.providers.google.cloud.operators.video_intelligence.

    +

    airflow.providers.google.cloud.operators.video_intelligence.

    Hooks
    -

    airflow.providers.google.cloud.hooks.video_intelligence.

    +

    airflow.providers.google.cloud.hooks.video_intelligence.

    Guides
    -

    Google Cloud Video Intelligence Operators.

    +

    Google Cloud Video Intelligence Operators.

    Provider

    apache-airflow-providers-google

    @@ -1132,13 +1132,13 @@

    Google Cloud Video Intelligence

    Operators
    -

    airflow.providers.google.cloud.operators.vision.

    +

    airflow.providers.google.cloud.operators.vision.

    Hooks
    -

    airflow.providers.google.cloud.hooks.vision.

    +

    airflow.providers.google.cloud.hooks.vision.

    Guides
    -

    Google Cloud Vision Operators.

    +

    Google Cloud Vision Operators.

    Provider

    apache-airflow-providers-google

    @@ -1152,16 +1152,16 @@

    Google Cloud Vision

    Operators
    -

    airflow.providers.google.cloud.operators.workflows.

    +

    airflow.providers.google.cloud.operators.workflows.

    Hooks
    -

    airflow.providers.google.cloud.hooks.workflows.

    +

    airflow.providers.google.cloud.hooks.workflows.

    Sensors
    -

    airflow.providers.google.cloud.sensors.workflows.

    +

    airflow.providers.google.cloud.sensors.workflows.

    Guides
    -

    Google Cloud Workflows Operators.

    +

    Google Cloud Workflows Operators.

    Provider

    apache-airflow-providers-google

    @@ -1175,13 +1175,13 @@

    Google Cloud WorkflowsGoogle Compute Engine

    Operators
    -

    airflow.providers.google.cloud.operators.compute.

    +

    airflow.providers.google.cloud.operators.compute.

    Hooks
    -

    airflow.providers.google.cloud.hooks.compute, airflow.providers.google.cloud.hooks.compute_ssh.

    +

    airflow.providers.google.cloud.hooks.compute, airflow.providers.google.cloud.hooks.compute_ssh.

    Guides
    -

    Google Compute Engine Operators, Google Compute Engine SSH Operators.

    +

    Google Compute Engine Operators, Google Compute Engine SSH Operators.

    Provider

    apache-airflow-providers-google

    @@ -1195,13 +1195,13 @@

    Google Compute EngineGoogle Data Catalog

    Operators
    -

    airflow.providers.google.cloud.operators.datacatalog.

    +

    airflow.providers.google.cloud.operators.datacatalog.

    Hooks
    -

    airflow.providers.google.cloud.hooks.datacatalog.

    +

    airflow.providers.google.cloud.hooks.datacatalog.

    Guides
    -

    Google Cloud Data Catalog Operators.

    +

    Google Cloud Data Catalog Operators.

    Provider

    apache-airflow-providers-google

    @@ -1215,16 +1215,16 @@

    Google Data Catalog

    Operators
    -

    airflow.providers.google.cloud.operators.datafusion.

    +

    airflow.providers.google.cloud.operators.datafusion.

    Hooks
    -

    airflow.providers.google.cloud.hooks.datafusion.

    +

    airflow.providers.google.cloud.hooks.datafusion.

    Sensors
    -

    airflow.providers.google.cloud.sensors.datafusion.

    +

    airflow.providers.google.cloud.sensors.datafusion.

    Guides
    -

    Google DataFusion Operators.

    +

    Google DataFusion Operators.

    Provider

    apache-airflow-providers-google

    @@ -1238,13 +1238,13 @@

    Google Data Fusion

    Operators
    -

    airflow.providers.google.cloud.operators.datapipeline.

    +

    airflow.providers.google.cloud.operators.datapipeline.

    Hooks
    -

    airflow.providers.google.cloud.hooks.datapipeline.

    +

    airflow.providers.google.cloud.hooks.datapipeline.

    Guides
    -

    Google Cloud Data Pipelines Operators.

    +

    Google Cloud Data Pipelines Operators.

    Provider

    apache-airflow-providers-google

    @@ -1258,16 +1258,16 @@

    Google Data PipelinesGoogle Dataflow

    Operators
    -

    airflow.providers.google.cloud.operators.dataflow.

    +

    airflow.providers.google.cloud.operators.dataflow.

    Hooks
    -

    airflow.providers.google.cloud.hooks.dataflow.

    +

    airflow.providers.google.cloud.hooks.dataflow.

    Sensors
    -

    airflow.providers.google.cloud.sensors.dataflow.

    +

    airflow.providers.google.cloud.sensors.dataflow.

    Guides
    -

    Google Cloud Dataflow Operators.

    +

    Google Cloud Dataflow Operators.

    Provider

    apache-airflow-providers-google

    @@ -1281,16 +1281,16 @@

    Google Dataflow

    Operators
    -

    airflow.providers.google.cloud.operators.dataplex.

    +

    airflow.providers.google.cloud.operators.dataplex.

    Hooks
    -

    airflow.providers.google.cloud.hooks.dataplex.

    +

    airflow.providers.google.cloud.hooks.dataplex.

    Sensors
    -

    airflow.providers.google.cloud.sensors.dataplex.

    +

    airflow.providers.google.cloud.sensors.dataplex.

    Guides
    -

    Google Dataplex Operators.

    +

    Google Dataplex Operators.

    Provider

    apache-airflow-providers-google

    @@ -1304,16 +1304,16 @@

    Google Dataplex

    Operators
    -

    airflow.providers.google.cloud.operators.dataprep.

    +

    airflow.providers.google.cloud.operators.dataprep.

    Hooks
    -

    airflow.providers.google.cloud.hooks.dataprep.

    +

    airflow.providers.google.cloud.hooks.dataprep.

    Sensors
    -

    airflow.providers.google.cloud.sensors.dataprep.

    +

    airflow.providers.google.cloud.sensors.dataprep.

    Guides
    -

    Google Dataprep Operators.

    +

    Google Dataprep Operators.

    Provider

    apache-airflow-providers-google

    @@ -1327,16 +1327,16 @@

    Google Dataprep

    Operators
    -

    airflow.providers.google.cloud.operators.dataproc.

    +

    airflow.providers.google.cloud.operators.dataproc.

    Hooks
    -

    airflow.providers.google.cloud.hooks.dataproc.

    +

    airflow.providers.google.cloud.hooks.dataproc.

    Sensors
    -

    airflow.providers.google.cloud.sensors.dataproc.

    +

    airflow.providers.google.cloud.sensors.dataproc.

    Guides
    -

    Google Cloud Dataproc Operators.

    +

    Google Cloud Dataproc Operators.

    Provider

    apache-airflow-providers-google

    @@ -1350,16 +1350,16 @@

    Google Dataproc

    Operators
    -

    airflow.providers.google.cloud.operators.dataproc_metastore.

    +

    airflow.providers.google.cloud.operators.dataproc_metastore.

    Hooks
    -

    airflow.providers.google.cloud.hooks.dataproc_metastore.

    +

    airflow.providers.google.cloud.hooks.dataproc_metastore.

    Sensors
    -

    airflow.providers.google.cloud.sensors.dataproc_metastore.

    +

    airflow.providers.google.cloud.sensors.dataproc_metastore.

    Guides
    -

    Google Cloud Dataproc Metastore Operators.

    +

    Google Cloud Dataproc Metastore Operators.

    Provider

    apache-airflow-providers-google

    @@ -1373,13 +1373,13 @@

    Google Dataproc Metastore

    Operators
    -

    airflow.providers.google.cloud.operators.datastore.

    +

    airflow.providers.google.cloud.operators.datastore.

    Hooks
    -

    airflow.providers.google.cloud.hooks.datastore.

    +

    airflow.providers.google.cloud.hooks.datastore.

    Guides
    -

    Google Cloud Datastore Operators.

    +

    Google Cloud Datastore Operators.

    Provider

    apache-airflow-providers-google

    @@ -1393,7 +1393,7 @@

    Google Datastore

    Hooks
    -

    airflow.providers.google.cloud.hooks.gdm.

    +

    airflow.providers.google.cloud.hooks.gdm.

    Provider

    apache-airflow-providers-google

    @@ -1407,13 +1407,13 @@

    Google Deployment Manager

    Operators
    -

    airflow.providers.google.cloud.operators.kubernetes_engine.

    +

    airflow.providers.google.cloud.operators.kubernetes_engine.

    Hooks
    -

    airflow.providers.google.cloud.hooks.kubernetes_engine.

    +

    airflow.providers.google.cloud.hooks.kubernetes_engine.

    Guides
    -

    Google Kubernetes Engine Operators.

    +

    Google Kubernetes Engine Operators.

    Provider

    apache-airflow-providers-google

    @@ -1427,16 +1427,16 @@

    Google Kubernetes Engine

    Operators
    -

    airflow.providers.google.cloud.operators.looker.

    +

    airflow.providers.google.cloud.operators.looker.

    Hooks
    -

    airflow.providers.google.cloud.hooks.looker.

    +

    airflow.providers.google.cloud.hooks.looker.

    Sensors
    -

    airflow.providers.google.cloud.sensors.looker.

    +

    airflow.providers.google.cloud.sensors.looker.

    Guides
    -

    Google Cloud Looker Operators.

    +

    Google Cloud Looker Operators.

    Provider

    apache-airflow-providers-google

    @@ -1450,13 +1450,13 @@

    Google Looker

    Operators
    -

    airflow.providers.google.cloud.operators.mlengine.

    +

    airflow.providers.google.cloud.operators.mlengine.

    Hooks
    -

    airflow.providers.google.cloud.hooks.mlengine.

    +

    airflow.providers.google.cloud.hooks.mlengine.

    Guides
    -

    Google Cloud AI Platform Operators.

    +

    Google Cloud AI Platform Operators.

    Provider

    apache-airflow-providers-google

    @@ -1470,13 +1470,13 @@

    Google Machine Learning Engine

    Operators
    -

    airflow.providers.google.cloud.operators.vertex_ai.dataset, airflow.providers.google.cloud.operators.vertex_ai.custom_job, airflow.providers.google.cloud.operators.vertex_ai.auto_ml, airflow.providers.google.cloud.operators.vertex_ai.batch_prediction_job, airflow.providers.google.cloud.operators.vertex_ai.endpoint_service, airflow.providers.google.cloud.operators.vertex_ai.hyperparameter_tuning_job, airflow.providers.google.cloud.operators.vertex_ai.model_service, airflow.providers.google.cloud.operators.vertex_ai.pipeline_job.

    +

    airflow.providers.google.cloud.operators.vertex_ai.dataset, airflow.providers.google.cloud.operators.vertex_ai.custom_job, airflow.providers.google.cloud.operators.vertex_ai.auto_ml, airflow.providers.google.cloud.operators.vertex_ai.batch_prediction_job, airflow.providers.google.cloud.operators.vertex_ai.endpoint_service, airflow.providers.google.cloud.operators.vertex_ai.hyperparameter_tuning_job, airflow.providers.google.cloud.operators.vertex_ai.model_service, airflow.providers.google.cloud.operators.vertex_ai.pipeline_job.

    Hooks
    -

    airflow.providers.google.cloud.hooks.vertex_ai.dataset, airflow.providers.google.cloud.hooks.vertex_ai.custom_job, airflow.providers.google.cloud.hooks.vertex_ai.auto_ml, airflow.providers.google.cloud.hooks.vertex_ai.batch_prediction_job, airflow.providers.google.cloud.hooks.vertex_ai.endpoint_service, airflow.providers.google.cloud.hooks.vertex_ai.hyperparameter_tuning_job, airflow.providers.google.cloud.hooks.vertex_ai.model_service, airflow.providers.google.cloud.hooks.vertex_ai.pipeline_job.

    +

    airflow.providers.google.cloud.hooks.vertex_ai.dataset, airflow.providers.google.cloud.hooks.vertex_ai.custom_job, airflow.providers.google.cloud.hooks.vertex_ai.auto_ml, airflow.providers.google.cloud.hooks.vertex_ai.batch_prediction_job, airflow.providers.google.cloud.hooks.vertex_ai.endpoint_service, airflow.providers.google.cloud.hooks.vertex_ai.hyperparameter_tuning_job, airflow.providers.google.cloud.hooks.vertex_ai.model_service, airflow.providers.google.cloud.hooks.vertex_ai.pipeline_job.

    Guides
    -

    Google Cloud VertexAI Operators.

    +

    Google Cloud VertexAI Operators.

    Provider

    apache-airflow-providers-google

    @@ -1500,10 +1500,10 @@

    Google Cloud Storage (GCS) to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    Google Cloud Storage to Amazon S3 transfer operator

    +

    Google Cloud Storage to Amazon S3 transfer operator

    Python API
    -

    airflow.providers.amazon.aws.transfers.gcs_to_s3

    +

    airflow.providers.amazon.aws.transfers.gcs_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1520,10 +1520,10 @@

    Amazon Glacier to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Amazon S3 Glacier to GCS

    +

    Amazon S3 Glacier to GCS

    Python API
    -

    airflow.providers.amazon.aws.transfers.glacier_to_gcs

    +

    airflow.providers.amazon.aws.transfers.glacier_to_gcs

    Provider

    apache-airflow-providers-amazon

    @@ -1540,10 +1540,10 @@

    Presto to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Presto to Google Cloud Storage Transfer Operator

    +

    Presto to Google Cloud Storage Transfer Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.presto_to_gcs

    +

    airflow.providers.google.cloud.transfers.presto_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1560,10 +1560,10 @@

    Trino to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Trino to Google Cloud Storage Transfer Operator

    +

    Trino to Google Cloud Storage Transfer Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.trino_to_gcs

    +

    airflow.providers.google.cloud.transfers.trino_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1580,7 +1580,7 @@

    Common SQL to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Python API
    -

    airflow.providers.google.cloud.transfers.sql_to_gcs

    +

    airflow.providers.google.cloud.transfers.sql_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1597,10 +1597,10 @@

    Google Cloud Storage (GCS) to Google Drive

    Google Drive

    Operator guide
    -

    Google Cloud Storage to Google Drive Transfer Operators

    +

    Google Cloud Storage to Google Drive Transfer Operators

    Python API
    -

    airflow.providers.google.suite.transfers.gcs_to_gdrive

    +

    airflow.providers.google.suite.transfers.gcs_to_gdrive

    Provider

    apache-airflow-providers-google

    @@ -1617,10 +1617,10 @@

    Google Drive to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Google Drive to Google Cloud Storage Transfer Operator

    +

    Google Drive to Google Cloud Storage Transfer Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.gdrive_to_gcs

    +

    airflow.providers.google.cloud.transfers.gdrive_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1637,10 +1637,10 @@

    Microsoft Azure FileShare to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Transfers data from Azure FileShare Storage to Google Cloud Storage

    +

    Transfers data from Azure FileShare Storage to Google Cloud Storage

    Python API
    -

    airflow.providers.google.cloud.transfers.azure_fileshare_to_gcs

    +

    airflow.providers.google.cloud.transfers.azure_fileshare_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1657,7 +1657,7 @@

    Apache Cassandra to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Python API
    -

    airflow.providers.google.cloud.transfers.cassandra_to_gcs

    +

    airflow.providers.google.cloud.transfers.cassandra_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1674,10 +1674,10 @@

    Google Calendar to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Google Calendar to Google Cloud Storage Transfer Operators

    +

    Google Calendar to Google Cloud Storage Transfer Operators

    Python API
    -

    airflow.providers.google.cloud.transfers.calendar_to_gcs

    +

    airflow.providers.google.cloud.transfers.calendar_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1694,10 +1694,10 @@

    Google Spreadsheet to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Google Sheets to Google Cloud Storage Transfer Operators

    +

    Google Sheets to Google Cloud Storage Transfer Operators

    Python API
    -

    airflow.providers.google.cloud.transfers.sheets_to_gcs

    +

    airflow.providers.google.cloud.transfers.sheets_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1714,10 +1714,10 @@

    Amazon Simple Storage Service (S3) to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Transfer Data from Amazon S3 to Google Cloud Storage

    +

    Transfer Data from Amazon S3 to Google Cloud Storage

    Python API
    -

    airflow.providers.google.cloud.transfers.s3_to_gcs

    +

    airflow.providers.google.cloud.transfers.s3_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1734,10 +1734,10 @@

    Google Cloud Storage (GCS) to SSH File Transfer Protocol (SFTP)

    SSH File Transfer Protocol (SFTP)

    Operator guide
    -

    Google Cloud Storage Transfer Operator to SFTP

    +

    Google Cloud Storage Transfer Operator to SFTP

    Python API
    -

    airflow.providers.google.cloud.transfers.gcs_to_sftp

    +

    airflow.providers.google.cloud.transfers.gcs_to_sftp

    Provider

    apache-airflow-providers-google

    @@ -1754,10 +1754,10 @@

    PostgreSQL to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Postgres To Google Cloud Storage Operator

    +

    Postgres To Google Cloud Storage Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.postgres_to_gcs

    +

    airflow.providers.google.cloud.transfers.postgres_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1774,7 +1774,7 @@

    Google BigQuery to Common SQL

    Common SQL

    Python API
    -

    airflow.providers.google.cloud.transfers.bigquery_to_sql

    +

    airflow.providers.google.cloud.transfers.bigquery_to_sql

    Provider

    apache-airflow-providers-google

    @@ -1791,10 +1791,10 @@

    Google BigQuery to MySQL

    MySQL

    Operator guide
    -

    Google Cloud BigQuery Transfer Operator to MySQL

    +

    Google Cloud BigQuery Transfer Operator to MySQL

    Python API
    -

    airflow.providers.google.cloud.transfers.bigquery_to_mysql

    +

    airflow.providers.google.cloud.transfers.bigquery_to_mysql

    Provider

    apache-airflow-providers-google

    @@ -1811,10 +1811,10 @@

    Google BigQuery to Microsoft SQL Server (MSSQL)

    Microsoft SQL Server (MSSQL)

    Operator guide
    -

    Google Cloud BigQuery Transfer Operator to Microsoft SQL Server

    +

    Google Cloud BigQuery Transfer Operator to Microsoft SQL Server

    Python API
    -

    airflow.providers.google.cloud.transfers.bigquery_to_mssql

    +

    airflow.providers.google.cloud.transfers.bigquery_to_mssql

    Provider

    apache-airflow-providers-google

    @@ -1831,10 +1831,10 @@

    Google BigQuery to PostgreSQL

    PostgreSQL

    Operator guide
    -

    Google Cloud BigQuery Transfer Operator to Postgres

    +

    Google Cloud BigQuery Transfer Operator to Postgres

    Python API
    -

    airflow.providers.google.cloud.transfers.bigquery_to_postgres

    +

    airflow.providers.google.cloud.transfers.bigquery_to_postgres

    Provider

    apache-airflow-providers-google

    @@ -1851,10 +1851,10 @@

    Google Cloud Storage (GCS) to Google BigQuery

    Google BigQuery

    Operator guide
    -

    Google Cloud Storage Transfer Operator to BigQuery

    +

    Google Cloud Storage Transfer Operator to BigQuery

    Python API
    -

    airflow.providers.google.cloud.transfers.gcs_to_bigquery

    +

    airflow.providers.google.cloud.transfers.gcs_to_bigquery

    Provider

    apache-airflow-providers-google

    @@ -1871,10 +1871,10 @@

    Google Cloud Storage (GCS) to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Transfer data in Google Cloud Storage

    +

    Transfer data in Google Cloud Storage

    Python API
    -

    airflow.providers.google.cloud.transfers.gcs_to_gcs

    +

    airflow.providers.google.cloud.transfers.gcs_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1891,10 +1891,10 @@

    Facebook Ads to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Facebook Ads To GCS Operators

    +

    Facebook Ads To GCS Operators

    Python API
    -

    airflow.providers.google.cloud.transfers.facebook_ads_to_gcs

    +

    airflow.providers.google.cloud.transfers.facebook_ads_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1911,10 +1911,10 @@

    SSH File Transfer Protocol (SFTP) to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    SFTP to Google Cloud Storage Transfer Operator

    +

    SFTP to Google Cloud Storage Transfer Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.sftp_to_gcs

    +

    airflow.providers.google.cloud.transfers.sftp_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1931,7 +1931,7 @@

    Microsoft Azure Data Lake Storage to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Python API
    -

    airflow.providers.google.cloud.transfers.adls_to_gcs

    +

    airflow.providers.google.cloud.transfers.adls_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1948,10 +1948,10 @@

    Google BigQuery to Google BigQuery

    Google BigQuery

    Operator guide
    -

    Google Cloud BigQuery Transfer Operator to BigQuery

    +

    Google Cloud BigQuery Transfer Operator to BigQuery

    Python API
    -

    airflow.providers.google.cloud.transfers.bigquery_to_bigquery

    +

    airflow.providers.google.cloud.transfers.bigquery_to_bigquery

    Provider

    apache-airflow-providers-google

    @@ -1968,10 +1968,10 @@

    MySQL to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    MySQL To Google Cloud Storage Operator

    +

    MySQL To Google Cloud Storage Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.mysql_to_gcs

    +

    airflow.providers.google.cloud.transfers.mysql_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1988,10 +1988,10 @@

    Oracle to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Oracle To Google Cloud Storage Operator

    +

    Oracle To Google Cloud Storage Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.oracle_to_gcs

    +

    airflow.providers.google.cloud.transfers.oracle_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -2008,10 +2008,10 @@

    Google Cloud Storage (GCS) to Google Spreadsheet

    Google Spreadsheet

    Operator guide
    -

    Google Cloud Storage to Google Sheets Transfer Operators

    +

    Google Cloud Storage to Google Sheets Transfer Operators

    Python API
    -

    airflow.providers.google.suite.transfers.gcs_to_sheets

    +

    airflow.providers.google.suite.transfers.gcs_to_sheets

    Provider

    apache-airflow-providers-google

    @@ -2025,10 +2025,10 @@

    Local to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Upload data from Local Filesystem to Google Cloud Storage

    +

    Upload data from Local Filesystem to Google Cloud Storage

    Python API
    -

    airflow.providers.google.cloud.transfers.local_to_gcs

    +

    airflow.providers.google.cloud.transfers.local_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -2045,10 +2045,10 @@

    Google BigQuery to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Google Cloud BigQuery Transfer Operator to Google Cloud Storage

    +

    Google Cloud BigQuery Transfer Operator to Google Cloud Storage

    Python API
    -

    airflow.providers.google.cloud.transfers.bigquery_to_gcs

    +

    airflow.providers.google.cloud.transfers.bigquery_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -2062,10 +2062,10 @@

    Google Cloud Storage (GCS) to Local

    Google Cloud Storage (GCS)

    Operator guide
    -

    Downloads data from Google Cloud Storage to Local Filesystem

    +

    Downloads data from Google Cloud Storage to Local Filesystem

    Python API
    -

    airflow.providers.google.cloud.transfers.gcs_to_local

    +

    airflow.providers.google.cloud.transfers.gcs_to_local

    Provider

    apache-airflow-providers-google

    @@ -2082,10 +2082,10 @@

    Salesforce to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Salesforce To GCS Operators

    +

    Salesforce To GCS Operators

    Python API
    -

    airflow.providers.google.cloud.transfers.salesforce_to_gcs

    +

    airflow.providers.google.cloud.transfers.salesforce_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -2102,7 +2102,7 @@

    Google Ads to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Python API
    -

    airflow.providers.google.ads.transfers.ads_to_gcs

    +

    airflow.providers.google.ads.transfers.ads_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -2119,10 +2119,10 @@

    Microsoft SQL Server (MSSQL) to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Microsoft SQL Server To Google Cloud Storage Operator

    +

    Microsoft SQL Server To Google Cloud Storage Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.mssql_to_gcs

    +

    airflow.providers.google.cloud.transfers.mssql_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -2139,10 +2139,10 @@

    Microsoft Azure Blob Storage to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Azure Blob Storage to Google Cloud Storage (GCS) Transfer Operator

    +

    Azure Blob Storage to Google Cloud Storage (GCS) Transfer Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.azure_blob_to_gcs

    +

    airflow.providers.google.cloud.transfers.azure_blob_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -2219,7 +2219,7 @@

    Google Cloud Storage (GCS) to Snowflake

    Snowflake

    Python API
    -

    airflow.providers.snowflake.transfers.copy_into_snowflake

    +

    airflow.providers.snowflake.transfers.copy_into_snowflake

    Provider

    apache-airflow-providers-snowflake

    @@ -2236,10 +2236,10 @@

    Google Cloud Storage (GCS) to Trino

    Trino

    Operator guide
    -

    Google Cloud Storage to Trino Transfer Operator

    +

    Google Cloud Storage to Trino Transfer Operator

    Python API
    -

    airflow.providers.trino.transfers.gcs_to_trino

    +

    airflow.providers.trino.transfers.gcs_to_trino

    Provider

    apache-airflow-providers-trino

    @@ -2260,13 +2260,13 @@

    Google Marketing Platform

    Operators
    -

    airflow.providers.google.ads.operators.ads.

    +

    airflow.providers.google.ads.operators.ads.

    Hooks
    -

    airflow.providers.google.ads.hooks.ads.

    +

    airflow.providers.google.ads.hooks.ads.

    Guides
    -

    Google Ads Operators.

    +

    Google Ads Operators.

    Provider

    apache-airflow-providers-google

    @@ -2280,13 +2280,13 @@

    Google Ads

    Operators
    -

    airflow.providers.google.marketing_platform.operators.analytics.

    +

    airflow.providers.google.marketing_platform.operators.analytics.

    Hooks
    -

    airflow.providers.google.marketing_platform.hooks.analytics.

    +

    airflow.providers.google.marketing_platform.hooks.analytics.

    Guides
    -

    Google Analytics 360 Operators.

    +

    Google Analytics 360 Operators.

    Provider

    apache-airflow-providers-google

    @@ -2300,16 +2300,16 @@

    Google Analytics360

    Operators
    -

    airflow.providers.google.marketing_platform.operators.display_video.

    +

    airflow.providers.google.marketing_platform.operators.display_video.

    Hooks
    -

    airflow.providers.google.marketing_platform.hooks.display_video.

    +

    airflow.providers.google.marketing_platform.hooks.display_video.

    Sensors
    -

    airflow.providers.google.marketing_platform.sensors.display_video.

    +

    airflow.providers.google.marketing_platform.sensors.display_video.

    Guides
    -

    Google Display & Video 360 Operators.

    +

    Google Display & Video 360 Operators.

    Provider

    apache-airflow-providers-google

    @@ -2323,16 +2323,16 @@

    Google Display&Video 360

    Operators
    -

    airflow.providers.google.marketing_platform.operators.search_ads.

    +

    airflow.providers.google.marketing_platform.operators.search_ads.

    Hooks
    -

    airflow.providers.google.marketing_platform.hooks.search_ads.

    +

    airflow.providers.google.marketing_platform.hooks.search_ads.

    Sensors
    -

    airflow.providers.google.marketing_platform.sensors.search_ads.

    +

    airflow.providers.google.marketing_platform.sensors.search_ads.

    Guides
    -

    Google Search Ads Operators.

    +

    Google Search Ads Operators.

    Provider

    apache-airflow-providers-google

    @@ -2349,7 +2349,7 @@

    Other Google operators and hooks

    Hooks
    -

    airflow.providers.google.common.hooks.base_google.

    +

    airflow.providers.google.common.hooks.base_google.

    Provider

    apache-airflow-providers-google

    @@ -2363,7 +2363,7 @@

    Google

    Google Calendar

    Hooks
    -

    airflow.providers.google.suite.hooks.calendar.

    +

    airflow.providers.google.suite.hooks.calendar.

    Provider

    apache-airflow-providers-google

    @@ -2377,13 +2377,13 @@

    Google Calendar

    Operators
    -

    airflow.providers.google.cloud.operators.cloud_batch.

    +

    airflow.providers.google.cloud.operators.cloud_batch.

    Hooks
    -

    airflow.providers.google.cloud.hooks.cloud_batch.

    +

    airflow.providers.google.cloud.hooks.cloud_batch.

    Guides
    -

    Google Cloud Batch Operators.

    +

    Google Cloud Batch Operators.

    Provider

    apache-airflow-providers-google

    @@ -2397,16 +2397,16 @@

    Google Cloud Batch

    Operators
    -

    airflow.providers.google.cloud.operators.cloud_composer.

    +

    airflow.providers.google.cloud.operators.cloud_composer.

    Hooks
    -

    airflow.providers.google.cloud.hooks.cloud_composer.

    +

    airflow.providers.google.cloud.hooks.cloud_composer.

    Sensors
    -

    airflow.providers.google.cloud.sensors.cloud_composer.

    +

    airflow.providers.google.cloud.sensors.cloud_composer.

    Guides
    -

    Google Cloud Composer Operators.

    +

    Google Cloud Composer Operators.

    Provider

    apache-airflow-providers-google

    @@ -2420,16 +2420,16 @@

    Google Cloud ComposerGoogle Cloud Dataform

    Operators
    -

    airflow.providers.google.cloud.operators.dataform.

    +

    airflow.providers.google.cloud.operators.dataform.

    Hooks
    -

    airflow.providers.google.cloud.hooks.dataform.

    +

    airflow.providers.google.cloud.hooks.dataform.

    Sensors
    -

    airflow.providers.google.cloud.sensors.dataform.

    +

    airflow.providers.google.cloud.sensors.dataform.

    Guides
    -

    Google Dataform Operators.

    +

    Google Dataform Operators.

    Provider

    apache-airflow-providers-google

    @@ -2443,13 +2443,13 @@

    Google Cloud DataformGoogle Cloud Run

    Operators
    -

    airflow.providers.google.cloud.operators.cloud_run.

    +

    airflow.providers.google.cloud.operators.cloud_run.

    Hooks
    -

    airflow.providers.google.cloud.hooks.cloud_run.

    +

    airflow.providers.google.cloud.hooks.cloud_run.

    Guides
    -

    Google Cloud Run Operators.

    +

    Google Cloud Run Operators.

    Provider

    apache-airflow-providers-google

    @@ -2463,7 +2463,7 @@

    Google Cloud Run

    Hooks
    -

    airflow.providers.google.common.hooks.discovery_api.

    +

    airflow.providers.google.common.hooks.discovery_api.

    Provider

    apache-airflow-providers-google

    @@ -2477,10 +2477,10 @@

    Google Discovery APIGoogle Drive

    Hooks
    -

    airflow.providers.google.suite.hooks.drive.

    +

    airflow.providers.google.suite.hooks.drive.

    Sensors
    -

    airflow.providers.google.suite.sensors.drive.

    +

    airflow.providers.google.suite.sensors.drive.

    Provider

    apache-airflow-providers-google

    @@ -2494,13 +2494,13 @@

    Google Drive

    Operators
    -

    airflow.providers.google.leveldb.operators.leveldb.

    +

    airflow.providers.google.leveldb.operators.leveldb.

    Hooks
    -

    airflow.providers.google.leveldb.hooks.leveldb.

    +

    airflow.providers.google.leveldb.hooks.leveldb.

    Guides
    -

    Google LevelDB Operator.

    +

    Google LevelDB Operator.

    Provider

    apache-airflow-providers-google

    @@ -2514,13 +2514,13 @@

    Google LevelDB

    Operators
    -

    airflow.providers.google.suite.operators.sheets.

    +

    airflow.providers.google.suite.operators.sheets.

    Hooks
    -

    airflow.providers.google.suite.hooks.sheets.

    +

    airflow.providers.google.suite.hooks.sheets.

    Guides
    -

    Google Sheets Operators.

    +

    Google Sheets Operators.

    Provider

    apache-airflow-providers-google

    diff --git a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/protocol.html b/docs-archive/apache-airflow-providers/operators-and-hooks-ref/protocol.html index bb5b673d2fa..c292a7f8673 100644 --- a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/protocol.html +++ b/docs-archive/apache-airflow-providers/operators-and-hooks-ref/protocol.html @@ -600,10 +600,10 @@

    File Transfer Protocol (FTP)

    Operators
    -

    airflow.providers.grpc.operators.grpc.

    +

    airflow.providers.grpc.operators.grpc.

    Hooks
    -

    airflow.providers.grpc.hooks.grpc.

    +

    airflow.providers.grpc.hooks.grpc.

    Provider

    apache-airflow-providers-grpc

    @@ -806,10 +806,10 @@

    Hypertext Transfer Protocol (HTTP) to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    HTTP to Amazon S3

    +

    HTTP to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.http_to_s3

    +

    airflow.providers.amazon.aws.transfers.http_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -826,10 +826,10 @@

    Internet Message Access Protocol (IMAP) to Amazon Simple Storage Service (S3

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    Imap Attachment to Amazon S3

    +

    Imap Attachment to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.imap_attachment_to_s3

    +

    airflow.providers.amazon.aws.transfers.imap_attachment_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -846,10 +846,10 @@

    Amazon Simple Storage Service (S3) to SSH File Transfer Protocol (SFTP)

    SSH File Transfer Protocol (SFTP)

    Operator guide
    -

    Amazon S3 to SFTP

    +

    Amazon S3 to SFTP

    Python API
    -

    airflow.providers.amazon.aws.transfers.s3_to_sftp

    +

    airflow.providers.amazon.aws.transfers.s3_to_sftp

    Provider

    apache-airflow-providers-amazon

    @@ -866,10 +866,10 @@

    SSH File Transfer Protocol (SFTP) to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    SFTP to Amazon S3

    +

    SFTP to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.sftp_to_s3

    +

    airflow.providers.amazon.aws.transfers.sftp_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -886,10 +886,10 @@

    Amazon Simple Storage Service (S3) to File Transfer Protocol (FTP)

    File Transfer Protocol (FTP)

    Operator guide
    -

    Amazon S3 to FTP

    +

    Amazon S3 to FTP

    Python API
    -

    airflow.providers.amazon.aws.transfers.s3_to_ftp

    +

    airflow.providers.amazon.aws.transfers.s3_to_ftp

    Provider

    apache-airflow-providers-amazon

    @@ -906,10 +906,10 @@

    File Transfer Protocol (FTP) to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    FTP to Amazon S3

    +

    FTP to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.ftp_to_s3

    +

    airflow.providers.amazon.aws.transfers.ftp_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -943,10 +943,10 @@

    Google Cloud Storage (GCS) to SSH File Transfer Protocol (SFTP)

    SSH File Transfer Protocol (SFTP)

    Operator guide
    -

    Google Cloud Storage Transfer Operator to SFTP

    +

    Google Cloud Storage Transfer Operator to SFTP

    Python API
    -

    airflow.providers.google.cloud.transfers.gcs_to_sftp

    +

    airflow.providers.google.cloud.transfers.gcs_to_sftp

    Provider

    apache-airflow-providers-google

    @@ -963,10 +963,10 @@

    SSH File Transfer Protocol (SFTP) to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    SFTP to Google Cloud Storage Transfer Operator

    +

    SFTP to Google Cloud Storage Transfer Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.sftp_to_gcs

    +

    airflow.providers.google.cloud.transfers.sftp_to_gcs

    Provider

    apache-airflow-providers-google

    diff --git a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/services.html b/docs-archive/apache-airflow-providers/operators-and-hooks-ref/services.html index d3ccc68a911..602da083b31 100644 --- a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/services.html +++ b/docs-archive/apache-airflow-providers/operators-and-hooks-ref/services.html @@ -778,10 +778,10 @@

    Pagerduty

    Operators
    -

    airflow.providers.plexus.operators.job.

    +

    airflow.providers.plexus.operators.job.

    Hooks
    -

    airflow.providers.plexus.hooks.plexus.

    +

    airflow.providers.plexus.hooks.plexus.

    Provider

    apache-airflow-providers-plexus

    @@ -815,10 +815,10 @@

    Salesforce

    Operators
    -

    airflow.providers.segment.operators.segment_track_event.

    +

    airflow.providers.segment.operators.segment_track_event.

    Hooks
    -

    airflow.providers.segment.hooks.segment.

    +

    airflow.providers.segment.hooks.segment.

    Provider

    apache-airflow-providers-segment

    @@ -872,13 +872,13 @@

    Slack Incoming WebhookSnowflake

    Operators
    -

    airflow.providers.snowflake.operators.snowflake.

    +

    airflow.providers.snowflake.operators.snowflake.

    Hooks
    -

    airflow.providers.snowflake.hooks.snowflake, airflow.providers.snowflake.hooks.snowflake_sql_api.

    +

    airflow.providers.snowflake.hooks.snowflake, airflow.providers.snowflake.hooks.snowflake_sql_api.

    Guides
    -

    SnowflakeOperator.

    +

    SnowflakeOperator.

    Provider

    apache-airflow-providers-snowflake

    @@ -892,16 +892,16 @@

    Snowflake

    Operators
    -

    airflow.providers.tableau.operators.tableau.

    +

    airflow.providers.tableau.operators.tableau.

    Hooks
    -

    airflow.providers.tableau.hooks.tableau.

    +

    airflow.providers.tableau.hooks.tableau.

    Sensors
    -

    airflow.providers.tableau.sensors.tableau.

    +

    airflow.providers.tableau.sensors.tableau.

    Guides
    -

    TableauOperator.

    +

    TableauOperator.

    Provider

    apache-airflow-providers-tableau

    @@ -935,7 +935,7 @@

    Telegram

    Hooks
    -

    airflow.providers.yandex.hooks.yandex.

    +

    airflow.providers.yandex.hooks.yandex.

    Provider

    apache-airflow-providers-yandex

    @@ -949,13 +949,13 @@

    Yandex.Cloud

    Operators
    -

    airflow.providers.yandex.operators.yandexcloud_dataproc.

    +

    airflow.providers.yandex.operators.yandexcloud_dataproc.

    Hooks
    -

    airflow.providers.yandex.hooks.yandexcloud_dataproc.

    +

    airflow.providers.yandex.hooks.yandexcloud_dataproc.

    Guides
    -

    Yandex.Cloud Data Proc Operators.

    +

    Yandex.Cloud Data Proc Operators.

    Provider

    apache-airflow-providers-yandex

    @@ -979,10 +979,10 @@

    Salesforce to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    Salesforce to Amazon S3

    +

    Salesforce to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.salesforce_to_s3

    +

    airflow.providers.amazon.aws.transfers.salesforce_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -999,10 +999,10 @@

    Facebook Ads to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Facebook Ads To GCS Operators

    +

    Facebook Ads To GCS Operators

    Python API
    -

    airflow.providers.google.cloud.transfers.facebook_ads_to_gcs

    +

    airflow.providers.google.cloud.transfers.facebook_ads_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1019,10 +1019,10 @@

    Salesforce to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Salesforce To GCS Operators

    +

    Salesforce To GCS Operators

    Python API
    -

    airflow.providers.google.cloud.transfers.salesforce_to_gcs

    +

    airflow.providers.google.cloud.transfers.salesforce_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1096,10 +1096,10 @@

    Amazon Simple Storage Service (S3) to Snowflake

    Snowflake

    Operator guide
    -

    CopyFromExternalStageToSnowflakeOperator

    +

    CopyFromExternalStageToSnowflakeOperator

    Python API
    -

    airflow.providers.snowflake.transfers.copy_into_snowflake

    +

    airflow.providers.snowflake.transfers.copy_into_snowflake

    Provider

    apache-airflow-providers-snowflake

    @@ -1116,7 +1116,7 @@

    Google Cloud Storage (GCS) to Snowflake

    Snowflake

    Python API
    -

    airflow.providers.snowflake.transfers.copy_into_snowflake

    +

    airflow.providers.snowflake.transfers.copy_into_snowflake

    Provider

    apache-airflow-providers-snowflake

    @@ -1133,7 +1133,7 @@

    Microsoft Azure Blob Storage to Snowflake

    Snowflake

    Python API
    -

    airflow.providers.snowflake.transfers.copy_into_snowflake

    +

    airflow.providers.snowflake.transfers.copy_into_snowflake

    Provider

    apache-airflow-providers-snowflake

    diff --git a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/software.html b/docs-archive/apache-airflow-providers/operators-and-hooks-ref/software.html index 14649a7daf9..820df1e85fb 100644 --- a/docs-archive/apache-airflow-providers/operators-and-hooks-ref/software.html +++ b/docs-archive/apache-airflow-providers/operators-and-hooks-ref/software.html @@ -809,7 +809,7 @@

    GithubHashicorp Vault

    Hooks
    -

    airflow.providers.hashicorp.hooks.vault.

    +

    airflow.providers.hashicorp.hooks.vault.

    Provider

    apache-airflow-providers-hashicorp

    @@ -1125,13 +1125,13 @@

    PrestoRedis

    Operators
    -

    airflow.providers.redis.operators.redis_publish.

    +

    airflow.providers.redis.operators.redis_publish.

    Hooks
    -

    airflow.providers.redis.hooks.redis.

    +

    airflow.providers.redis.hooks.redis.

    Sensors
    -

    airflow.providers.redis.sensors.redis_key, airflow.providers.redis.sensors.redis_pub_sub.

    +

    airflow.providers.redis.sensors.redis_key, airflow.providers.redis.sensors.redis_pub_sub.

    Provider

    apache-airflow-providers-redis

    @@ -1145,7 +1145,7 @@

    Redis

    Singularity

    Operators
    -

    airflow.providers.singularity.operators.singularity.

    +

    airflow.providers.singularity.operators.singularity.

    Provider

    apache-airflow-providers-singularity

    @@ -1193,13 +1193,13 @@

    Tabular

    Operators
    -

    airflow.providers.trino.operators.trino.

    +

    airflow.providers.trino.operators.trino.

    Hooks
    -

    airflow.providers.trino.hooks.trino.

    +

    airflow.providers.trino.hooks.trino.

    Guides
    -

    TrinoOperator.

    +

    TrinoOperator.

    Provider

    apache-airflow-providers-trino

    @@ -1230,13 +1230,13 @@

    Vertica

    Operators
    -

    airflow.providers.weaviate.operators.weaviate.

    +

    airflow.providers.weaviate.operators.weaviate.

    Hooks
    -

    airflow.providers.weaviate.hooks.weaviate.

    +

    airflow.providers.weaviate.hooks.weaviate.

    Guides
    -

    WeaviateIngestOperator.

    +

    WeaviateIngestOperator.

    Provider

    apache-airflow-providers-weaviate

    @@ -1274,10 +1274,10 @@

    MongoDB to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    MongoDB to Amazon S3

    +

    MongoDB to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.mongo_to_s3

    +

    airflow.providers.amazon.aws.transfers.mongo_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1294,7 +1294,7 @@

    Exasol to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Python API
    -

    airflow.providers.amazon.aws.transfers.exasol_to_s3

    +

    airflow.providers.amazon.aws.transfers.exasol_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1311,10 +1311,10 @@

    Common SQL to Amazon Simple Storage Service (S3)

    Amazon Simple Storage Service (S3)

    Operator guide
    -

    SQL to Amazon S3

    +

    SQL to Amazon S3

    Python API
    -

    airflow.providers.amazon.aws.transfers.sql_to_s3

    +

    airflow.providers.amazon.aws.transfers.sql_to_s3

    Provider

    apache-airflow-providers-amazon

    @@ -1331,10 +1331,10 @@

    Amazon Simple Storage Service (S3) to Common SQL

    Common SQL

    Operator guide
    -

    Amazon S3 to SQL

    +

    Amazon S3 to SQL

    Python API
    -

    airflow.providers.amazon.aws.transfers.s3_to_sql

    +

    airflow.providers.amazon.aws.transfers.s3_to_sql

    Provider

    apache-airflow-providers-amazon

    @@ -1419,10 +1419,10 @@

    Presto to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Presto to Google Cloud Storage Transfer Operator

    +

    Presto to Google Cloud Storage Transfer Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.presto_to_gcs

    +

    airflow.providers.google.cloud.transfers.presto_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1439,10 +1439,10 @@

    Trino to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Trino to Google Cloud Storage Transfer Operator

    +

    Trino to Google Cloud Storage Transfer Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.trino_to_gcs

    +

    airflow.providers.google.cloud.transfers.trino_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1459,7 +1459,7 @@

    Common SQL to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Python API
    -

    airflow.providers.google.cloud.transfers.sql_to_gcs

    +

    airflow.providers.google.cloud.transfers.sql_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1476,10 +1476,10 @@

    PostgreSQL to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Postgres To Google Cloud Storage Operator

    +

    Postgres To Google Cloud Storage Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.postgres_to_gcs

    +

    airflow.providers.google.cloud.transfers.postgres_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1496,7 +1496,7 @@

    Google BigQuery to Common SQL

    Common SQL

    Python API
    -

    airflow.providers.google.cloud.transfers.bigquery_to_sql

    +

    airflow.providers.google.cloud.transfers.bigquery_to_sql

    Provider

    apache-airflow-providers-google

    @@ -1513,10 +1513,10 @@

    Google BigQuery to MySQL

    MySQL

    Operator guide
    -

    Google Cloud BigQuery Transfer Operator to MySQL

    +

    Google Cloud BigQuery Transfer Operator to MySQL

    Python API
    -

    airflow.providers.google.cloud.transfers.bigquery_to_mysql

    +

    airflow.providers.google.cloud.transfers.bigquery_to_mysql

    Provider

    apache-airflow-providers-google

    @@ -1533,10 +1533,10 @@

    Google BigQuery to Microsoft SQL Server (MSSQL)

    Microsoft SQL Server (MSSQL)

    Operator guide
    -

    Google Cloud BigQuery Transfer Operator to Microsoft SQL Server

    +

    Google Cloud BigQuery Transfer Operator to Microsoft SQL Server

    Python API
    -

    airflow.providers.google.cloud.transfers.bigquery_to_mssql

    +

    airflow.providers.google.cloud.transfers.bigquery_to_mssql

    Provider

    apache-airflow-providers-google

    @@ -1553,10 +1553,10 @@

    Google BigQuery to PostgreSQL

    PostgreSQL

    Operator guide
    -

    Google Cloud BigQuery Transfer Operator to Postgres

    +

    Google Cloud BigQuery Transfer Operator to Postgres

    Python API
    -

    airflow.providers.google.cloud.transfers.bigquery_to_postgres

    +

    airflow.providers.google.cloud.transfers.bigquery_to_postgres

    Provider

    apache-airflow-providers-google

    @@ -1573,10 +1573,10 @@

    MySQL to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    MySQL To Google Cloud Storage Operator

    +

    MySQL To Google Cloud Storage Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.mysql_to_gcs

    +

    airflow.providers.google.cloud.transfers.mysql_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1593,10 +1593,10 @@

    Oracle to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Oracle To Google Cloud Storage Operator

    +

    Oracle To Google Cloud Storage Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.oracle_to_gcs

    +

    airflow.providers.google.cloud.transfers.oracle_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1613,10 +1613,10 @@

    Common SQL to Google Spreadsheet

    Google Spreadsheet

    Operator guide
    -

    SQL to Google Sheets Transfer Operators

    +

    SQL to Google Sheets Transfer Operators

    Python API
    -

    airflow.providers.google.suite.transfers.sql_to_sheets

    +

    airflow.providers.google.suite.transfers.sql_to_sheets

    Provider

    apache-airflow-providers-google

    @@ -1633,10 +1633,10 @@

    Microsoft SQL Server (MSSQL) to Google Cloud Storage (GCS)

    Google Cloud Storage (GCS)

    Operator guide
    -

    Microsoft SQL Server To Google Cloud Storage Operator

    +

    Microsoft SQL Server To Google Cloud Storage Operator

    Python API
    -

    airflow.providers.google.cloud.transfers.mssql_to_gcs

    +

    airflow.providers.google.cloud.transfers.mssql_to_gcs

    Provider

    apache-airflow-providers-google

    @@ -1832,10 +1832,10 @@

    Google Cloud Storage (GCS) to Trino

    Trino

    Operator guide
    -

    Google Cloud Storage to Trino Transfer Operator

    +

    Google Cloud Storage to Trino Transfer Operator

    Python API
    -

    airflow.providers.trino.transfers.gcs_to_trino

    +

    airflow.providers.trino.transfers.gcs_to_trino

    Provider

    apache-airflow-providers-trino

    diff --git a/docs-archive/apache-airflow-providers/packages-ref.html b/docs-archive/apache-airflow-providers/packages-ref.html index 239a353c65e..90edbf036fd 100644 --- a/docs-archive/apache-airflow-providers/packages-ref.html +++ b/docs-archive/apache-airflow-providers/packages-ref.html @@ -360,6 +360,7 @@
  • apache-airflow-providers-docker
  • apache-airflow-providers-elasticsearch
  • apache-airflow-providers-exasol
  • +
  • apache-airflow-providers-fab
  • apache-airflow-providers-facebook
  • apache-airflow-providers-ftp
  • apache-airflow-providers-github
  • @@ -571,6 +572,7 @@
  • apache-airflow-providers-docker
  • apache-airflow-providers-elasticsearch
  • apache-airflow-providers-exasol
  • +
  • apache-airflow-providers-fab
  • apache-airflow-providers-facebook
  • apache-airflow-providers-ftp
  • apache-airflow-providers-github
  • @@ -771,58 +773,59 @@

    Providers packages referenceapache-airflow-providers-docker

  • apache-airflow-providers-elasticsearch

  • apache-airflow-providers-exasol

  • -
  • apache-airflow-providers-facebook

  • -
  • apache-airflow-providers-ftp

  • -
  • apache-airflow-providers-github

  • -
  • apache-airflow-providers-google

  • -
  • apache-airflow-providers-grpc

  • -
  • apache-airflow-providers-hashicorp

  • -
  • apache-airflow-providers-http

  • -
  • apache-airflow-providers-imap

  • -
  • apache-airflow-providers-influxdb

  • -
  • apache-airflow-providers-jdbc

  • -
  • apache-airflow-providers-jenkins

  • -
  • apache-airflow-providers-microsoft-azure

  • -
  • apache-airflow-providers-microsoft-mssql

  • -
  • apache-airflow-providers-microsoft-psrp

  • -
  • apache-airflow-providers-microsoft-winrm

  • -
  • apache-airflow-providers-mongo

  • -
  • apache-airflow-providers-mysql

  • -
  • apache-airflow-providers-neo4j

  • -
  • apache-airflow-providers-odbc

  • -
  • apache-airflow-providers-openai

  • -
  • apache-airflow-providers-openfaas

  • -
  • apache-airflow-providers-openlineage

  • -
  • apache-airflow-providers-opensearch

  • -
  • apache-airflow-providers-opsgenie

  • -
  • apache-airflow-providers-oracle

  • -
  • apache-airflow-providers-pagerduty

  • -
  • apache-airflow-providers-papermill

  • -
  • apache-airflow-providers-pgvector

  • -
  • apache-airflow-providers-pinecone

  • -
  • apache-airflow-providers-plexus

  • -
  • apache-airflow-providers-postgres

  • -
  • apache-airflow-providers-presto

  • -
  • apache-airflow-providers-redis

  • -
  • apache-airflow-providers-salesforce

  • -
  • apache-airflow-providers-samba

  • -
  • apache-airflow-providers-segment

  • -
  • apache-airflow-providers-sendgrid

  • -
  • apache-airflow-providers-sftp

  • -
  • apache-airflow-providers-singularity

  • -
  • apache-airflow-providers-slack

  • -
  • apache-airflow-providers-smtp

  • -
  • apache-airflow-providers-snowflake

  • -
  • apache-airflow-providers-sqlite

  • -
  • apache-airflow-providers-ssh

  • -
  • apache-airflow-providers-tableau

  • -
  • apache-airflow-providers-tabular

  • -
  • apache-airflow-providers-telegram

  • -
  • apache-airflow-providers-trino

  • -
  • apache-airflow-providers-vertica

  • -
  • apache-airflow-providers-weaviate

  • -
  • apache-airflow-providers-yandex

  • -
  • apache-airflow-providers-zendesk

  • +
  • apache-airflow-providers-fab

  • +
  • apache-airflow-providers-facebook

  • +
  • apache-airflow-providers-ftp

  • +
  • apache-airflow-providers-github

  • +
  • apache-airflow-providers-google

  • +
  • apache-airflow-providers-grpc

  • +
  • apache-airflow-providers-hashicorp

  • +
  • apache-airflow-providers-http

  • +
  • apache-airflow-providers-imap

  • +
  • apache-airflow-providers-influxdb

  • +
  • apache-airflow-providers-jdbc

  • +
  • apache-airflow-providers-jenkins

  • +
  • apache-airflow-providers-microsoft-azure

  • +
  • apache-airflow-providers-microsoft-mssql

  • +
  • apache-airflow-providers-microsoft-psrp

  • +
  • apache-airflow-providers-microsoft-winrm

  • +
  • apache-airflow-providers-mongo

  • +
  • apache-airflow-providers-mysql

  • +
  • apache-airflow-providers-neo4j

  • +
  • apache-airflow-providers-odbc

  • +
  • apache-airflow-providers-openai

  • +
  • apache-airflow-providers-openfaas

  • +
  • apache-airflow-providers-openlineage

  • +
  • apache-airflow-providers-opensearch

  • +
  • apache-airflow-providers-opsgenie

  • +
  • apache-airflow-providers-oracle

  • +
  • apache-airflow-providers-pagerduty

  • +
  • apache-airflow-providers-papermill

  • +
  • apache-airflow-providers-pgvector

  • +
  • apache-airflow-providers-pinecone

  • +
  • apache-airflow-providers-plexus

  • +
  • apache-airflow-providers-postgres

  • +
  • apache-airflow-providers-presto

  • +
  • apache-airflow-providers-redis

  • +
  • apache-airflow-providers-salesforce

  • +
  • apache-airflow-providers-samba

  • +
  • apache-airflow-providers-segment

  • +
  • apache-airflow-providers-sendgrid

  • +
  • apache-airflow-providers-sftp

  • +
  • apache-airflow-providers-singularity

  • +
  • apache-airflow-providers-slack

  • +
  • apache-airflow-providers-smtp

  • +
  • apache-airflow-providers-snowflake

  • +
  • apache-airflow-providers-sqlite

  • +
  • apache-airflow-providers-ssh

  • +
  • apache-airflow-providers-tableau

  • +
  • apache-airflow-providers-tabular

  • +
  • apache-airflow-providers-telegram

  • +
  • apache-airflow-providers-trino

  • +
  • apache-airflow-providers-vertica

  • +
  • apache-airflow-providers-weaviate

  • +
  • apache-airflow-providers-yandex

  • +
  • apache-airflow-providers-zendesk

  • @@ -878,7 +881,7 @@

    Providers packages reference

    PyPI Repository

    Python API Reference
    -

    airflow.providers.amazon

    +

    airflow.providers.amazon

    @@ -1510,8 +1513,27 @@

    Providers packages reference +

    apache-airflow-providers-fab

    +

    Flask App Builder

    +

    To install, run:

    +
    pip install 'apache-airflow-providers-fab'
    +
    +
    +
    +
    Available versions
    +

    1.0.0.

    +
    +
    Reference
    +

    PyPI Repository

    +
    +
    Python API Reference
    +

    airflow.providers.fab

    +
    +
    +

    -

    apache-airflow-providers-facebook

    +

    apache-airflow-providers-facebook

    Facebook Ads

    To install, run:

    pip install 'apache-airflow-providers-facebook'
    @@ -1530,7 +1552,7 @@ 

    Providers packages reference -

    apache-airflow-providers-ftp

    +

    apache-airflow-providers-ftp

    File Transfer Protocol (FTP)

    To install, run:

    pip install 'apache-airflow-providers-ftp'
    @@ -1549,7 +1571,7 @@ 

    Providers packages reference -

    apache-airflow-providers-github

    +

    apache-airflow-providers-github

    GitHub

    To install, run:

    pip install 'apache-airflow-providers-github'
    @@ -1568,7 +1590,7 @@ 

    Providers packages reference -

    apache-airflow-providers-google

    +

    apache-airflow-providers-google

    Google services including:

    Python API Reference
    -

    airflow.providers.google

    +

    airflow.providers.google

    -

    apache-airflow-providers-grpc

    +

    apache-airflow-providers-grpc

    gRPC

    To install, run:

    pip install 'apache-airflow-providers-grpc'
    @@ -1611,12 +1633,12 @@ 

    Providers packages reference

    PyPI Repository

    Python API Reference
    -

    airflow.providers.grpc

    +

    airflow.providers.grpc

    -

    apache-airflow-providers-hashicorp

    +

    apache-airflow-providers-hashicorp

    Hashicorp including Hashicorp Vault

    To install, run:

    pip install 'apache-airflow-providers-hashicorp'
    @@ -1630,12 +1652,12 @@ 

    Providers packages reference

    PyPI Repository

    Python API Reference
    -

    airflow.providers.hashicorp

    +

    airflow.providers.hashicorp

    -

    apache-airflow-providers-http

    +

    apache-airflow-providers-http

    Hypertext Transfer Protocol (HTTP)

    To install, run:

    pip install 'apache-airflow-providers-http'
    @@ -1654,7 +1676,7 @@ 

    Providers packages reference -

    apache-airflow-providers-imap

    +

    apache-airflow-providers-imap

    Internet Message Access Protocol (IMAP)

    To install, run:

    pip install 'apache-airflow-providers-imap'
    @@ -1673,7 +1695,7 @@ 

    Providers packages reference -

    apache-airflow-providers-influxdb

    +

    apache-airflow-providers-influxdb

    InfluxDB

    To install, run:

    pip install 'apache-airflow-providers-influxdb'
    @@ -1692,7 +1714,7 @@ 

    Providers packages reference -

    apache-airflow-providers-jdbc

    +

    apache-airflow-providers-jdbc

    Java Database Connectivity (JDBC)

    To install, run:

    pip install 'apache-airflow-providers-jdbc'
    @@ -1711,7 +1733,7 @@ 

    Providers packages reference -

    apache-airflow-providers-jenkins

    +

    apache-airflow-providers-jenkins

    Jenkins

    To install, run:

    pip install 'apache-airflow-providers-jenkins'
    @@ -1730,7 +1752,7 @@ 

    Providers packages reference -

    apache-airflow-providers-microsoft-azure

    +

    apache-airflow-providers-microsoft-azure

    Microsoft Azure

    To install, run:

    pip install 'apache-airflow-providers-microsoft-azure'
    @@ -1749,7 +1771,7 @@ 

    Providers packages reference -

    apache-airflow-providers-microsoft-mssql

    +

    apache-airflow-providers-microsoft-mssql

    Microsoft SQL Server (MSSQL)

    To install, run:

    pip install 'apache-airflow-providers-microsoft-mssql'
    @@ -1768,7 +1790,7 @@ 

    Providers packages reference -

    apache-airflow-providers-microsoft-psrp

    +

    apache-airflow-providers-microsoft-psrp

    This package provides remote execution capabilities via the PowerShell Remoting Protocol (PSRP).

    To install, run:

    @@ -1788,7 +1810,7 @@

    Providers packages reference -

    apache-airflow-providers-microsoft-winrm

    +

    apache-airflow-providers-microsoft-winrm

    Windows Remote Management (WinRM)

    To install, run:

    pip install 'apache-airflow-providers-microsoft-winrm'
    @@ -1807,7 +1829,7 @@ 

    Providers packages reference -

    apache-airflow-providers-mongo

    +

    apache-airflow-providers-mongo

    MongoDB

    To install, run:

    pip install 'apache-airflow-providers-mongo'
    @@ -1826,7 +1848,7 @@ 

    Providers packages reference -

    apache-airflow-providers-mysql

    +

    apache-airflow-providers-mysql

    MySQL

    To install, run:

    pip install 'apache-airflow-providers-mysql'
    @@ -1845,7 +1867,7 @@ 

    Providers packages reference -

    apache-airflow-providers-neo4j

    +

    apache-airflow-providers-neo4j

    Neo4j

    To install, run:

    pip install 'apache-airflow-providers-neo4j'
    @@ -1864,7 +1886,7 @@ 

    Providers packages reference -

    apache-airflow-providers-odbc

    +

    apache-airflow-providers-odbc

    ODBC

    To install, run:

    pip install 'apache-airflow-providers-odbc'
    @@ -1883,7 +1905,7 @@ 

    Providers packages reference -

    apache-airflow-providers-openai

    +

    apache-airflow-providers-openai

    OpenAI

    To install, run:

    pip install 'apache-airflow-providers-openai'
    @@ -1902,7 +1924,7 @@ 

    Providers packages reference -

    apache-airflow-providers-openfaas

    +

    apache-airflow-providers-openfaas

    OpenFaaS

    To install, run:

    pip install 'apache-airflow-providers-openfaas'
    @@ -1921,7 +1943,7 @@ 

    Providers packages reference -

    apache-airflow-providers-openlineage

    +

    apache-airflow-providers-openlineage

    OpenLineage

    To install, run:

    pip install 'apache-airflow-providers-openlineage'
    @@ -1940,7 +1962,7 @@ 

    Providers packages reference -

    apache-airflow-providers-opensearch

    +

    apache-airflow-providers-opensearch

    OpenSearch

    To install, run:

    pip install 'apache-airflow-providers-opensearch'
    @@ -1959,7 +1981,7 @@ 

    Providers packages reference -

    apache-airflow-providers-opsgenie

    +

    apache-airflow-providers-opsgenie

    Opsgenie

    To install, run:

    pip install 'apache-airflow-providers-opsgenie'
    @@ -1978,7 +2000,7 @@ 

    Providers packages reference -

    apache-airflow-providers-oracle

    +

    apache-airflow-providers-oracle

    Oracle

    To install, run:

    pip install 'apache-airflow-providers-oracle'
    @@ -1997,7 +2019,7 @@ 

    Providers packages reference -

    apache-airflow-providers-pagerduty

    +

    apache-airflow-providers-pagerduty

    Pagerduty

    To install, run:

    pip install 'apache-airflow-providers-pagerduty'
    @@ -2016,7 +2038,7 @@ 

    Providers packages reference -

    apache-airflow-providers-papermill

    +

    apache-airflow-providers-papermill

    Papermill

    To install, run:

    pip install 'apache-airflow-providers-papermill'
    @@ -2035,7 +2057,7 @@ 

    Providers packages reference -

    apache-airflow-providers-pgvector

    +

    apache-airflow-providers-pgvector

    pgvector

    To install, run:

    pip install 'apache-airflow-providers-pgvector'
    @@ -2054,7 +2076,7 @@ 

    Providers packages reference -

    apache-airflow-providers-pinecone

    +

    apache-airflow-providers-pinecone

    Pinecone

    To install, run:

    pip install 'apache-airflow-providers-pinecone'
    @@ -2073,7 +2095,7 @@ 

    Providers packages reference -

    apache-airflow-providers-plexus

    +

    apache-airflow-providers-plexus

    Plexus

    To install, run:

    pip install 'apache-airflow-providers-plexus'
    @@ -2087,12 +2109,12 @@ 

    Providers packages reference

    PyPI Repository

    Python API Reference
    -

    airflow.providers.plexus

    +

    airflow.providers.plexus

    -

    apache-airflow-providers-postgres

    +

    apache-airflow-providers-postgres

    PostgreSQL

    To install, run:

    pip install 'apache-airflow-providers-postgres'
    @@ -2111,7 +2133,7 @@ 

    Providers packages reference -

    apache-airflow-providers-presto

    +

    apache-airflow-providers-presto

    Presto

    To install, run:

    pip install 'apache-airflow-providers-presto'
    @@ -2130,7 +2152,7 @@ 

    Providers packages reference -

    apache-airflow-providers-redis

    +

    apache-airflow-providers-redis

    Redis

    To install, run:

    pip install 'apache-airflow-providers-redis'
    @@ -2144,12 +2166,12 @@ 

    Providers packages reference

    PyPI Repository

    Python API Reference
    -

    airflow.providers.redis

    +

    airflow.providers.redis

    -

    apache-airflow-providers-salesforce

    +

    apache-airflow-providers-salesforce

    Salesforce

    To install, run:

    pip install 'apache-airflow-providers-salesforce'
    @@ -2168,7 +2190,7 @@ 

    Providers packages reference -

    apache-airflow-providers-samba

    +

    apache-airflow-providers-samba

    Samba

    To install, run:

    pip install 'apache-airflow-providers-samba'
    @@ -2187,7 +2209,7 @@ 

    Providers packages reference -

    apache-airflow-providers-segment

    +

    apache-airflow-providers-segment

    Segment

    To install, run:

    pip install 'apache-airflow-providers-segment'
    @@ -2201,12 +2223,12 @@ 

    Providers packages reference

    PyPI Repository

    Python API Reference
    -

    airflow.providers.segment

    +

    airflow.providers.segment

    -

    apache-airflow-providers-sendgrid

    +

    apache-airflow-providers-sendgrid

    Sendgrid

    To install, run:

    pip install 'apache-airflow-providers-sendgrid'
    @@ -2225,7 +2247,7 @@ 

    Providers packages reference -

    apache-airflow-providers-sftp

    +

    apache-airflow-providers-sftp

    SSH File Transfer Protocol (SFTP)

    To install, run:

    pip install 'apache-airflow-providers-sftp'
    @@ -2244,7 +2266,7 @@ 

    Providers packages reference -

    apache-airflow-providers-singularity

    +

    apache-airflow-providers-singularity

    Singularity

    To install, run:

    pip install 'apache-airflow-providers-singularity'
    @@ -2258,12 +2280,12 @@ 

    Providers packages reference

    PyPI Repository

    Python API Reference
    -

    airflow.providers.singularity

    +

    airflow.providers.singularity

    -

    apache-airflow-providers-slack

    +

    apache-airflow-providers-slack

    Slack services integration including:

      @@ -2288,7 +2310,7 @@

      Providers packages reference -

      apache-airflow-providers-smtp

      +

      apache-airflow-providers-smtp

      Simple Mail Transfer Protocol (SMTP)

      To install, run:

      pip install 'apache-airflow-providers-smtp'
      @@ -2307,7 +2329,7 @@ 

      Providers packages reference -

      apache-airflow-providers-snowflake

      +

      apache-airflow-providers-snowflake

      Snowflake

      To install, run:

      pip install 'apache-airflow-providers-snowflake'
      @@ -2321,12 +2343,12 @@ 

      Providers packages reference

      PyPI Repository

      Python API Reference
      -

      airflow.providers.snowflake

      +

      airflow.providers.snowflake

      -

      apache-airflow-providers-sqlite

      +

      apache-airflow-providers-sqlite

      SQLite

      To install, run:

      pip install 'apache-airflow-providers-sqlite'
      @@ -2345,7 +2367,7 @@ 

      Providers packages reference -

      apache-airflow-providers-ssh

      +

      apache-airflow-providers-ssh

      Secure Shell (SSH)

      To install, run:

      pip install 'apache-airflow-providers-ssh'
      @@ -2364,7 +2386,7 @@ 

      Providers packages reference -

      apache-airflow-providers-tableau

      +

      apache-airflow-providers-tableau

      Tableau

      To install, run:

      pip install 'apache-airflow-providers-tableau'
      @@ -2378,12 +2400,12 @@ 

      Providers packages reference

      PyPI Repository

      Python API Reference
      -

      airflow.providers.tableau

      +

      airflow.providers.tableau

      -

      apache-airflow-providers-tabular

      +

      apache-airflow-providers-tabular

      Tabular

      To install, run:

      pip install 'apache-airflow-providers-tabular'
      @@ -2402,7 +2424,7 @@ 

      Providers packages reference -

      apache-airflow-providers-telegram

      +

      apache-airflow-providers-telegram

      Telegram

      To install, run:

      pip install 'apache-airflow-providers-telegram'
      @@ -2421,7 +2443,7 @@ 

      Providers packages reference -

      apache-airflow-providers-trino

      +

      apache-airflow-providers-trino

      Trino

      To install, run:

      pip install 'apache-airflow-providers-trino'
      @@ -2435,12 +2457,12 @@ 

      Providers packages reference

      PyPI Repository

      Python API Reference
      -

      airflow.providers.trino

      +

      airflow.providers.trino

      -

      apache-airflow-providers-vertica

      +

      apache-airflow-providers-vertica

      Vertica

      To install, run:

      pip install 'apache-airflow-providers-vertica'
      @@ -2459,7 +2481,7 @@ 

      Providers packages reference -

      apache-airflow-providers-weaviate

      +

      apache-airflow-providers-weaviate

      Weaviate

      To install, run:

      pip install 'apache-airflow-providers-weaviate'
      @@ -2473,12 +2495,12 @@ 

      Providers packages reference

      PyPI Repository

      Python API Reference
      -

      airflow.providers.weaviate

      +

      airflow.providers.weaviate

      -

      apache-airflow-providers-yandex

      +

      apache-airflow-providers-yandex

      Yandex including Yandex.Cloud

      To install, run:

      pip install 'apache-airflow-providers-yandex'
      @@ -2492,12 +2514,12 @@ 

      Providers packages reference

      PyPI Repository

      Python API Reference
      -

      airflow.providers.yandex

      +

      airflow.providers.yandex

      -

      apache-airflow-providers-zendesk

      +

      apache-airflow-providers-zendesk

      Zendesk

      To install, run:

      pip install 'apache-airflow-providers-zendesk'
      @@ -2629,6 +2651,7 @@ 

      Providers packages referenceapache-airflow-providers-docker
    • apache-airflow-providers-elasticsearch
    • apache-airflow-providers-exasol
    • +
    • apache-airflow-providers-fab
    • apache-airflow-providers-facebook
    • apache-airflow-providers-ftp
    • apache-airflow-providers-github
    • diff --git a/docs-archive/apache-airflow-providers/searchindex.js b/docs-archive/apache-airflow-providers/searchindex.js index 5906c8b8a2f..d5cc41936e3 100644 --- a/docs-archive/apache-airflow-providers/searchindex.js +++ b/docs-archive/apache-airflow-providers/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["core-extensions/auth-backends", "core-extensions/configurations", "core-extensions/connections", "core-extensions/deferrable-operator-ref", "core-extensions/executors", "core-extensions/extra-links", "core-extensions/index", "core-extensions/logging", "core-extensions/notifications", "core-extensions/secrets-backends", "howto/create-custom-providers", "index", "installing-from-pypi", "installing-from-sources", "operators-and-hooks-ref/apache", "operators-and-hooks-ref/aws", "operators-and-hooks-ref/azure", "operators-and-hooks-ref/google", "operators-and-hooks-ref/index", "operators-and-hooks-ref/protocol", "operators-and-hooks-ref/services", "operators-and-hooks-ref/software", "packages-ref"], "filenames": ["core-extensions/auth-backends.rst", "core-extensions/configurations.rst", "core-extensions/connections.rst", "core-extensions/deferrable-operator-ref.rst", "core-extensions/executors.rst", "core-extensions/extra-links.rst", "core-extensions/index.rst", "core-extensions/logging.rst", "core-extensions/notifications.rst", "core-extensions/secrets-backends.rst", "howto/create-custom-providers.rst", "index.rst", "installing-from-pypi.rst", "installing-from-sources.rst", "operators-and-hooks-ref/apache.rst", "operators-and-hooks-ref/aws.rst", "operators-and-hooks-ref/azure.rst", "operators-and-hooks-ref/google.rst", "operators-and-hooks-ref/index.rst", "operators-and-hooks-ref/protocol.rst", "operators-and-hooks-ref/services.rst", "operators-and-hooks-ref/software.rst", "packages-ref.rst"], "titles": ["Auth backends", "Configurations", "Connections", "Supported Deferrable Operators", "Executors", "Extra Links", "Core Extensions", "Writing logs", "Notifications", "Secret backends", "How to create your own provider", "Provider packages", "Installation from PyPI", "Installing Providers from Sources", "ASF: Apache Software Foundation", "AWS: Amazon Web Services", "Azure: Microsoft Azure", "Google", "Operators and Hooks Reference", "Protocol integrations", "Services", "Software integrations", "Providers packages reference"], "terms": {"thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "summari": [0, 1, 2, 4, 5, 7, 8, 9, 11], "all": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 15, 17], "apach": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 18, 20], "airflow": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "commun": [0, 1, 2, 4, 5, 7, 8, 9, 10, 12, 19], "provid": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 14, 15, 16, 17, 19, 20, 21], "implement": [0, 2, 4, 5, 6, 7, 8, 9, 10], "authent": [0, 10, 11, 16], "expos": [0, 2, 4, 5, 7, 9, 10], "via": [0, 2, 4, 5, 7, 9, 10, 11, 12, 13, 22], "manag": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 18, 22], "": [0, 9, 10, 11, 13, 16, 22], "web": [0, 11, 18, 22], "server": [0, 6, 11, 13, 18, 22], "api": [0, 10, 14, 15, 16, 18, 19, 22], "base": [0, 14, 15, 16, 17], "flask": 0, "applic": 0, "builder": 0, "capabl": [0, 9, 10, 11, 22], "you": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21], "can": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 13, 17], "read": [0, 9, 11], "more": [0, 10, 11, 12], "about": [0, 10, 11, 13], "those": [0, 1, 2, 4, 7, 9, 10, 11, 12], "fab": 0, "secur": [0, 18, 22], "doc": [0, 10], "also": [0, 2, 4, 5, 7, 8, 9, 10, 11, 13, 17], "take": [0, 1, 9], "look": [0, 1, 9, 10, 12], "avail": [0, 1, 5, 7, 9, 10, 11, 18, 22], "core": [0, 1, 7, 9, 10, 18], "webserv": 0, "see": [0, 2, 4, 5, 7, 8, 9, 10, 11, 12, 17], "google_openid": 0, "devel": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "2": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "9": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "0": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "dev0": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "experiment": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "featur": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "custom": [1, 2, 5, 9], "how": [1, 11, 12, 17, 21], "set": [1, 10], "option": [1, 7, 11], "refer": [1, 10, 11], "amazon": [1, 3, 6, 11, 13, 18], "hive": [1, 6, 13, 18], "celeri": [1, 6, 12, 13, 18], "kubernet": [1, 3, 6, 13, 18], "cncf": [1, 3, 21], "elasticsearch": [1, 6, 13, 18], "internet": [1, 6, 13, 18, 22], "messag": [1, 6, 8, 13, 18, 22], "access": [1, 6, 10, 13, 18, 22], "protocol": [1, 6, 13, 18, 22], "imap": [1, 6, 13, 18], "java": [1, 6, 13, 18, 22], "databas": [1, 6, 9, 11, 13, 18, 22], "connect": [1, 6, 9, 10, 13, 17, 18, 22], "jdbc": [1, 6, 13, 18], "microsoft": [1, 3, 6, 13, 18], "azur": [1, 3, 6, 13, 18], "openlineag": [1, 13], "simpl": [1, 6, 13, 18, 22], "mail": [1, 6, 13, 18, 22], "transfer": [1, 6, 10, 11, 13, 18, 22], "smtp": [1, 6, 13, 18], "yandex": [1, 6, 13, 18], "extend": [2, 4, 5, 6, 10], "each": [2, 4, 5, 10, 11], "defin": [2, 4, 5, 10, 11], "own": [2, 4, 5, 9, 11], "paramet": 2, "ui": [2, 10, 11], "field": [2, 10, 11], "behaviour": [2, 10, 11], "when": [2, 8, 10, 11, 12], "type": [2, 10, 17], "us": [2, 6, 11, 12, 13, 17, 19, 21], "automat": [2, 11], "creat": [2, 8, 11, 14], "hook": [2, 10, 11, 14, 15, 16, 19, 20, 21], "specif": [2, 6, 10], "The": [2, 4, 5, 10, 11, 13], "explain": [2, 4, 5, 8, 11], "airbytehook": 2, "oss": 2, "osshook": 2, "adb_spark": 2, "analyticdbsparkhook": 2, "aw": [2, 10, 14, 16, 17, 18, 19, 20, 21, 22], "awsgenerichook": 2, "chime": [2, 18], "chimewebhookhook": 2, "emr": [2, 18], "emrhook": 2, "redshift": [2, 18], "redshiftsqlhook": 2, "cassandrahook": 2, "drillhook": 2, "druiddbapihook": 2, "hive_cli": 2, "hiveclihook": 2, "hiveserver2": 2, "hiveserver2hook": 2, "hive_metastor": 2, "hivemetastorehook": 2, "impalahook": 2, "kafkabasehook": 2, "livyhook": 2, "pig_cli": 2, "pigclihook": 2, "pinotdbapihook": 2, "pinot_admin": 2, "pinotadminhook": 2, "spark_connect": [2, 14], "sparkconnecthook": 2, "spark_jdbc": [2, 14], "sparkjdbchook": 2, "spark_sql": [2, 14], "sparksqlhook": 2, "sparksubmithook": 2, "sqoophook": 2, "apprisehook": 2, "arangodbhook": 2, "asanahook": 2, "jirahook": 2, "cloudanthook": 2, "kuberneteshook": 2, "coherehook": 2, "databrickshook": 2, "datadoghook": 2, "dbt_cloud": 2, "dbtcloudhook": 2, "dingdinghook": 2, "discordwebhookhook": 2, "dockerhook": 2, "elasticsearchhook": 2, "exasolhook": 2, "facebook_soci": 2, "facebookadsreportinghook": 2, "ftphook": 2, "githubhook": 2, "google_cloud_platform": [2, 10], "googlebasehook": [2, 17], "dataprep": 2, "googledataprephook": 2, "gcpcloudsql": 2, "cloudsqlhook": 2, "gcpcloudsqldb": 2, "cloudsqldatabasehook": 2, "gcpbigqueri": 2, "bigqueryhook": 2, "gcpssh": 2, "computeenginesshhook": 2, "leveldb": [2, 18, 22], "leveldbhook": 2, "grpchook": 2, "vault": [2, 18, 22], "vaulthook": 2, "httphook": 2, "imaphook": 2, "influxdbhook": 2, "jdbchook": 2, "jenkinshook": 2, "azurebasehook": 2, "azure_data_explor": 2, "azuredataexplorerhook": 2, "azure_batch": 2, "azurebatchhook": 2, "azure_cosmo": 2, "azurecosmosdbhook": 2, "azure_data_lak": 2, "azuredatalakehook": 2, "azure_fileshar": 2, "azurefilesharehook": 2, "azure_container_volum": 2, "azurecontainervolumehook": 2, "azure_container_inst": 2, "azurecontainerinstancehook": 2, "wasb": [2, 16], "wasbhook": 2, "azure_data_factori": 2, "azuredatafactoryhook": 2, "azure_container_registri": 2, "azurecontainerregistryhook": 2, "azure_service_bu": 2, "baseazureservicebushook": 2, "azure_synaps": 2, "azuresynapsehook": 2, "adl": [2, 16], "azuredatalakestoragev2hook": 2, "azure_synapse_pipelin": 2, "azuresynapsepipelinehook": 2, "mssqlhook": 2, "mongo": [2, 21], "mongohook": 2, "mysqlhook": 2, "neo4jhook": 2, "odbchook": 2, "openaihook": 2, "opensearchhook": 2, "opsgeniealerthook": 2, "oraclehook": 2, "pagerdutyhook": 2, "pagerduty_ev": [2, 20], "pagerdutyeventshook": 2, "jupyter_kernel": 2, "kernelhook": 2, "pineconehook": 2, "postgr": [2, 17, 21], "postgreshook": 2, "prestohook": 2, "redishook": 2, "salesforcehook": 2, "sambahook": 2, "segmenthook": 2, "sftphook": 2, "slackhook": 2, "slackwebhook": 2, "slackwebhookhook": 2, "smtphook": 2, "snowflakehook": 2, "sqlitehook": 2, "sshhook": 2, "tableauhook": 2, "tabularhook": 2, "trinohook": 2, "verticahook": 2, "weaviatehook": 2, "yandexcloud": 2, "yandexcloudbasehook": 2, "zendeskhook": 2, "list": [3, 6, 10, 11, 18, 22], "mode": 3, "beam": [3, 13, 18], "livi": [3, 6, 13, 18], "databrick": [3, 6, 13, 18], "dbt": [3, 6, 13], "cloud": [3, 6, 7, 13, 18], "googl": [3, 6, 11, 13, 18], "http": [3, 6, 10, 11, 12, 13, 18], "snowflak": [3, 6, 13, 18], "configur": [4, 6, 9, 10, 17], "handl": [4, 11, 12], "execut": [4, 22], "task": [4, 5, 7, 8, 11], "ar": [4, 5, 8, 10, 11, 12, 13, 15, 16, 17, 18], "awsecsexecutor": 4, "celeryexecutor": 4, "celerykubernetesexecutor": 4, "kubernetesexecutor": 4, "oper": [5, 6, 10, 11, 14, 15, 16, 19, 20, 21], "For": [5, 11, 13], "its": [5, 9, 11], "redirect": 5, "user": [5, 10, 11, 13], "extern": [5, 8, 11], "system": [5, 8, 11, 18, 22], "button": 5, "page": [5, 10, 12, 13], "here": [5, 6, 7, 8, 9, 11, 18, 22], "batchjobdefinitionlink": 5, "batchjobdetailslink": 5, "batchjobqueuelink": 5, "emrclusterlink": 5, "emrlogslink": 5, "gluejobrundetailslink": 5, "cloudwatcheventslink": 5, "databricksjobrunlink": 5, "dbtcloudrunjoboperatorlink": 5, "bigqueryconsolelink": 5, "bigqueryconsoleindexablelink": 5, "dataformrepositorylink": 5, "dataformworkspacelink": 5, "dataformworkflowinvocationlink": 5, "datafusioninstancelink": 5, "datafusionpipelinelink": 5, "datafusionpipelineslink": 5, "cloudsqlinstancelink": 5, "cloudsqlinstancedatabaselink": 5, "dataplextasklink": 5, "dataplextaskslink": 5, "dataplexlakelink": 5, "bigquerydatasetlink": 5, "bigquerytablelink": 5, "bigquerydatatransferconfiglink": 5, "computeinstancedetailslink": 5, "computeinstancetemplatedetailslink": 5, "computeinstancegroupmanagerdetailslink": 5, "cloudtasksqueuelink": 5, "cloudtaskslink": 5, "datacatalogentrygrouplink": 5, "datacatalogentrylink": 5, "datacatalogtagtemplatelink": 5, "dataproclink": 5, "dataproclistlink": 5, "dataprocclusterlink": 5, "dataprocjoblink": 5, "dataprocworkflowlink": 5, "dataprocworkflowtemplatelink": 5, "dataprocbatchlink": 5, "dataprocbatcheslistlink": 5, "dataprocmetastoredetailedlink": 5, "dataprocmetastorelink": 5, "dataprepflowlink": 5, "dataprepjobgrouplink": 5, "vertexaimodellink": 5, "vertexaimodellistlink": 5, "vertexaimodelexportlink": 5, "vertexaitraininglink": 5, "vertexaitrainingpipelineslink": 5, "vertexaidatasetlink": 5, "vertexaidatasetlistlink": 5, "vertexaihyperparametertuningjoblistlink": 5, "vertexaibatchpredictionjoblink": 5, "vertexaibatchpredictionjoblistlink": 5, "vertexaiendpointlink": 5, "vertexaiendpointlistlink": 5, "vertexaipipelinejoblink": 5, "vertexaipipelinejoblistlink": 5, "workflowsworkflowdetailslink": 5, "workflowslistofworkflowslink": 5, "workflowsexecutionlink": 5, "cloudcomposerenvironmentlink": 5, "cloudcomposerenvironmentslink": 5, "dataflowjoblink": 5, "clouddatastoreimportexportlink": 5, "clouddatastoreentitieslink": 5, "bigtableinstancelink": 5, "bigtableclusterlink": 5, "bigtabletableslink": 5, "spannerdatabaselink": 5, "spannerinstancelink": 5, "stackdrivernotificationslink": 5, "stackdriverpolicieslink": 5, "kubernetesengineclusterlink": 5, "kubernetesenginepodlink": 5, "pubsubsubscriptionlink": 5, "pubsubtopiclink": 5, "memcachedinstancedetailslink": 5, "memcachedinstancelistlink": 5, "redisinstancedetailslink": 5, "redisinstancelistlink": 5, "cloudbuildlink": 5, "cloudbuildlistlink": 5, "cloudbuildtriggerslistlink": 5, "cloudbuildtriggerdetailslink": 5, "automldatasetlink": 5, "automldatasetlistlink": 5, "automlmodellink": 5, "automlmodeltrainlink": 5, "automlmodelpredictlink": 5, "lifescienceslink": 5, "cloudfunctionsdetailslink": 5, "cloudfunctionslistlink": 5, "cloudstoragetransferlistlink": 5, "cloudstoragetransferjoblink": 5, "cloudstoragetransferdetailslink": 5, "clouddlpdeidentifytemplateslistlink": 5, "clouddlpdeidentifytemplatedetailslink": 5, "clouddlpjobtriggerslistlink": 5, "clouddlpjobtriggerdetailslink": 5, "clouddlpjobslistlink": 5, "clouddlpjobdetailslink": 5, "clouddlpinspecttemplateslistlink": 5, "clouddlpinspecttemplatedetailslink": 5, "clouddlpinfotypeslistlink": 5, "clouddlpinfotypedetailslink": 5, "clouddlppossibleinfotypeslistlink": 5, "mlenginemodellink": 5, "mlenginemodelslistlink": 5, "mlenginejobdetailslink": 5, "mlenginejobslistlink": 5, "mlenginemodelversiondetailslink": 5, "storagelink": 5, "filedetailslink": 5, "azuredatafactorypipelinerunlink": 5, "azuresynapsepipelinerunlink": 5, "function": [6, 10, 18], "thei": [6, 10, 11, 12, 22], "certain": [6, 11], "auth": [6, 10], "backend": [6, 10], "airbyt": [6, 13, 18], "alibaba": [6, 13], "cassandra": [6, 13, 18], "drill": [6, 13, 18], "druid": [6, 13, 18], "impala": [6, 13, 18], "kafka": [6, 13, 18], "pig": [6, 13, 18], "pinot": [6, 13, 18], "spark": [6, 13, 18], "sqoop": [6, 13, 18], "appris": [6, 13, 18], "arangodb": [6, 13, 18], "asana": [6, 13, 18], "atlassian": [6, 13, 18], "jira": [6, 13, 18], "ibm": [6, 13, 18, 22], "cloudant": [6, 13, 18], "coher": [6, 13, 18], "datadog": [6, 13, 18], "dingd": [6, 13, 20], "discord": [6, 13, 18], "docker": [6, 13, 18], "exasol": [6, 13, 18], "facebook": [6, 13, 18], "file": [6, 13, 18, 22], "ftp": [6, 13, 18], "github": [6, 11, 13, 18], "grpc": [6, 13, 18], "hashicorp": [6, 13, 18], "hypertext": [6, 13, 18, 22], "influxdb": [6, 13, 18], "jenkin": [6, 13, 18], "sql": [6, 13, 18], "mssql": [6, 13, 18], "mongodb": [6, 13, 18, 22], "mysql": [6, 13, 18], "neo4j": [6, 13, 18], "odbc": [6, 13, 18], "openai": [6, 13, 18], "opensearch": [6, 13, 18], "opsgeni": [6, 13, 18], "oracl": [6, 13, 18], "pagerduti": [6, 13, 18], "papermil": [6, 13, 18], "pinecon": [6, 13, 18], "postgresql": [6, 13, 18, 22], "presto": [6, 13, 18], "redi": [6, 13, 18], "salesforc": [6, 13, 18], "samba": [6, 13, 18], "segment": [6, 13, 18], "sftp": [6, 13, 18], "slack": [6, 13, 18], "sqlite": [6, 13, 18], "ssh": [6, 13, 18], "tableau": [6, 13, 18], "tabular": [6, 13, 18], "trino": [6, 13, 18], "vertica": [6, 13, 18], "weaviat": [6, 13, 18], "zendesk": [6, 13, 18], "support": [6, 12, 14, 15, 16, 17], "deferr": 6, "executor": [6, 10], "extra": [6, 10], "link": [6, 10], "write": [6, 10, 11], "log": [6, 10, 18], "notif": [6, 10, 18], "secret": [6, 10], "osstaskhandl": 7, "s3taskhandl": 7, "cloudwatchtaskhandl": 7, "elasticsearchtaskhandl": 7, "platform": [7, 18, 22], "gcstaskhandl": 7, "stackdrivertaskhandl": 7, "blob": [7, 11, 18], "storag": [7, 18], "wasbtaskhandl": 7, "redistaskhandl": 7, "allow": [8, 10, 11, 14, 15, 16, 17, 19, 20, 21], "send": 8, "instanc": [8, 18], "dag": [8, 10, 11, 17], "run": [8, 10, 13, 18, 22], "chang": [8, 10, 11], "state": 8, "notifi": [8, 10], "chimenotifi": 8, "snsnotifi": 8, "sqsnotifi": 8, "apprisenotifi": 8, "jiranotifi": 8, "discordnotifi": 8, "opsgenienotifi": 8, "pagerdutynotifi": 8, "slacknotifi": 8, "slackwebhooknotifi": 8, "smtpnotifi": 8, "ha": [9, 10, 11, 15, 16, 17], "variabl": [9, 10, 11], "from": [9, 10, 11, 14, 15, 16, 17], "rather": [9, 10, 11], "than": [9, 10, 11], "while": [9, 12], "store": 9, "inform": [9, 10, 11], "possibl": [9, 10, 11], "mani": [9, 10], "enterpris": 9, "alreadi": [9, 13], "have": [9, 10, 11], "some": [9, 10, 11, 12, 16, 17], "tap": 9, "servic": [9, 11, 18, 22], "integr": [9, 10, 11, 14, 15, 16, 17, 18, 20, 22], "ones": 9, "secretsmanagerbackend": 9, "systemsmanagerparameterstorebackend": 9, "cloudsecretmanagerbackend": 9, "vaultbackend": 9, "azurekeyvaultbackend": 9, "develop": [10, 11, 14], "releas": [10, 11, 18], "sensor": [10, 11, 14, 15, 16, 17, 19, 20, 21], "togeth": [10, 11], "standard": [10, 19], "instal": [10, 22], "same": [10, 11, 12], "mechan": 10, "moreov": 10, "describ": [10, 11, 12], "previou": [10, 11, 13], "chapter": [10, 11], "As": 10, "mention": 10, "document": [10, 11, 14, 15, 16, 17, 18, 19, 20, 21], "add": [10, 11], "well": [10, 11, 13], "build": [10, 11], "them": [10, 11, 12], "would": [10, 11], "like": [10, 11, 12], "ad": [10, 18, 22], "just": 10, "matter": [10, 11], "python": [10, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22], "right": [10, 12], "meta": 10, "data": [10, 14, 18, 19, 20], "we": [10, 11], "entri": 10, "point": [10, 11], "need": [10, 11, 12], "appropri": [10, 11, 12], "apache_airflow_provid": 10, "which": [10, 11, 16], "callabl": 10, "return": 10, "dictionari": 10, "contain": [10, 11, 18], "discover": 10, "follow": [10, 11, 13], "json": 10, "schema": 10, "most": [10, 13], "extens": [10, 11, 17], "might": [10, 11, 12], "want": [10, 11], "purpos": 10, "import": [10, 13], "view": [10, 11], "displai": [10, 18], "cli": 10, "name": 10, "human": 10, "friendli": 10, "descript": 10, "addit": [10, 11], "version": [10, 11, 12, 13, 22], "revers": 10, "chronolog": 10, "order": [10, 11], "first": 10, "current": [10, 12], "It": [10, 13], "taken": 10, "provider_info": 10, "should": [10, 11, 12, 13], "class": 10, "replac": 10, "deprec": 10, "detail": [10, 11], "decor": [10, 19], "path": 10, "where": [10, 11], "handler": 10, "modul": 10, "config": 10, "conform": 10, "config_templ": 10, "yml": 10, "contribut": [10, 11], "valu": 10, "arrai": 10, "optim": 10, "reason": [10, 11], "remov": 10, "3": [10, 12, 22], "If": [10, 11, 12], "target": [10, 14, 15, 16, 17, 19, 20, 21], "do": [10, 12, 13], "includ": [10, 11, 12, 22], "earlier": 10, "both": 10, "queri": 10, "command": [10, 12], "wai": [10, 11], "verifi": [10, 13, 18], "properli": 10, "recogn": 10, "whether": 10, "line": 10, "interfac": [10, 11, 19], "environ": [10, 11], "sub": 10, "consid": 10, "convent": 10, "new": [10, 11], "onli": [10, 12], "librari": 10, "Such": 10, "typic": [10, 12], "result": 10, "importerror": 10, "howev": [10, 11], "error": 10, "silent": 10, "ignor": 10, "pollut": 10, "fals": 10, "warn": [10, 13], "veri": 10, "bad": 10, "pattern": 10, "tend": 10, "turn": 10, "blind": 10, "spot": 10, "so": [10, 11, 12], "avoid": 10, "encourag": 10, "until": 10, "had": 10, "select": [10, 13], "known": [10, 12], "1": [10, 11, 13, 22], "come": [10, 12], "actual": 10, "lead": [10, 12], "even": 10, "without": [10, 11], "give": [10, 11], "clue": 10, "someth": 10, "miss": 10, "depend": [10, 11, 12], "assign": 10, "uniqu": 10, "kei": [10, 13], "mean": [10, 11], "retriev": [10, 11], "xcom": 10, "exampl": [10, 11, 12, 13, 17], "case": [10, 11], "calcul": 10, "alwai": 10, "check": [10, 13], "ti_kei": 10, "pass": 10, "none": 10, "get_valu": 10, "keep": 10, "backward": [10, 11], "compat": [10, 11], "code": [10, 17], "similar": 10, "note": [10, 11], "condit": 10, "def": 10, "get_link": 10, "self": [10, 13], "baseoper": 10, "dttm": 10, "datetim": 10, "taskinstancekei": 10, "job_id": 10, "els": 10, "assert": 10, "get_on": 10, "dag_id": 10, "task_id": 10, "execution_d": 10, "len": 10, "index": [10, 11], "bigquery_job_details_link_fmt": 10, "format": [10, 12], "my": 10, "anyth": 10, "make": [10, 11], "other": [10, 11, 12, 18], "besid": 10, "befor": 10, "anyon": 10, "who": 10, "abl": 10, "quit": 10, "number": 10, "80": [10, 11], "go": 10, "maintain": 10, "structur": 10, "intent": 10, "pr": [10, 12], "But": 10, "free": [10, 11], "ani": [10, 11], "long": 10, "conflict": 10, "prefer": 10, "choos": [10, 13], "domain": 10, "what": [10, 22], "exist": 10, "below": [10, 12, 13], "setup": 10, "cfg": 10, "tell": 10, "get": [10, 13], "requir": [10, 11, 12], "metadata": 10, "step": [10, 13, 18], "part": 10, "sure": 10, "project": 10, "url": 10, "pypi": [10, 13, 22], "compliant": 10, "runtim": 10, "sever": 10, "org": [10, 13], "draft": 10, "07": 10, "object": 10, "properti": 10, "under": 10, "repositori": [10, 22], "string": 10, "rst": [10, 11], "item": 10, "been": 10, "favour": 10, "perform": [10, 14, 15, 16, 17, 19, 20, 21], "individu": 10, "onc": [10, 11], "deprecatedvers": 10, "filesystem": [10, 15, 16, 17], "guid": [10, 13, 14, 15, 16, 17, 19, 20, 21], "must": 10, "start": [10, 11], "sourc": [10, 14, 15, 16, 17, 19, 20, 21], "match": [10, 13], "section": 10, "additionalproperti": 10, "trigger": 10, "null": 10, "ref": 10, "definit": 10, "renam": 10, "previous_nam": 10, "appli": 10, "taskflow": 10, "version_ad": 10, "enum": 10, "boolean": 10, "integ": 10, "float": 10, "default": [10, 11], "sensit": 10, "true": 10, "specifi": 10, "airflow__": 10, "___": 10, "__secret": 10, "_cmd": 10, "airflowconfigpars": 10, "sensitive_config_valu": 10, "additional_properti": 10, "entry_point": 10, "get_provider_info": 10, "myproviderpackag": 10, "somemodul": 10, "py": 10, "sourcehook": 10, "id": [10, 13], "good": [10, 11, 13], "question": 10, "glad": 10, "ask": 10, "usual": [10, 11], "_default": 10, "few": 10, "google_cloud_default": 10, "aws_default": 10, "two": 10, "try": 10, "one": [10, 13], "succe": 10, "answer": 10, "polici": 10, "advertis": 10, "share": [10, 11, 12], "absolut": 10, "ecosystem": 10, "area": 10, "our": 10, "websit": 10, "non": 10, "work": [10, 11, 12], "feel": 10, "evalu": 10, "merg": 10, "charg": 10, "outsid": 10, "control": 10, "commerci": 10, "busi": 10, "built": [10, 11], "around": 10, "softwar": [10, 18], "never": 10, "3rd": 10, "parti": [10, 11], "modular": 11, "schedul": 11, "basic": 11, "call": 11, "multitud": 11, "separ": 11, "given": 11, "design": 11, "your": [11, 12], "easili": 11, "exactli": 11, "written": 11, "learn": 11, "find": 11, "full": 11, "solid": 11, "discov": 11, "re": 11, "becom": 11, "public": 11, "privat": 11, "form": 11, "deliv": 11, "visibl": 11, "By": [11, 13], "save": 11, "local": [11, 18], "intern": 11, "remot": [11, 13, 18, 22], "logger": 11, "receiv": 11, "statu": 11, "were": 11, "10": [11, 22], "latest": 11, "particular": 11, "downgrad": 11, "introduc": 11, "problem": [11, 12], "impact": 11, "main": [11, 13], "increment": 11, "independ": [11, 18], "valid": [11, 13], "updat": 11, "test": 11, "capac": 11, "third": 11, "multipl": 11, "semver": 11, "scheme": 11, "gener": 11, "approach": 11, "unless": 11, "recent": 11, "x": 11, "vari": 11, "per": 11, "limit": [11, 16], "constrain": 11, "correspond": 11, "correct": [11, 13], "constraint": [11, 12], "cross": 11, "simpli": 11, "enabl": [11, 22], "often": 11, "between": 11, "differ": [11, 13], "again": 11, "kind": 11, "break": 11, "everi": 11, "backport": 11, "could": 11, "back": 11, "port": 11, "last": 11, "wa": 11, "done": 11, "march": 11, "17": 11, "2021": [11, 13], "longer": 11, "sinc": 11, "reach": 11, "end": 11, "Of": 11, "life": 11, "june": 11, "com": [11, 12, 13], "managing_providers_lifecycl": 11, "packag": 12, "publish": 12, "pip": [12, 22], "offici": 12, "success": 12, "poetri": 12, "workflow": 12, "especi": 12, "v": 12, "wish": 12, "convert": 12, "There": [12, 13], "issu": 12, "bazel": 12, "circular": 12, "pleas": [12, 13], "switch": 12, "encount": 12, "fix": 12, "newer": 12, "raw": 12, "githubusercont": 12, "8": [12, 22], "txt": 12, "upgrad": 12, "flink": [13, 18], "hdf": [13, 14], "kylin": [13, 18], "common": [13, 18], "io": [13, 18], "powershel": [13, 18, 22], "psrp": [13, 19], "window": [13, 18, 22], "winrm": [13, 18], "openfaa": [13, 18], "pgvector": [13, 18], "plexu": [13, 18], "sendgrid": 13, "singular": [13, 18], "telegram": [13, 18], "drop": 13, "down": 13, "top": 13, "left": 13, "pgp": 13, "signatur": 13, "essenti": 13, "download": [13, 17], "sha": 13, "gpg": 13, "asc": 13, "relev": 13, "distribut": [13, 22], "recommend": 13, "directori": 13, "mirror": 13, "pgpk": 13, "ka": 13, "To": [13, 17, 20, 21, 22], "binari": 13, "pgpv": 13, "tar": 13, "gz": 13, "made": 13, "sat": 13, "11": [13, 22], "sep": 13, "12": [13, 22], "49": 13, "54": 13, "bst": 13, "rsa": 13, "cde15c6e4d3a8ec4ecf4ba4b6674e08ad7de406f": 13, "issuer": 13, "kaxilnaik": 13, "kaxil": 13, "naik": 13, "unknown": 13, "aka": 13, "gmail": 13, "certifi": 13, "trust": 13, "indic": 13, "belong": 13, "owner": 13, "primari": 13, "fingerprint": 13, "cde1": 13, "5c6e": 13, "4d3a": 13, "8ec4": 13, "ecf4": 13, "ba4b": 13, "6674": 13, "e08a": 13, "d7de": 13, "406f": 13, "worri": 13, "certif": 13, "sign": 13, "why": 13, "know": 13, "sha512": 13, "sum": 13, "shasum": 13, "512": 13, "diff": 13, "variou": [14, 15, 16, 17, 19, 20, 21], "These": [14, 15, 16, 17, 19, 20, 21], "within": [14, 15, 16, 17, 19, 20], "product": [14, 15, 16, 17, 19, 20, 21], "record": 14, "tabl": 14, "druid_check": 14, "flink_kubernet": 14, "hive_stat": 14, "hive_partit": 14, "metastore_partit": 14, "named_hive_partit": 14, "consum": 14, "produc": 14, "client": [14, 18], "kylin_cub": 14, "spark_submit": 14, "spark_jdbc_script": 14, "web_hdf": 14, "copi": [14, 15, 16, 17, 19, 21], "hive_to_dynamodb": [14, 15], "hive_to_druid": 14, "vertica_to_h": [14, 21], "hive_to_mysql": [14, 21], "hive_to_samba": [14, 19], "s3_to_hiv": [14, 15], "mysql_to_h": [14, 21], "mssql_to_hiv": [14, 21], "cassandra_to_gc": [14, 17], "base_aw": 15, "cloud_form": 15, "comput": 15, "elasticache_replication_group": 15, "relat": 15, "redshift_clust": 15, "redshift_data": 15, "redshift_sql": 15, "cluster": 15, "secrets_manag": 15, "verified_permiss": 15, "batch_client": 15, "batch_wait": 15, "dm": 15, "glue_crawl": 15, "glue_catalog": 15, "glue_catalog_partit": 15, "glue_databrew": 15, "lambda_funct": 15, "step_funct": 15, "dynamodb_to_s3": 15, "gcs_to_s3": [15, 17], "glacier_to_gc": [15, 17], "google_api_to_s3": 15, "http_to_s3": [15, 19], "attach": [15, 19], "imap_attachment_to_s3": [15, 19], "mongo_to_s3": [15, 21], "redshift_to_s3": 15, "s3_to_redshift": 15, "s3_to_sftp": [15, 19], "sftp_to_s3": [15, 19], "s3_to_ftp": [15, 19], "exasol_to_s3": [15, 21], "ftp_to_s3": [15, 19], "salesforce_to_s3": [15, 20], "local_to_s3": 15, "sql_to_s3": [15, 21], "s3_to_sql": [15, 21], "azure_blob_to_s3": [15, 16], "s3_to_gc": [15, 17], "s3_to_mysql": [15, 21], "copyfromexternalstagetosnowflakeoper": [15, 20], "copy_into_snowflak": [15, 16, 17, 20], "base_azur": 16, "sdk": 16, "wasb_delete_blob": 16, "container_inst": 16, "container_volum": 16, "container_registri": 16, "adx": 16, "data_factori": 16, "data_lak": 16, "datalak": 16, "asb": 16, "azure_fileshare_to_gc": [16, 17], "adls_to_gc": [16, 17], "azure_blob_to_gc": [16, 17], "upload": [16, 17], "local_to_adl": 16, "oracle_to_azure_data_lak": [16, 21], "local_to_wasb": 16, "sftp_to_wasb": [16, 19], "move": [16, 17], "base_googl": 17, "discovery_api": 17, "analyz": 17, "bigquery_dt": 17, "marketing_platform": 17, "campaign_manag": 17, "cloud_build": 17, "cloud_bas": 17, "firebas": [17, 22], "life_sci": 17, "cloud_memorystor": 17, "memcach": 17, "natural_languag": 17, "os_login": 17, "pubsub": 17, "secret_manag": 17, "speech_to_text": 17, "cloud_sql": 17, "cloud_storage_transfer_servic": 17, "text_to_speech": 17, "translate_speech": 17, "video_intellig": 17, "compute_ssh": 17, "datacatalog": 17, "datafus": 17, "datapipelin": 17, "dataproc_metastor": 17, "gdm": 17, "kubernetes_engin": 17, "mlengin": 17, "vertex_ai": 17, "dataset": 17, "custom_job": 17, "auto_ml": 17, "batch_prediction_job": 17, "endpoint_servic": 17, "hyperparameter_tuning_job": 17, "model_servic": 17, "pipeline_job": 17, "vertexai": 17, "presto_to_gc": [17, 21], "trino_to_gc": [17, 21], "sql_to_gc": [17, 21], "suit": [17, 21, 22], "gcs_to_gdriv": 17, "gdrive_to_gc": 17, "calendar_to_gc": 17, "sheet": [17, 21], "sheets_to_gc": 17, "gcs_to_sftp": [17, 19], "postgres_to_gc": [17, 21], "bigquery_to_sql": [17, 21], "bigquery_to_mysql": [17, 21], "bigquery_to_mssql": [17, 21], "bigquery_to_postgr": [17, 21], "gcs_to_bigqueri": 17, "gcs_to_gc": 17, "facebook_ads_to_gc": [17, 20], "sftp_to_gc": [17, 19], "bigquery_to_bigqueri": 17, "mysql_to_gc": [17, 21], "oracle_to_gc": [17, 21], "gcs_to_sheet": 17, "local_to_gc": 17, "bigquery_to_gc": 17, "gcs_to_loc": 17, "salesforce_to_gc": [17, 20], "ads_to_gc": 17, "mssql_to_gc": [17, 21], "gcs_to_presto": [17, 21], "gcs_to_samba": [17, 19], "gcs_to_trino": [17, 21], "analyt": 17, "display_video": 17, "search_ad": 17, "cloud_batch": 17, "cloud_compos": 17, "cloud_run": 17, "A": 18, "asf": 18, "foundat": 18, "webhdf": [18, 22], "dynamodb": 18, "s3": 18, "gc": 18, "appflow": 18, "athena": 18, "cloudform": 18, "cloudwatch": 18, "datasync": 18, "ec2": 18, "ec": 18, "elast": 18, "registri": 18, "ecr": 18, "ek": 18, "elasticach": 18, "eventbridg": 18, "glacier": 18, "kinesi": 18, "firehos": 18, "quicksight": 18, "rd": 18, "sagemak": 18, "secretsmanag": 18, "email": 18, "se": 18, "sn": 18, "queue": 18, "sq": 18, "ssm": 18, "permiss": 18, "batch": 18, "migrat": 18, "glue": 18, "databrew": 18, "lambda": 18, "token": 18, "st": 18, "cosmo": 18, "db": 18, "explor": 18, "factori": 18, "lake": 18, "gen2": 18, "fileshar": 18, "bu": 18, "synaps": 18, "market": [18, 22], "analytics360": 18, "video": 18, "360": 18, "search": 18, "calendar": 18, "compos": 18, "dataform": 18, "discoveri": 18, "drive": 18, "spreadsheet": 18, "shell": [18, 22], "repo": 18, "dingtalk": [18, 22], "incom": [18, 22], "webhook": [18, 22], "dataproc": 18, "swarm": 18, "bigqueri": 18, "imap_attach": 19, "jdbcoper": 19, "airbytetriggersyncoper": 20, "databricks_bas": 20, "databricks_sql": 20, "databricks_partit": 20, "databrickscreatejobsoper": 20, "databrickssubmitrunoper": 20, "databricksrunnowoper": 20, "databricks_repo": 20, "databricksreposcreateoper": 20, "databricksreposupdateoper": 20, "databricksreposdeleteoper": 20, "databrickssqloper": 20, "databrickscopyintooper": 20, "discord_webhook": 20, "opsgeniecreatealertoper": 20, "job": 20, "salesforce_apex_rest": 20, "bulk": 20, "salesforceapexrestoper": 20, "salesforcebulkoper": 20, "segment_track_ev": 20, "slack_webhook": 20, "snowflake_sql_api": 20, "snowflakeoper": 20, "tableauoper": 20, "telegramoper": 20, "yandexcloud_dataproc": 20, "proc": 20, "base_sql_to_slack": [20, 21], "sqltoslackapifileoper": [20, 21], "sql_to_slack": [20, 21], "sqltoslackwebhookoper": [20, 21], "sql_to_slack_webhook": [20, 21], "asana_task": 21, "asanacreatetaskoper": 21, "celery_queu": 21, "embed": 21, "cohereembeddingoper": 21, "file_transf": 21, "docker_swarm": 21, "jenkins_job_trigg": 21, "pod": 21, "spark_kubernet": 21, "resourc": 21, "kubernetespodoper": 21, "mssqloper": 21, "mysqloper": 21, "neo4joper": 21, "openaiembeddingoper": 21, "kernel": 21, "pgvectoringestoper": 21, "pineconeingestoper": 21, "postgresoper": 21, "redis_publish": 21, "redis_kei": 21, "redis_pub_sub": 21, "sqliteoper": 21, "trinooper": 21, "weaviateingestoper": 21, "sql_to_sheet": 21, "vertica_to_mysql": 21, "presto_to_mysql": 21, "trino_to_mysql": 21, "oracle_to_oracl": 21, "5": 22, "4": 22, "7": 22, "6": 22, "13": 22, "hadoop": 22, "gcp": 22, "workspac": 22, "formerli": 22}, "objects": {"": [[22, 0, 1, "std-provider-apache-airflow-providers-airbyte", "apache-airflow-providers-airbyte"], [22, 0, 1, "std-provider-apache-airflow-providers-alibaba", "apache-airflow-providers-alibaba"], [22, 0, 1, "std-provider-apache-airflow-providers-amazon", "apache-airflow-providers-amazon"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-beam", "apache-airflow-providers-apache-beam"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-cassandra", "apache-airflow-providers-apache-cassandra"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-drill", "apache-airflow-providers-apache-drill"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-druid", "apache-airflow-providers-apache-druid"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-flink", "apache-airflow-providers-apache-flink"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-hdfs", "apache-airflow-providers-apache-hdfs"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-hive", "apache-airflow-providers-apache-hive"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-impala", "apache-airflow-providers-apache-impala"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-kafka", "apache-airflow-providers-apache-kafka"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-kylin", "apache-airflow-providers-apache-kylin"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-livy", "apache-airflow-providers-apache-livy"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-pig", "apache-airflow-providers-apache-pig"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-pinot", "apache-airflow-providers-apache-pinot"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-spark", "apache-airflow-providers-apache-spark"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-sqoop", "apache-airflow-providers-apache-sqoop"], [22, 0, 1, "std-provider-apache-airflow-providers-apprise", "apache-airflow-providers-apprise"], [22, 0, 1, "std-provider-apache-airflow-providers-arangodb", "apache-airflow-providers-arangodb"], [22, 0, 1, "std-provider-apache-airflow-providers-asana", "apache-airflow-providers-asana"], [22, 0, 1, "std-provider-apache-airflow-providers-atlassian-jira", "apache-airflow-providers-atlassian-jira"], [22, 0, 1, "std-provider-apache-airflow-providers-celery", "apache-airflow-providers-celery"], [22, 0, 1, "std-provider-apache-airflow-providers-cloudant", "apache-airflow-providers-cloudant"], [22, 0, 1, "std-provider-apache-airflow-providers-cncf-kubernetes", "apache-airflow-providers-cncf-kubernetes"], [22, 0, 1, "std-provider-apache-airflow-providers-cohere", "apache-airflow-providers-cohere"], [22, 0, 1, "std-provider-apache-airflow-providers-common-io", "apache-airflow-providers-common-io"], [22, 0, 1, "std-provider-apache-airflow-providers-common-sql", "apache-airflow-providers-common-sql"], [22, 0, 1, "std-provider-apache-airflow-providers-databricks", "apache-airflow-providers-databricks"], [22, 0, 1, "std-provider-apache-airflow-providers-datadog", "apache-airflow-providers-datadog"], [22, 0, 1, "std-provider-apache-airflow-providers-dbt-cloud", "apache-airflow-providers-dbt-cloud"], [22, 0, 1, "std-provider-apache-airflow-providers-dingding", "apache-airflow-providers-dingding"], [22, 0, 1, "std-provider-apache-airflow-providers-discord", "apache-airflow-providers-discord"], [22, 0, 1, "std-provider-apache-airflow-providers-docker", "apache-airflow-providers-docker"], [22, 0, 1, "std-provider-apache-airflow-providers-elasticsearch", "apache-airflow-providers-elasticsearch"], [22, 0, 1, "std-provider-apache-airflow-providers-exasol", "apache-airflow-providers-exasol"], [22, 0, 1, "std-provider-apache-airflow-providers-facebook", "apache-airflow-providers-facebook"], [22, 0, 1, "std-provider-apache-airflow-providers-ftp", "apache-airflow-providers-ftp"], [22, 0, 1, "std-provider-apache-airflow-providers-github", "apache-airflow-providers-github"], [22, 0, 1, "std-provider-apache-airflow-providers-google", "apache-airflow-providers-google"], [22, 0, 1, "std-provider-apache-airflow-providers-grpc", "apache-airflow-providers-grpc"], [22, 0, 1, "std-provider-apache-airflow-providers-hashicorp", "apache-airflow-providers-hashicorp"], [22, 0, 1, "std-provider-apache-airflow-providers-http", "apache-airflow-providers-http"], [22, 0, 1, "std-provider-apache-airflow-providers-imap", "apache-airflow-providers-imap"], [22, 0, 1, "std-provider-apache-airflow-providers-influxdb", "apache-airflow-providers-influxdb"], [22, 0, 1, "std-provider-apache-airflow-providers-jdbc", "apache-airflow-providers-jdbc"], [22, 0, 1, "std-provider-apache-airflow-providers-jenkins", "apache-airflow-providers-jenkins"], [22, 0, 1, "std-provider-apache-airflow-providers-microsoft-azure", "apache-airflow-providers-microsoft-azure"], [22, 0, 1, "std-provider-apache-airflow-providers-microsoft-mssql", "apache-airflow-providers-microsoft-mssql"], [22, 0, 1, "std-provider-apache-airflow-providers-microsoft-psrp", "apache-airflow-providers-microsoft-psrp"], [22, 0, 1, "std-provider-apache-airflow-providers-microsoft-winrm", "apache-airflow-providers-microsoft-winrm"], [22, 0, 1, "std-provider-apache-airflow-providers-mongo", "apache-airflow-providers-mongo"], [22, 0, 1, "std-provider-apache-airflow-providers-mysql", "apache-airflow-providers-mysql"], [22, 0, 1, "std-provider-apache-airflow-providers-neo4j", "apache-airflow-providers-neo4j"], [22, 0, 1, "std-provider-apache-airflow-providers-odbc", "apache-airflow-providers-odbc"], [22, 0, 1, "std-provider-apache-airflow-providers-openai", "apache-airflow-providers-openai"], [22, 0, 1, "std-provider-apache-airflow-providers-openfaas", "apache-airflow-providers-openfaas"], [22, 0, 1, "std-provider-apache-airflow-providers-openlineage", "apache-airflow-providers-openlineage"], [22, 0, 1, "std-provider-apache-airflow-providers-opensearch", "apache-airflow-providers-opensearch"], [22, 0, 1, "std-provider-apache-airflow-providers-opsgenie", "apache-airflow-providers-opsgenie"], [22, 0, 1, "std-provider-apache-airflow-providers-oracle", "apache-airflow-providers-oracle"], [22, 0, 1, "std-provider-apache-airflow-providers-pagerduty", "apache-airflow-providers-pagerduty"], [22, 0, 1, "std-provider-apache-airflow-providers-papermill", "apache-airflow-providers-papermill"], [22, 0, 1, "std-provider-apache-airflow-providers-pgvector", "apache-airflow-providers-pgvector"], [22, 0, 1, "std-provider-apache-airflow-providers-pinecone", "apache-airflow-providers-pinecone"], [22, 0, 1, "std-provider-apache-airflow-providers-plexus", "apache-airflow-providers-plexus"], [22, 0, 1, "std-provider-apache-airflow-providers-postgres", "apache-airflow-providers-postgres"], [22, 0, 1, "std-provider-apache-airflow-providers-presto", "apache-airflow-providers-presto"], [22, 0, 1, "std-provider-apache-airflow-providers-redis", "apache-airflow-providers-redis"], [22, 0, 1, "std-provider-apache-airflow-providers-salesforce", "apache-airflow-providers-salesforce"], [22, 0, 1, "std-provider-apache-airflow-providers-samba", "apache-airflow-providers-samba"], [22, 0, 1, "std-provider-apache-airflow-providers-segment", "apache-airflow-providers-segment"], [22, 0, 1, "std-provider-apache-airflow-providers-sendgrid", "apache-airflow-providers-sendgrid"], [22, 0, 1, "std-provider-apache-airflow-providers-sftp", "apache-airflow-providers-sftp"], [22, 0, 1, "std-provider-apache-airflow-providers-singularity", "apache-airflow-providers-singularity"], [22, 0, 1, "std-provider-apache-airflow-providers-slack", "apache-airflow-providers-slack"], [22, 0, 1, "std-provider-apache-airflow-providers-smtp", "apache-airflow-providers-smtp"], [22, 0, 1, "std-provider-apache-airflow-providers-snowflake", "apache-airflow-providers-snowflake"], [22, 0, 1, "std-provider-apache-airflow-providers-sqlite", "apache-airflow-providers-sqlite"], [22, 0, 1, "std-provider-apache-airflow-providers-ssh", "apache-airflow-providers-ssh"], [22, 0, 1, "std-provider-apache-airflow-providers-tableau", "apache-airflow-providers-tableau"], [22, 0, 1, "std-provider-apache-airflow-providers-tabular", "apache-airflow-providers-tabular"], [22, 0, 1, "std-provider-apache-airflow-providers-telegram", "apache-airflow-providers-telegram"], [22, 0, 1, "std-provider-apache-airflow-providers-trino", "apache-airflow-providers-trino"], [22, 0, 1, "std-provider-apache-airflow-providers-vertica", "apache-airflow-providers-vertica"], [22, 0, 1, "std-provider-apache-airflow-providers-weaviate", "apache-airflow-providers-weaviate"], [22, 0, 1, "std-provider-apache-airflow-providers-yandex", "apache-airflow-providers-yandex"], [22, 0, 1, "std-provider-apache-airflow-providers-zendesk", "apache-airflow-providers-zendesk"]]}, "objtypes": {"0": "std:provider"}, "objnames": {"0": ["std", "provider", "provider"]}, "titleterms": {"auth": [0, 11], "backend": [0, 9, 11], "googl": [0, 2, 5, 7, 9, 14, 15, 16, 17, 19, 20, 21, 22], "configur": [1, 11], "connect": [2, 11, 19], "airbyt": [2, 20, 22], "alibaba": [2, 7, 22], "amazon": [2, 4, 5, 7, 8, 9, 14, 15, 16, 17, 19, 20, 21, 22], "apach": [2, 14, 15, 17, 19, 21, 22], "cassandra": [2, 14, 17, 22], "drill": [2, 14, 22], "druid": [2, 14, 22], "hive": [2, 14, 15, 19, 21, 22], "impala": [2, 14, 22], "kafka": [2, 14, 22], "livi": [2, 14, 22], "pig": [2, 14, 22], "pinot": [2, 14, 22], "spark": [2, 14, 22], "sqoop": [2, 14, 22], "appris": [2, 8, 21, 22], "arangodb": [2, 21, 22], "asana": [2, 21, 22], "atlassian": [2, 8, 21, 22], "jira": [2, 8, 21, 22], "ibm": [2, 20], "cloudant": [2, 20, 22], "kubernet": [2, 4, 15, 17, 21, 22], "coher": [2, 21, 22], "databrick": [2, 5, 20, 22], "datadog": [2, 20, 22], "dbt": [2, 5, 22], "cloud": [2, 5, 14, 15, 16, 17, 19, 20, 21, 22], "dingd": [2, 22], "discord": [2, 8, 20, 22], "docker": [2, 21, 22], "elasticsearch": [2, 7, 21, 22], "exasol": [2, 15, 21, 22], "facebook": [2, 17, 20, 22], "file": [2, 15, 16, 17, 19], "transfer": [2, 8, 14, 15, 16, 17, 19, 20, 21], "protocol": [2, 8, 15, 16, 17, 19], "ftp": [2, 15, 19, 22], "github": [2, 21, 22], "grpc": [2, 19, 22], "hashicorp": [2, 9, 21, 22], "hypertext": [2, 15, 19], "http": [2, 15, 19, 22], "internet": [2, 15, 19], "messag": [2, 15, 19], "access": [2, 15, 19], "imap": [2, 15, 19, 22], "influxdb": [2, 21, 22], "java": [2, 19], "databas": [2, 15, 19], "jdbc": [2, 19, 22], "jenkin": [2, 21, 22], "microsoft": [2, 5, 7, 9, 14, 15, 16, 17, 19, 20, 21, 22], "azur": [2, 5, 7, 9, 15, 16, 17, 19, 20, 21, 22], "sql": [2, 14, 15, 17, 20, 21, 22], "server": [2, 14, 17, 21], "mssql": [2, 14, 17, 21, 22], "mongodb": [2, 15, 21], "mysql": [2, 14, 15, 17, 21, 22], "neo4j": [2, 21, 22], "odbc": [2, 19, 22], "openai": [2, 21, 22], "opensearch": [2, 21, 22], "opsgeni": [2, 8, 20, 22], "oracl": [2, 16, 17, 21, 22], "pagerduti": [2, 8, 20, 22], "papermil": [2, 21, 22], "pinecon": [2, 21, 22], "postgresql": [2, 17, 21], "presto": [2, 17, 21, 22], "redi": [2, 7, 21, 22], "salesforc": [2, 15, 17, 20, 22], "samba": [2, 14, 17, 19, 22], "segment": [2, 20, 22], "sftp": [2, 15, 16, 17, 19, 22], "slack": [2, 8, 20, 21, 22], "simpl": [2, 8, 14, 15, 16, 17, 19, 20, 21], "mail": [2, 8, 19], "smtp": [2, 8, 19, 22], "snowflak": [2, 15, 16, 17, 20, 22], "sqlite": [2, 21, 22], "ssh": [2, 15, 16, 17, 19, 22], "tableau": [2, 20, 22], "tabular": [2, 21, 22], "trino": [2, 17, 21, 22], "vertica": [2, 14, 21, 22], "weaviat": [2, 21, 22], "yandex": [2, 20, 22], "zendesk": [2, 21, 22], "support": 3, "deferr": 3, "oper": [3, 17, 18], "executor": 4, "celeri": [4, 21, 22], "extra": [5, 11], "link": [5, 11], "core": [6, 11], "extens": 6, "write": 7, "log": [7, 11, 15], "notif": [8, 11, 15], "secret": [9, 11, 17], "how": 10, "creat": 10, "your": 10, "own": 10, "provid": [10, 11, 13, 22], "custom": [10, 11], "packag": [10, 11, 13, 22], "special": 10, "consider": 10, "option": 10, "featur": 10, "us": 10, "dynam": 10, "task": [10, 17], "map": 10, "faq": 10, "extend": 11, "airflow": [11, 22], "function": [11, 15, 17], "instal": [11, 12, 13], "upgrad": 11, "type": 11, "commun": 11, "maintain": 11, "from": [12, 13], "pypi": 12, "tool": 12, "sourc": 13, "releas": 13, "integr": [13, 19, 21], "asf": 14, "softwar": [14, 21], "foundat": 14, "beam": [14, 22], "flink": [14, 22], "kylin": [14, 22], "webhdf": 14, "dynamodb": [14, 15], "storag": [14, 15, 16, 17, 19, 20, 21], "servic": [14, 15, 16, 17, 19, 20, 21], "s3": [14, 15, 16, 17, 19, 20, 21], "gc": [14, 15, 16, 17, 19, 20, 21], "aw": 15, "web": 15, "appflow": 15, "athena": 15, "chime": 15, "cloudform": 15, "cloudwatch": 15, "datasync": 15, "ec2": 15, "ec": 15, "elast": 15, "contain": [15, 16], "registri": 15, "ecr": 15, "ek": 15, "elasticach": 15, "emr": 15, "eventbridg": 15, "glacier": [15, 17], "kinesi": 15, "data": [15, 16, 17, 21], "firehos": 15, "quicksight": 15, "rd": 15, "redshift": 15, "sagemak": 15, "secretsmanag": 15, "email": 15, "se": 15, "sn": 15, "queue": 15, "sq": 15, "system": 15, "manag": [15, 17, 19], "ssm": 15, "verifi": 15, "permiss": 15, "batch": [15, 16, 17], "migrat": 15, "glue": 15, "databrew": 15, "lambda": 15, "secur": [15, 19], "token": 15, "st": 15, "step": 15, "local": [15, 16, 17], "common": [15, 17, 20, 21, 22], "blob": [15, 16, 17, 19, 20], "instanc": 16, "cosmo": 16, "db": 16, "explor": 16, "factori": 16, "lake": [16, 17, 21], "client": 16, "gen2": 16, "fileshar": [16, 17], "bu": 16, "synaps": 16, "automl": 17, "bigqueri": [17, 21], "bigtabl": 17, "campaign": 17, "build": 17, "loss": 17, "prevent": 17, "dlp": 17, "firestor": 17, "kei": 17, "km": 17, "life": 17, "scienc": 17, "memorystor": 17, "natur": 17, "languag": 17, "o": 17, "login": 17, "pub": 17, "sub": 17, "spanner": 17, "speech": 17, "text": 17, "stackdriv": 17, "translat": 17, "video": 17, "intellig": 17, "vision": 17, "workflow": 17, "comput": 17, "engin": 17, "catalog": 17, "fusion": 17, "pipelin": 17, "dataflow": 17, "dataplex": 17, "dataprep": 17, "dataproc": [17, 20], "metastor": 17, "datastor": 17, "deploy": 17, "looker": 17, "machin": 17, "learn": 17, "vertex": 17, "ai": 17, "drive": 17, "calendar": 17, "spreadsheet": [17, 21], "ad": [17, 20], "market": 17, "platform": 17, "analytics360": 17, "displai": 17, "360": 17, "search": 17, "other": 17, "hook": [17, 18], "compos": 17, "dataform": 17, "run": 17, "discoveri": 17, "api": [17, 20, 21], "leveldb": 17, "refer": [18, 22], "shell": 19, "window": 19, "powershel": 19, "remot": 19, "winrm": [19, 22], "repo": 20, "dingtalk": 20, "plexu": [20, 22], "incom": [20, 21], "webhook": [20, 21], "telegram": [20, 22], "io": [21, 22], "swarm": 21, "vault": 21, "openfaa": [21, 22], "pgvector": [21, 22], "singular": [21, 22], "hdf": 22, "cncf": 22, "psrp": 22, "mongo": 22, "openlineag": 22, "postgr": 22, "sendgrid": 22}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"Auth backends": [[0, "auth-backends"], [11, "auth-backends"]], "Google": [[0, "google"], [2, "google"], [5, "google"], [7, "google"], [9, "google"], [17, "google"], [17, "id3"]], "Configurations": [[1, "configurations"]], "Connections": [[2, "connections"]], "Airbyte": [[2, "airbyte"], [20, "airbyte"]], "Alibaba": [[2, "alibaba"], [7, "alibaba"]], "Amazon": [[2, "amazon"], [4, "amazon"], [5, "amazon"], [7, "amazon"], [8, "amazon"], [9, "amazon"]], "Apache Cassandra": [[2, "apache-cassandra"], [14, "apache-cassandra"]], "Apache Drill": [[2, "apache-drill"], [14, "apache-drill"]], "Apache Druid": [[2, "apache-druid"], [14, "apache-druid"]], "Apache Hive": [[2, "apache-hive"], [14, "apache-hive"]], "Apache Impala": [[2, "apache-impala"], [14, "apache-impala"]], "Apache Kafka": [[2, "apache-kafka"], [14, "apache-kafka"]], "Apache Livy": [[2, "apache-livy"], [14, "apache-livy"]], "Apache Pig": [[2, "apache-pig"], [14, "apache-pig"]], "Apache Pinot": [[2, "apache-pinot"], [14, "apache-pinot"]], "Apache Spark": [[2, "apache-spark"], [14, "apache-spark"]], "Apache Sqoop": [[2, "apache-sqoop"], [14, "apache-sqoop"]], "Apprise": [[2, "apprise"], [8, "apprise"], [21, "apprise"]], "ArangoDB": [[2, "arangodb"], [21, "arangodb"]], "Asana": [[2, "asana"], [21, "asana"]], "Atlassian Jira": [[2, "atlassian-jira"], [8, "atlassian-jira"], [21, "atlassian-jira"]], "IBM Cloudant": [[2, "ibm-cloudant"], [20, "ibm-cloudant"]], "Kubernetes": [[2, "kubernetes"], [4, "kubernetes"], [21, "kubernetes"]], "Cohere": [[2, "cohere"], [21, "cohere"]], "Databricks": [[2, "databricks"], [5, "databricks"], [20, "databricks"]], "Datadog": [[2, "datadog"], [20, "datadog"]], "dbt Cloud": [[2, "dbt-cloud"], [5, "dbt-cloud"]], "Dingding": [[2, "dingding"]], "Discord": [[2, "discord"], [8, "discord"], [20, "discord"]], "Docker": [[2, "docker"], [21, "docker"]], "Elasticsearch": [[2, "elasticsearch"], [7, "elasticsearch"], [21, "elasticsearch"]], "Exasol": [[2, "exasol"], [21, "exasol"]], "Facebook": [[2, "facebook"]], "File Transfer Protocol (FTP)": [[2, "file-transfer-protocol-ftp"], [19, "file-transfer-protocol-ftp"]], "Github": [[2, "github"], [21, "github"]], "gRPC": [[2, "grpc"], [19, "grpc"]], "Hashicorp": [[2, "hashicorp"], [9, "hashicorp"]], "Hypertext Transfer Protocol (HTTP)": [[2, "hypertext-transfer-protocol-http"], [19, "hypertext-transfer-protocol-http"]], "Internet Message Access Protocol (IMAP)": [[2, "internet-message-access-protocol-imap"], [19, "internet-message-access-protocol-imap"]], "Influxdb": [[2, "influxdb"], [21, "influxdb"]], "Java Database Connectivity (JDBC)": [[2, "java-database-connectivity-jdbc"], [19, "java-database-connectivity-jdbc"]], "Jenkins": [[2, "jenkins"], [21, "jenkins"]], "Microsoft Azure": [[2, "microsoft-azure"], [5, "microsoft-azure"], [7, "microsoft-azure"], [9, "microsoft-azure"], [16, "microsoft-azure"]], "Microsoft SQL Server (MSSQL)": [[2, "microsoft-sql-server-mssql"], [21, "microsoft-sql-server-mssql"]], "MongoDB": [[2, "mongodb"], [21, "mongodb"]], "MySQL": [[2, "mysql"], [21, "mysql"]], "Neo4j": [[2, "neo4j"], [21, "neo4j"]], "ODBC": [[2, "odbc"], [19, "odbc"]], "OpenAI": [[2, "openai"], [21, "openai"]], "OpenSearch": [[2, "opensearch"], [21, "opensearch"]], "Opsgenie": [[2, "opsgenie"], [8, "opsgenie"], [20, "opsgenie"]], "Oracle": [[2, "oracle"], [21, "oracle"]], "Pagerduty": [[2, "pagerduty"], [8, "pagerduty"], [20, "pagerduty"]], "Papermill": [[2, "papermill"], [21, "papermill"]], "Pinecone": [[2, "pinecone"], [21, "pinecone"]], "PostgreSQL": [[2, "postgresql"], [21, "postgresql"]], "Presto": [[2, "presto"], [21, "presto"]], "Redis": [[2, "redis"], [7, "redis"], [21, "redis"]], "Salesforce": [[2, "salesforce"], [20, "salesforce"]], "Samba": [[2, "samba"], [19, "samba"]], "Segment": [[2, "segment"], [20, "segment"]], "SFTP": [[2, "sftp"]], "Slack": [[2, "slack"], [8, "slack"]], "Simple Mail Transfer Protocol (SMTP)": [[2, "simple-mail-transfer-protocol-smtp"], [8, "simple-mail-transfer-protocol-smtp"], [19, "simple-mail-transfer-protocol-smtp"]], "Snowflake": [[2, "snowflake"], [20, "snowflake"]], "SQLite": [[2, "sqlite"], [21, "sqlite"]], "SSH": [[2, "ssh"]], "Tableau": [[2, "tableau"], [20, "tableau"]], "Tabular": [[2, "tabular"], [21, "tabular"]], "Trino": [[2, "trino"], [21, "trino"]], "Vertica": [[2, "vertica"], [21, "vertica"]], "Weaviate": [[2, "weaviate"], [21, "weaviate"]], "Yandex": [[2, "yandex"]], "Zendesk": [[2, "zendesk"], [21, "zendesk"]], "Supported Deferrable Operators": [[3, "supported-deferrable-operators"]], "Executors": [[4, "executors"]], "Celery": [[4, "celery"], [21, "celery"]], "Extra Links": [[5, "extra-links"]], "Core Extensions": [[6, "core-extensions"]], "Writing logs": [[7, "writing-logs"]], "Notifications": [[8, "notifications"], [11, "notifications"]], "Secret backends": [[9, "secret-backends"], [11, "secret-backends"]], "How to create your own provider": [[10, "how-to-create-your-own-provider"]], "Custom provider packages": [[10, "custom-provider-packages"]], "How to create a provider": [[10, "how-to-create-a-provider"]], "Special considerations": [[10, "special-considerations"]], "Optional provider features": [[10, "optional-provider-features"]], "Using Providers with dynamic task mapping": [[10, "using-providers-with-dynamic-task-mapping"]], "FAQ for custom providers": [[10, "faq-for-custom-providers"]], "Provider packages": [[11, "provider-packages"]], "Extending Airflow core functionality": [[11, "extending-airflow-core-functionality"]], "Configuration": [[11, "configuration"]], "Custom connections": [[11, "custom-connections"]], "Extra links": [[11, "extra-links"]], "Logging": [[11, "logging"]], "Installing and upgrading providers": [[11, "installing-and-upgrading-providers"]], "Types of providers": [[11, "types-of-providers"]], "Community maintained providers": [[11, "community-maintained-providers"]], "Installation from PyPI": [[12, "installation-from-pypi"]], "Installation tools": [[12, "installation-tools"]], "Installing Providers from Sources": [[13, "installing-providers-from-sources"]], "Released packages": [[13, "released-packages"]], "Release integrity": [[13, "release-integrity"]], "ASF: Apache Software Foundation": [[14, "asf-apache-software-foundation"]], "Software": [[14, "software"], [21, "software"]], "Apache Beam": [[14, "apache-beam"]], "Apache Flink": [[14, "apache-flink"]], "Apache Kylin": [[14, "apache-kylin"]], "WebHDFS": [[14, "webhdfs"]], "Transfers": [[14, "transfers"], [15, "transfers"], [16, "transfers"], [17, "transfers"], [19, "transfers"], [20, "transfers"], [21, "transfers"]], "Apache Hive to Amazon DynamoDB": [[14, "apache-hive-to-amazon-dynamodb"], [15, "apache-hive-to-amazon-dynamodb"]], "Apache Hive to Apache Druid": [[14, "apache-hive-to-apache-druid"]], "Vertica to Apache Hive": [[14, "vertica-to-apache-hive"], [21, "vertica-to-apache-hive"]], "Apache Hive to MySQL": [[14, "apache-hive-to-mysql"], [21, "apache-hive-to-mysql"]], "Apache Hive to Samba": [[14, "apache-hive-to-samba"], [19, "apache-hive-to-samba"]], "Amazon Simple Storage Service (S3) to Apache Hive": [[14, "amazon-simple-storage-service-s3-to-apache-hive"], [15, "amazon-simple-storage-service-s3-to-apache-hive"]], "MySQL to Apache Hive": [[14, "mysql-to-apache-hive"], [21, "mysql-to-apache-hive"]], "Microsoft SQL Server (MSSQL) to Apache Hive": [[14, "microsoft-sql-server-mssql-to-apache-hive"], [21, "microsoft-sql-server-mssql-to-apache-hive"]], "Apache Cassandra to Google Cloud Storage (GCS)": [[14, "apache-cassandra-to-google-cloud-storage-gcs"], [17, "apache-cassandra-to-google-cloud-storage-gcs"]], "AWS: Amazon Web Services": [[15, "aws-amazon-web-services"]], "Services": [[15, "services"], [16, "services"], [17, "services"], [20, "services"], [20, "id1"]], "Amazon Appflow": [[15, "amazon-appflow"]], "Amazon Athena": [[15, "amazon-athena"]], "Amazon Chime": [[15, "amazon-chime"]], "Amazon CloudFormation": [[15, "amazon-cloudformation"]], "Amazon CloudWatch Logs": [[15, "amazon-cloudwatch-logs"]], "Amazon DataSync": [[15, "amazon-datasync"]], "Amazon DynamoDB": [[15, "amazon-dynamodb"]], "Amazon EC2": [[15, "amazon-ec2"]], "Amazon ECS": [[15, "amazon-ecs"]], "Amazon Elastic Container Registry (ECR)": [[15, "amazon-elastic-container-registry-ecr"]], "Amazon Elastic Kubernetes Service (EKS)": [[15, "amazon-elastic-kubernetes-service-eks"]], "Amazon ElastiCache": [[15, "amazon-elasticache"]], "Amazon EMR": [[15, "amazon-emr"]], "Amazon EMR on EKS": [[15, "amazon-emr-on-eks"]], "Amazon EventBridge": [[15, "amazon-eventbridge"]], "Amazon Glacier": [[15, "amazon-glacier"]], "Amazon Kinesis Data Firehose": [[15, "amazon-kinesis-data-firehose"]], "Amazon QuickSight": [[15, "amazon-quicksight"]], "Amazon RDS": [[15, "amazon-rds"]], "Amazon Redshift": [[15, "amazon-redshift"]], "Amazon SageMaker": [[15, "amazon-sagemaker"]], "Amazon SecretsManager": [[15, "amazon-secretsmanager"]], "Amazon Simple Email Service (SES)": [[15, "amazon-simple-email-service-ses"]], "Amazon Simple Notification Service (SNS)": [[15, "amazon-simple-notification-service-sns"]], "Amazon Simple Queue Service (SQS)": [[15, "amazon-simple-queue-service-sqs"]], "Amazon Simple Storage Service (S3)": [[15, "amazon-simple-storage-service-s3"]], "Amazon Systems Manager (SSM)": [[15, "amazon-systems-manager-ssm"]], "Amazon Verified Permissions": [[15, "amazon-verified-permissions"]], "Amazon Web Services": [[15, "amazon-web-services"]], "AWS Batch": [[15, "aws-batch"]], "AWS Database Migration Service": [[15, "aws-database-migration-service"]], "AWS Glue": [[15, "aws-glue"]], "AWS Glue DataBrew": [[15, "aws-glue-databrew"]], "AWS Lambda": [[15, "aws-lambda"]], "AWS Security Token Service (STS)": [[15, "aws-security-token-service-sts"]], "AWS Step Functions": [[15, "aws-step-functions"]], "Amazon DynamoDB to Amazon Simple Storage Service (S3)": [[15, "amazon-dynamodb-to-amazon-simple-storage-service-s3"]], "Google Cloud Storage (GCS) to Amazon Simple Storage Service (S3)": [[15, "google-cloud-storage-gcs-to-amazon-simple-storage-service-s3"], [17, "google-cloud-storage-gcs-to-amazon-simple-storage-service-s3"]], "Amazon Glacier to Google Cloud Storage (GCS)": [[15, "amazon-glacier-to-google-cloud-storage-gcs"], [17, "amazon-glacier-to-google-cloud-storage-gcs"]], "Google to Amazon Simple Storage Service (S3)": [[15, "google-to-amazon-simple-storage-service-s3"]], "Hypertext Transfer Protocol (HTTP) to Amazon Simple Storage Service (S3)": [[15, "hypertext-transfer-protocol-http-to-amazon-simple-storage-service-s3"], [19, "hypertext-transfer-protocol-http-to-amazon-simple-storage-service-s3"]], "Internet Message Access Protocol (IMAP) to Amazon Simple Storage Service (S3)": [[15, "internet-message-access-protocol-imap-to-amazon-simple-storage-service-s3"], [19, "internet-message-access-protocol-imap-to-amazon-simple-storage-service-s3"]], "MongoDB to Amazon Simple Storage Service (S3)": [[15, "mongodb-to-amazon-simple-storage-service-s3"], [21, "mongodb-to-amazon-simple-storage-service-s3"]], "Amazon Redshift to Amazon Simple Storage Service (S3)": [[15, "amazon-redshift-to-amazon-simple-storage-service-s3"]], "Amazon Simple Storage Service (S3) to Amazon Redshift": [[15, "amazon-simple-storage-service-s3-to-amazon-redshift"]], "Amazon Simple Storage Service (S3) to SSH File Transfer Protocol (SFTP)": [[15, "amazon-simple-storage-service-s3-to-ssh-file-transfer-protocol-sftp"], [19, "amazon-simple-storage-service-s3-to-ssh-file-transfer-protocol-sftp"]], "SSH File Transfer Protocol (SFTP) to Amazon Simple Storage Service (S3)": [[15, "ssh-file-transfer-protocol-sftp-to-amazon-simple-storage-service-s3"], [19, "ssh-file-transfer-protocol-sftp-to-amazon-simple-storage-service-s3"]], "Amazon Simple Storage Service (S3) to File Transfer Protocol (FTP)": [[15, "amazon-simple-storage-service-s3-to-file-transfer-protocol-ftp"], [19, "amazon-simple-storage-service-s3-to-file-transfer-protocol-ftp"]], "Exasol to Amazon Simple Storage Service (S3)": [[15, "exasol-to-amazon-simple-storage-service-s3"], [21, "exasol-to-amazon-simple-storage-service-s3"]], "File Transfer Protocol (FTP) to Amazon Simple Storage Service (S3)": [[15, "file-transfer-protocol-ftp-to-amazon-simple-storage-service-s3"], [19, "file-transfer-protocol-ftp-to-amazon-simple-storage-service-s3"]], "Salesforce to Amazon Simple Storage Service (S3)": [[15, "salesforce-to-amazon-simple-storage-service-s3"], [20, "salesforce-to-amazon-simple-storage-service-s3"]], "Local to Amazon Simple Storage Service (S3)": [[15, "local-to-amazon-simple-storage-service-s3"]], "Common SQL to Amazon Simple Storage Service (S3)": [[15, "common-sql-to-amazon-simple-storage-service-s3"], [21, "common-sql-to-amazon-simple-storage-service-s3"]], "Amazon Simple Storage Service (S3) to Common SQL": [[15, "amazon-simple-storage-service-s3-to-common-sql"], [21, "amazon-simple-storage-service-s3-to-common-sql"]], "Amazon Web Services to Amazon Web Services": [[15, "amazon-web-services-to-amazon-web-services"]], "Microsoft Azure Blob Storage to Amazon Simple Storage Service (S3)": [[15, "microsoft-azure-blob-storage-to-amazon-simple-storage-service-s3"], [16, "microsoft-azure-blob-storage-to-amazon-simple-storage-service-s3"]], "Amazon Simple Storage Service (S3) to Google Cloud Storage (GCS)": [[15, "amazon-simple-storage-service-s3-to-google-cloud-storage-gcs"], [17, "amazon-simple-storage-service-s3-to-google-cloud-storage-gcs"]], "Amazon Simple Storage Service (S3) to MySQL": [[15, "amazon-simple-storage-service-s3-to-mysql"], [21, "amazon-simple-storage-service-s3-to-mysql"]], "Amazon Simple Storage Service (S3) to Snowflake": [[15, "amazon-simple-storage-service-s3-to-snowflake"], [20, "amazon-simple-storage-service-s3-to-snowflake"]], "Azure: Microsoft Azure": [[16, "azure-microsoft-azure"]], "Microsoft Azure Batch": [[16, "microsoft-azure-batch"]], "Microsoft Azure Blob Storage": [[16, "microsoft-azure-blob-storage"]], "Microsoft Azure Container Instances": [[16, "microsoft-azure-container-instances"]], "Microsoft Azure Cosmos DB": [[16, "microsoft-azure-cosmos-db"]], "Microsoft Azure Data Explorer": [[16, "microsoft-azure-data-explorer"]], "Microsoft Azure Data Factory": [[16, "microsoft-azure-data-factory"]], "Microsoft Azure Data Lake Storage": [[16, "microsoft-azure-data-lake-storage"]], "Microsoft Azure Data Lake Storage Client Gen2": [[16, "microsoft-azure-data-lake-storage-client-gen2"]], "Microsoft Azure FileShare": [[16, "microsoft-azure-fileshare"]], "Microsoft Azure Service Bus": [[16, "microsoft-azure-service-bus"]], "Microsoft Azure Synapse": [[16, "microsoft-azure-synapse"]], "Microsoft Azure FileShare to Google Cloud Storage (GCS)": [[16, "microsoft-azure-fileshare-to-google-cloud-storage-gcs"], [17, "microsoft-azure-fileshare-to-google-cloud-storage-gcs"]], "Microsoft Azure Data Lake Storage to Google Cloud Storage (GCS)": [[16, "microsoft-azure-data-lake-storage-to-google-cloud-storage-gcs"], [17, "microsoft-azure-data-lake-storage-to-google-cloud-storage-gcs"]], "Microsoft Azure Blob Storage to Google Cloud Storage (GCS)": [[16, "microsoft-azure-blob-storage-to-google-cloud-storage-gcs"], [16, "id1"], [17, "microsoft-azure-blob-storage-to-google-cloud-storage-gcs"], [17, "id2"]], "Local to Microsoft Azure Data Lake Storage": [[16, "local-to-microsoft-azure-data-lake-storage"]], "Oracle to Microsoft Azure Data Lake Storage": [[16, "oracle-to-microsoft-azure-data-lake-storage"], [21, "oracle-to-microsoft-azure-data-lake-storage"]], "Local to Microsoft Azure Blob Storage": [[16, "local-to-microsoft-azure-blob-storage"]], "SSH File Transfer Protocol (SFTP) to Microsoft Azure Blob Storage": [[16, "ssh-file-transfer-protocol-sftp-to-microsoft-azure-blob-storage"], [19, "ssh-file-transfer-protocol-sftp-to-microsoft-azure-blob-storage"]], "Microsoft Azure Blob Storage to Snowflake": [[16, "microsoft-azure-blob-storage-to-snowflake"], [20, "microsoft-azure-blob-storage-to-snowflake"]], "Google Cloud": [[17, "google-cloud"]], "Google AutoML": [[17, "google-automl"]], "Google BigQuery": [[17, "google-bigquery"]], "Google BigQuery Data Transfer Service": [[17, "google-bigquery-data-transfer-service"]], "Google Bigtable": [[17, "google-bigtable"]], "Google Campaign Manager": [[17, "google-campaign-manager"]], "Google Cloud Build": [[17, "google-cloud-build"]], "Google Cloud Common": [[17, "google-cloud-common"]], "Google Cloud Data Loss Prevention (DLP)": [[17, "google-cloud-data-loss-prevention-dlp"]], "Google Cloud Firestore": [[17, "google-cloud-firestore"]], "Google Cloud Functions": [[17, "google-cloud-functions"]], "Google Cloud Key Management Service (KMS)": [[17, "google-cloud-key-management-service-kms"]], "Google Cloud Life Sciences": [[17, "google-cloud-life-sciences"]], "Google Cloud Memorystore": [[17, "google-cloud-memorystore"]], "Google Cloud Natural Language": [[17, "google-cloud-natural-language"]], "Google Cloud OS Login": [[17, "google-cloud-os-login"]], "Google Cloud Pub/Sub": [[17, "google-cloud-pub-sub"]], "Google Cloud Secret Manager": [[17, "google-cloud-secret-manager"]], "Google Cloud Spanner": [[17, "google-cloud-spanner"]], "Google Cloud Speech-to-Text": [[17, "google-cloud-speech-to-text"]], "Google Cloud SQL": [[17, "google-cloud-sql"]], "Google Cloud Stackdriver": [[17, "google-cloud-stackdriver"]], "Google Cloud Storage (GCS)": [[17, "google-cloud-storage-gcs"]], "Google Cloud Storage Transfer Service": [[17, "google-cloud-storage-transfer-service"]], "Google Cloud Tasks": [[17, "google-cloud-tasks"]], "Google Cloud Text-to-Speech": [[17, "google-cloud-text-to-speech"]], "Google Cloud Translation": [[17, "google-cloud-translation"]], "Google Cloud Video Intelligence": [[17, "google-cloud-video-intelligence"]], "Google Cloud Vision": [[17, "google-cloud-vision"]], "Google Cloud Workflows": [[17, "google-cloud-workflows"]], "Google Compute Engine": [[17, "google-compute-engine"]], "Google Data Catalog": [[17, "google-data-catalog"]], "Google Data Fusion": [[17, "google-data-fusion"]], "Google Data Pipelines": [[17, "google-data-pipelines"]], "Google Dataflow": [[17, "google-dataflow"]], "Google Dataplex": [[17, "google-dataplex"]], "Google Dataprep": [[17, "google-dataprep"]], "Google Dataproc": [[17, "google-dataproc"]], "Google Dataproc Metastore": [[17, "google-dataproc-metastore"]], "Google Datastore": [[17, "google-datastore"]], "Google Deployment Manager": [[17, "google-deployment-manager"]], "Google Kubernetes Engine": [[17, "google-kubernetes-engine"]], "Google Looker": [[17, "google-looker"]], "Google Machine Learning Engine": [[17, "google-machine-learning-engine"]], "Google Vertex AI": [[17, "google-vertex-ai"]], "Presto to Google Cloud Storage (GCS)": [[17, "presto-to-google-cloud-storage-gcs"], [21, "presto-to-google-cloud-storage-gcs"]], "Trino to Google Cloud Storage (GCS)": [[17, "trino-to-google-cloud-storage-gcs"], [21, "trino-to-google-cloud-storage-gcs"]], "Common SQL to Google Cloud Storage (GCS)": [[17, "common-sql-to-google-cloud-storage-gcs"], [21, "common-sql-to-google-cloud-storage-gcs"]], "Google Cloud Storage (GCS) to Google Drive": [[17, "google-cloud-storage-gcs-to-google-drive"]], "Google Drive to Google Cloud Storage (GCS)": [[17, "google-drive-to-google-cloud-storage-gcs"]], "Google Calendar to Google Cloud Storage (GCS)": [[17, "google-calendar-to-google-cloud-storage-gcs"]], "Google Spreadsheet to Google Cloud Storage (GCS)": [[17, "google-spreadsheet-to-google-cloud-storage-gcs"]], "Google Cloud Storage (GCS) to SSH File Transfer Protocol (SFTP)": [[17, "google-cloud-storage-gcs-to-ssh-file-transfer-protocol-sftp"], [19, "google-cloud-storage-gcs-to-ssh-file-transfer-protocol-sftp"]], "PostgreSQL to Google Cloud Storage (GCS)": [[17, "postgresql-to-google-cloud-storage-gcs"], [21, "postgresql-to-google-cloud-storage-gcs"]], "Google BigQuery to Common SQL": [[17, "google-bigquery-to-common-sql"], [21, "google-bigquery-to-common-sql"]], "Google BigQuery to MySQL": [[17, "google-bigquery-to-mysql"], [21, "google-bigquery-to-mysql"]], "Google BigQuery to Microsoft SQL Server (MSSQL)": [[17, "google-bigquery-to-microsoft-sql-server-mssql"], [21, "google-bigquery-to-microsoft-sql-server-mssql"]], "Google BigQuery to PostgreSQL": [[17, "google-bigquery-to-postgresql"], [21, "google-bigquery-to-postgresql"]], "Google Cloud Storage (GCS) to Google BigQuery": [[17, "google-cloud-storage-gcs-to-google-bigquery"]], "Google Cloud Storage (GCS) to Google Cloud Storage (GCS)": [[17, "google-cloud-storage-gcs-to-google-cloud-storage-gcs"]], "Facebook Ads to Google Cloud Storage (GCS)": [[17, "facebook-ads-to-google-cloud-storage-gcs"], [20, "facebook-ads-to-google-cloud-storage-gcs"]], "SSH File Transfer Protocol (SFTP) to Google Cloud Storage (GCS)": [[17, "ssh-file-transfer-protocol-sftp-to-google-cloud-storage-gcs"], [19, "ssh-file-transfer-protocol-sftp-to-google-cloud-storage-gcs"]], "Google BigQuery to Google BigQuery": [[17, "google-bigquery-to-google-bigquery"]], "MySQL to Google Cloud Storage (GCS)": [[17, "mysql-to-google-cloud-storage-gcs"], [21, "mysql-to-google-cloud-storage-gcs"]], "Oracle to Google Cloud Storage (GCS)": [[17, "oracle-to-google-cloud-storage-gcs"], [21, "oracle-to-google-cloud-storage-gcs"]], "Google Cloud Storage (GCS) to Google Spreadsheet": [[17, "google-cloud-storage-gcs-to-google-spreadsheet"]], "Local to Google Cloud Storage (GCS)": [[17, "local-to-google-cloud-storage-gcs"]], "Google BigQuery to Google Cloud Storage (GCS)": [[17, "google-bigquery-to-google-cloud-storage-gcs"]], "Google Cloud Storage (GCS) to Local": [[17, "google-cloud-storage-gcs-to-local"]], "Salesforce to Google Cloud Storage (GCS)": [[17, "salesforce-to-google-cloud-storage-gcs"], [20, "salesforce-to-google-cloud-storage-gcs"]], "Google Ads to Google Cloud Storage (GCS)": [[17, "google-ads-to-google-cloud-storage-gcs"]], "Microsoft SQL Server (MSSQL) to Google Cloud Storage (GCS)": [[17, "microsoft-sql-server-mssql-to-google-cloud-storage-gcs"], [21, "microsoft-sql-server-mssql-to-google-cloud-storage-gcs"]], "Google Cloud Storage (GCS) to Presto": [[17, "google-cloud-storage-gcs-to-presto"], [21, "google-cloud-storage-gcs-to-presto"]], "Google Cloud Storage (GCS) to Samba": [[17, "google-cloud-storage-gcs-to-samba"], [19, "google-cloud-storage-gcs-to-samba"]], "Google Cloud Storage (GCS) to Snowflake": [[17, "google-cloud-storage-gcs-to-snowflake"], [20, "google-cloud-storage-gcs-to-snowflake"]], "Google Cloud Storage (GCS) to Trino": [[17, "google-cloud-storage-gcs-to-trino"], [21, "google-cloud-storage-gcs-to-trino"]], "Google Marketing Platform": [[17, "google-marketing-platform"]], "Google Ads": [[17, "google-ads"]], "Google Analytics360": [[17, "google-analytics360"]], "Google Display&Video 360": [[17, "google-display-video-360"]], "Google Search Ads 360": [[17, "google-search-ads-360"]], "Other Google operators and hooks": [[17, "other-google-operators-and-hooks"]], "Google Calendar": [[17, "google-calendar"]], "Google Cloud Batch": [[17, "google-cloud-batch"]], "Google Cloud Composer": [[17, "google-cloud-composer"]], "Google Cloud Dataform": [[17, "google-cloud-dataform"]], "Google Cloud Run": [[17, "google-cloud-run"]], "Google Discovery API": [[17, "google-discovery-api"]], "Google Drive": [[17, "google-drive"]], "Google LevelDB": [[17, "google-leveldb"]], "Google Spreadsheet": [[17, "google-spreadsheet"]], "Operators and Hooks Reference": [[18, "operators-and-hooks-reference"]], "Protocol integrations": [[19, "protocol-integrations"]], "Protocols": [[19, "protocols"]], "Secure Shell (SSH)": [[19, "secure-shell-ssh"]], "SSH File Transfer Protocol (SFTP)": [[19, "ssh-file-transfer-protocol-sftp"]], "Windows PowerShell Remoting Protocol": [[19, "windows-powershell-remoting-protocol"]], "Windows Remote Management (WinRM)": [[19, "windows-remote-management-winrm"]], "Databricks Repos": [[20, "databricks-repos"]], "Databricks SQL": [[20, "databricks-sql"]], "DingTalk": [[20, "dingtalk"]], "Facebook Ads": [[20, "facebook-ads"]], "Plexus": [[20, "plexus"]], "Slack API": [[20, "slack-api"]], "Slack Incoming Webhook": [[20, "slack-incoming-webhook"]], "Telegram": [[20, "telegram"]], "Yandex.Cloud": [[20, "yandex-cloud"]], "Yandex.Cloud Dataproc": [[20, "yandex-cloud-dataproc"]], "Common SQL to Slack": [[20, "common-sql-to-slack"], [21, "common-sql-to-slack"]], "Common SQL to Slack API": [[20, "common-sql-to-slack-api"], [21, "common-sql-to-slack-api"]], "Common SQL to Slack Incoming Webhook": [[20, "common-sql-to-slack-incoming-webhook"], [21, "common-sql-to-slack-incoming-webhook"]], "Software integrations": [[21, "software-integrations"]], "Common IO": [[21, "common-io"]], "Common SQL": [[21, "common-sql"]], "Docker Swarm": [[21, "docker-swarm"]], "Hashicorp Vault": [[21, "hashicorp-vault"]], "OpenFaaS": [[21, "openfaas"]], "pgvector": [[21, "pgvector"]], "Singularity": [[21, "singularity"]], "Common SQL to Google Spreadsheet": [[21, "common-sql-to-google-spreadsheet"]], "Vertica to MySQL": [[21, "vertica-to-mysql"]], "Presto to MySQL": [[21, "presto-to-mysql"]], "Trino to MySQL": [[21, "trino-to-mysql"]], "Oracle to Oracle": [[21, "oracle-to-oracle"]], "Providers packages reference": [[22, "providers-packages-reference"]], "apache-airflow-providers-airbyte": [[22, "apache-airflow-providers-airbyte"]], "apache-airflow-providers-alibaba": [[22, "apache-airflow-providers-alibaba"]], "apache-airflow-providers-amazon": [[22, "apache-airflow-providers-amazon"]], "apache-airflow-providers-apache-beam": [[22, "apache-airflow-providers-apache-beam"]], "apache-airflow-providers-apache-cassandra": [[22, "apache-airflow-providers-apache-cassandra"]], "apache-airflow-providers-apache-drill": [[22, "apache-airflow-providers-apache-drill"]], "apache-airflow-providers-apache-druid": [[22, "apache-airflow-providers-apache-druid"]], "apache-airflow-providers-apache-flink": [[22, "apache-airflow-providers-apache-flink"]], "apache-airflow-providers-apache-hdfs": [[22, "apache-airflow-providers-apache-hdfs"]], "apache-airflow-providers-apache-hive": [[22, "apache-airflow-providers-apache-hive"]], "apache-airflow-providers-apache-impala": [[22, "apache-airflow-providers-apache-impala"]], "apache-airflow-providers-apache-kafka": [[22, "apache-airflow-providers-apache-kafka"]], "apache-airflow-providers-apache-kylin": [[22, "apache-airflow-providers-apache-kylin"]], "apache-airflow-providers-apache-livy": [[22, "apache-airflow-providers-apache-livy"]], "apache-airflow-providers-apache-pig": [[22, "apache-airflow-providers-apache-pig"]], "apache-airflow-providers-apache-pinot": [[22, "apache-airflow-providers-apache-pinot"]], "apache-airflow-providers-apache-spark": [[22, "apache-airflow-providers-apache-spark"]], "apache-airflow-providers-apache-sqoop": [[22, "apache-airflow-providers-apache-sqoop"]], "apache-airflow-providers-apprise": [[22, "apache-airflow-providers-apprise"]], "apache-airflow-providers-arangodb": [[22, "apache-airflow-providers-arangodb"]], "apache-airflow-providers-asana": [[22, "apache-airflow-providers-asana"]], "apache-airflow-providers-atlassian-jira": [[22, "apache-airflow-providers-atlassian-jira"]], "apache-airflow-providers-celery": [[22, "apache-airflow-providers-celery"]], "apache-airflow-providers-cloudant": [[22, "apache-airflow-providers-cloudant"]], "apache-airflow-providers-cncf-kubernetes": [[22, "apache-airflow-providers-cncf-kubernetes"]], "apache-airflow-providers-cohere": [[22, "apache-airflow-providers-cohere"]], "apache-airflow-providers-common-io": [[22, "apache-airflow-providers-common-io"]], "apache-airflow-providers-common-sql": [[22, "apache-airflow-providers-common-sql"]], "apache-airflow-providers-databricks": [[22, "apache-airflow-providers-databricks"]], "apache-airflow-providers-datadog": [[22, "apache-airflow-providers-datadog"]], "apache-airflow-providers-dbt-cloud": [[22, "apache-airflow-providers-dbt-cloud"]], "apache-airflow-providers-dingding": [[22, "apache-airflow-providers-dingding"]], "apache-airflow-providers-discord": [[22, "apache-airflow-providers-discord"]], "apache-airflow-providers-docker": [[22, "apache-airflow-providers-docker"]], "apache-airflow-providers-elasticsearch": [[22, "apache-airflow-providers-elasticsearch"]], "apache-airflow-providers-exasol": [[22, "apache-airflow-providers-exasol"]], "apache-airflow-providers-facebook": [[22, "apache-airflow-providers-facebook"]], "apache-airflow-providers-ftp": [[22, "apache-airflow-providers-ftp"]], "apache-airflow-providers-github": [[22, "apache-airflow-providers-github"]], "apache-airflow-providers-google": [[22, "apache-airflow-providers-google"]], "apache-airflow-providers-grpc": [[22, "apache-airflow-providers-grpc"]], "apache-airflow-providers-hashicorp": [[22, "apache-airflow-providers-hashicorp"]], "apache-airflow-providers-http": [[22, "apache-airflow-providers-http"]], "apache-airflow-providers-imap": [[22, "apache-airflow-providers-imap"]], "apache-airflow-providers-influxdb": [[22, "apache-airflow-providers-influxdb"]], "apache-airflow-providers-jdbc": [[22, "apache-airflow-providers-jdbc"]], "apache-airflow-providers-jenkins": [[22, "apache-airflow-providers-jenkins"]], "apache-airflow-providers-microsoft-azure": [[22, "apache-airflow-providers-microsoft-azure"]], "apache-airflow-providers-microsoft-mssql": [[22, "apache-airflow-providers-microsoft-mssql"]], "apache-airflow-providers-microsoft-psrp": [[22, "apache-airflow-providers-microsoft-psrp"]], "apache-airflow-providers-microsoft-winrm": [[22, "apache-airflow-providers-microsoft-winrm"]], "apache-airflow-providers-mongo": [[22, "apache-airflow-providers-mongo"]], "apache-airflow-providers-mysql": [[22, "apache-airflow-providers-mysql"]], "apache-airflow-providers-neo4j": [[22, "apache-airflow-providers-neo4j"]], "apache-airflow-providers-odbc": [[22, "apache-airflow-providers-odbc"]], "apache-airflow-providers-openai": [[22, "apache-airflow-providers-openai"]], "apache-airflow-providers-openfaas": [[22, "apache-airflow-providers-openfaas"]], "apache-airflow-providers-openlineage": [[22, "apache-airflow-providers-openlineage"]], "apache-airflow-providers-opensearch": [[22, "apache-airflow-providers-opensearch"]], "apache-airflow-providers-opsgenie": [[22, "apache-airflow-providers-opsgenie"]], "apache-airflow-providers-oracle": [[22, "apache-airflow-providers-oracle"]], "apache-airflow-providers-pagerduty": [[22, "apache-airflow-providers-pagerduty"]], "apache-airflow-providers-papermill": [[22, "apache-airflow-providers-papermill"]], "apache-airflow-providers-pgvector": [[22, "apache-airflow-providers-pgvector"]], "apache-airflow-providers-pinecone": [[22, "apache-airflow-providers-pinecone"]], "apache-airflow-providers-plexus": [[22, "apache-airflow-providers-plexus"]], "apache-airflow-providers-postgres": [[22, "apache-airflow-providers-postgres"]], "apache-airflow-providers-presto": [[22, "apache-airflow-providers-presto"]], "apache-airflow-providers-redis": [[22, "apache-airflow-providers-redis"]], "apache-airflow-providers-salesforce": [[22, "apache-airflow-providers-salesforce"]], "apache-airflow-providers-samba": [[22, "apache-airflow-providers-samba"]], "apache-airflow-providers-segment": [[22, "apache-airflow-providers-segment"]], "apache-airflow-providers-sendgrid": [[22, "apache-airflow-providers-sendgrid"]], "apache-airflow-providers-sftp": [[22, "apache-airflow-providers-sftp"]], "apache-airflow-providers-singularity": [[22, "apache-airflow-providers-singularity"]], "apache-airflow-providers-slack": [[22, "apache-airflow-providers-slack"]], "apache-airflow-providers-smtp": [[22, "apache-airflow-providers-smtp"]], "apache-airflow-providers-snowflake": [[22, "apache-airflow-providers-snowflake"]], "apache-airflow-providers-sqlite": [[22, "apache-airflow-providers-sqlite"]], "apache-airflow-providers-ssh": [[22, "apache-airflow-providers-ssh"]], "apache-airflow-providers-tableau": [[22, "apache-airflow-providers-tableau"]], "apache-airflow-providers-tabular": [[22, "apache-airflow-providers-tabular"]], "apache-airflow-providers-telegram": [[22, "apache-airflow-providers-telegram"]], "apache-airflow-providers-trino": [[22, "apache-airflow-providers-trino"]], "apache-airflow-providers-vertica": [[22, "apache-airflow-providers-vertica"]], "apache-airflow-providers-weaviate": [[22, "apache-airflow-providers-weaviate"]], "apache-airflow-providers-yandex": [[22, "apache-airflow-providers-yandex"]], "apache-airflow-providers-zendesk": [[22, "apache-airflow-providers-zendesk"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"docnames": ["core-extensions/auth-backends", "core-extensions/configurations", "core-extensions/connections", "core-extensions/deferrable-operator-ref", "core-extensions/executors", "core-extensions/extra-links", "core-extensions/index", "core-extensions/logging", "core-extensions/notifications", "core-extensions/secrets-backends", "howto/create-custom-providers", "index", "installing-from-pypi", "installing-from-sources", "operators-and-hooks-ref/apache", "operators-and-hooks-ref/aws", "operators-and-hooks-ref/azure", "operators-and-hooks-ref/google", "operators-and-hooks-ref/index", "operators-and-hooks-ref/protocol", "operators-and-hooks-ref/services", "operators-and-hooks-ref/software", "packages-ref"], "filenames": ["core-extensions/auth-backends.rst", "core-extensions/configurations.rst", "core-extensions/connections.rst", "core-extensions/deferrable-operator-ref.rst", "core-extensions/executors.rst", "core-extensions/extra-links.rst", "core-extensions/index.rst", "core-extensions/logging.rst", "core-extensions/notifications.rst", "core-extensions/secrets-backends.rst", "howto/create-custom-providers.rst", "index.rst", "installing-from-pypi.rst", "installing-from-sources.rst", "operators-and-hooks-ref/apache.rst", "operators-and-hooks-ref/aws.rst", "operators-and-hooks-ref/azure.rst", "operators-and-hooks-ref/google.rst", "operators-and-hooks-ref/index.rst", "operators-and-hooks-ref/protocol.rst", "operators-and-hooks-ref/services.rst", "operators-and-hooks-ref/software.rst", "packages-ref.rst"], "titles": ["Auth backends", "Configurations", "Connections", "Supported Deferrable Operators", "Executors", "Extra Links", "Core Extensions", "Writing logs", "Notifications", "Secret backends", "How to create your own provider", "Provider packages", "Installation from PyPI", "Installing Providers from Sources", "ASF: Apache Software Foundation", "AWS: Amazon Web Services", "Azure: Microsoft Azure", "Google", "Operators and Hooks Reference", "Protocol integrations", "Services", "Software integrations", "Providers packages reference"], "terms": {"thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "summari": [0, 1, 2, 4, 5, 7, 8, 9, 11], "all": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 15, 17], "apach": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 18, 20], "airflow": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "commun": [0, 1, 2, 4, 5, 7, 8, 9, 10, 12, 19], "provid": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 14, 15, 16, 17, 19, 20, 21], "implement": [0, 2, 4, 5, 6, 7, 8, 9, 10], "authent": [0, 10, 11, 16], "expos": [0, 2, 4, 5, 7, 9, 10], "via": [0, 2, 4, 5, 7, 9, 10, 11, 12, 13, 22], "manag": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 18, 22], "": [0, 9, 10, 11, 13, 16, 22], "web": [0, 11, 18, 22], "server": [0, 6, 11, 13, 18, 22], "api": [0, 10, 14, 15, 16, 18, 19, 22], "base": [0, 14, 15, 16, 17], "flask": [0, 22], "applic": 0, "builder": [0, 22], "capabl": [0, 9, 10, 11, 22], "you": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21], "can": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 13, 17], "read": [0, 9, 11], "more": [0, 10, 11, 12], "about": [0, 10, 11, 13], "those": [0, 1, 2, 4, 7, 9, 10, 11, 12], "fab": [0, 13], "secur": [0, 18, 22], "doc": [0, 10], "also": [0, 2, 4, 5, 7, 8, 9, 10, 11, 13, 17], "take": [0, 1, 9], "look": [0, 1, 9, 10, 12], "avail": [0, 1, 5, 7, 9, 10, 11, 18, 22], "core": [0, 1, 7, 9, 10, 18], "webserv": 0, "see": [0, 2, 4, 5, 7, 8, 9, 10, 11, 12, 17], "google_openid": 0, "devel": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "2": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "9": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "0": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "dev0": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "experiment": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "featur": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "custom": [1, 2, 5, 9], "how": [1, 11, 12, 17, 21], "set": [1, 10], "option": [1, 7, 11], "refer": [1, 10, 11], "amazon": [1, 3, 6, 11, 13, 18], "hive": [1, 6, 13, 18], "celeri": [1, 6, 12, 13, 18], "kubernet": [1, 3, 6, 13, 18], "cncf": [1, 3, 21], "elasticsearch": [1, 6, 13, 18], "internet": [1, 6, 13, 18, 22], "messag": [1, 6, 8, 13, 18, 22], "access": [1, 6, 10, 13, 18, 22], "protocol": [1, 6, 13, 18, 22], "imap": [1, 6, 13, 18], "java": [1, 6, 13, 18, 22], "databas": [1, 6, 9, 11, 13, 18, 22], "connect": [1, 6, 9, 10, 13, 17, 18, 22], "jdbc": [1, 6, 13, 18], "microsoft": [1, 3, 6, 13, 18], "azur": [1, 3, 6, 13, 18], "openlineag": [1, 13], "simpl": [1, 6, 13, 18, 22], "mail": [1, 6, 13, 18, 22], "transfer": [1, 6, 10, 11, 13, 18, 22], "smtp": [1, 6, 13, 18], "yandex": [1, 6, 13, 18], "extend": [2, 4, 5, 6, 10], "each": [2, 4, 5, 10, 11], "defin": [2, 4, 5, 10, 11], "own": [2, 4, 5, 9, 11], "paramet": 2, "ui": [2, 10, 11], "field": [2, 10, 11], "behaviour": [2, 10, 11], "when": [2, 8, 10, 11, 12], "type": [2, 10, 17], "us": [2, 6, 11, 12, 13, 17, 19, 21], "automat": [2, 11], "creat": [2, 8, 11, 14], "hook": [2, 10, 11, 14, 15, 16, 19, 20, 21], "specif": [2, 6, 10], "The": [2, 4, 5, 10, 11, 13], "explain": [2, 4, 5, 8, 11], "airbytehook": 2, "oss": 2, "osshook": 2, "adb_spark": 2, "analyticdbsparkhook": 2, "aw": [2, 10, 14, 16, 17, 18, 19, 20, 21, 22], "awsgenerichook": 2, "chime": [2, 18], "chimewebhookhook": 2, "emr": [2, 18], "emrhook": 2, "redshift": [2, 18], "redshiftsqlhook": 2, "cassandrahook": 2, "drillhook": 2, "druiddbapihook": 2, "hive_cli": 2, "hiveclihook": 2, "hiveserver2": 2, "hiveserver2hook": 2, "hive_metastor": 2, "hivemetastorehook": 2, "impalahook": 2, "kafkabasehook": 2, "livyhook": 2, "pig_cli": 2, "pigclihook": 2, "pinotdbapihook": 2, "pinot_admin": 2, "pinotadminhook": 2, "spark_connect": [2, 14], "sparkconnecthook": 2, "spark_jdbc": [2, 14], "sparkjdbchook": 2, "spark_sql": [2, 14], "sparksqlhook": 2, "sparksubmithook": 2, "sqoophook": 2, "apprisehook": 2, "arangodbhook": 2, "asanahook": 2, "jirahook": 2, "cloudanthook": 2, "kuberneteshook": 2, "coherehook": 2, "databrickshook": 2, "datadoghook": 2, "dbt_cloud": 2, "dbtcloudhook": 2, "dingdinghook": 2, "discordwebhookhook": 2, "dockerhook": 2, "elasticsearchhook": 2, "exasolhook": 2, "facebook_soci": 2, "facebookadsreportinghook": 2, "ftphook": 2, "githubhook": 2, "google_cloud_platform": [2, 10], "googlebasehook": [2, 17], "dataprep": 2, "googledataprephook": 2, "gcpcloudsql": 2, "cloudsqlhook": 2, "gcpcloudsqldb": 2, "cloudsqldatabasehook": 2, "gcpbigqueri": 2, "bigqueryhook": 2, "gcpssh": 2, "computeenginesshhook": 2, "leveldb": [2, 18, 22], "leveldbhook": 2, "grpchook": 2, "vault": [2, 18, 22], "vaulthook": 2, "httphook": 2, "imaphook": 2, "influxdbhook": 2, "jdbchook": 2, "jenkinshook": 2, "azurebasehook": 2, "azure_data_explor": 2, "azuredataexplorerhook": 2, "azure_batch": 2, "azurebatchhook": 2, "azure_cosmo": 2, "azurecosmosdbhook": 2, "azure_data_lak": 2, "azuredatalakehook": 2, "azure_fileshar": 2, "azurefilesharehook": 2, "azure_container_volum": 2, "azurecontainervolumehook": 2, "azure_container_inst": 2, "azurecontainerinstancehook": 2, "wasb": [2, 16], "wasbhook": 2, "azure_data_factori": 2, "azuredatafactoryhook": 2, "azure_container_registri": 2, "azurecontainerregistryhook": 2, "azure_service_bu": 2, "baseazureservicebushook": 2, "azure_synaps": 2, "azuresynapsehook": 2, "adl": [2, 16], "azuredatalakestoragev2hook": 2, "azure_synapse_pipelin": 2, "azuresynapsepipelinehook": 2, "mssqlhook": 2, "mongo": [2, 21], "mongohook": 2, "mysqlhook": 2, "neo4jhook": 2, "odbchook": 2, "openaihook": 2, "opensearchhook": 2, "opsgeniealerthook": 2, "oraclehook": 2, "pagerdutyhook": 2, "pagerduty_ev": [2, 20], "pagerdutyeventshook": 2, "jupyter_kernel": 2, "kernelhook": 2, "pineconehook": 2, "postgr": [2, 17, 21], "postgreshook": 2, "prestohook": 2, "redishook": 2, "salesforcehook": 2, "sambahook": 2, "segmenthook": 2, "sftphook": 2, "slackhook": 2, "slackwebhook": 2, "slackwebhookhook": 2, "smtphook": 2, "snowflakehook": 2, "sqlitehook": 2, "sshhook": 2, "tableauhook": 2, "tabularhook": 2, "trinohook": 2, "verticahook": 2, "weaviatehook": 2, "yandexcloud": 2, "yandexcloudbasehook": 2, "zendeskhook": 2, "list": [3, 6, 10, 11, 18, 22], "mode": 3, "beam": [3, 13, 18], "livi": [3, 6, 13, 18], "databrick": [3, 6, 13, 18], "dbt": [3, 6, 13], "cloud": [3, 6, 7, 13, 18], "googl": [3, 6, 11, 13, 18], "http": [3, 6, 10, 11, 12, 13, 18], "snowflak": [3, 6, 13, 18], "configur": [4, 6, 9, 10, 17], "handl": [4, 11, 12], "execut": [4, 22], "task": [4, 5, 7, 8, 11], "ar": [4, 5, 8, 10, 11, 12, 13, 15, 16, 17, 18], "awsecsexecutor": 4, "celeryexecutor": 4, "celerykubernetesexecutor": 4, "kubernetesexecutor": 4, "oper": [5, 6, 10, 11, 14, 15, 16, 19, 20, 21], "For": [5, 11, 13], "its": [5, 9, 11], "redirect": 5, "user": [5, 10, 11, 13], "extern": [5, 8, 11], "system": [5, 8, 11, 18, 22], "button": 5, "page": [5, 10, 12, 13], "here": [5, 6, 7, 8, 9, 11, 18, 22], "batchjobdefinitionlink": 5, "batchjobdetailslink": 5, "batchjobqueuelink": 5, "emrclusterlink": 5, "emrlogslink": 5, "gluejobrundetailslink": 5, "cloudwatcheventslink": 5, "databricksjobrunlink": 5, "dbtcloudrunjoboperatorlink": 5, "bigqueryconsolelink": 5, "bigqueryconsoleindexablelink": 5, "dataformrepositorylink": 5, "dataformworkspacelink": 5, "dataformworkflowinvocationlink": 5, "datafusioninstancelink": 5, "datafusionpipelinelink": 5, "datafusionpipelineslink": 5, "cloudsqlinstancelink": 5, "cloudsqlinstancedatabaselink": 5, "dataplextasklink": 5, "dataplextaskslink": 5, "dataplexlakelink": 5, "bigquerydatasetlink": 5, "bigquerytablelink": 5, "bigquerydatatransferconfiglink": 5, "computeinstancedetailslink": 5, "computeinstancetemplatedetailslink": 5, "computeinstancegroupmanagerdetailslink": 5, "cloudtasksqueuelink": 5, "cloudtaskslink": 5, "datacatalogentrygrouplink": 5, "datacatalogentrylink": 5, "datacatalogtagtemplatelink": 5, "dataproclink": 5, "dataproclistlink": 5, "dataprocclusterlink": 5, "dataprocjoblink": 5, "dataprocworkflowlink": 5, "dataprocworkflowtemplatelink": 5, "dataprocbatchlink": 5, "dataprocbatcheslistlink": 5, "dataprocmetastoredetailedlink": 5, "dataprocmetastorelink": 5, "dataprepflowlink": 5, "dataprepjobgrouplink": 5, "vertexaimodellink": 5, "vertexaimodellistlink": 5, "vertexaimodelexportlink": 5, "vertexaitraininglink": 5, "vertexaitrainingpipelineslink": 5, "vertexaidatasetlink": 5, "vertexaidatasetlistlink": 5, "vertexaihyperparametertuningjoblistlink": 5, "vertexaibatchpredictionjoblink": 5, "vertexaibatchpredictionjoblistlink": 5, "vertexaiendpointlink": 5, "vertexaiendpointlistlink": 5, "vertexaipipelinejoblink": 5, "vertexaipipelinejoblistlink": 5, "workflowsworkflowdetailslink": 5, "workflowslistofworkflowslink": 5, "workflowsexecutionlink": 5, "cloudcomposerenvironmentlink": 5, "cloudcomposerenvironmentslink": 5, "dataflowjoblink": 5, "clouddatastoreimportexportlink": 5, "clouddatastoreentitieslink": 5, "bigtableinstancelink": 5, "bigtableclusterlink": 5, "bigtabletableslink": 5, "spannerdatabaselink": 5, "spannerinstancelink": 5, "stackdrivernotificationslink": 5, "stackdriverpolicieslink": 5, "kubernetesengineclusterlink": 5, "kubernetesenginepodlink": 5, "pubsubsubscriptionlink": 5, "pubsubtopiclink": 5, "memcachedinstancedetailslink": 5, "memcachedinstancelistlink": 5, "redisinstancedetailslink": 5, "redisinstancelistlink": 5, "cloudbuildlink": 5, "cloudbuildlistlink": 5, "cloudbuildtriggerslistlink": 5, "cloudbuildtriggerdetailslink": 5, "automldatasetlink": 5, "automldatasetlistlink": 5, "automlmodellink": 5, "automlmodeltrainlink": 5, "automlmodelpredictlink": 5, "lifescienceslink": 5, "cloudfunctionsdetailslink": 5, "cloudfunctionslistlink": 5, "cloudstoragetransferlistlink": 5, "cloudstoragetransferjoblink": 5, "cloudstoragetransferdetailslink": 5, "clouddlpdeidentifytemplateslistlink": 5, "clouddlpdeidentifytemplatedetailslink": 5, "clouddlpjobtriggerslistlink": 5, "clouddlpjobtriggerdetailslink": 5, "clouddlpjobslistlink": 5, "clouddlpjobdetailslink": 5, "clouddlpinspecttemplateslistlink": 5, "clouddlpinspecttemplatedetailslink": 5, "clouddlpinfotypeslistlink": 5, "clouddlpinfotypedetailslink": 5, "clouddlppossibleinfotypeslistlink": 5, "mlenginemodellink": 5, "mlenginemodelslistlink": 5, "mlenginejobdetailslink": 5, "mlenginejobslistlink": 5, "mlenginemodelversiondetailslink": 5, "storagelink": 5, "filedetailslink": 5, "azuredatafactorypipelinerunlink": 5, "azuresynapsepipelinerunlink": 5, "function": [6, 10, 18], "thei": [6, 10, 11, 12, 22], "certain": [6, 11], "auth": [6, 10], "backend": [6, 10], "airbyt": [6, 13, 18], "alibaba": [6, 13], "cassandra": [6, 13, 18], "drill": [6, 13, 18], "druid": [6, 13, 18], "impala": [6, 13, 18], "kafka": [6, 13, 18], "pig": [6, 13, 18], "pinot": [6, 13, 18], "spark": [6, 13, 18], "sqoop": [6, 13, 18], "appris": [6, 13, 18], "arangodb": [6, 13, 18], "asana": [6, 13, 18], "atlassian": [6, 13, 18], "jira": [6, 13, 18], "ibm": [6, 13, 18, 22], "cloudant": [6, 13, 18], "coher": [6, 13, 18], "datadog": [6, 13, 18], "dingd": [6, 13, 20], "discord": [6, 13, 18], "docker": [6, 13, 18], "exasol": [6, 13, 18], "facebook": [6, 13, 18], "file": [6, 13, 18, 22], "ftp": [6, 13, 18], "github": [6, 11, 13, 18], "grpc": [6, 13, 18], "hashicorp": [6, 13, 18], "hypertext": [6, 13, 18, 22], "influxdb": [6, 13, 18], "jenkin": [6, 13, 18], "sql": [6, 13, 18], "mssql": [6, 13, 18], "mongodb": [6, 13, 18, 22], "mysql": [6, 13, 18], "neo4j": [6, 13, 18], "odbc": [6, 13, 18], "openai": [6, 13, 18], "opensearch": [6, 13, 18], "opsgeni": [6, 13, 18], "oracl": [6, 13, 18], "pagerduti": [6, 13, 18], "papermil": [6, 13, 18], "pinecon": [6, 13, 18], "postgresql": [6, 13, 18, 22], "presto": [6, 13, 18], "redi": [6, 13, 18], "salesforc": [6, 13, 18], "samba": [6, 13, 18], "segment": [6, 13, 18], "sftp": [6, 13, 18], "slack": [6, 13, 18], "sqlite": [6, 13, 18], "ssh": [6, 13, 18], "tableau": [6, 13, 18], "tabular": [6, 13, 18], "trino": [6, 13, 18], "vertica": [6, 13, 18], "weaviat": [6, 13, 18], "zendesk": [6, 13, 18], "support": [6, 12, 14, 15, 16, 17], "deferr": 6, "executor": [6, 10], "extra": [6, 10], "link": [6, 10], "write": [6, 10, 11], "log": [6, 10, 18], "notif": [6, 10, 18], "secret": [6, 10], "osstaskhandl": 7, "s3taskhandl": 7, "cloudwatchtaskhandl": 7, "elasticsearchtaskhandl": 7, "platform": [7, 18, 22], "gcstaskhandl": 7, "stackdrivertaskhandl": 7, "blob": [7, 11, 18], "storag": [7, 18], "wasbtaskhandl": 7, "redistaskhandl": 7, "allow": [8, 10, 11, 14, 15, 16, 17, 19, 20, 21], "send": 8, "instanc": [8, 18], "dag": [8, 10, 11, 17], "run": [8, 10, 13, 18, 22], "chang": [8, 10, 11], "state": 8, "notifi": [8, 10], "chimenotifi": 8, "snsnotifi": 8, "sqsnotifi": 8, "apprisenotifi": 8, "jiranotifi": 8, "discordnotifi": 8, "opsgenienotifi": 8, "pagerdutynotifi": 8, "slacknotifi": 8, "slackwebhooknotifi": 8, "smtpnotifi": 8, "ha": [9, 10, 11, 15, 16, 17], "variabl": [9, 10, 11], "from": [9, 10, 11, 14, 15, 16, 17], "rather": [9, 10, 11], "than": [9, 10, 11], "while": [9, 12], "store": 9, "inform": [9, 10, 11], "possibl": [9, 10, 11], "mani": [9, 10], "enterpris": 9, "alreadi": [9, 13], "have": [9, 10, 11], "some": [9, 10, 11, 12, 16, 17], "tap": 9, "servic": [9, 11, 18, 22], "integr": [9, 10, 11, 14, 15, 16, 17, 18, 20, 22], "ones": 9, "secretsmanagerbackend": 9, "systemsmanagerparameterstorebackend": 9, "cloudsecretmanagerbackend": 9, "vaultbackend": 9, "azurekeyvaultbackend": 9, "develop": [10, 11, 14], "releas": [10, 11, 18], "sensor": [10, 11, 14, 15, 16, 17, 19, 20, 21], "togeth": [10, 11], "standard": [10, 19], "instal": [10, 22], "same": [10, 11, 12], "mechan": 10, "moreov": 10, "describ": [10, 11, 12], "previou": [10, 11, 13], "chapter": [10, 11], "As": 10, "mention": 10, "document": [10, 11, 14, 15, 16, 17, 18, 19, 20, 21], "add": [10, 11], "well": [10, 11, 13], "build": [10, 11], "them": [10, 11, 12], "would": [10, 11], "like": [10, 11, 12], "ad": [10, 18, 22], "just": 10, "matter": [10, 11], "python": [10, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22], "right": [10, 12], "meta": 10, "data": [10, 14, 18, 19, 20], "we": [10, 11], "entri": 10, "point": [10, 11], "need": [10, 11, 12], "appropri": [10, 11, 12], "apache_airflow_provid": 10, "which": [10, 11, 16], "callabl": 10, "return": 10, "dictionari": 10, "contain": [10, 11, 18], "discover": 10, "follow": [10, 11, 13], "json": 10, "schema": 10, "most": [10, 13], "extens": [10, 11, 17], "might": [10, 11, 12], "want": [10, 11], "purpos": 10, "import": [10, 13], "view": [10, 11], "displai": [10, 18], "cli": 10, "name": 10, "human": 10, "friendli": 10, "descript": 10, "addit": [10, 11], "version": [10, 11, 12, 13, 22], "revers": 10, "chronolog": 10, "order": [10, 11], "first": 10, "current": [10, 12], "It": [10, 13], "taken": 10, "provider_info": 10, "should": [10, 11, 12, 13], "class": 10, "replac": 10, "deprec": 10, "detail": [10, 11], "decor": [10, 19], "path": 10, "where": [10, 11], "handler": 10, "modul": 10, "config": 10, "conform": 10, "config_templ": 10, "yml": 10, "contribut": [10, 11], "valu": 10, "arrai": 10, "optim": 10, "reason": [10, 11], "remov": 10, "3": [10, 12, 22], "If": [10, 11, 12], "target": [10, 14, 15, 16, 17, 19, 20, 21], "do": [10, 12, 13], "includ": [10, 11, 12, 22], "earlier": 10, "both": 10, "queri": 10, "command": [10, 12], "wai": [10, 11], "verifi": [10, 13, 18], "properli": 10, "recogn": 10, "whether": 10, "line": 10, "interfac": [10, 11, 19], "environ": [10, 11], "sub": 10, "consid": 10, "convent": 10, "new": [10, 11], "onli": [10, 12], "librari": 10, "Such": 10, "typic": [10, 12], "result": 10, "importerror": 10, "howev": [10, 11], "error": 10, "silent": 10, "ignor": 10, "pollut": 10, "fals": 10, "warn": [10, 13], "veri": 10, "bad": 10, "pattern": 10, "tend": 10, "turn": 10, "blind": 10, "spot": 10, "so": [10, 11, 12], "avoid": 10, "encourag": 10, "until": 10, "had": 10, "select": [10, 13], "known": [10, 12], "1": [10, 11, 13, 22], "come": [10, 12], "actual": 10, "lead": [10, 12], "even": 10, "without": [10, 11], "give": [10, 11], "clue": 10, "someth": 10, "miss": 10, "depend": [10, 11, 12], "assign": 10, "uniqu": 10, "kei": [10, 13], "mean": [10, 11], "retriev": [10, 11], "xcom": 10, "exampl": [10, 11, 12, 13, 17], "case": [10, 11], "calcul": 10, "alwai": 10, "check": [10, 13], "ti_kei": 10, "pass": 10, "none": 10, "get_valu": 10, "keep": 10, "backward": [10, 11], "compat": [10, 11], "code": [10, 17], "similar": 10, "note": [10, 11], "condit": 10, "def": 10, "get_link": 10, "self": [10, 13], "baseoper": 10, "dttm": 10, "datetim": 10, "taskinstancekei": 10, "job_id": 10, "els": 10, "assert": 10, "get_on": 10, "dag_id": 10, "task_id": 10, "execution_d": 10, "len": 10, "index": [10, 11], "bigquery_job_details_link_fmt": 10, "format": [10, 12], "my": 10, "anyth": 10, "make": [10, 11], "other": [10, 11, 12, 18], "besid": 10, "befor": 10, "anyon": 10, "who": 10, "abl": 10, "quit": 10, "number": 10, "80": [10, 11], "go": 10, "maintain": 10, "structur": 10, "intent": 10, "pr": [10, 12], "But": 10, "free": [10, 11], "ani": [10, 11], "long": 10, "conflict": 10, "prefer": 10, "choos": [10, 13], "domain": 10, "what": [10, 22], "exist": 10, "below": [10, 12, 13], "setup": 10, "cfg": 10, "tell": 10, "get": [10, 13], "requir": [10, 11, 12], "metadata": 10, "step": [10, 13, 18], "part": 10, "sure": 10, "project": 10, "url": 10, "pypi": [10, 13, 22], "compliant": 10, "runtim": 10, "sever": 10, "org": [10, 13], "draft": 10, "07": 10, "object": 10, "properti": 10, "under": 10, "repositori": [10, 22], "string": 10, "rst": [10, 11], "item": 10, "been": 10, "favour": 10, "perform": [10, 14, 15, 16, 17, 19, 20, 21], "individu": 10, "onc": [10, 11], "deprecatedvers": 10, "filesystem": [10, 15, 16, 17], "guid": [10, 13, 14, 15, 16, 17, 19, 20, 21], "must": 10, "start": [10, 11], "sourc": [10, 14, 15, 16, 17, 19, 20, 21], "match": [10, 13], "section": 10, "additionalproperti": 10, "trigger": 10, "null": 10, "ref": 10, "definit": 10, "renam": 10, "previous_nam": 10, "appli": 10, "taskflow": 10, "version_ad": 10, "enum": 10, "boolean": 10, "integ": 10, "float": 10, "default": [10, 11], "sensit": 10, "true": 10, "specifi": 10, "airflow__": 10, "___": 10, "__secret": 10, "_cmd": 10, "airflowconfigpars": 10, "sensitive_config_valu": 10, "additional_properti": 10, "entry_point": 10, "get_provider_info": 10, "myproviderpackag": 10, "somemodul": 10, "py": 10, "sourcehook": 10, "id": [10, 13], "good": [10, 11, 13], "question": 10, "glad": 10, "ask": 10, "usual": [10, 11], "_default": 10, "few": 10, "google_cloud_default": 10, "aws_default": 10, "two": 10, "try": 10, "one": [10, 13], "succe": 10, "answer": 10, "polici": 10, "advertis": 10, "share": [10, 11, 12], "absolut": 10, "ecosystem": 10, "area": 10, "our": 10, "websit": 10, "non": 10, "work": [10, 11, 12], "feel": 10, "evalu": 10, "merg": 10, "charg": 10, "outsid": 10, "control": 10, "commerci": 10, "busi": 10, "built": [10, 11], "around": 10, "softwar": [10, 18], "never": 10, "3rd": 10, "parti": [10, 11], "modular": 11, "schedul": 11, "basic": 11, "call": 11, "multitud": 11, "separ": 11, "given": 11, "design": 11, "your": [11, 12], "easili": 11, "exactli": 11, "written": 11, "learn": 11, "find": 11, "full": 11, "solid": 11, "discov": 11, "re": 11, "becom": 11, "public": 11, "privat": 11, "form": 11, "deliv": 11, "visibl": 11, "By": [11, 13], "save": 11, "local": [11, 18], "intern": 11, "remot": [11, 13, 18, 22], "logger": 11, "receiv": 11, "statu": 11, "were": 11, "10": [11, 22], "latest": 11, "particular": 11, "downgrad": 11, "introduc": 11, "problem": [11, 12], "impact": 11, "main": [11, 13], "increment": 11, "independ": [11, 18], "valid": [11, 13], "updat": 11, "test": 11, "capac": 11, "third": 11, "multipl": 11, "semver": 11, "scheme": 11, "gener": 11, "approach": 11, "unless": 11, "recent": 11, "x": 11, "vari": 11, "per": 11, "limit": [11, 16], "constrain": 11, "correspond": 11, "correct": [11, 13], "constraint": [11, 12], "cross": 11, "simpli": 11, "enabl": [11, 22], "often": 11, "between": 11, "differ": [11, 13], "again": 11, "kind": 11, "break": 11, "everi": 11, "backport": 11, "could": 11, "back": 11, "port": 11, "last": 11, "wa": 11, "done": 11, "march": 11, "17": 11, "2021": [11, 13], "longer": 11, "sinc": 11, "reach": 11, "end": 11, "Of": 11, "life": 11, "june": 11, "com": [11, 12, 13], "managing_providers_lifecycl": 11, "packag": 12, "publish": 12, "pip": [12, 22], "offici": 12, "success": 12, "poetri": 12, "workflow": 12, "especi": 12, "v": 12, "wish": 12, "convert": 12, "There": [12, 13], "issu": 12, "bazel": 12, "circular": 12, "pleas": [12, 13], "switch": 12, "encount": 12, "fix": 12, "newer": 12, "raw": 12, "githubusercont": 12, "8": [12, 22], "txt": 12, "upgrad": 12, "flink": [13, 18], "hdf": [13, 14], "kylin": [13, 18], "common": [13, 18], "io": [13, 18], "powershel": [13, 18, 22], "psrp": [13, 19], "window": [13, 18, 22], "winrm": [13, 18], "openfaa": [13, 18], "pgvector": [13, 18], "plexu": [13, 18], "sendgrid": 13, "singular": [13, 18], "telegram": [13, 18], "drop": 13, "down": 13, "top": 13, "left": 13, "pgp": 13, "signatur": 13, "essenti": 13, "download": [13, 17], "sha": 13, "gpg": 13, "asc": 13, "relev": 13, "distribut": [13, 22], "recommend": 13, "directori": 13, "mirror": 13, "pgpk": 13, "ka": 13, "To": [13, 17, 20, 21, 22], "binari": 13, "pgpv": 13, "tar": 13, "gz": 13, "made": 13, "sat": 13, "11": [13, 22], "sep": 13, "12": [13, 22], "49": 13, "54": 13, "bst": 13, "rsa": 13, "cde15c6e4d3a8ec4ecf4ba4b6674e08ad7de406f": 13, "issuer": 13, "kaxilnaik": 13, "kaxil": 13, "naik": 13, "unknown": 13, "aka": 13, "gmail": 13, "certifi": 13, "trust": 13, "indic": 13, "belong": 13, "owner": 13, "primari": 13, "fingerprint": 13, "cde1": 13, "5c6e": 13, "4d3a": 13, "8ec4": 13, "ecf4": 13, "ba4b": 13, "6674": 13, "e08a": 13, "d7de": 13, "406f": 13, "worri": 13, "certif": 13, "sign": 13, "why": 13, "know": 13, "sha512": 13, "sum": 13, "shasum": 13, "512": 13, "diff": 13, "variou": [14, 15, 16, 17, 19, 20, 21], "These": [14, 15, 16, 17, 19, 20, 21], "within": [14, 15, 16, 17, 19, 20], "product": [14, 15, 16, 17, 19, 20, 21], "record": 14, "tabl": 14, "druid_check": 14, "flink_kubernet": 14, "hive_stat": 14, "hive_partit": 14, "metastore_partit": 14, "named_hive_partit": 14, "consum": 14, "produc": 14, "client": [14, 18], "kylin_cub": 14, "spark_submit": 14, "spark_jdbc_script": 14, "web_hdf": 14, "copi": [14, 15, 16, 17, 19, 21], "hive_to_dynamodb": [14, 15], "hive_to_druid": 14, "vertica_to_h": [14, 21], "hive_to_mysql": [14, 21], "hive_to_samba": [14, 19], "s3_to_hiv": [14, 15], "mysql_to_h": [14, 21], "mssql_to_hiv": [14, 21], "cassandra_to_gc": [14, 17], "base_aw": 15, "cloud_form": 15, "comput": 15, "elasticache_replication_group": 15, "relat": 15, "redshift_clust": 15, "redshift_data": 15, "redshift_sql": 15, "cluster": 15, "secrets_manag": 15, "verified_permiss": 15, "batch_client": 15, "batch_wait": 15, "dm": 15, "glue_crawl": 15, "glue_catalog": 15, "glue_catalog_partit": 15, "glue_databrew": 15, "lambda_funct": 15, "step_funct": 15, "dynamodb_to_s3": 15, "gcs_to_s3": [15, 17], "glacier_to_gc": [15, 17], "google_api_to_s3": 15, "http_to_s3": [15, 19], "attach": [15, 19], "imap_attachment_to_s3": [15, 19], "mongo_to_s3": [15, 21], "redshift_to_s3": 15, "s3_to_redshift": 15, "s3_to_sftp": [15, 19], "sftp_to_s3": [15, 19], "s3_to_ftp": [15, 19], "exasol_to_s3": [15, 21], "ftp_to_s3": [15, 19], "salesforce_to_s3": [15, 20], "local_to_s3": 15, "sql_to_s3": [15, 21], "s3_to_sql": [15, 21], "azure_blob_to_s3": [15, 16], "s3_to_gc": [15, 17], "s3_to_mysql": [15, 21], "copyfromexternalstagetosnowflakeoper": [15, 20], "copy_into_snowflak": [15, 16, 17, 20], "base_azur": 16, "sdk": 16, "wasb_delete_blob": 16, "container_inst": 16, "container_volum": 16, "container_registri": 16, "adx": 16, "data_factori": 16, "data_lak": 16, "datalak": 16, "asb": 16, "azure_fileshare_to_gc": [16, 17], "adls_to_gc": [16, 17], "azure_blob_to_gc": [16, 17], "upload": [16, 17], "local_to_adl": 16, "oracle_to_azure_data_lak": [16, 21], "local_to_wasb": 16, "sftp_to_wasb": [16, 19], "move": [16, 17], "base_googl": 17, "discovery_api": 17, "analyz": 17, "bigquery_dt": 17, "marketing_platform": 17, "campaign_manag": 17, "cloud_build": 17, "cloud_bas": 17, "firebas": [17, 22], "life_sci": 17, "cloud_memorystor": 17, "memcach": 17, "natural_languag": 17, "os_login": 17, "pubsub": 17, "secret_manag": 17, "speech_to_text": 17, "cloud_sql": 17, "cloud_storage_transfer_servic": 17, "text_to_speech": 17, "translate_speech": 17, "video_intellig": 17, "compute_ssh": 17, "datacatalog": 17, "datafus": 17, "datapipelin": 17, "dataproc_metastor": 17, "gdm": 17, "kubernetes_engin": 17, "mlengin": 17, "vertex_ai": 17, "dataset": 17, "custom_job": 17, "auto_ml": 17, "batch_prediction_job": 17, "endpoint_servic": 17, "hyperparameter_tuning_job": 17, "model_servic": 17, "pipeline_job": 17, "vertexai": 17, "presto_to_gc": [17, 21], "trino_to_gc": [17, 21], "sql_to_gc": [17, 21], "suit": [17, 21, 22], "gcs_to_gdriv": 17, "gdrive_to_gc": 17, "calendar_to_gc": 17, "sheet": [17, 21], "sheets_to_gc": 17, "gcs_to_sftp": [17, 19], "postgres_to_gc": [17, 21], "bigquery_to_sql": [17, 21], "bigquery_to_mysql": [17, 21], "bigquery_to_mssql": [17, 21], "bigquery_to_postgr": [17, 21], "gcs_to_bigqueri": 17, "gcs_to_gc": 17, "facebook_ads_to_gc": [17, 20], "sftp_to_gc": [17, 19], "bigquery_to_bigqueri": 17, "mysql_to_gc": [17, 21], "oracle_to_gc": [17, 21], "gcs_to_sheet": 17, "local_to_gc": 17, "bigquery_to_gc": 17, "gcs_to_loc": 17, "salesforce_to_gc": [17, 20], "ads_to_gc": 17, "mssql_to_gc": [17, 21], "gcs_to_presto": [17, 21], "gcs_to_samba": [17, 19], "gcs_to_trino": [17, 21], "analyt": 17, "display_video": 17, "search_ad": 17, "cloud_batch": 17, "cloud_compos": 17, "cloud_run": 17, "A": 18, "asf": 18, "foundat": 18, "webhdf": [18, 22], "dynamodb": 18, "s3": 18, "gc": 18, "appflow": 18, "athena": 18, "cloudform": 18, "cloudwatch": 18, "datasync": 18, "ec2": 18, "ec": 18, "elast": 18, "registri": 18, "ecr": 18, "ek": 18, "elasticach": 18, "eventbridg": 18, "glacier": 18, "kinesi": 18, "firehos": 18, "quicksight": 18, "rd": 18, "sagemak": 18, "secretsmanag": 18, "email": 18, "se": 18, "sn": 18, "queue": 18, "sq": 18, "ssm": 18, "permiss": 18, "batch": 18, "migrat": 18, "glue": 18, "databrew": 18, "lambda": 18, "token": 18, "st": 18, "cosmo": 18, "db": 18, "explor": 18, "factori": 18, "lake": 18, "gen2": 18, "fileshar": 18, "bu": 18, "synaps": 18, "market": [18, 22], "analytics360": 18, "video": 18, "360": 18, "search": 18, "calendar": 18, "compos": 18, "dataform": 18, "discoveri": 18, "drive": 18, "spreadsheet": 18, "shell": [18, 22], "repo": 18, "dingtalk": [18, 22], "incom": [18, 22], "webhook": [18, 22], "dataproc": 18, "swarm": 18, "bigqueri": 18, "imap_attach": 19, "jdbcoper": 19, "airbytetriggersyncoper": 20, "databricks_bas": 20, "databricks_sql": 20, "databricks_partit": 20, "databrickscreatejobsoper": 20, "databrickssubmitrunoper": 20, "databricksrunnowoper": 20, "databricks_repo": 20, "databricksreposcreateoper": 20, "databricksreposupdateoper": 20, "databricksreposdeleteoper": 20, "databrickssqloper": 20, "databrickscopyintooper": 20, "discord_webhook": 20, "opsgeniecreatealertoper": 20, "job": 20, "salesforce_apex_rest": 20, "bulk": 20, "salesforceapexrestoper": 20, "salesforcebulkoper": 20, "segment_track_ev": 20, "slack_webhook": 20, "snowflake_sql_api": 20, "snowflakeoper": 20, "tableauoper": 20, "telegramoper": 20, "yandexcloud_dataproc": 20, "proc": 20, "base_sql_to_slack": [20, 21], "sqltoslackapifileoper": [20, 21], "sql_to_slack": [20, 21], "sqltoslackwebhookoper": [20, 21], "sql_to_slack_webhook": [20, 21], "asana_task": 21, "asanacreatetaskoper": 21, "celery_queu": 21, "embed": 21, "cohereembeddingoper": 21, "file_transf": 21, "docker_swarm": 21, "jenkins_job_trigg": 21, "pod": 21, "spark_kubernet": 21, "resourc": 21, "kubernetespodoper": 21, "mssqloper": 21, "mysqloper": 21, "neo4joper": 21, "openaiembeddingoper": 21, "kernel": 21, "pgvectoringestoper": 21, "pineconeingestoper": 21, "postgresoper": 21, "redis_publish": 21, "redis_kei": 21, "redis_pub_sub": 21, "sqliteoper": 21, "trinooper": 21, "weaviateingestoper": 21, "sql_to_sheet": 21, "vertica_to_mysql": 21, "presto_to_mysql": 21, "trino_to_mysql": 21, "oracle_to_oracl": 21, "5": 22, "4": 22, "7": 22, "6": 22, "13": 22, "hadoop": 22, "app": 22, "gcp": 22, "workspac": 22, "formerli": 22}, "objects": {"": [[22, 0, 1, "std-provider-apache-airflow-providers-airbyte", "apache-airflow-providers-airbyte"], [22, 0, 1, "std-provider-apache-airflow-providers-alibaba", "apache-airflow-providers-alibaba"], [22, 0, 1, "std-provider-apache-airflow-providers-amazon", "apache-airflow-providers-amazon"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-beam", "apache-airflow-providers-apache-beam"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-cassandra", "apache-airflow-providers-apache-cassandra"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-drill", "apache-airflow-providers-apache-drill"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-druid", "apache-airflow-providers-apache-druid"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-flink", "apache-airflow-providers-apache-flink"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-hdfs", "apache-airflow-providers-apache-hdfs"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-hive", "apache-airflow-providers-apache-hive"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-impala", "apache-airflow-providers-apache-impala"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-kafka", "apache-airflow-providers-apache-kafka"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-kylin", "apache-airflow-providers-apache-kylin"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-livy", "apache-airflow-providers-apache-livy"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-pig", "apache-airflow-providers-apache-pig"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-pinot", "apache-airflow-providers-apache-pinot"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-spark", "apache-airflow-providers-apache-spark"], [22, 0, 1, "std-provider-apache-airflow-providers-apache-sqoop", "apache-airflow-providers-apache-sqoop"], [22, 0, 1, "std-provider-apache-airflow-providers-apprise", "apache-airflow-providers-apprise"], [22, 0, 1, "std-provider-apache-airflow-providers-arangodb", "apache-airflow-providers-arangodb"], [22, 0, 1, "std-provider-apache-airflow-providers-asana", "apache-airflow-providers-asana"], [22, 0, 1, "std-provider-apache-airflow-providers-atlassian-jira", "apache-airflow-providers-atlassian-jira"], [22, 0, 1, "std-provider-apache-airflow-providers-celery", "apache-airflow-providers-celery"], [22, 0, 1, "std-provider-apache-airflow-providers-cloudant", "apache-airflow-providers-cloudant"], [22, 0, 1, "std-provider-apache-airflow-providers-cncf-kubernetes", "apache-airflow-providers-cncf-kubernetes"], [22, 0, 1, "std-provider-apache-airflow-providers-cohere", "apache-airflow-providers-cohere"], [22, 0, 1, "std-provider-apache-airflow-providers-common-io", "apache-airflow-providers-common-io"], [22, 0, 1, "std-provider-apache-airflow-providers-common-sql", "apache-airflow-providers-common-sql"], [22, 0, 1, "std-provider-apache-airflow-providers-databricks", "apache-airflow-providers-databricks"], [22, 0, 1, "std-provider-apache-airflow-providers-datadog", "apache-airflow-providers-datadog"], [22, 0, 1, "std-provider-apache-airflow-providers-dbt-cloud", "apache-airflow-providers-dbt-cloud"], [22, 0, 1, "std-provider-apache-airflow-providers-dingding", "apache-airflow-providers-dingding"], [22, 0, 1, "std-provider-apache-airflow-providers-discord", "apache-airflow-providers-discord"], [22, 0, 1, "std-provider-apache-airflow-providers-docker", "apache-airflow-providers-docker"], [22, 0, 1, "std-provider-apache-airflow-providers-elasticsearch", "apache-airflow-providers-elasticsearch"], [22, 0, 1, "std-provider-apache-airflow-providers-exasol", "apache-airflow-providers-exasol"], [22, 0, 1, "std-provider-apache-airflow-providers-fab", "apache-airflow-providers-fab"], [22, 0, 1, "std-provider-apache-airflow-providers-facebook", "apache-airflow-providers-facebook"], [22, 0, 1, "std-provider-apache-airflow-providers-ftp", "apache-airflow-providers-ftp"], [22, 0, 1, "std-provider-apache-airflow-providers-github", "apache-airflow-providers-github"], [22, 0, 1, "std-provider-apache-airflow-providers-google", "apache-airflow-providers-google"], [22, 0, 1, "std-provider-apache-airflow-providers-grpc", "apache-airflow-providers-grpc"], [22, 0, 1, "std-provider-apache-airflow-providers-hashicorp", "apache-airflow-providers-hashicorp"], [22, 0, 1, "std-provider-apache-airflow-providers-http", "apache-airflow-providers-http"], [22, 0, 1, "std-provider-apache-airflow-providers-imap", "apache-airflow-providers-imap"], [22, 0, 1, "std-provider-apache-airflow-providers-influxdb", "apache-airflow-providers-influxdb"], [22, 0, 1, "std-provider-apache-airflow-providers-jdbc", "apache-airflow-providers-jdbc"], [22, 0, 1, "std-provider-apache-airflow-providers-jenkins", "apache-airflow-providers-jenkins"], [22, 0, 1, "std-provider-apache-airflow-providers-microsoft-azure", "apache-airflow-providers-microsoft-azure"], [22, 0, 1, "std-provider-apache-airflow-providers-microsoft-mssql", "apache-airflow-providers-microsoft-mssql"], [22, 0, 1, "std-provider-apache-airflow-providers-microsoft-psrp", "apache-airflow-providers-microsoft-psrp"], [22, 0, 1, "std-provider-apache-airflow-providers-microsoft-winrm", "apache-airflow-providers-microsoft-winrm"], [22, 0, 1, "std-provider-apache-airflow-providers-mongo", "apache-airflow-providers-mongo"], [22, 0, 1, "std-provider-apache-airflow-providers-mysql", "apache-airflow-providers-mysql"], [22, 0, 1, "std-provider-apache-airflow-providers-neo4j", "apache-airflow-providers-neo4j"], [22, 0, 1, "std-provider-apache-airflow-providers-odbc", "apache-airflow-providers-odbc"], [22, 0, 1, "std-provider-apache-airflow-providers-openai", "apache-airflow-providers-openai"], [22, 0, 1, "std-provider-apache-airflow-providers-openfaas", "apache-airflow-providers-openfaas"], [22, 0, 1, "std-provider-apache-airflow-providers-openlineage", "apache-airflow-providers-openlineage"], [22, 0, 1, "std-provider-apache-airflow-providers-opensearch", "apache-airflow-providers-opensearch"], [22, 0, 1, "std-provider-apache-airflow-providers-opsgenie", "apache-airflow-providers-opsgenie"], [22, 0, 1, "std-provider-apache-airflow-providers-oracle", "apache-airflow-providers-oracle"], [22, 0, 1, "std-provider-apache-airflow-providers-pagerduty", "apache-airflow-providers-pagerduty"], [22, 0, 1, "std-provider-apache-airflow-providers-papermill", "apache-airflow-providers-papermill"], [22, 0, 1, "std-provider-apache-airflow-providers-pgvector", "apache-airflow-providers-pgvector"], [22, 0, 1, "std-provider-apache-airflow-providers-pinecone", "apache-airflow-providers-pinecone"], [22, 0, 1, "std-provider-apache-airflow-providers-plexus", "apache-airflow-providers-plexus"], [22, 0, 1, "std-provider-apache-airflow-providers-postgres", "apache-airflow-providers-postgres"], [22, 0, 1, "std-provider-apache-airflow-providers-presto", "apache-airflow-providers-presto"], [22, 0, 1, "std-provider-apache-airflow-providers-redis", "apache-airflow-providers-redis"], [22, 0, 1, "std-provider-apache-airflow-providers-salesforce", "apache-airflow-providers-salesforce"], [22, 0, 1, "std-provider-apache-airflow-providers-samba", "apache-airflow-providers-samba"], [22, 0, 1, "std-provider-apache-airflow-providers-segment", "apache-airflow-providers-segment"], [22, 0, 1, "std-provider-apache-airflow-providers-sendgrid", "apache-airflow-providers-sendgrid"], [22, 0, 1, "std-provider-apache-airflow-providers-sftp", "apache-airflow-providers-sftp"], [22, 0, 1, "std-provider-apache-airflow-providers-singularity", "apache-airflow-providers-singularity"], [22, 0, 1, "std-provider-apache-airflow-providers-slack", "apache-airflow-providers-slack"], [22, 0, 1, "std-provider-apache-airflow-providers-smtp", "apache-airflow-providers-smtp"], [22, 0, 1, "std-provider-apache-airflow-providers-snowflake", "apache-airflow-providers-snowflake"], [22, 0, 1, "std-provider-apache-airflow-providers-sqlite", "apache-airflow-providers-sqlite"], [22, 0, 1, "std-provider-apache-airflow-providers-ssh", "apache-airflow-providers-ssh"], [22, 0, 1, "std-provider-apache-airflow-providers-tableau", "apache-airflow-providers-tableau"], [22, 0, 1, "std-provider-apache-airflow-providers-tabular", "apache-airflow-providers-tabular"], [22, 0, 1, "std-provider-apache-airflow-providers-telegram", "apache-airflow-providers-telegram"], [22, 0, 1, "std-provider-apache-airflow-providers-trino", "apache-airflow-providers-trino"], [22, 0, 1, "std-provider-apache-airflow-providers-vertica", "apache-airflow-providers-vertica"], [22, 0, 1, "std-provider-apache-airflow-providers-weaviate", "apache-airflow-providers-weaviate"], [22, 0, 1, "std-provider-apache-airflow-providers-yandex", "apache-airflow-providers-yandex"], [22, 0, 1, "std-provider-apache-airflow-providers-zendesk", "apache-airflow-providers-zendesk"]]}, "objtypes": {"0": "std:provider"}, "objnames": {"0": ["std", "provider", "provider"]}, "titleterms": {"auth": [0, 11], "backend": [0, 9, 11], "googl": [0, 2, 5, 7, 9, 14, 15, 16, 17, 19, 20, 21, 22], "configur": [1, 11], "connect": [2, 11, 19], "airbyt": [2, 20, 22], "alibaba": [2, 7, 22], "amazon": [2, 4, 5, 7, 8, 9, 14, 15, 16, 17, 19, 20, 21, 22], "apach": [2, 14, 15, 17, 19, 21, 22], "cassandra": [2, 14, 17, 22], "drill": [2, 14, 22], "druid": [2, 14, 22], "hive": [2, 14, 15, 19, 21, 22], "impala": [2, 14, 22], "kafka": [2, 14, 22], "livi": [2, 14, 22], "pig": [2, 14, 22], "pinot": [2, 14, 22], "spark": [2, 14, 22], "sqoop": [2, 14, 22], "appris": [2, 8, 21, 22], "arangodb": [2, 21, 22], "asana": [2, 21, 22], "atlassian": [2, 8, 21, 22], "jira": [2, 8, 21, 22], "ibm": [2, 20], "cloudant": [2, 20, 22], "kubernet": [2, 4, 15, 17, 21, 22], "coher": [2, 21, 22], "databrick": [2, 5, 20, 22], "datadog": [2, 20, 22], "dbt": [2, 5, 22], "cloud": [2, 5, 14, 15, 16, 17, 19, 20, 21, 22], "dingd": [2, 22], "discord": [2, 8, 20, 22], "docker": [2, 21, 22], "elasticsearch": [2, 7, 21, 22], "exasol": [2, 15, 21, 22], "facebook": [2, 17, 20, 22], "file": [2, 15, 16, 17, 19], "transfer": [2, 8, 14, 15, 16, 17, 19, 20, 21], "protocol": [2, 8, 15, 16, 17, 19], "ftp": [2, 15, 19, 22], "github": [2, 21, 22], "grpc": [2, 19, 22], "hashicorp": [2, 9, 21, 22], "hypertext": [2, 15, 19], "http": [2, 15, 19, 22], "internet": [2, 15, 19], "messag": [2, 15, 19], "access": [2, 15, 19], "imap": [2, 15, 19, 22], "influxdb": [2, 21, 22], "java": [2, 19], "databas": [2, 15, 19], "jdbc": [2, 19, 22], "jenkin": [2, 21, 22], "microsoft": [2, 5, 7, 9, 14, 15, 16, 17, 19, 20, 21, 22], "azur": [2, 5, 7, 9, 15, 16, 17, 19, 20, 21, 22], "sql": [2, 14, 15, 17, 20, 21, 22], "server": [2, 14, 17, 21], "mssql": [2, 14, 17, 21, 22], "mongodb": [2, 15, 21], "mysql": [2, 14, 15, 17, 21, 22], "neo4j": [2, 21, 22], "odbc": [2, 19, 22], "openai": [2, 21, 22], "opensearch": [2, 21, 22], "opsgeni": [2, 8, 20, 22], "oracl": [2, 16, 17, 21, 22], "pagerduti": [2, 8, 20, 22], "papermil": [2, 21, 22], "pinecon": [2, 21, 22], "postgresql": [2, 17, 21], "presto": [2, 17, 21, 22], "redi": [2, 7, 21, 22], "salesforc": [2, 15, 17, 20, 22], "samba": [2, 14, 17, 19, 22], "segment": [2, 20, 22], "sftp": [2, 15, 16, 17, 19, 22], "slack": [2, 8, 20, 21, 22], "simpl": [2, 8, 14, 15, 16, 17, 19, 20, 21], "mail": [2, 8, 19], "smtp": [2, 8, 19, 22], "snowflak": [2, 15, 16, 17, 20, 22], "sqlite": [2, 21, 22], "ssh": [2, 15, 16, 17, 19, 22], "tableau": [2, 20, 22], "tabular": [2, 21, 22], "trino": [2, 17, 21, 22], "vertica": [2, 14, 21, 22], "weaviat": [2, 21, 22], "yandex": [2, 20, 22], "zendesk": [2, 21, 22], "support": 3, "deferr": 3, "oper": [3, 17, 18], "executor": 4, "celeri": [4, 21, 22], "extra": [5, 11], "link": [5, 11], "core": [6, 11], "extens": 6, "write": 7, "log": [7, 11, 15], "notif": [8, 11, 15], "secret": [9, 11, 17], "how": 10, "creat": 10, "your": 10, "own": 10, "provid": [10, 11, 13, 22], "custom": [10, 11], "packag": [10, 11, 13, 22], "special": 10, "consider": 10, "option": 10, "featur": 10, "us": 10, "dynam": 10, "task": [10, 17], "map": 10, "faq": 10, "extend": 11, "airflow": [11, 22], "function": [11, 15, 17], "instal": [11, 12, 13], "upgrad": 11, "type": 11, "commun": 11, "maintain": 11, "from": [12, 13], "pypi": 12, "tool": 12, "sourc": 13, "releas": 13, "integr": [13, 19, 21], "asf": 14, "softwar": [14, 21], "foundat": 14, "beam": [14, 22], "flink": [14, 22], "kylin": [14, 22], "webhdf": 14, "dynamodb": [14, 15], "storag": [14, 15, 16, 17, 19, 20, 21], "servic": [14, 15, 16, 17, 19, 20, 21], "s3": [14, 15, 16, 17, 19, 20, 21], "gc": [14, 15, 16, 17, 19, 20, 21], "aw": 15, "web": 15, "appflow": 15, "athena": 15, "chime": 15, "cloudform": 15, "cloudwatch": 15, "datasync": 15, "ec2": 15, "ec": 15, "elast": 15, "contain": [15, 16], "registri": 15, "ecr": 15, "ek": 15, "elasticach": 15, "emr": 15, "eventbridg": 15, "glacier": [15, 17], "kinesi": 15, "data": [15, 16, 17, 21], "firehos": 15, "quicksight": 15, "rd": 15, "redshift": 15, "sagemak": 15, "secretsmanag": 15, "email": 15, "se": 15, "sn": 15, "queue": 15, "sq": 15, "system": 15, "manag": [15, 17, 19], "ssm": 15, "verifi": 15, "permiss": 15, "batch": [15, 16, 17], "migrat": 15, "glue": 15, "databrew": 15, "lambda": 15, "secur": [15, 19], "token": 15, "st": 15, "step": 15, "local": [15, 16, 17], "common": [15, 17, 20, 21, 22], "blob": [15, 16, 17, 19, 20], "instanc": 16, "cosmo": 16, "db": 16, "explor": 16, "factori": 16, "lake": [16, 17, 21], "client": 16, "gen2": 16, "fileshar": [16, 17], "bu": 16, "synaps": 16, "automl": 17, "bigqueri": [17, 21], "bigtabl": 17, "campaign": 17, "build": 17, "loss": 17, "prevent": 17, "dlp": 17, "firestor": 17, "kei": 17, "km": 17, "life": 17, "scienc": 17, "memorystor": 17, "natur": 17, "languag": 17, "o": 17, "login": 17, "pub": 17, "sub": 17, "spanner": 17, "speech": 17, "text": 17, "stackdriv": 17, "translat": 17, "video": 17, "intellig": 17, "vision": 17, "workflow": 17, "comput": 17, "engin": 17, "catalog": 17, "fusion": 17, "pipelin": 17, "dataflow": 17, "dataplex": 17, "dataprep": 17, "dataproc": [17, 20], "metastor": 17, "datastor": 17, "deploy": 17, "looker": 17, "machin": 17, "learn": 17, "vertex": 17, "ai": 17, "drive": 17, "calendar": 17, "spreadsheet": [17, 21], "ad": [17, 20], "market": 17, "platform": 17, "analytics360": 17, "displai": 17, "360": 17, "search": 17, "other": 17, "hook": [17, 18], "compos": 17, "dataform": 17, "run": 17, "discoveri": 17, "api": [17, 20, 21], "leveldb": 17, "refer": [18, 22], "shell": 19, "window": 19, "powershel": 19, "remot": 19, "winrm": [19, 22], "repo": 20, "dingtalk": 20, "plexu": [20, 22], "incom": [20, 21], "webhook": [20, 21], "telegram": [20, 22], "io": [21, 22], "swarm": 21, "vault": 21, "openfaa": [21, 22], "pgvector": [21, 22], "singular": [21, 22], "hdf": 22, "cncf": 22, "fab": 22, "psrp": 22, "mongo": 22, "openlineag": 22, "postgr": 22, "sendgrid": 22}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"Auth backends": [[0, "auth-backends"], [11, "auth-backends"]], "Google": [[0, "google"], [2, "google"], [5, "google"], [7, "google"], [9, "google"], [17, "google"], [17, "id3"]], "Configurations": [[1, "configurations"]], "Connections": [[2, "connections"]], "Airbyte": [[2, "airbyte"], [20, "airbyte"]], "Alibaba": [[2, "alibaba"], [7, "alibaba"]], "Amazon": [[2, "amazon"], [4, "amazon"], [5, "amazon"], [7, "amazon"], [8, "amazon"], [9, "amazon"]], "Apache Cassandra": [[2, "apache-cassandra"], [14, "apache-cassandra"]], "Apache Drill": [[2, "apache-drill"], [14, "apache-drill"]], "Apache Druid": [[2, "apache-druid"], [14, "apache-druid"]], "Apache Hive": [[2, "apache-hive"], [14, "apache-hive"]], "Apache Impala": [[2, "apache-impala"], [14, "apache-impala"]], "Apache Kafka": [[2, "apache-kafka"], [14, "apache-kafka"]], "Apache Livy": [[2, "apache-livy"], [14, "apache-livy"]], "Apache Pig": [[2, "apache-pig"], [14, "apache-pig"]], "Apache Pinot": [[2, "apache-pinot"], [14, "apache-pinot"]], "Apache Spark": [[2, "apache-spark"], [14, "apache-spark"]], "Apache Sqoop": [[2, "apache-sqoop"], [14, "apache-sqoop"]], "Apprise": [[2, "apprise"], [8, "apprise"], [21, "apprise"]], "ArangoDB": [[2, "arangodb"], [21, "arangodb"]], "Asana": [[2, "asana"], [21, "asana"]], "Atlassian Jira": [[2, "atlassian-jira"], [8, "atlassian-jira"], [21, "atlassian-jira"]], "IBM Cloudant": [[2, "ibm-cloudant"], [20, "ibm-cloudant"]], "Kubernetes": [[2, "kubernetes"], [4, "kubernetes"], [21, "kubernetes"]], "Cohere": [[2, "cohere"], [21, "cohere"]], "Databricks": [[2, "databricks"], [5, "databricks"], [20, "databricks"]], "Datadog": [[2, "datadog"], [20, "datadog"]], "dbt Cloud": [[2, "dbt-cloud"], [5, "dbt-cloud"]], "Dingding": [[2, "dingding"]], "Discord": [[2, "discord"], [8, "discord"], [20, "discord"]], "Docker": [[2, "docker"], [21, "docker"]], "Elasticsearch": [[2, "elasticsearch"], [7, "elasticsearch"], [21, "elasticsearch"]], "Exasol": [[2, "exasol"], [21, "exasol"]], "Facebook": [[2, "facebook"]], "File Transfer Protocol (FTP)": [[2, "file-transfer-protocol-ftp"], [19, "file-transfer-protocol-ftp"]], "Github": [[2, "github"], [21, "github"]], "gRPC": [[2, "grpc"], [19, "grpc"]], "Hashicorp": [[2, "hashicorp"], [9, "hashicorp"]], "Hypertext Transfer Protocol (HTTP)": [[2, "hypertext-transfer-protocol-http"], [19, "hypertext-transfer-protocol-http"]], "Internet Message Access Protocol (IMAP)": [[2, "internet-message-access-protocol-imap"], [19, "internet-message-access-protocol-imap"]], "Influxdb": [[2, "influxdb"], [21, "influxdb"]], "Java Database Connectivity (JDBC)": [[2, "java-database-connectivity-jdbc"], [19, "java-database-connectivity-jdbc"]], "Jenkins": [[2, "jenkins"], [21, "jenkins"]], "Microsoft Azure": [[2, "microsoft-azure"], [5, "microsoft-azure"], [7, "microsoft-azure"], [9, "microsoft-azure"], [16, "microsoft-azure"]], "Microsoft SQL Server (MSSQL)": [[2, "microsoft-sql-server-mssql"], [21, "microsoft-sql-server-mssql"]], "MongoDB": [[2, "mongodb"], [21, "mongodb"]], "MySQL": [[2, "mysql"], [21, "mysql"]], "Neo4j": [[2, "neo4j"], [21, "neo4j"]], "ODBC": [[2, "odbc"], [19, "odbc"]], "OpenAI": [[2, "openai"], [21, "openai"]], "OpenSearch": [[2, "opensearch"], [21, "opensearch"]], "Opsgenie": [[2, "opsgenie"], [8, "opsgenie"], [20, "opsgenie"]], "Oracle": [[2, "oracle"], [21, "oracle"]], "Pagerduty": [[2, "pagerduty"], [8, "pagerduty"], [20, "pagerduty"]], "Papermill": [[2, "papermill"], [21, "papermill"]], "Pinecone": [[2, "pinecone"], [21, "pinecone"]], "PostgreSQL": [[2, "postgresql"], [21, "postgresql"]], "Presto": [[2, "presto"], [21, "presto"]], "Redis": [[2, "redis"], [7, "redis"], [21, "redis"]], "Salesforce": [[2, "salesforce"], [20, "salesforce"]], "Samba": [[2, "samba"], [19, "samba"]], "Segment": [[2, "segment"], [20, "segment"]], "SFTP": [[2, "sftp"]], "Slack": [[2, "slack"], [8, "slack"]], "Simple Mail Transfer Protocol (SMTP)": [[2, "simple-mail-transfer-protocol-smtp"], [8, "simple-mail-transfer-protocol-smtp"], [19, "simple-mail-transfer-protocol-smtp"]], "Snowflake": [[2, "snowflake"], [20, "snowflake"]], "SQLite": [[2, "sqlite"], [21, "sqlite"]], "SSH": [[2, "ssh"]], "Tableau": [[2, "tableau"], [20, "tableau"]], "Tabular": [[2, "tabular"], [21, "tabular"]], "Trino": [[2, "trino"], [21, "trino"]], "Vertica": [[2, "vertica"], [21, "vertica"]], "Weaviate": [[2, "weaviate"], [21, "weaviate"]], "Yandex": [[2, "yandex"]], "Zendesk": [[2, "zendesk"], [21, "zendesk"]], "Supported Deferrable Operators": [[3, "supported-deferrable-operators"]], "Executors": [[4, "executors"]], "Celery": [[4, "celery"], [21, "celery"]], "Extra Links": [[5, "extra-links"]], "Core Extensions": [[6, "core-extensions"]], "Writing logs": [[7, "writing-logs"]], "Notifications": [[8, "notifications"], [11, "notifications"]], "Secret backends": [[9, "secret-backends"], [11, "secret-backends"]], "How to create your own provider": [[10, "how-to-create-your-own-provider"]], "Custom provider packages": [[10, "custom-provider-packages"]], "How to create a provider": [[10, "how-to-create-a-provider"]], "Special considerations": [[10, "special-considerations"]], "Optional provider features": [[10, "optional-provider-features"]], "Using Providers with dynamic task mapping": [[10, "using-providers-with-dynamic-task-mapping"]], "FAQ for custom providers": [[10, "faq-for-custom-providers"]], "Provider packages": [[11, "provider-packages"]], "Extending Airflow core functionality": [[11, "extending-airflow-core-functionality"]], "Configuration": [[11, "configuration"]], "Custom connections": [[11, "custom-connections"]], "Extra links": [[11, "extra-links"]], "Logging": [[11, "logging"]], "Installing and upgrading providers": [[11, "installing-and-upgrading-providers"]], "Types of providers": [[11, "types-of-providers"]], "Community maintained providers": [[11, "community-maintained-providers"]], "Installation from PyPI": [[12, "installation-from-pypi"]], "Installation tools": [[12, "installation-tools"]], "Installing Providers from Sources": [[13, "installing-providers-from-sources"]], "Released packages": [[13, "released-packages"]], "Release integrity": [[13, "release-integrity"]], "ASF: Apache Software Foundation": [[14, "asf-apache-software-foundation"]], "Software": [[14, "software"], [21, "software"]], "Apache Beam": [[14, "apache-beam"]], "Apache Flink": [[14, "apache-flink"]], "Apache Kylin": [[14, "apache-kylin"]], "WebHDFS": [[14, "webhdfs"]], "Transfers": [[14, "transfers"], [15, "transfers"], [16, "transfers"], [17, "transfers"], [19, "transfers"], [20, "transfers"], [21, "transfers"]], "Apache Hive to Amazon DynamoDB": [[14, "apache-hive-to-amazon-dynamodb"], [15, "apache-hive-to-amazon-dynamodb"]], "Apache Hive to Apache Druid": [[14, "apache-hive-to-apache-druid"]], "Vertica to Apache Hive": [[14, "vertica-to-apache-hive"], [21, "vertica-to-apache-hive"]], "Apache Hive to MySQL": [[14, "apache-hive-to-mysql"], [21, "apache-hive-to-mysql"]], "Apache Hive to Samba": [[14, "apache-hive-to-samba"], [19, "apache-hive-to-samba"]], "Amazon Simple Storage Service (S3) to Apache Hive": [[14, "amazon-simple-storage-service-s3-to-apache-hive"], [15, "amazon-simple-storage-service-s3-to-apache-hive"]], "MySQL to Apache Hive": [[14, "mysql-to-apache-hive"], [21, "mysql-to-apache-hive"]], "Microsoft SQL Server (MSSQL) to Apache Hive": [[14, "microsoft-sql-server-mssql-to-apache-hive"], [21, "microsoft-sql-server-mssql-to-apache-hive"]], "Apache Cassandra to Google Cloud Storage (GCS)": [[14, "apache-cassandra-to-google-cloud-storage-gcs"], [17, "apache-cassandra-to-google-cloud-storage-gcs"]], "AWS: Amazon Web Services": [[15, "aws-amazon-web-services"]], "Services": [[15, "services"], [16, "services"], [17, "services"], [20, "services"], [20, "id1"]], "Amazon Appflow": [[15, "amazon-appflow"]], "Amazon Athena": [[15, "amazon-athena"]], "Amazon Chime": [[15, "amazon-chime"]], "Amazon CloudFormation": [[15, "amazon-cloudformation"]], "Amazon CloudWatch Logs": [[15, "amazon-cloudwatch-logs"]], "Amazon DataSync": [[15, "amazon-datasync"]], "Amazon DynamoDB": [[15, "amazon-dynamodb"]], "Amazon EC2": [[15, "amazon-ec2"]], "Amazon ECS": [[15, "amazon-ecs"]], "Amazon Elastic Container Registry (ECR)": [[15, "amazon-elastic-container-registry-ecr"]], "Amazon Elastic Kubernetes Service (EKS)": [[15, "amazon-elastic-kubernetes-service-eks"]], "Amazon ElastiCache": [[15, "amazon-elasticache"]], "Amazon EMR": [[15, "amazon-emr"]], "Amazon EMR on EKS": [[15, "amazon-emr-on-eks"]], "Amazon EventBridge": [[15, "amazon-eventbridge"]], "Amazon Glacier": [[15, "amazon-glacier"]], "Amazon Kinesis Data Firehose": [[15, "amazon-kinesis-data-firehose"]], "Amazon QuickSight": [[15, "amazon-quicksight"]], "Amazon RDS": [[15, "amazon-rds"]], "Amazon Redshift": [[15, "amazon-redshift"]], "Amazon SageMaker": [[15, "amazon-sagemaker"]], "Amazon SecretsManager": [[15, "amazon-secretsmanager"]], "Amazon Simple Email Service (SES)": [[15, "amazon-simple-email-service-ses"]], "Amazon Simple Notification Service (SNS)": [[15, "amazon-simple-notification-service-sns"]], "Amazon Simple Queue Service (SQS)": [[15, "amazon-simple-queue-service-sqs"]], "Amazon Simple Storage Service (S3)": [[15, "amazon-simple-storage-service-s3"]], "Amazon Systems Manager (SSM)": [[15, "amazon-systems-manager-ssm"]], "Amazon Verified Permissions": [[15, "amazon-verified-permissions"]], "Amazon Web Services": [[15, "amazon-web-services"]], "AWS Batch": [[15, "aws-batch"]], "AWS Database Migration Service": [[15, "aws-database-migration-service"]], "AWS Glue": [[15, "aws-glue"]], "AWS Glue DataBrew": [[15, "aws-glue-databrew"]], "AWS Lambda": [[15, "aws-lambda"]], "AWS Security Token Service (STS)": [[15, "aws-security-token-service-sts"]], "AWS Step Functions": [[15, "aws-step-functions"]], "Amazon DynamoDB to Amazon Simple Storage Service (S3)": [[15, "amazon-dynamodb-to-amazon-simple-storage-service-s3"]], "Google Cloud Storage (GCS) to Amazon Simple Storage Service (S3)": [[15, "google-cloud-storage-gcs-to-amazon-simple-storage-service-s3"], [17, "google-cloud-storage-gcs-to-amazon-simple-storage-service-s3"]], "Amazon Glacier to Google Cloud Storage (GCS)": [[15, "amazon-glacier-to-google-cloud-storage-gcs"], [17, "amazon-glacier-to-google-cloud-storage-gcs"]], "Google to Amazon Simple Storage Service (S3)": [[15, "google-to-amazon-simple-storage-service-s3"]], "Hypertext Transfer Protocol (HTTP) to Amazon Simple Storage Service (S3)": [[15, "hypertext-transfer-protocol-http-to-amazon-simple-storage-service-s3"], [19, "hypertext-transfer-protocol-http-to-amazon-simple-storage-service-s3"]], "Internet Message Access Protocol (IMAP) to Amazon Simple Storage Service (S3)": [[15, "internet-message-access-protocol-imap-to-amazon-simple-storage-service-s3"], [19, "internet-message-access-protocol-imap-to-amazon-simple-storage-service-s3"]], "MongoDB to Amazon Simple Storage Service (S3)": [[15, "mongodb-to-amazon-simple-storage-service-s3"], [21, "mongodb-to-amazon-simple-storage-service-s3"]], "Amazon Redshift to Amazon Simple Storage Service (S3)": [[15, "amazon-redshift-to-amazon-simple-storage-service-s3"]], "Amazon Simple Storage Service (S3) to Amazon Redshift": [[15, "amazon-simple-storage-service-s3-to-amazon-redshift"]], "Amazon Simple Storage Service (S3) to SSH File Transfer Protocol (SFTP)": [[15, "amazon-simple-storage-service-s3-to-ssh-file-transfer-protocol-sftp"], [19, "amazon-simple-storage-service-s3-to-ssh-file-transfer-protocol-sftp"]], "SSH File Transfer Protocol (SFTP) to Amazon Simple Storage Service (S3)": [[15, "ssh-file-transfer-protocol-sftp-to-amazon-simple-storage-service-s3"], [19, "ssh-file-transfer-protocol-sftp-to-amazon-simple-storage-service-s3"]], "Amazon Simple Storage Service (S3) to File Transfer Protocol (FTP)": [[15, "amazon-simple-storage-service-s3-to-file-transfer-protocol-ftp"], [19, "amazon-simple-storage-service-s3-to-file-transfer-protocol-ftp"]], "Exasol to Amazon Simple Storage Service (S3)": [[15, "exasol-to-amazon-simple-storage-service-s3"], [21, "exasol-to-amazon-simple-storage-service-s3"]], "File Transfer Protocol (FTP) to Amazon Simple Storage Service (S3)": [[15, "file-transfer-protocol-ftp-to-amazon-simple-storage-service-s3"], [19, "file-transfer-protocol-ftp-to-amazon-simple-storage-service-s3"]], "Salesforce to Amazon Simple Storage Service (S3)": [[15, "salesforce-to-amazon-simple-storage-service-s3"], [20, "salesforce-to-amazon-simple-storage-service-s3"]], "Local to Amazon Simple Storage Service (S3)": [[15, "local-to-amazon-simple-storage-service-s3"]], "Common SQL to Amazon Simple Storage Service (S3)": [[15, "common-sql-to-amazon-simple-storage-service-s3"], [21, "common-sql-to-amazon-simple-storage-service-s3"]], "Amazon Simple Storage Service (S3) to Common SQL": [[15, "amazon-simple-storage-service-s3-to-common-sql"], [21, "amazon-simple-storage-service-s3-to-common-sql"]], "Amazon Web Services to Amazon Web Services": [[15, "amazon-web-services-to-amazon-web-services"]], "Microsoft Azure Blob Storage to Amazon Simple Storage Service (S3)": [[15, "microsoft-azure-blob-storage-to-amazon-simple-storage-service-s3"], [16, "microsoft-azure-blob-storage-to-amazon-simple-storage-service-s3"]], "Amazon Simple Storage Service (S3) to Google Cloud Storage (GCS)": [[15, "amazon-simple-storage-service-s3-to-google-cloud-storage-gcs"], [17, "amazon-simple-storage-service-s3-to-google-cloud-storage-gcs"]], "Amazon Simple Storage Service (S3) to MySQL": [[15, "amazon-simple-storage-service-s3-to-mysql"], [21, "amazon-simple-storage-service-s3-to-mysql"]], "Amazon Simple Storage Service (S3) to Snowflake": [[15, "amazon-simple-storage-service-s3-to-snowflake"], [20, "amazon-simple-storage-service-s3-to-snowflake"]], "Azure: Microsoft Azure": [[16, "azure-microsoft-azure"]], "Microsoft Azure Batch": [[16, "microsoft-azure-batch"]], "Microsoft Azure Blob Storage": [[16, "microsoft-azure-blob-storage"]], "Microsoft Azure Container Instances": [[16, "microsoft-azure-container-instances"]], "Microsoft Azure Cosmos DB": [[16, "microsoft-azure-cosmos-db"]], "Microsoft Azure Data Explorer": [[16, "microsoft-azure-data-explorer"]], "Microsoft Azure Data Factory": [[16, "microsoft-azure-data-factory"]], "Microsoft Azure Data Lake Storage": [[16, "microsoft-azure-data-lake-storage"]], "Microsoft Azure Data Lake Storage Client Gen2": [[16, "microsoft-azure-data-lake-storage-client-gen2"]], "Microsoft Azure FileShare": [[16, "microsoft-azure-fileshare"]], "Microsoft Azure Service Bus": [[16, "microsoft-azure-service-bus"]], "Microsoft Azure Synapse": [[16, "microsoft-azure-synapse"]], "Microsoft Azure FileShare to Google Cloud Storage (GCS)": [[16, "microsoft-azure-fileshare-to-google-cloud-storage-gcs"], [17, "microsoft-azure-fileshare-to-google-cloud-storage-gcs"]], "Microsoft Azure Data Lake Storage to Google Cloud Storage (GCS)": [[16, "microsoft-azure-data-lake-storage-to-google-cloud-storage-gcs"], [17, "microsoft-azure-data-lake-storage-to-google-cloud-storage-gcs"]], "Microsoft Azure Blob Storage to Google Cloud Storage (GCS)": [[16, "microsoft-azure-blob-storage-to-google-cloud-storage-gcs"], [16, "id1"], [17, "microsoft-azure-blob-storage-to-google-cloud-storage-gcs"], [17, "id2"]], "Local to Microsoft Azure Data Lake Storage": [[16, "local-to-microsoft-azure-data-lake-storage"]], "Oracle to Microsoft Azure Data Lake Storage": [[16, "oracle-to-microsoft-azure-data-lake-storage"], [21, "oracle-to-microsoft-azure-data-lake-storage"]], "Local to Microsoft Azure Blob Storage": [[16, "local-to-microsoft-azure-blob-storage"]], "SSH File Transfer Protocol (SFTP) to Microsoft Azure Blob Storage": [[16, "ssh-file-transfer-protocol-sftp-to-microsoft-azure-blob-storage"], [19, "ssh-file-transfer-protocol-sftp-to-microsoft-azure-blob-storage"]], "Microsoft Azure Blob Storage to Snowflake": [[16, "microsoft-azure-blob-storage-to-snowflake"], [20, "microsoft-azure-blob-storage-to-snowflake"]], "Google Cloud": [[17, "google-cloud"]], "Google AutoML": [[17, "google-automl"]], "Google BigQuery": [[17, "google-bigquery"]], "Google BigQuery Data Transfer Service": [[17, "google-bigquery-data-transfer-service"]], "Google Bigtable": [[17, "google-bigtable"]], "Google Campaign Manager": [[17, "google-campaign-manager"]], "Google Cloud Build": [[17, "google-cloud-build"]], "Google Cloud Common": [[17, "google-cloud-common"]], "Google Cloud Data Loss Prevention (DLP)": [[17, "google-cloud-data-loss-prevention-dlp"]], "Google Cloud Firestore": [[17, "google-cloud-firestore"]], "Google Cloud Functions": [[17, "google-cloud-functions"]], "Google Cloud Key Management Service (KMS)": [[17, "google-cloud-key-management-service-kms"]], "Google Cloud Life Sciences": [[17, "google-cloud-life-sciences"]], "Google Cloud Memorystore": [[17, "google-cloud-memorystore"]], "Google Cloud Natural Language": [[17, "google-cloud-natural-language"]], "Google Cloud OS Login": [[17, "google-cloud-os-login"]], "Google Cloud Pub/Sub": [[17, "google-cloud-pub-sub"]], "Google Cloud Secret Manager": [[17, "google-cloud-secret-manager"]], "Google Cloud Spanner": [[17, "google-cloud-spanner"]], "Google Cloud Speech-to-Text": [[17, "google-cloud-speech-to-text"]], "Google Cloud SQL": [[17, "google-cloud-sql"]], "Google Cloud Stackdriver": [[17, "google-cloud-stackdriver"]], "Google Cloud Storage (GCS)": [[17, "google-cloud-storage-gcs"]], "Google Cloud Storage Transfer Service": [[17, "google-cloud-storage-transfer-service"]], "Google Cloud Tasks": [[17, "google-cloud-tasks"]], "Google Cloud Text-to-Speech": [[17, "google-cloud-text-to-speech"]], "Google Cloud Translation": [[17, "google-cloud-translation"]], "Google Cloud Video Intelligence": [[17, "google-cloud-video-intelligence"]], "Google Cloud Vision": [[17, "google-cloud-vision"]], "Google Cloud Workflows": [[17, "google-cloud-workflows"]], "Google Compute Engine": [[17, "google-compute-engine"]], "Google Data Catalog": [[17, "google-data-catalog"]], "Google Data Fusion": [[17, "google-data-fusion"]], "Google Data Pipelines": [[17, "google-data-pipelines"]], "Google Dataflow": [[17, "google-dataflow"]], "Google Dataplex": [[17, "google-dataplex"]], "Google Dataprep": [[17, "google-dataprep"]], "Google Dataproc": [[17, "google-dataproc"]], "Google Dataproc Metastore": [[17, "google-dataproc-metastore"]], "Google Datastore": [[17, "google-datastore"]], "Google Deployment Manager": [[17, "google-deployment-manager"]], "Google Kubernetes Engine": [[17, "google-kubernetes-engine"]], "Google Looker": [[17, "google-looker"]], "Google Machine Learning Engine": [[17, "google-machine-learning-engine"]], "Google Vertex AI": [[17, "google-vertex-ai"]], "Presto to Google Cloud Storage (GCS)": [[17, "presto-to-google-cloud-storage-gcs"], [21, "presto-to-google-cloud-storage-gcs"]], "Trino to Google Cloud Storage (GCS)": [[17, "trino-to-google-cloud-storage-gcs"], [21, "trino-to-google-cloud-storage-gcs"]], "Common SQL to Google Cloud Storage (GCS)": [[17, "common-sql-to-google-cloud-storage-gcs"], [21, "common-sql-to-google-cloud-storage-gcs"]], "Google Cloud Storage (GCS) to Google Drive": [[17, "google-cloud-storage-gcs-to-google-drive"]], "Google Drive to Google Cloud Storage (GCS)": [[17, "google-drive-to-google-cloud-storage-gcs"]], "Google Calendar to Google Cloud Storage (GCS)": [[17, "google-calendar-to-google-cloud-storage-gcs"]], "Google Spreadsheet to Google Cloud Storage (GCS)": [[17, "google-spreadsheet-to-google-cloud-storage-gcs"]], "Google Cloud Storage (GCS) to SSH File Transfer Protocol (SFTP)": [[17, "google-cloud-storage-gcs-to-ssh-file-transfer-protocol-sftp"], [19, "google-cloud-storage-gcs-to-ssh-file-transfer-protocol-sftp"]], "PostgreSQL to Google Cloud Storage (GCS)": [[17, "postgresql-to-google-cloud-storage-gcs"], [21, "postgresql-to-google-cloud-storage-gcs"]], "Google BigQuery to Common SQL": [[17, "google-bigquery-to-common-sql"], [21, "google-bigquery-to-common-sql"]], "Google BigQuery to MySQL": [[17, "google-bigquery-to-mysql"], [21, "google-bigquery-to-mysql"]], "Google BigQuery to Microsoft SQL Server (MSSQL)": [[17, "google-bigquery-to-microsoft-sql-server-mssql"], [21, "google-bigquery-to-microsoft-sql-server-mssql"]], "Google BigQuery to PostgreSQL": [[17, "google-bigquery-to-postgresql"], [21, "google-bigquery-to-postgresql"]], "Google Cloud Storage (GCS) to Google BigQuery": [[17, "google-cloud-storage-gcs-to-google-bigquery"]], "Google Cloud Storage (GCS) to Google Cloud Storage (GCS)": [[17, "google-cloud-storage-gcs-to-google-cloud-storage-gcs"]], "Facebook Ads to Google Cloud Storage (GCS)": [[17, "facebook-ads-to-google-cloud-storage-gcs"], [20, "facebook-ads-to-google-cloud-storage-gcs"]], "SSH File Transfer Protocol (SFTP) to Google Cloud Storage (GCS)": [[17, "ssh-file-transfer-protocol-sftp-to-google-cloud-storage-gcs"], [19, "ssh-file-transfer-protocol-sftp-to-google-cloud-storage-gcs"]], "Google BigQuery to Google BigQuery": [[17, "google-bigquery-to-google-bigquery"]], "MySQL to Google Cloud Storage (GCS)": [[17, "mysql-to-google-cloud-storage-gcs"], [21, "mysql-to-google-cloud-storage-gcs"]], "Oracle to Google Cloud Storage (GCS)": [[17, "oracle-to-google-cloud-storage-gcs"], [21, "oracle-to-google-cloud-storage-gcs"]], "Google Cloud Storage (GCS) to Google Spreadsheet": [[17, "google-cloud-storage-gcs-to-google-spreadsheet"]], "Local to Google Cloud Storage (GCS)": [[17, "local-to-google-cloud-storage-gcs"]], "Google BigQuery to Google Cloud Storage (GCS)": [[17, "google-bigquery-to-google-cloud-storage-gcs"]], "Google Cloud Storage (GCS) to Local": [[17, "google-cloud-storage-gcs-to-local"]], "Salesforce to Google Cloud Storage (GCS)": [[17, "salesforce-to-google-cloud-storage-gcs"], [20, "salesforce-to-google-cloud-storage-gcs"]], "Google Ads to Google Cloud Storage (GCS)": [[17, "google-ads-to-google-cloud-storage-gcs"]], "Microsoft SQL Server (MSSQL) to Google Cloud Storage (GCS)": [[17, "microsoft-sql-server-mssql-to-google-cloud-storage-gcs"], [21, "microsoft-sql-server-mssql-to-google-cloud-storage-gcs"]], "Google Cloud Storage (GCS) to Presto": [[17, "google-cloud-storage-gcs-to-presto"], [21, "google-cloud-storage-gcs-to-presto"]], "Google Cloud Storage (GCS) to Samba": [[17, "google-cloud-storage-gcs-to-samba"], [19, "google-cloud-storage-gcs-to-samba"]], "Google Cloud Storage (GCS) to Snowflake": [[17, "google-cloud-storage-gcs-to-snowflake"], [20, "google-cloud-storage-gcs-to-snowflake"]], "Google Cloud Storage (GCS) to Trino": [[17, "google-cloud-storage-gcs-to-trino"], [21, "google-cloud-storage-gcs-to-trino"]], "Google Marketing Platform": [[17, "google-marketing-platform"]], "Google Ads": [[17, "google-ads"]], "Google Analytics360": [[17, "google-analytics360"]], "Google Display&Video 360": [[17, "google-display-video-360"]], "Google Search Ads 360": [[17, "google-search-ads-360"]], "Other Google operators and hooks": [[17, "other-google-operators-and-hooks"]], "Google Calendar": [[17, "google-calendar"]], "Google Cloud Batch": [[17, "google-cloud-batch"]], "Google Cloud Composer": [[17, "google-cloud-composer"]], "Google Cloud Dataform": [[17, "google-cloud-dataform"]], "Google Cloud Run": [[17, "google-cloud-run"]], "Google Discovery API": [[17, "google-discovery-api"]], "Google Drive": [[17, "google-drive"]], "Google LevelDB": [[17, "google-leveldb"]], "Google Spreadsheet": [[17, "google-spreadsheet"]], "Operators and Hooks Reference": [[18, "operators-and-hooks-reference"]], "Protocol integrations": [[19, "protocol-integrations"]], "Protocols": [[19, "protocols"]], "Secure Shell (SSH)": [[19, "secure-shell-ssh"]], "SSH File Transfer Protocol (SFTP)": [[19, "ssh-file-transfer-protocol-sftp"]], "Windows PowerShell Remoting Protocol": [[19, "windows-powershell-remoting-protocol"]], "Windows Remote Management (WinRM)": [[19, "windows-remote-management-winrm"]], "Databricks Repos": [[20, "databricks-repos"]], "Databricks SQL": [[20, "databricks-sql"]], "DingTalk": [[20, "dingtalk"]], "Facebook Ads": [[20, "facebook-ads"]], "Plexus": [[20, "plexus"]], "Slack API": [[20, "slack-api"]], "Slack Incoming Webhook": [[20, "slack-incoming-webhook"]], "Telegram": [[20, "telegram"]], "Yandex.Cloud": [[20, "yandex-cloud"]], "Yandex.Cloud Dataproc": [[20, "yandex-cloud-dataproc"]], "Common SQL to Slack": [[20, "common-sql-to-slack"], [21, "common-sql-to-slack"]], "Common SQL to Slack API": [[20, "common-sql-to-slack-api"], [21, "common-sql-to-slack-api"]], "Common SQL to Slack Incoming Webhook": [[20, "common-sql-to-slack-incoming-webhook"], [21, "common-sql-to-slack-incoming-webhook"]], "Software integrations": [[21, "software-integrations"]], "Common IO": [[21, "common-io"]], "Common SQL": [[21, "common-sql"]], "Docker Swarm": [[21, "docker-swarm"]], "Hashicorp Vault": [[21, "hashicorp-vault"]], "OpenFaaS": [[21, "openfaas"]], "pgvector": [[21, "pgvector"]], "Singularity": [[21, "singularity"]], "Common SQL to Google Spreadsheet": [[21, "common-sql-to-google-spreadsheet"]], "Vertica to MySQL": [[21, "vertica-to-mysql"]], "Presto to MySQL": [[21, "presto-to-mysql"]], "Trino to MySQL": [[21, "trino-to-mysql"]], "Oracle to Oracle": [[21, "oracle-to-oracle"]], "Providers packages reference": [[22, "providers-packages-reference"]], "apache-airflow-providers-airbyte": [[22, "apache-airflow-providers-airbyte"]], "apache-airflow-providers-alibaba": [[22, "apache-airflow-providers-alibaba"]], "apache-airflow-providers-amazon": [[22, "apache-airflow-providers-amazon"]], "apache-airflow-providers-apache-beam": [[22, "apache-airflow-providers-apache-beam"]], "apache-airflow-providers-apache-cassandra": [[22, "apache-airflow-providers-apache-cassandra"]], "apache-airflow-providers-apache-drill": [[22, "apache-airflow-providers-apache-drill"]], "apache-airflow-providers-apache-druid": [[22, "apache-airflow-providers-apache-druid"]], "apache-airflow-providers-apache-flink": [[22, "apache-airflow-providers-apache-flink"]], "apache-airflow-providers-apache-hdfs": [[22, "apache-airflow-providers-apache-hdfs"]], "apache-airflow-providers-apache-hive": [[22, "apache-airflow-providers-apache-hive"]], "apache-airflow-providers-apache-impala": [[22, "apache-airflow-providers-apache-impala"]], "apache-airflow-providers-apache-kafka": [[22, "apache-airflow-providers-apache-kafka"]], "apache-airflow-providers-apache-kylin": [[22, "apache-airflow-providers-apache-kylin"]], "apache-airflow-providers-apache-livy": [[22, "apache-airflow-providers-apache-livy"]], "apache-airflow-providers-apache-pig": [[22, "apache-airflow-providers-apache-pig"]], "apache-airflow-providers-apache-pinot": [[22, "apache-airflow-providers-apache-pinot"]], "apache-airflow-providers-apache-spark": [[22, "apache-airflow-providers-apache-spark"]], "apache-airflow-providers-apache-sqoop": [[22, "apache-airflow-providers-apache-sqoop"]], "apache-airflow-providers-apprise": [[22, "apache-airflow-providers-apprise"]], "apache-airflow-providers-arangodb": [[22, "apache-airflow-providers-arangodb"]], "apache-airflow-providers-asana": [[22, "apache-airflow-providers-asana"]], "apache-airflow-providers-atlassian-jira": [[22, "apache-airflow-providers-atlassian-jira"]], "apache-airflow-providers-celery": [[22, "apache-airflow-providers-celery"]], "apache-airflow-providers-cloudant": [[22, "apache-airflow-providers-cloudant"]], "apache-airflow-providers-cncf-kubernetes": [[22, "apache-airflow-providers-cncf-kubernetes"]], "apache-airflow-providers-cohere": [[22, "apache-airflow-providers-cohere"]], "apache-airflow-providers-common-io": [[22, "apache-airflow-providers-common-io"]], "apache-airflow-providers-common-sql": [[22, "apache-airflow-providers-common-sql"]], "apache-airflow-providers-databricks": [[22, "apache-airflow-providers-databricks"]], "apache-airflow-providers-datadog": [[22, "apache-airflow-providers-datadog"]], "apache-airflow-providers-dbt-cloud": [[22, "apache-airflow-providers-dbt-cloud"]], "apache-airflow-providers-dingding": [[22, "apache-airflow-providers-dingding"]], "apache-airflow-providers-discord": [[22, "apache-airflow-providers-discord"]], "apache-airflow-providers-docker": [[22, "apache-airflow-providers-docker"]], "apache-airflow-providers-elasticsearch": [[22, "apache-airflow-providers-elasticsearch"]], "apache-airflow-providers-exasol": [[22, "apache-airflow-providers-exasol"]], "apache-airflow-providers-fab": [[22, "apache-airflow-providers-fab"]], "apache-airflow-providers-facebook": [[22, "apache-airflow-providers-facebook"]], "apache-airflow-providers-ftp": [[22, "apache-airflow-providers-ftp"]], "apache-airflow-providers-github": [[22, "apache-airflow-providers-github"]], "apache-airflow-providers-google": [[22, "apache-airflow-providers-google"]], "apache-airflow-providers-grpc": [[22, "apache-airflow-providers-grpc"]], "apache-airflow-providers-hashicorp": [[22, "apache-airflow-providers-hashicorp"]], "apache-airflow-providers-http": [[22, "apache-airflow-providers-http"]], "apache-airflow-providers-imap": [[22, "apache-airflow-providers-imap"]], "apache-airflow-providers-influxdb": [[22, "apache-airflow-providers-influxdb"]], "apache-airflow-providers-jdbc": [[22, "apache-airflow-providers-jdbc"]], "apache-airflow-providers-jenkins": [[22, "apache-airflow-providers-jenkins"]], "apache-airflow-providers-microsoft-azure": [[22, "apache-airflow-providers-microsoft-azure"]], "apache-airflow-providers-microsoft-mssql": [[22, "apache-airflow-providers-microsoft-mssql"]], "apache-airflow-providers-microsoft-psrp": [[22, "apache-airflow-providers-microsoft-psrp"]], "apache-airflow-providers-microsoft-winrm": [[22, "apache-airflow-providers-microsoft-winrm"]], "apache-airflow-providers-mongo": [[22, "apache-airflow-providers-mongo"]], "apache-airflow-providers-mysql": [[22, "apache-airflow-providers-mysql"]], "apache-airflow-providers-neo4j": [[22, "apache-airflow-providers-neo4j"]], "apache-airflow-providers-odbc": [[22, "apache-airflow-providers-odbc"]], "apache-airflow-providers-openai": [[22, "apache-airflow-providers-openai"]], "apache-airflow-providers-openfaas": [[22, "apache-airflow-providers-openfaas"]], "apache-airflow-providers-openlineage": [[22, "apache-airflow-providers-openlineage"]], "apache-airflow-providers-opensearch": [[22, "apache-airflow-providers-opensearch"]], "apache-airflow-providers-opsgenie": [[22, "apache-airflow-providers-opsgenie"]], "apache-airflow-providers-oracle": [[22, "apache-airflow-providers-oracle"]], "apache-airflow-providers-pagerduty": [[22, "apache-airflow-providers-pagerduty"]], "apache-airflow-providers-papermill": [[22, "apache-airflow-providers-papermill"]], "apache-airflow-providers-pgvector": [[22, "apache-airflow-providers-pgvector"]], "apache-airflow-providers-pinecone": [[22, "apache-airflow-providers-pinecone"]], "apache-airflow-providers-plexus": [[22, "apache-airflow-providers-plexus"]], "apache-airflow-providers-postgres": [[22, "apache-airflow-providers-postgres"]], "apache-airflow-providers-presto": [[22, "apache-airflow-providers-presto"]], "apache-airflow-providers-redis": [[22, "apache-airflow-providers-redis"]], "apache-airflow-providers-salesforce": [[22, "apache-airflow-providers-salesforce"]], "apache-airflow-providers-samba": [[22, "apache-airflow-providers-samba"]], "apache-airflow-providers-segment": [[22, "apache-airflow-providers-segment"]], "apache-airflow-providers-sendgrid": [[22, "apache-airflow-providers-sendgrid"]], "apache-airflow-providers-sftp": [[22, "apache-airflow-providers-sftp"]], "apache-airflow-providers-singularity": [[22, "apache-airflow-providers-singularity"]], "apache-airflow-providers-slack": [[22, "apache-airflow-providers-slack"]], "apache-airflow-providers-smtp": [[22, "apache-airflow-providers-smtp"]], "apache-airflow-providers-snowflake": [[22, "apache-airflow-providers-snowflake"]], "apache-airflow-providers-sqlite": [[22, "apache-airflow-providers-sqlite"]], "apache-airflow-providers-ssh": [[22, "apache-airflow-providers-ssh"]], "apache-airflow-providers-tableau": [[22, "apache-airflow-providers-tableau"]], "apache-airflow-providers-tabular": [[22, "apache-airflow-providers-tabular"]], "apache-airflow-providers-telegram": [[22, "apache-airflow-providers-telegram"]], "apache-airflow-providers-trino": [[22, "apache-airflow-providers-trino"]], "apache-airflow-providers-vertica": [[22, "apache-airflow-providers-vertica"]], "apache-airflow-providers-weaviate": [[22, "apache-airflow-providers-weaviate"]], "apache-airflow-providers-yandex": [[22, "apache-airflow-providers-yandex"]], "apache-airflow-providers-zendesk": [[22, "apache-airflow-providers-zendesk"]]}, "indexentries": {}}) \ No newline at end of file