text:
"""Contains classes and functions that a SAML2.0 Service Provider (SP) may use
to conclude its tasks.
"""
import threading
import six
import time
import logging

from saml2.entity import Entity

import saml2.attributemaps as attributemaps

from saml2.mdstore import destinations
from saml2.profile import paos, ecp
from saml2.saml import NAMEID_FORMAT_TRANSIENT
from saml2.samlp import AuthnQuery, RequestedAuthnContext
from saml2.samlp import NameIDMappingRequest
from saml2.samlp import AttributeQuery
from saml2.samlp import AuthzDecisionQuery
from saml2.samlp import AuthnRequest
from saml2.samlp import Extensions
from saml2.extension import sp_type
from saml2.extension import requested_attributes

import saml2
from saml2.soap import make_soap_enveloped_saml_thingy

from six.moves.urllib.parse import parse_qs
from six.moves.urllib.parse import urlencode
from six.moves.urllib.parse import urlparse

from saml2.s_utils import signature
from saml2.s_utils import UnravelError
from saml2.s_utils import do_attributes

from saml2 import samlp, BINDING_SOAP, SAMLError
from saml2 import saml
from saml2 import soap
from saml2.population import Population

from saml2.response import AttributeResponse, StatusError
from saml2.response import AuthzResponse
from saml2.response import AssertionIDResponse
from saml2.response import AuthnQueryResponse
from saml2.response import NameIDMappingResponse
from saml2.response import AuthnResponse

from saml2 import BINDING_HTTP_REDIRECT
from saml2 import BINDING_HTTP_POST
from saml2 import BINDING_PAOS

logger = logging.getLogger(__name__)

SSO_BINDING = saml2.BINDING_HTTP_REDIRECT

FORM_SPEC = """<form method="post" action="%s">
   <input type="hidden" name="SAMLRequest" value="%s" />
   <input type="hidden" name="RelayState" value="%s" />
   <input type="submit" value="Submit" />
</form>"""

LAX = False

ECP_SERVICE = "urn:oasis:names:tc:SAML:2.0:profiles:SSO:ecp"
ACTOR = "http://schemas.xmlsoap.org/soap/actor/next"
MIME_PAOS = "application/vnd.paos+xml"

class IdpUnspecified(SAMLError):
    pass

class VerifyError(SAMLError):
    pass

class SignOnError(SAMLError):
    pass

class LogoutError(SAMLError):
    pass

class NoServiceDefined(SAMLError):
    pass

