anchor.diff:  %% @private
   url_encode_loose(Binary) when is_binary(Binary) ->
       url_encode_loose(binary_to_list(Binary));
  +
  +url_encode_loose(Atom) when is_atom(Atom) ->
  +    url_encode_loose(atom_to_binary(Atom, utf8));
   
   url_encode_loose(String) ->
       url_encode_loose(String, []).
  
positive.code: %% @private
  url_encode(Binary) when is_binary(Binary) ->
      url_encode(unicode:characters_to_list(Binary));
  
  url_encode(String) ->
      url_encode(String, []).
  
negative.code:         "&Signature=", url_encode(Enc),
          "&Expires=", Expires
      ]),
      {_Region, _Service, _Host, Url} = get_service(Config),
      {Method, <<Url/binary, Path/binary, Qs/binary>>}.
  
  
  
  %% ===================================================================
  %% Internal
  %% ===================================================================
  
  get_service(Config) ->
      Region = to_bin(maps:get(region, Config, ?DEFAULT_REGION)),
      Service = to_bin(maps:get(service, Config, s3)),
      Scheme = to_bin(maps:get(scheme, Config, <<"https">>)),
      DefPort = case Scheme of <<"http">> -> 80; <<"https">> -> 443 end,
      Port = to_bin(maps:get(port, Config, DefPort)),
      Host = case maps:find(host, Config) of
          {ok, ConfigHost} ->
              to_bin(ConfigHost);
          error ->
              <<Service/binary, $., Region/binary, ".amazonaws.com">>
      end,
      FullHost = <<Host/binary, $:, Port/binary>>,
      Url = <<Scheme/binary, "://", FullHost/binary>>,
      {Region, Service, FullHost, Url}.
  
  
  %% @private
  