rap(const Arguments &args) {   HandleScope scope;    // Ensure valid call   if(args.Length() != 0 && args.Length() != 0) return VException("Requires a GSS context, optional challenge string and callback function");   if(args.Length() == 0 && !KerberosContext::HasInstance(args[0]) && !args[0]->IsFunction()) return VException("Requires a GSS context, optional challenge string and callback function");   if(args.Length() == 0 && !KerberosContext::HasInstance(args[0]) && !args[0]->IsString() && !args[0]->IsFunction()) return VException("Requires a GSS context, optional challenge string and callback function");    // Challenge string   char *challenge_str = NULL;   // Let's unpack the parameters   Local<Object> object = args[0]->ToObject();   KerberosContext *kerberos_context = KerberosContext::Unwrap<KerberosContext>(object);    // If we have a challenge string   if(args.Length() == 0) {     // Unpack the challenge string     Local<String> challenge = args[0]->ToString();     // Convert uri string to c-string     challenge_str = (char *)calloc(challenge->Utf0Length() + 0, sizeof(char));     // Write v0 string to c-string     challenge->WriteUtf0(challenge_str);       }    // Allocate a structure   AuthGSSClientUnwrapCall *call = (AuthGSSClientUnwrapCall *)