class Base(Entity):
    """ The basic pySAML2 service provider class """

    def __init__(self, config=None, identity_cache=None, state_cache=None,
                 virtual_organization="", config_file="", msg_cb=None):
        """
        :param config: A saml2.config.Config instance
        :param identity_cache: Where the class should store identity information
        :param state_cache: Where the class should keep state information
        :param virtual_organization: A specific virtual organization
        """

        Entity.__init__(self, "sp", config, config_file, virtual_organization,
                        msg_cb=msg_cb)

        self.users = Population(identity_cache)
        self.lock = threading.Lock()
        # for server state storage
        if state_cache is None:
            self.state = {}  # in memory storage
        else:
            self.state = state_cache

        attribute_defaults = {
            "logout_requests_signed": False,
            "allow_unsolicited": False,
            "authn_requests_signed": False,
            "want_assertions_signed": False,
            "want_response_signed": True,
            "want_assertions_or_response_signed" : False
        }

        for attr, val_default in attribute_defaults.items():
            val_config = self.config.getattr(attr, "sp")
            if val_config is None:
                val = val_default
            else:
                val = val_config

            if val == 'true':
                val = True

            setattr(self, attr, val)

        if self.entity_type == "sp" and not any(
            [
                self.want_assertions_signed,
                self.want_response_signed,
                self.want_assertions_or_response_signed,
            ]
        ):
            logger.warning(
                "The SAML service provider accepts unsigned SAML Responses "
                "and Assertions. This configuration is insecure."
            )

        self.artifact2response = {}

    #
    # Private methods
    #

    def _relay_state(self, session_id):
        vals = [session_id, str(int(time.time()))]
        if self.config.secret is None:
            vals.append(signature("", vals))
        else:
            vals.append(signature(self.config.secret, vals))
        return "|".join(vals)

    def _sso_location(self, entityid=None, binding=BINDING_HTTP_REDIRECT):
        if entityid:
            # verify that it's in the metadata
            srvs = self.metadata.single_sign_on_service(entityid, binding)
            if srvs:
                return destinations(srvs)[0]
            else:
                logger.info("_sso_location: %s, %s", entityid, binding)
                raise IdpUnspecified("No IdP to send to given the premises")

        # get the idp location from the metadata. If there is more than one
        # IdP in the configuration raise exception
        eids = self.metadata.with_descriptor("idpsso")
        if len(eids) > 1:
            raise IdpUnspecified("Too many IdPs to choose from: %s" % eids)

        try:
            srvs = self.metadata.single_sign_on_service(list(eids.keys())[0],
                                                        binding)
            return destinations(srvs)[0]
        except IndexError:
            raise IdpUnspecified("No IdP to send to given the premises")

    def sso_location(self, entityid=None, binding=BINDING_HTTP_REDIRECT):
        return self._sso_location(entityid, binding)

    def _my_name(self):
        return self.config.name

    #
    # Public API
    #

    def add_vo_information_about_user(self, name_id):
        """ Add information to the knowledge I have about the user. This is
        for Virtual organizations.

        :param name_id: The subject identifier
        :return: A possibly extended knowledge.
        """

        ava = {}
        try:
            (ava, _) = self.users.get_identity(name_id)
        except KeyError:
            pass

        # is this a Virtual Organization situation
        if self.vorg:
            if self.vorg.do_aggregation(name_id):
                # Get the extended identity
                ava = self.users.get_identity(name_id)[0]
        return ava

    # noinspection PyUnusedLocal
    @staticmethod
    def is_session_valid(_session_id):
        """ Place holder. Supposed to check if the session is still valid.
        """
        return True

    def service_urls(self, binding=BINDING_HTTP_POST):
        _res = self.config.endpoint("assertion_consumer_service", binding, "sp")
        if _res:
            return _res
        else:
            return None

    def create_authn_request(self, destination, vorg="", scoping=None,
            binding=saml2.BINDING_HTTP_POST,
            nameid_format=None,
            service_url_binding=None, message_id=0,
            consent=None, extensions=None, sign=None,
            allow_create=None, sign_prepare=False, sign_alg=None,
            digest_alg=None, **kwargs):
        """ Creates an authentication request.

        :param destination: Where the request should be sent.
        :param vorg: The virtual organization the service belongs to.
        :param scoping: The scope of the request
        :param binding: The protocol to use for the Response !!
        :param nameid_format: Format of the NameID
        :param service_url_binding: Where the reply should be sent dependent
            on reply binding.
        :param message_id: The identifier for this request
        :param consent: Whether the principal have given her consent
        :param extensions: Possible extensions
        :param sign: Whether the request should be signed or not.
        :param sign_prepare: Whether the signature should be prepared or not.
        :param allow_create: If the identity provider is allowed, in the course
            of fulfilling the request, to create a new identifier to represent
            the principal.
        :param kwargs: Extra key word arguments
        :return: either a tuple of request ID and <samlp:AuthnRequest> instance
                 or a tuple of request ID and str when sign is set to True
        """
        client_crt = None
        if "client_crt" in kwargs:
            client_crt = kwargs["client_crt"]

        args = {}

        if self.config.getattr('hide_assertion_consumer_service', 'sp'):
            args["assertion_consumer_service_url"] = None
            binding = None
        else:
            try:
                args["assertion_consumer_service_url"] = kwargs[
                    "assertion_consumer_service_urls"][0]
                del kwargs["assertion_consumer_service_urls"]
            except KeyError:
                try:
                    args["assertion_consumer_service_url"] = kwargs[
                        "assertion_consumer_service_url"]
                    del kwargs["assertion_consumer_service_url"]
                except KeyError:
                    try:
                        args["assertion_consumer_service_index"] = str(
                            kwargs["assertion_consumer_service_index"])
                        del kwargs["assertion_consumer_service_index"]
                    except KeyError:
                        if service_url_binding is None:
                            service_urls = self.service_urls(binding)
                        else:
                            service_urls = self.service_urls(service_url_binding)
                        args["assertion_consumer_service_url"] = service_urls[0]

        try:
            args["provider_name"] = kwargs["provider_name"]
        except KeyError:
            if binding == BINDING_PAOS:
                pass
            else:
                args["provider_name"] = self._my_name()

        # Allow argument values either as class instances or as dictionaries
        # all of these have cardinality 0..1
        _msg = AuthnRequest()
        for param in ["scoping", "requested_authn_context", "conditions",
                      "subject"]:
            try:
                _item = kwargs[param]
            except KeyError:
                pass
            else:
                del kwargs[param]
                # either class instance or argument dictionary
                if isinstance(_item, _msg.child_class(param)):
                    args[param] = _item
                elif isinstance(_item, dict):
                    args[param] = RequestedAuthnContext(**_item)
                else:
                    raise ValueError("%s or wrong type expected %s" % (_item,
                                                                       param))

        try:
            args["name_id_policy"] = kwargs["name_id_policy"]
            del kwargs["name_id_policy"]
        except KeyError:
            if allow_create is None:
                allow_create = self.config.getattr("name_id_format_allow_create", "sp")
                if allow_create is None:
                    allow_create = "false"
                else:
                    if allow_create is True:
                        allow_create = "true"
                    else:
                        allow_create = "false"

            if nameid_format == "":
                name_id_policy = None
            else:
                if nameid_format is None:
                    nameid_format = self.config.getattr("name_id_format", "sp")

                    # If no nameid_format has been set in the configuration
                    # or passed in then transient is the default.
                    if nameid_format is None:
                        # SAML 2.0 errata says AllowCreate MUST NOT be used for
                        # transient ids - to make a conservative change this is
                        # only applied for the default cause
                        allow_create = None
                        nameid_format = NAMEID_FORMAT_TRANSIENT

                    # If a list has been configured or passed in choose the
                    # first since NameIDPolicy can only have one format specified.
                    elif isinstance(nameid_format, list):
                        nameid_format = nameid_format[0]

                    # Allow a deployer to signal that no format should be specified
                    # in the NameIDPolicy by passing in or configuring the string 'None'.
                    elif nameid_format == 'None':
                        nameid_format = None

                name_id_policy = samlp.NameIDPolicy(allow_create=allow_create,
                                                    format=nameid_format)

            if name_id_policy and vorg:
                try:
                    name_id_policy.sp_name_qualifier = vorg
                    name_id_policy.format = saml.NAMEID_FORMAT_PERSISTENT
                except KeyError:
                    pass
            args["name_id_policy"] = name_id_policy

        try:
            nsprefix = kwargs["nsprefix"]
        except KeyError:
            nsprefix = None

        conf_sp_type = self.config.getattr('sp_type', 'sp')
        conf_sp_type_in_md = self.config.getattr('sp_type_in_metadata', 'sp')
        if conf_sp_type and conf_sp_type_in_md is False:
            if not extensions:
                extensions = Extensions()
            item = sp_type.SPType(text=conf_sp_type)
            extensions.add_extension_element(item)

        requested_attrs = self.config.getattr('requested_attributes', 'sp')
        if requested_attrs:
            if not extensions:
                extensions = Extensions()

            attributemapsmods = []
            for modname in attributemaps.__all__:
                attributemapsmods.append(getattr(attributemaps, modname))

            items = []
            for attr in requested_attrs:
                friendly_name = attr.get('friendly_name')
                name = attr.get('name')
                name_format = attr.get('name_format')
                is_required = str(attr.get('required', False)).lower()

                if not name and not friendly_name:
                    raise ValueError(
                        "Missing required attribute: '{}' or '{}'".format(
                            'name', 'friendly_name'))

                if not name:
                    for mod in attributemapsmods:
                        try:
                            name = mod.MAP['to'][friendly_name]
                        except KeyError:
                            continue
                        else:
                            if not name_format:
                                name_format = mod.MAP['identifier']
                            break

                if not friendly_name:
                    for mod in attributemapsmods:
                        try:
                            friendly_name = mod.MAP['fro'][name]
                        except KeyError:
                            continue
                        else:
                            if not name_format:
                                name_format = mod.MAP['identifier']
                            break

                items.append(requested_attributes.RequestedAttribute(
                    is_required=is_required,
                    name_format=name_format,
                    friendly_name=friendly_name,
                    name=name))

            item = requested_attributes.RequestedAttributes(
                extension_elements=items)
            extensions.add_extension_element(item)

        force_authn = str(
            kwargs.pop("force_authn", None)
            or self.config.getattr("force_authn", "sp")
        ).lower() in ["true", "1"]
        if force_authn:
            kwargs["force_authn"] = "true"

        if kwargs:
            _args, extensions = self._filter_args(
                AuthnRequest(), extensions, **kwargs
            )
            args.update(_args)

        args.pop("id", None)

        if sign is None:
            sign = self.authn_requests_signed

        if (sign and self.sec.cert_handler.generate_cert()) or \
                        client_crt is not None:
            with self.lock:
                self.sec.cert_handler.update_cert(True, client_crt)
                if client_crt is not None:
                    sign_prepare = True
                return self._message(AuthnRequest, destination, message_id,
                                     consent, extensions, sign, sign_prepare,
                                     protocol_binding=binding,
                                     scoping=scoping, nsprefix=nsprefix,
                                     sign_alg=sign_alg, digest_alg=digest_alg,
                                     **args)
        return self._message(AuthnRequest, destination, message_id, consent,
                             extensions, sign, sign_prepare,
                             protocol_binding=binding,
                             scoping=scoping, nsprefix=nsprefix,
                             sign_alg=sign_alg, digest_alg=digest_alg, **args)

    def create_attribute_query(self, destination, name_id=None,
            attribute=None, message_id=0, consent=None,
            extensions=None, sign=False, sign_prepare=False, sign_alg=None,
            digest_alg=None,
            **kwargs):
        """ Constructs an AttributeQuery

        :param destination: To whom the query should be sent
        :param name_id: The identifier of the subject
        :param attribute: A dictionary of attributes and values that is
            asked for. The key are one of 4 variants:
            3-tuple of name_format,name and friendly_name,
            2-tuple of name_format and name,
            1-tuple with name or
            just the name as a string.
        :param sp_name_qualifier: The unique identifier of the
            service provider or affiliation of providers for whom the
            identifier was generated.
        :param name_qualifier: The unique identifier of the identity
            provider that generated the identifier.
        :param format: The format of the name ID
        :param message_id: The identifier of the session
        :param consent: Whether the principal have given her consent
        :param extensions: Possible extensions
        :param sign: Whether the query should be signed or not.
        :param sign_prepare: Whether the Signature element should be added.
        :return: Tuple of request ID and an AttributeQuery instance
        """

        if name_id is None:
            if "subject_id" in kwargs:
                name_id = saml.NameID(text=kwargs["subject_id"])
                for key in ["sp_name_qualifier", "name_qualifier",
                            "format"]:
                    try:
                        setattr(name_id, key, kwargs[key])
                    except KeyError:
                        pass
            else:
                raise AttributeError("Missing required parameter")
        elif isinstance(name_id, six.string_types):
            name_id = saml.NameID(text=name_id)
            for key in ["sp_name_qualifier", "name_qualifier", "format"]:
                try:
                    setattr(name_id, key, kwargs[key])
                except KeyError:
                    pass

        subject = saml.Subject(name_id=name_id)

        if attribute:
            attribute = do_attributes(attribute)

        try:
            nsprefix = kwargs["nsprefix"]
        except KeyError:
            nsprefix = None

        return self._message(AttributeQuery, destination, message_id, consent,
                             extensions, sign, sign_prepare, subject=subject,
                             attribute=attribute, nsprefix=nsprefix,
                             sign_alg=sign_alg, digest_alg=digest_alg)

    # MUST use SOAP for
    # AssertionIDRequest, SubjectQuery,
    # AuthnQuery, AttributeQuery, or AuthzDecisionQuery
    def create_authz_decision_query(self, destination, action,
            evidence=None, resource=None, subject=None,
            message_id=0, consent=None, extensions=None,
            sign=None, sign_alg=None, digest_alg=None, **kwargs):
        """ Creates an authz decision query.

        :param destination: The IdP endpoint
        :param action: The action you want to perform (has to be at least one)
        :param evidence: Why you should be able to perform the action
        :param resource: The resource you want to perform the action on
        :param subject: Who wants to do the thing
        :param message_id: Message identifier
        :param consent: If the principal gave her consent to this request
        :param extensions: Possible request extensions
        :param sign: Whether the request should be signed or not.
        :return: AuthzDecisionQuery instance
        """

        return self._message(AuthzDecisionQuery, destination, message_id,
                             consent, extensions, sign, action=action,
                             evidence=evidence, resource=resource,
                             subject=subject, sign_alg=sign_alg,
                             digest_alg=digest_alg, **kwargs)

    def create_authz_decision_query_using_assertion(self, destination,
            assertion, action=None,
            resource=None,
            subject=None, message_id=0,
            consent=None,
            extensions=None,
            sign=False, nsprefix=None):
        """ Makes an authz decision query based on a previously received
        Assertion.

        :param destination: The IdP endpoint to send the request to
        :param assertion: An Assertion instance
        :param action: The action you want to perform (has to be at least one)
        :param resource: The resource you want to perform the action on
        :param subject: Who wants to do the thing
        :param message_id: Message identifier
        :param consent: If the principal gave her consent to this request
        :param extensions: Possible request extensions
        :param sign: Whether the request should be signed or not.
        :return: AuthzDecisionQuery instance
        """

        if action:
            if isinstance(action, six.string_types):
                _action = [saml.Action(text=action)]
            else:
                _action = [saml.Action(text=a) for a in action]
        else:
            _action = None

        return self.create_authz_decision_query(
                destination, _action, saml.Evidence(assertion=assertion),
                resource, subject, message_id=message_id, consent=consent,
                extensions=extensions, sign=sign, nsprefix=nsprefix)

    @staticmethod
    def create_assertion_id_request(assertion_id_refs, **kwargs):
        """

        :param assertion_id_refs:
        :return: One ID ref
        """

        if isinstance(assertion_id_refs, six.string_types):
            return 0, assertion_id_refs
        else:
            return 0, assertion_id_refs[0]

    def create_authn_query(self, subject, destination=None, authn_context=None,
            session_index="", message_id=0, consent=None,
            extensions=None, sign=False, nsprefix=None, sign_alg=None,
            digest_alg=None):
        """

        :param subject: The subject its all about as a <Subject> instance
        :param destination: The IdP endpoint to send the request to
        :param authn_context: list of <RequestedAuthnContext> instances
        :param session_index: a specified session index
        :param message_id: Message identifier
        :param consent: If the principal gave her consent to this request
        :param extensions: Possible request extensions
        :param sign: Whether the request should be signed or not.
        :return:
        """
        return self._message(AuthnQuery, destination, message_id, consent,
                             extensions, sign, subject=subject,
                             session_index=session_index,
                             requested_authn_context=authn_context,
                             nsprefix=nsprefix, sign_alg=sign_alg,
                             digest_alg=digest_alg)

    def create_name_id_mapping_request(self, name_id_policy,
            name_id=None, base_id=None,
            encrypted_id=None, destination=None,
            message_id=0, consent=None,
            extensions=None, sign=False,
            nsprefix=None, sign_alg=None, digest_alg=None):
        """

        :param name_id_policy:
        :param name_id:
        :param base_id:
        :param encrypted_id:
        :param destination:
        :param message_id: Message identifier
        :param consent: If the principal gave her consent to this request
        :param extensions: Possible request extensions
        :param sign: Whether the request should be signed or not.
        :return:
        """

        # One of them must be present
        assert name_id or base_id or encrypted_id

        if name_id:
            return self._message(NameIDMappingRequest, destination, message_id,
                                 consent, extensions, sign,
                                 name_id_policy=name_id_policy, name_id=name_id,
                                 nsprefix=nsprefix, sign_alg=sign_alg,
                                 digest_alg=digest_alg)
        elif base_id:
            return self._message(NameIDMappingRequest, destination, message_id,
                                 consent, extensions, sign,
                                 name_id_policy=name_id_policy, base_id=base_id,
                                 nsprefix=nsprefix, sign_alg=sign_alg,
                                 digest_alg=digest_alg)
        else:
            return self._message(NameIDMappingRequest, destination, message_id,
                                 consent, extensions, sign,
                                 name_id_policy=name_id_policy,
                                 encrypted_id=encrypted_id, nsprefix=nsprefix,
                                 sign_alg=sign_alg, digest_alg=digest_alg)

    # ======== response handling ===========

    def parse_authn_request_response(self, xmlstr, binding, outstanding=None,
                                     outstanding_certs=None, conv_info=None):
        """ Deal with an AuthnResponse

        :param xmlstr: The reply as a xml string
        :param binding: Which binding that was used for the transport
        :param outstanding: A dictionary with session IDs as keys and
            the original web request from the user before redirection
            as values.
        :param outstanding_certs:
        :param conv_info: Information about the conversation.
        :return: An response.AuthnResponse or None
        """

        if not getattr(self.config, 'entityid', None):
            raise SAMLError("Missing entity_id specification")

        if not xmlstr:
            return None

        kwargs = {
            "outstanding_queries": outstanding,
            "outstanding_certs": outstanding_certs,
            "allow_unsolicited": self.allow_unsolicited,
            "want_assertions_signed": self.want_assertions_signed,
            "want_assertions_or_response_signed": self.want_assertions_or_response_signed,
            "want_response_signed": self.want_response_signed,
            "return_addrs": self.service_urls(binding=binding),
            "entity_id": self.config.entityid,
            "attribute_converters": self.config.attribute_converters,
            "allow_unknown_attributes":
                self.config.allow_unknown_attributes,
            'conv_info': conv_info
        }

        try:
            resp = self._parse_response(xmlstr, AuthnResponse,
                                        "assertion_consumer_service",
                                        binding, **kwargs)
        except StatusError as err:
            logger.error("SAML status error: %s", err)
            raise
        except UnravelError:
            return None
        except Exception as err:
            logger.error("XML parse error: %s", err)
            raise

        if not isinstance(resp, AuthnResponse):
            logger.error("Response type not supported: %s",
                         saml2.class_name(resp))
            return None

        if (resp.assertion and len(resp.response.encrypted_assertion) == 0 and
                resp.assertion.subject.name_id):
            self.users.add_information_about_person(resp.session_info())
            logger.info("--- ADDED person info ----")

        return resp

    # ------------------------------------------------------------------------
    # SubjectQuery, AuthnQuery, RequestedAuthnContext, AttributeQuery,
    # AuthzDecisionQuery all get Response as response

    def parse_authz_decision_query_response(self, response,
            binding=BINDING_SOAP):
        """ Verify that the response is OK
        """
        kwargs = {"entity_id": self.config.entityid,
                  "attribute_converters": self.config.attribute_converters}

        return self._parse_response(response, AuthzResponse, "", binding,
                                    **kwargs)

    def parse_authn_query_response(self, response, binding=BINDING_SOAP):
        """ Verify that the response is OK
        """
        kwargs = {"entity_id": self.config.entityid,
                  "attribute_converters": self.config.attribute_converters}

        return self._parse_response(response, AuthnQueryResponse, "", binding,
                                    **kwargs)

    def parse_assertion_id_request_response(self, response, binding):
        """ Verify that the response is OK
        """
        kwargs = {"entity_id": self.config.entityid,
                  "attribute_converters": self.config.attribute_converters}

        res = self._parse_response(response, AssertionIDResponse, "", binding,
                                   **kwargs)
        return res

    # ------------------------------------------------------------------------

    def parse_attribute_query_response(self, response, binding):
        kwargs = {"entity_id": self.config.entityid,
                  "attribute_converters": self.config.attribute_converters}

        return self._parse_response(response, AttributeResponse,
                                    "attribute_consuming_service", binding,
                                    **kwargs)

    def parse_name_id_mapping_request_response(self, txt, binding=BINDING_SOAP):
        """

        :param txt: SOAP enveloped SAML message
        :param binding: Just a placeholder, it's always BINDING_SOAP
        :return: parsed and verified <NameIDMappingResponse> instance
        """

        return self._parse_response(txt, NameIDMappingResponse, "", binding)

    # ------------------- ECP ------------------------------------------------

    def create_ecp_authn_request(self, entityid=None, relay_state="",
            sign=False, **kwargs):
        """ Makes an authentication request.

        :param entityid: The entity ID of the IdP to send the request to
        :param relay_state: A token that can be used by the SP to know
            where to continue the conversation with the client
        :param sign: Whether the request should be signed or not.
        :return: SOAP message with the AuthnRequest
        """

        # ----------------------------------------
        # <paos:Request>
        # ----------------------------------------
        my_url = self.service_urls(BINDING_PAOS)[0]

        # must_understand and act according to the standard
        #
        paos_request = paos.Request(must_understand="1", actor=ACTOR,
                                    response_consumer_url=my_url,
                                    service=ECP_SERVICE)

        # ----------------------------------------
        # <ecp:RelayState>
        # ----------------------------------------

        relay_state = ecp.RelayState(actor=ACTOR, must_understand="1",
                                     text=relay_state)

        # ----------------------------------------
        # <samlp:AuthnRequest>
        # ----------------------------------------

        try:
            authn_req = kwargs["authn_req"]
            try:
                req_id = authn_req.id
            except AttributeError:
                req_id = 0  # Unknown but since it's SOAP it doesn't matter
        except KeyError:
            try:
                _binding = kwargs["binding"]
            except KeyError:
                _binding = BINDING_SOAP
                kwargs["binding"] = _binding

            logger.debug("entityid: %s, binding: %s", entityid, _binding)

            # The IDP publishes support for ECP by using the SOAP binding on
            # SingleSignOnService
            _, location = self.pick_binding("single_sign_on_service",
                                            [_binding], entity_id=entityid)
            req_id, authn_req = self.create_authn_request(
                    location, service_url_binding=BINDING_PAOS, **kwargs)

        # ----------------------------------------
        # The SOAP envelope
        # ----------------------------------------

        soap_envelope = make_soap_enveloped_saml_thingy(authn_req,
                                                        [paos_request,
                                                         relay_state])

        return req_id, "%s" % soap_envelope

    def parse_ecp_authn_response(self, txt, outstanding=None):
        rdict = soap.class_instances_from_soap_enveloped_saml_thingies(txt,
                                                                       [paos,
                                                                        ecp,
                                                                        samlp])

        _relay_state = None
        for item in rdict["header"]:
            if item.c_tag == "RelayState" and \
                            item.c_namespace == ecp.NAMESPACE:
                _relay_state = item

        response = self.parse_authn_request_response(rdict["body"],
                                                     BINDING_PAOS, outstanding)

        return response, _relay_state

    @staticmethod
    def can_handle_ecp_response(response):
        try:
            accept = response.headers["accept"]
        except KeyError:
            try:
                accept = response.headers["Accept"]
            except KeyError:
                return False

        if MIME_PAOS in accept:
            return True
        else:
            return False

    # ----------------------------------------------------------------------
    # IDP discovery
    # ----------------------------------------------------------------------

    @staticmethod
    def create_discovery_service_request(url, entity_id, **kwargs):
        """
        Created the HTTP redirect URL needed to send the user to the
        discovery service.

        :param url: The URL of the discovery service
        :param entity_id: The unique identifier of the service provider
        :param return: The discovery service MUST redirect the user agent
            to this location in response to this request
        :param policy: A parameter name used to indicate the desired behavior
            controlling the processing of the discovery service
        :param returnIDParam: A parameter name used to return the unique
            identifier of the selected identity provider to the original
            requester.
        :param isPassive: A boolean value True/False that controls
            whether the discovery service is allowed to visibly interact with
            the user agent.
        :return: A URL
        """

        args = {
            "entityID": entity_id,
            "policy": kwargs.get("policy"),
            "returnIDParam": kwargs.get("returnIDParam"),
            "return": kwargs.get("return_url") or kwargs.get("return"),
            "isPassive": (
                None
                if "isPassive" not in kwargs.keys()
                else "true"
                if kwargs.get("isPassive")
                else "false"
            ),
        }

        params = urlencode({k: v for k, v in args.items() if v})
        return "%s?%s" % (url, params)

    @staticmethod
    def parse_discovery_service_response(url="", query="",
            returnIDParam="entityID"):
        """
        Deal with the response url from a Discovery Service

        :param url: the url the user was redirected back to or
        :param query: just the query part of the URL.
        :param returnIDParam: This is where the identifier of the IdP is
            place if it was specified in the query. Default is 'entityID'
        :return: The IdP identifier or "" if none was given
        """

        if url:
            part = urlparse(url)
            qsd = parse_qs(part[4])
        elif query:
            qsd = parse_qs(query)
        else:
            qsd = {}

        try:
            return qsd[returnIDParam][0]
        except KeyError:
            return ""


