anchor.diff:                         0))
                  (gen/check-num (random (length *captcha-providers*))))
   
  -          (multiple-value-bind (question answer)
  -              (funcall (nth gen/check-num *captcha-providers*))
  +          (multiple-value-bind (data question)
  +              (funcall (car (nth gen/check-num *captcha-providers*)))
  +
               (push (make-captcha :id id
  -                                :answer answer
  +                                :data data
  +                                :checker (cdr (nth gen/check-num *captcha-providers*))
                                   :time (get-universal-time))
                     *captcha-pool*)
  +
               (format nil "~d ~a" id question))))))
   
   (defun check-captcha (answer-str)
  
positive.code:   (bordeaux-threads:make-lock "captcha lock")
    "Lock protecting *CAPTCHA-POOL*")
  
  (defun register-captcha (gen/check)
    "Register CAPTCHA generator/checker functions"
    (push gen/check *captcha-providers*))
  
  (defun generate-captcha ()
    "Generate CAPTCHA for user and put it in pool"
  
negative.code: 
  ;; CAPTCHA
  (defstruct captcha
    (id      0                                     :type integer)
    (time    0                                     :type integer)
    (checker #'(lambda (x) (declare (ignore x)) t) :type function)
    data)
  
  (defvar *captcha-pool* nil
    "Pool of current (not processed and not expired yet)
     tests")
  