anchor.diff:                  (cons key (if parser (funcall parser val) val))))
             (split-sequence #\& body)))
   
  -(defun url-encode (string external-format)
  +(defun url-encode (string &optional (external-format *external-format*))
     "Returns a URL-encoded version of the string STRING using the external format EXTERNAL-FORMAT.
   
   According to spec https://dev.twitter.com/docs/auth/percent-encoding-parameters"
  
positive.code:   (assert (not (null *oauth-consumer-secret*)) (*oauth-consumer-secret*)
            'oauth-parameter-missing :parameter '*oauth-consumer-secret*)
    (let ((prepared-parameters (sort (loop for (key . val) in parameters
                                           collect (cons (url-encode key :utf-8)
                                                         (url-encode val :utf-8)))
                                     #'string< :key #'car)))
      (let ((parameter-string (format NIL "~{~/chirp::signature-format-parameter/~^&~}" prepared-parameters)))
        (let ((base (format NIL "~a&~a&~a" (string-upcase method) (url-encode url :utf-8) (url-encode parameter-string :utf-8)))
              (signing-key (format NIL "~a&~a" *oauth-consumer-secret* *oauth-token-secret*)))
          (hmac base signing-key)))))
  
  (defun make-signed (method url parameters)
  
negative.code:                    (t (format out "%~2,'0x" (char-code char)))))))
  
  (defun hmac (string keystring)
    (let ((hmac (ironclad:make-hmac (flexi-streams:string-to-octets keystring :external-format *external-format*) :SHA1)))
      (ironclad:update-hmac hmac (flexi-streams:string-to-octets string :external-format *external-format*))
      (base64:usb8-array-to-base64-string
       (ironclad:hmac-digest hmac))))
  
  