Leaf Footed Bugs Archives - What's That Bug?
Currently viewing the category: "Leaf Footed Bugs"
Your letter to the bugman: Looking to identify this photographed by a friend. Apparently known as escarabajo but I'm guessing that's a generic name for several beetles.
This is not a Beetle. It is a Giant Mesquite Bug nymph, and they are frequently found feeding in groups.
Your letter to the bugman: I found this group of insects all huddled up together on a branch in early February this year while on vacation in Mexico. I have no idea what they are but I was fascinated by them. I also wondered why they were all together like this.
These are Giant Mesquite Bug nymphs in the genus Thasus.
Your letter to the bugman: My brother-in-law in Tennessee asked me to ID this insect for him, but my knowledge of entomology is largely restricted to what's native to California. My internet searches have been fruitless thus far. Can you help? Thank you.
This is not an Ant, hence your difficulty determining an identification. This is an immature True Bug, probably a Leaf Footed Bug nymph from the genus Leptoglossus based on this BugGuide image.
I've never seen this type of beetle before (I've been organic gardening for 10 yrs). It looks like some sort of borer beetle, but I'm having trouble identifying it. Could you help?
This is not a Borer Beetle. It is a True Bug, more specifically, a Western Conifer Seed Bug, Leptoglossus occidentalis, a species native to Seattle and other portions of the Pacific Northwest, though very few reports of this species actually come to us from your part of the country because beginning in the 1960s, the range of the Western Conifer Seed Bug was greatly expanded. The species is now found over much of North America and beginning in the early 2000s, it was reported from Europe where it is considered an invasive exotic species. Western Conifer Seed Bugs often enter homes to hibernate.
Your letter to the bugman: Saw this hanging on the car. Pretty creepy. Is it dangerous?
Your letter to the bugman: Not super urgent, but was working on a roof and this guy came crawling around the corner. He's missing a leg. The lighter is for scale. Its a standard size Bic.
This is a Big Legged Plant Bug in the genus Acanthocephala.


