def METHOD_NAME(self, config: JsonDict, **kwargs: Any) -> None:
    # Load the new-style messages config if it exists. Otherwise fall back
    # to the old method.
    if "rc_message" in config:
        self.rc_message = RatelimitSettings.parse(
            config, "rc_message", defaults={"per_second": 0.2, "burst_count": 10.0}
        )
    else:
        self.rc_message = RatelimitSettings(
            key="rc_messages",
            per_second=config.get("rc_messages_per_second", 0.2),
            burst_count=config.get("rc_message_burst_count", 10.0),
        )
    # Load the new-style federation config, if it exists. Otherwise, fall
    # back to the old method.
    if "rc_federation" in config:
        self.rc_federation = FederationRatelimitSettings(**config["rc_federation"])
    else:
        self.rc_federation = FederationRatelimitSettings(
            **{
                k: v
                for k, v in {
                    "window_size": config.get("federation_rc_window_size"),
                    "sleep_limit": config.get("federation_rc_sleep_limit"),
                    "sleep_delay": config.get("federation_rc_sleep_delay"),
                    "reject_limit": config.get("federation_rc_reject_limit"),
                    "concurrent": config.get("federation_rc_concurrent"),
                }.items()
                if v is not None
            }
        )
    self.rc_registration = RatelimitSettings.parse(config, "rc_registration", {})
    self.rc_registration_token_validity = RatelimitSettings.parse(
        config,
        "rc_registration_token_validity",
        defaults={"per_second": 0.1, "burst_count": 5},
    )
    # It is reasonable to login with a bunch of devices at once (i.e. when
    # setting up an account), but it is *not* valid to continually be
    # logging into new devices.
    self.rc_login_address = RatelimitSettings.parse(
        config,
        "rc_login.address",
        defaults={"per_second": 0.003, "burst_count": 5},
    )
    self.rc_login_account = RatelimitSettings.parse(
        config,
        "rc_login.account",
        defaults={"per_second": 0.003, "burst_count": 5},
    )
    self.rc_login_failed_attempts = RatelimitSettings.parse(
        config,
        "rc_login.failed_attempts",
        {},
    )
    self.federation_rr_transactions_per_room_per_second = config.get(
        "federation_rr_transactions_per_room_per_second", 50
    )
    self.rc_admin_redaction = None
    if "rc_admin_redaction" in config:
        self.rc_admin_redaction = RatelimitSettings.parse(
            config, "rc_admin_redaction", {}
        )
    self.rc_joins_local = RatelimitSettings.parse(
        config,
        "rc_joins.local",
        defaults={"per_second": 0.1, "burst_count": 10},
    )
    self.rc_joins_remote = RatelimitSettings.parse(
        config,
        "rc_joins.remote",
        defaults={"per_second": 0.01, "burst_count": 10},
    )
    # Track the rate of joins to a given room. If there are too many, temporarily
    # prevent local joins and remote joins via this server.
    self.rc_joins_per_room = RatelimitSettings.parse(
        config,
        "rc_joins_per_room",
        defaults={"per_second": 1, "burst_count": 10},
    )
    # Ratelimit cross-user key requests:
    # * For local requests this is keyed by the sending device.
    # * For requests received over federation this is keyed by the origin.
    #
    # Note that this isn't exposed in the configuration as it is obscure.
    self.rc_key_requests = RatelimitSettings.parse(
        config,
        "rc_key_requests",
        defaults={"per_second": 20, "burst_count": 100},
    )
    self.rc_3pid_validation = RatelimitSettings.parse(
        config,
        "rc_3pid_validation",
        defaults={"per_second": 0.003, "burst_count": 5},
    )
    self.rc_invites_per_room = RatelimitSettings.parse(
        config,
        "rc_invites.per_room",
        defaults={"per_second": 0.3, "burst_count": 10},
    )
    self.rc_invites_per_user = RatelimitSettings.parse(
        config,
        "rc_invites.per_user",
        defaults={"per_second": 0.003, "burst_count": 5},
    )
    self.rc_invites_per_issuer = RatelimitSettings.parse(
        config,
        "rc_invites.per_issuer",
        defaults={"per_second": 0.3, "burst_count": 10},
    )
    self.rc_third_party_invite = RatelimitSettings.parse(
        config,
        "rc_third_party_invite",
        defaults={"per_second": 0.0025, "burst_count": 5},
    )