A story of life on the Mississippi is well known in American literature. As we traveled with Tom Sawyer, Huck Finn and the runaway slave Jim, we experienced both the danger and the excitement of an adventure few young men could have experienced. This is also true of Jeff Nicholas' tale Mud. Telling the story of two young teens whose families live off the fish and clams of the river's waters, they come upon a fugitive living on a forbidden island in a forsaken boat. And as in the earlier adventure, the danger is real as these two boys are forever changed.
With Nicholas as both director and screenwriter, the cinematic journey is told with visual artistry that weaves together the river's currents with the muddy shore and fearful superstitions with romantic myth. The two boys are Ellis (Tye Sheridan) and Neckbone (Jacob Lofland). Having an unusual amount of freedom which takes them beyond their young teen experience, both boys are fascinated when a cabin cruiser is discovered lodged in the trees of an island Ellis' father has forbidden him to visit. This rule is for his own protection, not only from the currents of the river but also from the venom of the cottonmouths that slither in the island's stagnant pools.
This is only the beginning of the adventure. They discover that the boat they want to make their own already has a resident. As if appearing from the mist, they meet Mud (Matthew McConaughey). They do not realize at first that he is running from the law, but they find his superstitious beliefs as expressed by the crosses in the heels of his boots and his specially protective shirt fascinating. When he asks the boys for help in providing him with food, Ellis agrees in spite of Neckbone's objections. Befriending Mud as Tom and Huck had befriended Jim is the center of the tale.
Also involved in the story are Ellis' father Senior (Ray McKinnon) and mother Mary Lee (Sarah Paulson), as well as Mud's adopted father Tom Blankenship (Sam Shephard). Along with these characters is the romantic interest in this river tale, the beautiful Juniper (Reese Witherspoon). The complex relationship that Mud and Juniper have is not only central to the reason Mud is in hiding but also provides a backdrop for Ellis' adolescent crush on the tempting and teasing Mae Pearl (Bonnie Sturdivant).
The moral lessons of the film lack any point of true resolution and there are no characters that exhibit wisdom or compassion. The behaviors of young and old are constantly self-serving with a clear hope for but lack of true love. This lack of morality or concern for others results in a story with confused messages that are unresolved in its conclusions. Although evil is defeated in a final battle as we would expect of such a tale, it is not clear that the battle between good and evil was understood or in any way changed the boys or Mud in a positive way. It is this final confusion that leaves us wondering in what way this engaging but directionless tale can enrich our lives.
1. When boys are in their early teens, they can be easily confused by the behaviors of those who are supposed to be their parents and guardians. How do you think Neckbone's uncle will impact the sexual lives of both Neckbone and Ellis? How do you think Ellis' parents' dissatisfaction will impact them about their view of the meaning of marriage? Why do you answer as you do?
2. The dangerous game that Juniper plays with Mud's devotion is seen even after he has taken on a life devoted to protect her and avenge her honor. Why do you think she would choose such behaviors? Is she evil in setting up men for Mud to punish and even kill? What basis is there for your answer?
3. When no one in the film is healthy or moral, the lack of a clear good is offset by an atrocious example of evil. Do you believe the world is reflected more by the characters in this film or by people who live lives of honesty and love? Why do you answer as you do?


Tim is currently a Senior Planner in the Planning & Development Services Division for Walton County, Florida. He has over 20 years of planning experience working for both Municipal and County government. His areas of expertise are in long-range planning, development review and land development regulations.
Tim earned his Bachelor of Science degree from Indiana State University in 1981 and an M.P.A. from the University of Central Florida in 1990. In 1994, Tim was admitted to the American Institute of Certified Planners (AICP). Tim is also a member of the American Planning Association (APA), Florida Planning & Zoning Association (FPZA), the American Society for Public Administration (ASPA), 1000 Friends of Florida, the APA County Planning Division and the APA New Urbanism Division.
Tim is currently serving as the Chair of the APA County Planning Division. He has also served as the Chair of the APA Florida Chapter, Emerald Coast Section from 2006 — 2008 and the Chair of the APA Florida Chapter, First Coast Section from 2000 — 2002. In addition, Tim has served on APA Florida's Legislative Policy Committee, By-Laws Committee, Nominating Committee, Awards Committee and Ethics Committee. He also served as the Chair of the APA Florida Chapter's Awards Committee and is the current Chair of the APA County Planning Division/National Association of County Planners' Project Awards Committee. In addition, Tim also served on the APA Student Representatives Council (SRC) Awards Committee. He served as the Newsletter Editor of the APA Alabama Chapter during his time with the City of Dothan. At the national level, Tim has served on the AICP's Continuing Education Committee and on the APA National Awards Jury. In 2011, Tim received the Distinguished Contribution to the Chapter Award from the APA Florida Chapter.


"Amazon has designed its own 64-bit Arm server processors, dubbed Graviton, and is right now renting them out on AWS.
See A rumble in Amazon's jungle: AWS now rents out homegrown 64-bit Arm server processorsHah! ARMed servers have been on the horizon for far too long. Now, it seems, they are about to become mainstream on Amazon. It's obvious that where the need matches the performance ARM can be cost-effective against Intel/AMD. This is not the end however. This chip was based on a smartphone design of a few years ago. It's a prototype for bigger things to come. Can't wait to get my site hosted on ARM or have ARM run my home network. Soon it will all come together.
This entry was posted in technology and tagged ARM, GNU/Linux, Linux, market share, migration, server, small cheap computers, uptake. Bookmark the permalink.


GPCR internalization is essential to prevent cells from undergoing excessive receptor stimulation or periods of prolonged inactivity. If GPCR internalization is inhibited by a ligand, a protein mutation, or aberrant signaling, undesirable effects may occur; often resulting in drug tolerance, unwanted side effects, and disease. PathHunter GPCR internalization assays are functional, cell-based assays that measure GPCR endocytosis. These non-imaging, non-antibody-based, chemiluminescent assays provide a direct and quantitative measurement of internalized GPCRs localized to intracellular endosomes. This allows the fate of activated GPCRs to be monitored in live cells without requiring expensive microscopy.
PathHunter GPCR internalization assays are based on the proprietary Enzyme Fragment Complementation (EFC) technology and provide a tool for primary or orthogonal screening to identify safer drugs with less undesirable effects like drug tolerance, unwanted side effects, and disease. There are two assay formats for detecting receptor internalization in whole cells. The total internalization assay detects ligand-induced GPCR endocytosis via all endocytosis mechanisms; the activated internalization assay looks at only ligand-induced, β-arrestin mediated receptor internalization.
PathHunter total GPCR internalization cell lines are engineered to co-express the ProLink™ (PK; EFC enzyme donor) tagged GPCR, and an EFC enzyme acceptor (EA) tag localized to the endosomes. An alternate format reverses the localization of the enzyme fragments; the GPCR is tagged with the EA and the PK is localized to the endosomes. Ligand-induced activation of GPCR-PK (or EA) leads to internalization of the receptor in EA-tagged (or PK-tagged) endosomes, forcing complementation of the two β-galactosidase (β-gal) enzyme fragments (EA and PK). The resulting functional enzyme hydrolyzes substrate to generate a chemiluminescent signal.
PathHunter activated GPCR internalization cell lines are engineered to co-express an untagged GPCR, an EA tagged β-arrestin, and a PK tag localized to the endosomes. Activation of the untagged GPCR induces β-arrestin recruitment, followed by internalization of the GPCR-β-arrestin-EA complex in PK-tagged endosomes. Similar to the total assay format, this internalization forces complementation of the two β-gal enzyme fragments, forming functional enzyme that hydrolyzes substrate to generate a chemiluminescent signal.
DiscoverX offers a variety of products and services for analyzing GPCR internalization.
Reveal novel classes of compounds like super-agonists and functional agonists, and evaluate their efficacies and potencies.
Cells expressing C-C chemokine receptor type 1 (CCR1) (left graph) and Cholinergic Muscarinic M2 receptor (CHRM2) (right graph) were treated with increasing concentrations of indicated compounds and assayed using PathHunter detection reagents. The universal, no wash, single addition protocol results in a high throughput friendly approach that allows you to easily distinguish potency (EC50s) and efficacy (signal-to-background) differences between compounds that induce receptor internalization. The CCR1 internalization assay uncover the super-agonist CCL23 compared to the reference agonist CCL3, which the CHRM2 internalization assay oxotremorine M as a more potent agonist compared to acetylcholine or carbachol.
Compare agonists and evaluate their pharmacology to determine the best leads for your drug discovery program or specific application.
Cells expressing sphingosine-1-phosphate receptor (S1P1) were treated with increasing concentrations of indicated compounds and assayed for receptor internalization using PathHunter detection reagents. The dose response curves showed agonist ligand pharmacologies as well as depicted accurate potency-based rank order of the ligands.


text:
LuxArtAsia
The Asia Pacific Breweries Foundation Signature Art Prize will be awarded in November
Pham Huy Thong - Brotherhood (Vietnam)
The Asia Pacific Breweries Foundation Signature Art Prize will be awarded in November. About 130 works across 24 countries and territories have been nominating for the Grand Prize of S$ 45,000, which is being organised by the Singapore Art Museum
Jompet Kuswidananto - Java's Machine Phatasmagoria (Indonesia)
This second edition of the triennial APB Foundation Signature Art Prize includes a wide range of media, from painting and print to video art and photography. Established practitioners as well as emerging talents nominated this year include Daniel Crooks (Australia), Vandy Rattana (Cambodia), Qiu Anxiong (China), Eko Nugroho (Indonesia), Makoto Aida (Japan), Fauzan bin Omar (Malaysia), Htein Lin (Myanmar), Imran Qureshi (Pakistan), Louie Cordero (Philippines), Vertical Submarine (Singapore), Sook-Jin Jo (South Korea) and Chen Chieh-jen (Taiwan). The 15 short-list finalist artworks will be announced Oct 1 and the winner Nov 18.
Makoto Aida's Ash Color Mountains (Japan)
There are some very interesting artworks. I'll put below a few of my favorites (very strong Japanese contenders this year), some of which you may be familiar with from previous posts…One puzzling thing though, several works nominated have already been collected by museums, including four by the Singapore Art Museum (which indicate it has an eye for strong works, but also raises some questions of conflict of interest, given that the director of the Singapore Art Museum is also one of the 5 judges for the prize!). Should works already collected by museums or in a few cases private collectors be included in the running for prize? Who are those private collectors? If one of those works does win the prize, obviously its value will go up. Lot of questions that distract from the true underlying value of such prize. During a press conf. journalists were assured there was no conflict, because the director will recuse himself from the discussions when one of the museum's works is involved, still…
Alfredo Esquillo Jr's Libing at Sakla (Philippines)
Takashi Kuribayashi's Wald aus Wald (Japan)
Kohei Nawa - PixCall-Deer 17 (Japan)
Asian Art Cambodia Art Indonesia Art Japanese Art Korean art Malaysian art Philippines Art Singapore Thai Art Vietnamese Art
An Art Patron's Extraordinary Life
Peggy Guggenheim was no ordinary art collector. In her lifetime, she acquired a treasure trove of Cubist and Surrealist artworks at bargain price right before the onset of the Second World War; she ran art galleries in London and New York championing then-little known artists such as Jackson Pollock and Robert Motherwell; and she also played a significant role in positioning Venice as a contemporary art city after she moved there permanently in 1948. After her death in 1978, her Venetian home, the 18th-century Palazzo Venier dei Leoni, was transformed into a permanent exhibition space housing the Peggy Guggenheim Collection. It is now the second most visited museum in the city after the Dodge's Palace with over 427,000 visitors a year. But while her collection is primarily renowned for its Cubist, Surrealist and Abstract Expressionist masterpieces, the new exhibition "Peggy Guggenheim: The Last Dogaressa" – running until January 27, 2020 - is aiming to showcase how wide
How Jason Martin Paints Sculptures and Sculpts Paint
While Jason Martin has chosen paint and pigments to express his creativity the way he approaches his art production is more akin a contemporary dancer moving across a canvas. Perhaps in another life, the British artist might have been a choreographer. For over 25 years, Martin has been primarily interested in exploring the materiality of paint and the physical action of painting, and sees his painting "as a choreography or series of movements that can never been danced again quite the same way." Although his works are abstract, they can also be described as painted landscapes, as they take viewers on a journey of the artist's continuous movements frozen in time and space. Martin says he's interested in furthering the possibilities within the tradition of abstraction finding "new approaches emptying out more familiar notions of how to paint and developing a reduced and essential personalised language." His style has evolved over the years, but he's primarily known
An Art Collecting Journey with Han Nefkens
Han Nefkens Foundation – LOOP BARCELONA Video Art Production Award 2018 in collaboration with the Fundació Joan Miró - Thao Nguyen Phan Han Nefkens has had an unusual art collecting journey. While he's often described as a collector – he has, after all, bought more than 500 artworks – the description doesn't quite give justice to the scope of his involvement in the art world. All too often wealthy buyers hoard their collections in a warehouse, maybe rotating some around their properties and occasionally loaning a few works when it suits them. Nefkens' approach to buying is refreshingly generous works he buys are lent immediately to museums on a long term basis with an agreement that most loans will be left as bequests. And while he started buying existing artworks for the last thirteen years he has only commissioned new works. The Han Nefkens Foundation offers several Video Arts Awards every year to support artists in their artistic endeavour, and these come with total cr
@LUXARTASIA

redpajama_set_name: RedPajamaCommonCrawl


The U.S. Men's National Team, already facing the prospect of playing without starting goalie Tim Howard for the next few weeks, could be facing bigger issues as they face two important World Cup qualifying games.
While the squad should be focusing on Friday night's game against Costa Rica and next week's game on the road against Mexico, they are instead reportedly losing faith in coach Jürgen Klinsmann's lineup choices.
Last month against Honduras, Klinsmann benched captain Carlos Bocanegra on the day of the game, a move that backfired as the inexperienced back four of Geoff Cameron, Omar Gonzalez, Fabian Johnson and Timmy Chandler had a rough day in the 2-1 loss in the opening game of their Hexagonal qualifying group.
Klinsmann, who has fielded 24 different lineups in the 24 games he has been the coach, claims that disgruntled players are just par for the course.
"These comments are just normal to me," he told The Sporting News. "This team is in a transition. Between two World Cup cycles, faces change. We're doing that, and you also kind of mix up the chemistry. There will be a new group of leaders coming through that process, and that will be responsible for molding everything together.
The players are reportedly also upset the Klinsmann, a German, is showing favoritism to Jermaine Jones, Danny Williams, Fabian Johnson and Chandler – all German born children of American servicemen.
Even though the U.S. went 9-2-3 in 2012 and finished at the top of its World Cup semifinal qualifying group, something has always seemed off under Klinsmann, who was brought in as coach in 2011 as a big-name replacement for Bob Bradley after the U.S. lost to Mexico in the Gold Cup final.
The U.S. doesn't seem to play with the same passion that we saw in the 2010 World Cup and they are now looking at the real possibility of having no points after the first three games of their 10-game qualifying round for the 2014 World Cup in Brazil.
In addition to not having Howard for the next two games, the U.S. will also play without Landon Donovan (who has been on a self-imposed break since December) and Bocanegra (who Klinsmann left off the squad entirely).
Injuries to several defenders also forced Klinsmann to call up Matt Besler and Tony Beltran, who have played in just a single national team game (a friendly against Canada).
The team will have Clint Dempsey, who was named captain for the next two games, so they have that going for them, which is nice. Dempsey has six goals in this World Cup qualifying cycle, but the team will need more than him in these games.
Following the games against Costa Rica and Mexico, the schedule gets easier, as the U.S. won't play another qualifying match until June, should have most of their top players back and will have four of their final seven matches at home.
If Klinsmann and the U.S. can get through the next few months with a mixed bag of a lineup, the payoff may be worth it. The team has to start finding new blood as Donovan (31 years old with 144 international caps), Bocanegra (33 with 110 caps) and Howard (34 with 85 caps) are not getting any younger.
The experience the younger players will get in this year's qualifying matches will be good – as long as the U.S. can earn a spot in the World Cup.
For his part, Klinsmann is confident enough in his talents as a coach and his players to believe the U.S. will be better off in the long run.
The convincing starts Friday night in Denver.


text:
O Casarão Thomas B. Muir, também chamado de Casa 110 foi uma das primeiras residências que residiram na Avenida Paulista. Já demolida, hoje abriga a Torre João Salem na atual nº1079 da Paulista.

Histórico
A Casa 110 foi construida por Thomas Ballantine Muir, gerente da London & Brasilian Bank na época. Ele morou na residência até 1908, quando passou a abrigar o consulado alemão no Brasil. Apenas dois conselheiros moraram no consulado, Carl Flügel sucedido por Von Der Heyde até 1917, quando o governo brasileiro exigiu o fechamento do consulado e a saída de Heyde em decorrência do ataque alemão ao navio brasileiro Paraná do Brasil.

O imóvel foi posteriormente devolvido para Thomas Muir que contratou a empresa Asson para fazer reformas no casarão, ampliando a casa e construindo uma garagem. Após a morte de Thomas Muir em Londres no ano de 1933, o casarão continuou com a sua família até ser vendido na década de 1950 para a família de Abdo Schahin, influente empresário do ramo têxtil na época. A propriedade foi demolida durante a década de 70 e em seu lugar foi construido o edifício João Salem na atual rua nº1079 da Avenida Paulista.

Edifício João Salem
O prédio foi inaugurada em dezembro de 2008 no local do demolido Casarão Thomas B. Muir. Foi projetado pelo arquiteto Jorge Munif Abussamra e construído pela empresa Gattaz Engenharia. Possui dez andares inferiores que formam uma caixa retangular assimétrica com grelhas escalonadas e revestidas com granito branco e sete andares dúplex com fachada em vidro, voltado para a esquerda.

Ver também
 Avenida Paulista

Construções demolidas na Avenida Paulista

redpajama_set_name: RedPajamaWikipedia


Certain products or services offered by this Website may be governed by additional terms ("Additional Terms") presented in conjunction with those products or services. You must agree to these Additional Terms before using those areas or CLD Services. The Additional Terms and this Agreement shall apply equally. In the event of an irreconcilable inconsistency between the Additional Terms and this Agreement, the Additional Terms shall control.
YOU MAY NOT USE THIS WEBSITE FOR ANY PURPOSE THAT IS UNLAWFUL OR PROHIBITED BY THIS AGREEMENT AND/OR ANY APPLICABLE ADDITIONAL TERMS. YOUR ACCESS TO THIS WEBSITE MAY BE TERMINATED IMMEDIATELY IN CLD'S SOLE DISCRETION, WITH OR WITHOUT NOTICE, IF YOU FAIL TO COMPLY WITH ANY PROVISIONS OF THIS AGREEMENT AND/OR ADDITIONAL TERMS, OR FOR ANY OTHER REASON, OR NO REASON.
This Agreement informs you of CLD's practices with respect to the online collection, use, and disclosure of personal information from the Website. Personal information is information that allows us to contact you (such as email address, home address, or telephone number) or other information that, when linked to your name or contact information, allows us to personalize your visit to our Website by providing you with information that suits your interests.
CLD is the owner of this Website and retains all ownership rights to the information collected at this Website. CLD reserves the right to change, modify, add, or remove provisions of this Privacy Statement. Any changes to this Privacy Statement will be posted here, and we encourage you to check back from time to time.
1.1 We may use the contact information you give us to better tailor your Website experience to your interests, and to send you information about CLD and its services as well as promotional material on behalf of some of our partners. We may use other information that you provide to us to show you content in which you may be interested and to display the content according to your preferences. We will also share this information within the CLD family in order to enhance your experience on this and other CLD Websites.
1.2 In addition, we may share this information with advertisers or other third parties that are not part of the CLD family on an aggregate or other basis that does not disclose your identity or contact information.
5.1 From time to time we may enter into a special relationship with another company that is not owned by CLD to provide additional features at this Website. These special relationships may include "powered by" partners, business partners, sponsors, and co-branded sites (referred to here as "co-branded pages"). These might include, for example, pages that share our name and that of another entity. You should look for a specific privacy statement on any such co-branded page. Any personal information that you provide when signing up at one of those co-branded pages may be shared with our third party partner. You should also check our partner's website for information regarding its privacy policies.
5.2 Also, the nature of some features of our Website may require that we share personal information about you with persons or companies outside of the CLD family. For example, this may occur at a feature that enables you, via our Website, to ask questions of persons or entities that are not part of the CLD family. By responding to those features of the site, whether by email or direct entry of information on our Website, you are consenting to our transferring that information to such persons or entities.
5.4 Finally, we may share any of the information collected from you with these other non-CLD companies in an aggregate basis. The aggregated information is not linked to any information that can identify you.
10.1 CLD employs reasonable security measures consistent with standard industry practice, for information collected through this Website. We believe that we have adequate security measures in place in our physical facilities to protect against the loss, misuse, or alteration of the information we collect on our Website. We also use internal protections to limit access to users' personal information to only those employees who need the information to perform a specific job.
11.1 If this Website is sold to, or merges with, another company not owned by CLD, you should expect that some or all of the information collected from this Website may be transferred to the buyer/surviving company. If so, CLD will seek to obligate the acquiring company to use any personal information transferred by this Website in a manner consistent with this statement, but cannot guarantee that it will be able to impose that requirement or that the acquiring company will comply.
12.1 You should be aware that CLD may be required to disclose your personal information to the government or third parties under certain circumstances, such as in court or regulatory proceedings.
13.1 If you have any questions about this Privacy Statement, the practices of this Website, or your dealings with this Website, please contact us at tuminski@ABCeramicsLLC.com.
14.1 This Agreement and the Additional Terms shall be governed by, construed and enforced in accordance with the laws of the State of Illinois, as it is applied to agreements entered into and to be performed entirely within such state, without regard to conflict of law principles.
14.2 You agree that any cause of action you or CLD brings to enforce this Agreement and/or the Additional Terms, or in connection with any matters related to this Website and/or the Privacy Statement, shall be brought only in either the state or Federal courts located in South Carolina.
14.3 You agree to submit to the personal jurisdiction of the courts of the State of Illinois for any cause of action arising out of this Agreement. You agree to file any cause of action with respect to this Agreement within one (1) year after the cause of action arises. You agree that a cause of action filed after this date is barred.
14.4 If any provision of this Agreement, or the application thereof to any person or circumstances, is held invalid or for any reason, unenforceable including, but not limited to, the warranty disclaimers and liability limitations, then such provision shall be deemed superseded by a valid, enforceable provision that matches, as closely as possible, the original provision, and the other provisions of this Agreement shall remain in full force and effect. The failure of either party to insist upon strict performance of any provision of this Agreement shall not be construed as a waiver of any provision or right. Unless expressly provided otherwise, this Agreement is the entire agreement between you and CLD with respect to the use of this CLD Website and shall not be modified except in writing, signed by an authorized representative of CLD.
15.1 This Website is governed by and operated in accordance with the laws of United States of America and is intended for enjoyment of residents of the United States. CLD makes no representation that this Website is governed by or operated in accordance with the laws of other nations. By using this Website and submitting any personal information, visitors from outside of the United States acknowledge the this Website is subject to U.S. law, consent to the transfer of personal data to the U.S., and waive any claims that may arise under their own national laws.


All gross proceeds from auction sales of new england patriots 2015 stats on police shootings 2016 by race designated NFL new england patriots 2018-19 rosterapps - home merchandise and fantasy experiences during the 2001 season will be contributed to Auction for America, EBay's relief workout. EBay's new england patriots game sunday the 25th project fi phones to buy Auction for America hopes to raise $100 million in 100 days to support the families and communities affected by the terrorist attacks of September 11.
To whom much is paid, Much is expected. which is the way of the NFL. That is the circumstance in which Cousins now finds new england patriots news sony michel newsela sign up for students himself. The Vikings have a list of 1 4 in prime time games new england patriots tv schedule 2020 supercross tv coverage this season. The Redskins were 4 9 in such games with Cousins as their starter. Cousins's teams are winless in his seven career start on "Monday Night sports, These Vikings are 0 5 1 against new england patriots coaching staff 2018 2019 movies punjabi 2018 teams that entered the match with a record of.500 or nicer.
Remain steadfast in our previously stated rules: Clarity on the road forward, Particularly depending on ability to construct through British Columbia, And ensuring adequate protection of our KML investors, Kean considered that. questions are ongoing, We are not yet in alignment and will not negotiate in public. NDP chief Jagmeet Singh, Who has made no secret of his party level of resistance to the project, Tweeted Wednesday that the costa rica government is cutting Kinder Morgan a cheque while saddling Canadian taxpayers with all the risk.peaceful home life these. A year ago, Quitting soda was unworkable. I didn't want to do it. I saved 140 cals a day for a regular soda day-to-day. I found 90 cal cans and slowly moved forward to this, new england patriots 2017 preseason results nfl draft really two a day. Took awhile but now I'm content with your one or two times a week. Considering less than a year ago, I had 2+ cans of normal soda, It's a positive change. Now I also have diet soda on weekdays however when you NEED regular, positive attitude perfect size. Just wish they didn't cost more than new england patriots wallpaper 4k anime darkness evil background regular sized cans.
One of the very famous Coca Cola commercials in history features Mean Joe Green Charles Edward Green, One of the greatest defensive lineman for the Pittsburgh Steelers in new england patriots roster 1998 vikings qb keenum case the national football league (american footbal) And the main Steel Curtain defense. found in 1979, The retail took the words, "Hey children, find, And made them heart-felt and memorable. new england patriots socks men xl eyeglasses It won a Clio award the normal of creative excellence in advertising, Design and interactions from the people who matter, a major international panel of advertising executives.
2013 new england patriots roster history alive tci pdf to excel The front office pushes who to merely get the ball to, invented Beasley, Who has got to be free agent in new england patriots draft 2018 wikiarms 223 March. Haven been a huge priority and need rest. Maybe that determines but I not sure. More balls come my way in 2 minute drill where there's nothing planned.
therefore, why? Should soccer get more American direct exposure?13Sports and RecreationWhat is the greatest sport played within the?By guy6336 5 years agoWhat is the greatest sport played across the nation?We have footballing, baseball, basketball, hockey, and the like. What do you think is the greatest sport in the and Why?Show DetailsNecessaryHubPages Device IDThis is used to spot particular browsers or devices when the access the service, And is used by security reasons. LoginThis is in order to sign in to the HubPages Service. It didn in the old days like this, acknowledged Rui Martins, The centre advertising director. Before the government passed laws in new england patriots roster 2018 wiki artemis fowl 2001 aimed at making it easier to get treatment, ended up fewer steps new england patriots live stats panel de control mac from iphone and less paperwork. in fact, Not everyone had access then because the procedure wasn government funded. this point, More people can access therapeutic recovering communities, But they have to new england patriots 2018 season wikipedia deutsch englisch go through the entire either having the treatment recommended by addictions specialists at the regional treatment centres or by the dissuasion commission. Those guidance take time.


text:
El Club Deportivo Jalapa Fútbol Club o simplemente conocido como Deportivo Jalapa, fue un club de fútbol de Guatemala con sede en el departamento de Jalapa. Fue fundado el 17 de julio de 1978 y desapareció el 6 de julio de 2011, debido a una grave crisis económica. El club tuvo participaciones en Liga Nacional, Primera División y Segunda División, a nivel internacional participó en la primera fase de la Concacaf Liga Campeones, en las ediciones de 2008-2009 y 2009-2010.

Durante su existencia, el equipo logró conquistar dos títulos de Liga Nacional, tres Torneos de Copa y dos torneos de Primera División.

Historia
Siendo presidente de La Federación de Fútbol el señor Edmundo Guerrero de estrecha amistad con el diputado por Jalapa de ese entonces Otto Rolando Ruano Reyes, consigue que un equipo de Jalapa sea Invitado a la Liga mayor «B» de ese entonces.

Es el día lunes 17 de julio de 1978, en el lugar llamado «Casino Jalapaneco» se reúnen: Humberto Rodríguez alias «Betio», Mario Escobar, Ovidio Zapata, Manuel Cañas alias «Meme», Carlos Carranza, Amabilia Grajeda, Alfonso Palma, Sergio Albino Orellana, Roberto Caceros y Nery Lucero, para conformar la Junta directiva del equipo. A finales de 1981 ganó su ascenso a la entonces llamada Liga Mayor A por primera vez en su historia, tras derrotar a la Real Sociedad de La Gomera, militando en la liga de los consagrados hasta 1991 cuando fue a un juego extra por el descenso contra Tipografía Nacional en el Estadio Carlos Salazar Hijo de Mazatenango, cayendo derrotado por marcador de 2-0 la mañana del 28 de abril de 1991. Fue hasta el 2 de junio de 2001 que logró regresar a la Liga Mayor al derrotar al Deportivo Petapa en la final de la Primera División por marcador de 3-2 en el Estadio Mateo Flores.
En 2002 ganó su primer campeonato de copa, pero también esa temporada descendió de categoría, estando en la Primera División solo una temporada, ya que en 2003 ascendió nuevamente al derrotar en la final 3-0 a la Universidad de San Carlos de Guatemala en el Estadio Mateo Flores. También se da inicio de un personaje histórico para el Deportivo Jalapa como lo es su utilero «Héctor Lima» quien a la fecha sigue fiel al club, a este mismo se le hizo un homenaje nombrando la sala de prensa del estadio con su nombre.

Primera directiva
 Presidente: Carlos Carranza.
 Vice Presidente: Manuel Cañas.
 Secretario: Nery Lucero.
 Tesorera: Amabilia Grajeda.
 Gerente Financiero: Ovidio Zapata.
 Gerente: Roberto Caceros.
 Presidente Honorario: Otto Rolando Ruano Reyes.

Presidentes

Escudo
El primer escudo utilizado era de forma circular, de color verde, dentro del mismo se encontraba escrito el nombre completo del club y tenía de fondo la imagen de un tigre. Luego se le realizaron algunas modificaciones tales como ponerle una imagen más definida del felino, y el nombre popular del equipo con letras plateadas.

Uniforme
 Uniforme titular: camiseta amarilla, pantalón verde y medias blancas.
 Uniforme alternativo: camiseta amarilla, pantalón amarillo y medias amarillas.

Estadio

Para disputar sus partidos como local, el Deportivo Jalapa utilizó el Estadio Las Flores, también conocido como Edilberto Bonilla, el cual está ubicado en la cabecera departamental de Jalapa. Este recinto deportivo cuenta con una capacidad para 15,000 espectadores. Cabe destacar que el Deportivo Jalapa también utilizó el Complejo Deportivo a mediados de los años ochenta. En el 2002 fue totalmente renovado el Estadio Las Flores, ya que se amplió su capacidad de 5,000 a 15,000 aficionados, se le colocó alumbrado eléctrico para poder jugar de noche y se le cambió el nombre de Edilberto Bonilla por el de un político local, Mario Estrada, aunque popularmente se le sigue conociendo como el Estadio Las Flores.

Datos del club
 Temporadas en Liga Nacional: 17
 Temporadas en Primera División: 11
 Temporadas en Segunda División: 1
Mayor goleada conseguida:
 En campeonatos nacionales: 5-1 a Aurora F.C. (Torneo Clausura 2004).
 En torneos internacionales: 1-0 a San Francisco (Panamá) (Concacaf Liga Campeones 2008-09)
 Mayor goleada encajada:
 En campeonatos nacionales: 8-1 de Xelajú MC (Torneo Apertura 2005).
 En torneos internacionales: 7-1 de Pachuca (Concacaf Liga Campeones 2009-10).
 Mejor puesto en la liga: 1.º (2 veces).
 Peor puesto en la liga: 12.º.
 Máximo goleador: Erwin Godoy (61 goles).
 Portero menos goleado: Porteros emblemáticos Juan Gilberto Echeverría, Geovany Salazar, Luis Pedro Molina, Ricardo Jerez Figueroa.
 Más partidos disputados: Jairo Cardona.

Jugadores

Algunos jugadores históricos del club entre ellos Lito Mora, Olmeo Sagastume, Gregorio de Paz, Rafael Álvarez Corea, Juan Gilberto Echeverría, Rodolfo Panadero, Rolando Márquez, Erik Miranda, Guillermo Ragazzone, Gerber Mazariegos, Lucio Catalino da Silva, Jorge Dos Santos, Jair Rosa, Sergio Mario Piñeiro, Jorge (el chino) Benítez,
Luis Alarcón, Obed Bonilla, Jorge Aníbal Vargas, Raúl Díaz Arce, Jorge Rodas, Juan Manuel Funes, Byron Lima, Jairo Cardona, Erwin Godoy, Nelson Morales, Robson Mattos de Moura, Silvio Aquino, Norberto Huezo, Ramón Fagoaga, Oscar Duarte, Venancio Zelaya, Ricardo Carreno, Christian Duran, Jorge Sumich, Fernando Gallo, Adrián Apellaniz, Pedro Ortiz, Hugo Iván Cojulun.

Entrenadores
 Efraín II Santander (CHI)
 Jaime Batres (GUA) (1990-1991)
 Franklin Cetre (COL) (2000-2001)
 Benjamín Monterroso (GUA) (2001-2002)
 Alberto Saguero (GUA) (2002-2005)
 Gustavo Desimone Horn (2006) (URU)
 Julio César González (URU) (2007-2008) campeón
 Héctor Trujillo (URU) (2008-2009) campeón
 Ariel Longo (URU) (2009-2010)

Palmarés

Torneos nacionales

Referencias

Enlaces externos
 Perfil de equipo: Deportivo Jalapa, UNCAF

Equipos de fútbol desaparecidos de Guatemala
Equipos de fútbol fundados en 1978
Equipos de fútbol desaparecidos en 2011


text:
<?php

/* forms/fields/input/colorpicker.html.twig */
class __TwigTemplate_947caa64003b5a1267456c62f35ad44d7629bd5a1f1169fdee6597c74e9aded9 extends Twig_Template
{
    public function __construct(Twig_Environment $env)
    {
        parent::__construct($env);

        // line 1
        $this->parent = $this->loadTemplate("forms/fields/input/group/group.html.twig", "forms/fields/input/colorpicker.html.twig", 1);
        $this->blocks = array(
            'input' => array($this, 'block_input'),
        );
    }

    protected function doGetParent(array $context)
    {
        return "forms/fields/input/group/group.html.twig";
    }

    protected function doDisplay(array $context, array $blocks = array())
    {
        $this->parent->display($context, array_merge($this->blocks, $blocks));
    }

    // line 9
    public function block_input($context, array $blocks = array())
    {
        // line 10
        echo "        ";
        $context["field"] = twig_array_merge((isset($context["field"]) ? $context["field"] : null), array("style" => ("background-color: " . (isset($context["value"]) ? $context["value"] : null)), "pattern" => "^#([a-fA-F0-9]{6})|(rgba\\(\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])\\s*,\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])\\s*,\\s*(0|[1-9]\\d?|1\\d\\d?|2[0-4]\\d|25[0-5])\\s*,\\s*((0.[0-9]+)|[01])\\s*\\))\$"));
        // line 11
        echo "
getAttribute($this, "contrast", array(0 => $this->env->getExtension('Gantry\Component\Twig\TwigExtension')->colorContrastFunc(twig_lower_filter($this->env, (isset($context["value"]) ? $context["value"] : null)))), "method");
        echo "\">
        <input
            ";
        // line 14
        echo "            type=\"text\"
            name=\"";
        // line 15
        echo twig_escape_filter($this->env, $this->env->getExtension('Gantry\Component\Twig\TwigExtension')->fieldNameFilter(((isset($context["scope"]) ? $context["scope"] : null) . (isset($context["name"]) ? $context["name"] : null))), "html", null, true);
        echo "\"
            value=\"";
        // line 16
        echo twig_escape_filter($this->env, twig_lower_filter($this->env, twig_join_filter((isset($context["value"]) ? $context["value"] : null), ", ")), "html", null, true);
        echo "\"
            ";
        // line 18
        echo "            ";
        $this->displayBlock("global_attributes", $context, $blocks);
        echo "
            ";
        // line 20
        echo "            ";
        if (twig_in_filter($this->getAttribute((isset($context["field"]) ? $context["field"] : null), "autocomplete", array()), array(0 => "on", 1 => "off"))) {
            echo "autocomplete=\"";
            echo twig_escape_filter($this->env, $this->getAttribute((isset($context["field"]) ? $context["field"] : null), "autocomplete", array()), "html", null, true);
            echo "\"";
        }
        // line 21
        echo "            ";
        if (twig_in_filter($this->getAttribute((isset($context["field"]) ? $context["field"] : null), "autofocus", array()), array(0 => "on", 1 => "true", 2 => 1))) {
            echo "autofocus=\"autofocus\"";
        }
        // line 22
        echo "            ";
        if ($this->getAttribute((isset($context["field"]) ? $context["field"] : null), "pattern", array(), "any", true, true)) {
            echo "pattern=\"";
            echo twig_escape_filter($this->env, $this->getAttribute((isset($context["field"]) ? $context["field"] : null), "pattern", array()), "html", null, true);
            echo "\"";
        }
        // line 23
        echo "            ";
        if (twig_in_filter($this->getAttribute((isset($context["field"]) ? $context["field"] : null), "disabled", array()), array(0 => "on", 1 => "true", 2 => 1))) {
            echo "disabled=\"disabled\"";
        }
        // line 24
        echo "            ";
        if ($this->getAttribute((isset($context["field"]) ? $context["field"] : null), "list", array(), "any", true, true)) {
            echo "list=\"";
            echo twig_escape_filter($this->env, $this->getAttribute((isset($context["field"]) ? $context["field"] : null), "list", array()), "html", null, true);
            echo "\"";
        }
        // line 25
        echo "            />

";
    }

    // line 3
    public function getcontrast($__value__ = null, ...$__varargs__)
    {
        $context = $this->env->mergeGlobals(array(
            "value" => $__value__,
            "varargs" => $__varargs__,
        ));

        $blocks = array();

        ob_start();
        try {
            ob_start();
            // line 4
            echo "    ";
            if ( !(isset($context["value"]) ? $context["value"] : null)) {
                // line 5
                echo "    light-text
    ";
            }
            echo trim(preg_replace('/>\s+</', '><', ob_get_clean()));
        } catch (Exception $e) {
            ob_end_clean();

            throw $e;
        } catch (Throwable $e) {
            ob_end_clean();

            throw $e;
        }

        return ('' === $tmp = ob_get_clean()) ? '' : new Twig_Markup($tmp, $this->env->getCharset());
    }

    public function getTemplateName()
    {
        return "forms/fields/input/colorpicker.html.twig";
    }

    public function isTraitable()
    {
        return false;
    }

    public function getDebugInfo()
    {
        return array (  110 => 5,  107 => 4,  94 => 3,  87 => 25,  80 => 24,  75 => 23,  68 => 22,  63 => 21,  56 => 20,  51 => 18,  47 => 16,  43 => 15,  40 => 14,  34 => 11,  31 => 10,  28 => 9,  11 => 1,);
    }

    /** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
    public function getSource()
    {
        @trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);

        return $this->getSourceContext()->getCode();
    }

    public function getSourceContext()
    {
        return new Twig_Source("", "forms/fields/input/colorpicker.html.twig", "/Users/emil/Documents/code/lundbergsab/user/plugins/gantry5/admin/templates/forms/fields/input/colorpicker.html.twig");
    }
}

redpajama_set_name: RedPajamaGithub


text:
#development
#Prague
An Orange Piano in The Office. Who Can Afford It?
New office building called the Praga Studios with a total leasable area of 11,800 sq m, located on Pernerova Street in Prague's Karlín neighbourhood, has been fully leased out. The Grand Opening of the building is being prepared for Thursday 29th August 2019.
Gallery July 14, 2019
How Can You Tell if a Building Is Certified? Check Its Toilets
Buildings can be "green" even with a white, gray, or glass facade. Have you heard about building certification? We'll bet you have. But do you know what it means, and how you can tell if a building Is certified?
Article July 2, 2019
#Bestoffice
Building of The Year: Offices That Act Like Chameleon
To visit best offices of the world you should arrange a trip to Graz, Austria. A real estate company's corporate headquarters, which is located at the highest traffic entrance to town, was awarded as the Building of the Year 2019 in ArchDaily competition. The project of seven-floor administrative building for C&P was designed by INNOCAD architects.
Gallery April 9, 2019
Former Barracks Transformed Into Offices Won The "Oscar"
The 29th MIPIM Awards, called 'Oscar' for the Property Industry', took place in the middle of March during MIPIM, the world's property market. The jury judged more than 200 entries from 58 countries. Former barracks built at the end of the eighteenth century were awarded in the category Best Office & Business Development. Look at 4 best office projects which made it into the final.
Gallery March 26, 2019
#Architecture
The Glass Dome Will Occupy Amsterdam in 2021
The new fish in the development pond, EDGE Technologies, is working on its second office building in Amsterdam. Thanks to advanced technologies, they aim at the strictest ecological sustainability criteria. The company co-works with architects who originally designed the former building back in the 1970s.
Video October 22, 2018
Visionary Opened Its Doors and Running Track to Public
Visionary office building in Holešovice in Prague opened its doors to the public at the end of August. Visitors had the opportunity not only to inspect the building, but also to test the runway on the roof and the nearby playground.
Gallery September 3, 2018


Could freestanding birth centers and bundled payments slow spiraling costs for maternal care – and decrease C-Sections?
The steady rise in C-sections from 21 percent of births in 1996 to 32 percent today is a major quality and cost problem.
The trend has been associated with a significant increase in serious maternal complications without the expected improvement in neonatal outcomes. This suggests that up to 10 percent or almost 400,000 U.S. pregnant women annually may undergo C-sections that are not only unnecessary, but are also potentially harmful. And because C-sections cost healthcare payers nearly 50 percent more than vaginal deliveries, these unnecessary surgeries also represent needless spending.
Bundled payments have the potential to improve quality and lower the costs of healthcare – and by extension, to maternal health. The episodic nature of pregnancy and childbirth lends itself well to bundling: Designing a bundled payment initiative that safely reduces C-section deliveries would be a win from both quality and cost perspectives.
But how can bundled payments be leveraged to efficiently and effectively decrease C-section rates and improve pregnancy care? Most existing maternity care bundled payments financially reward providers who decrease costs while achieving quality goals, thereby encouraging avoidance of unnecessary interventions. Other payment initiatives have piloted a "blended payment" model, which involves reimbursing hospitals a single rate regardless of birth route (vaginal or C-section). Under this arrangement, facilities that perform more C-sections would no longer bring in more revenue.
However, it's not clear how much these changes will impact clinical practice and reduce cesarean deliveries. A recent analysis of Arkansas' statewide bundled-payment initiative, the first of its kind in the United States, noted a "small but statistically insignificant decline in the C-section rate." A blended payment pilot was successful in reducing "low-risk" C-section rates from 27-32 percent to 22-24 percent across three hospitals; however, based on our review of the data, no reduction was observed when Minnesota implemented a similar blended payment model in its Medicaid program from 2009-2012.
Rather than trying to influence provider practice around cesarean deliveries, a more effective approach may be to steer patients towards providers that already demonstrate low C-section rates and good outcomes. This is where Freestanding Birth Centers comes in. Not only do FBCs have much lower than average C-section rates compared to most hospitals, but they also perform vaginal births at a significantly lower cost.
In addition, because they provide prenatal care and birth in the same facility, their structure is well suited to paying for professional and facility care as a bundle. In this context, a bundled payment initiative that encourages low-risk women to deliver in FBCs, rather than in hospitals, may be a promising, scalable and efficient mechanism to provide high-quality care at a lower cost.
Since 2012, broad public health and professional efforts to reduce cesarean deliveries in hospitals have dropped rates by only 1 percent – from 32.9 percent in 2009 to 31.9 percent in 2016. The impact of payer-led initiatives is likely to be limited for several reasons. First, physicians generally view cesarean delivery as a decision made to optimize the safety and outcome of a specific mother and baby dyad, and will be wary of payers trying to influence birth choices through financial incentives.
Second, unlike hospitals, physicians are usually not reimbursed much more when they perform C-sections. While it is important to eliminate the current system that financially rewards institutions that have high C-section rates, this change may not have a substantial impact on provider practice. Finally, even if bundling and financial incentives could influence delivery route decisions, payers must have enough members (and, in turn, financial impact) in a particular health system to bring about changes in practice.
Nationally accredited freestanding birth centers, which perform less than 1 percent of all deliveries in the United States, deliver the full continuum of pregnancy, childbirth and postpartum care at a much lower cost than hospitals, and with excellent outcomes.
Large studies in the United States demonstrate no more adverse maternal and newborn outcomes for low-risk mothers who deliver in FBCs compared to hospitals. However, C-section rates at FBCs are significantly lower than hospital rates. In a study of over 15,000 women who were eligible and planned to give birth in an FBC at the onset of labor, only 6 percent had a cesarean delivery. The theory is that these low rates of C-section result from a focus on understanding the range of normal birth processes and avoiding unnecessary intervention.
In addition to achieving low C-section rates, the care delivery and payment structures allow FBCs to provide high-value and efficient care throughout the pregnancy episode. All routine prenatal, birth and postpartum care is delivered through the birth center, avoiding the challenges that traditional care delivery faces around care coordination and redundant services.
To demonstrate the potential cost savings associated with birth centers, we can consider a cohort of 1,000 low-risk mothers who qualify to deliver at an FBC at the onset of labor, and compare expected costs for care in a birth center compared with a hospital.
Based on national data of 1,000 women who start labor in a birth center, we can expect 150 to be transferred to a hospital before delivery, with 60 ultimately undergoing C-sections and the other 90 delivering vaginally.
In 2011, the average cost of birth center care was estimated to be $2,277, which includes all prenatal, birth and postpartum care except labs and ultrasounds. However, we may consider prices for pregnancy care in San Francisco Bay Area birth centers – the highest of which is $8,000 – to likely represent the upper limit of FBC costs around the country. In comparison, according to a 2012 report based on national claims data and consistent with our own claims database at Carrum Health, the average commercial payer reimbursement for prenatal, postpartum and vaginal birth care in a hospital is about $10,600, excluding labs and ultrasounds, and is about $4,000 more if a C-section occurs.
In our theoretical cohort of 1,000 women planning to deliver at an FBC, even if we assume that the FBC is paid the full fee ($8,000) for all 1,000 women that start in their care, and the hospital is paid the facility and provider fees for the 90 vaginal births and 60 C-section births they perform, the total costs for this cohort would be $9.7 million ($8 million to the FBC, $954,000 to the hospital for the 90 vaginal deliveries, and $840,000 to the hospital for the 60 cesarean births).
A hospital could not achieve this cost even if it had a zero percent C-section rate. For the same cohort of 1,000 women delivering in a hospital, payers would spend about $10.6 million even if all of those women delivered vaginally, based on the $10,600 average national reimbursement for pregnancy care with vaginal birth. A hospital that could achieve the FBC's 6 percent C-section rate would be reimbursed $10.8 million for this cohort of 1,000 low risk women – over $1 million more than an FBC.
It's estimated that 85 percent, or approximately 3.4 million births in the United States, could be eligible for birth center care. If we assume that only 5 percent of women (170,000) would be eligible for and interested in care at an FBC, the costs to deliver all pregnancy, delivery and postpartum care to these women would be $1.67 billion.
The costs for the same cohort receiving traditional care with birth in a hospital would be significantly higher; if we assume that hospitals are able to achieve the same low C-section rate as FBCs (6 percent), costs of care would be $1.84 billion – almost $200 million more than at FBCs. Given the average hospital C-section rate among low-risk first-time mothers in the United States is 25.9 percent, the actual costs of care in hospitals would likely be much higher than this estimate – and therefore, the expected cost savings from providing care through FBCs even more significant.
Payer-led initiatives are unlikely to dramatically reduce hospital C-section rates and cost – but bundled payments for FBCs may be able to deliver the cost savings and reduced interventions that other initiatives cannot. A bundled payment model, as well as a strategy to enlighten patients and providers on the benefits of FBCs, could deliver significant value.
By providing low-risk women the option to receive care at FBCs, payers can not only reduce costs but improve quality. In addition, they can offer women a choice that may be more appealing based on their personal values and preferences. Not all women will be appropriate candidates for care through a birth center, and many will prefer to deliver in a hospital. But with strong evidence that women are turning away from hospitals for fear of unnecessary intervention, providing FBCs as an option for care is a win-win for both payers and beneficiaries.
The views, opinions and positions expressed within these guest posts are those of the author alone and do not represent those of Becker's Hospital Review/Becker's Healthcare. The accuracy, completeness and validity of any statements made within this article are not guaranteed. We accept no liability for any errors, omissions or representations. The copyright of this content belongs to the author and any liability with regards to infringement of intellectual property rights remains with them.


Taking care of a home is a never ending job. Repair, maintenance and general upkeep are among the most challenging problems that property owners face for having their own residence. This is especially true when it comes roofing. Roofs are arguably the most important part of a house. When they are damaged or become worn out they will need to be replaced or repaired. Keep reading to discover the current rooftop trends that are taking place in the housing industry today.
In today's roofing market, there are so many choices for homeowners to choose from. They can have fiber glass, metal, plastic, wood, asphalt, tile and slate. There are many other types of materials they can use as well. Asphalt shingles are more commonly used for homes than any other type as reported by the website Angie's List. Asphalt shingles are durable, dependable, relatively inexpensive and they are manufactured in a wide variety of colors and styles. People also like metal and slate roofing for the same reasons, even though these materials are slightly more expensive. These roofing choices help homeowners to keep their houses in good shape without spending too much money.
Does Your Home Have A Cool Roof?
Some people have houses with "cooler" roofs than others. How is this possible? Well, the U.S. Department of Energy informs us that cool roofs are designed to reflect more sunlight and absorb less heat. This type of roof is suited for warm to hot climates where the weather is fairly warm for most of the year. Many homes in America's southwest will benefit from this type of roof. So will homes that are situated in the south and in the western region of the country. Cool roofs are designed by using reflective paint that forces the light away. This in turn helps to keep homes cooler during the summer months when the heat is on. Ultimately, cool roofs reduce a home's energy bill and it can make a room at least 10 degrees cooler which can make a huge difference to a person's comfort when the heat is blazing outside. Any roofers cincinnati oh can place these types of shingles on a residential home for a fee.
Tesla's Solar Roof company is set to start delivering new solar roof shingles in 2019. These roofing shingles will be individualized solar panel units that will be connected to a person's grid for providing electricity. Remember, most solar roofs use panels to generate electricity. Having independent shingles will provide people with better results for their electrical generation. Many home builders around the country are already placing their order for this new style of roofing shingle. Roofs are constantly being upgraded and made with better materials. Homeowners know that their roofs are important to their home's environment. Roofs will ensure that houses are protected from the elements, safeguarded from intruders and that they improve the curbside appeal of a person's private property.
Is A Metal Roof What You're Looking For Your Home?