libs/modularize/_createHybrid.js
function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
  var isAry = bitmask & ARY_FLAG,
      isBind = bitmask & BIND_FLAG,
      isBindKey = bitmask & BIND_KEY_FLAG,
      isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG),
      isFlip = bitmask & FLIP_FLAG,
      Ctor = isBindKey ? undefined : createCtor(func);

  function wrapper() {
    var length = arguments.length,
        args = Array(length),
        index = length;

    while (index--) {
      args[index] = arguments[index];
    }
    if (isCurried) {
      var placeholder = getHolder(wrapper),
          holdersCount = countHolders(args, placeholder);
    }
    if (partials) {
      args = composeArgs(args, partials, holders, isCurried);
    }
    if (partialsRight) {
      args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
    }
    length -= holdersCount;
    if (isCurried && length < arity) {
      var newHolders = replaceHolders(args, placeholder);
      return createRecurry(
        func, bitmask, createHybrid, wrapper.placeholder, thisArg,
        args, newHolders, argPos, ary, arity - length
      );
    }
    var thisBinding = isBind ? thisArg : this,
        fn = isBindKey ? thisBinding[func] : func;

    length = args.length;
    if (argPos) {
      args = reorder(args, argPos);
    } else if (isFlip && length > 1) {
      args.reverse();
    }
    if (isAry && ary < length) {
      args.length = ary;
    }
    if (this && this !== root && this instanceof wrapper) {
      fn = Ctor || createCtor(fn);
    }
    return fn.apply(thisBinding, args);
  }
  return wrapper;
}
function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
  var isAry = bitmask & ARY_FLAG,
      isBind = bitmask & BIND_FLAG,
      isBindKey = bitmask & BIND_KEY_FLAG,
      isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG),
      isFlip = bitmask & FLIP_FLAG,
      Ctor = isBindKey ? undefined : createCtor(func);

  function wrapper() {
    var length = arguments.length,
        args = Array(length),
        index = length;

    while (index--) {
      args[index] = arguments[index];
    }
    if (isCurried) {
      var placeholder = getHolder(wrapper),
          holdersCount = countHolders(args, placeholder);
    }
    if (partials) {
      args = composeArgs(args, partials, holders, isCurried);
    }
    if (partialsRight) {
      args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
    }
    length -= holdersCount;
    if (isCurried && length < arity) {
      var newHolders = replaceHolders(args, placeholder);
      return createRecurry(
        func, bitmask, createHybrid, wrapper.placeholder, thisArg,
        args, newHolders, argPos, ary, arity - length
      );
    }
    var thisBinding = isBind ? thisArg : this,
        fn = isBindKey ? thisBinding[func] : func;

    length = args.length;
    if (argPos) {
      args = reorder(args, argPos);
    } else if (isFlip && length > 1) {
      args.reverse();
    }
    if (isAry && ary < length) {
      args.length = ary;
    }
    if (this && this !== root && this instanceof wrapper) {
      fn = Ctor || createCtor(fn);
    }
    return fn.apply(thisBinding, args);
  }
  return wrapper;
}
function createHybrid ( func , bitmask , thisArg , partials , holders , partialsRight , holdersRight , argPos , ary , arity ) { var isAry = bitmask & ARY_FLAG , isBind = bitmask & BIND_FLAG , isBindKey = bitmask & BIND_KEY_FLAG , isCurried = bitmask & ( CURRY_FLAG | CURRY_RIGHT_FLAG ) , isFlip = bitmask & FLIP_FLAG , Ctor = isBindKey ? undefined : createCtor ( func ) ; function wrapper ( ) { var length = arguments . length , args = Array ( length ) , index = length ; while ( index -- ) { args [ index ] = arguments [ index ] ; } if ( isCurried ) { var placeholder = getHolder ( wrapper ) , holdersCount = countHolders ( args , placeholder ) ; } if ( partials ) { args = composeArgs ( args , partials , holders , isCurried ) ; } if ( partialsRight ) { args = composeArgsRight ( args , partialsRight , holdersRight , isCurried ) ; } length -= holdersCount ; if ( isCurried && length < arity ) { var newHolders = replaceHolders ( args , placeholder ) ; return createRecurry ( func , bitmask , createHybrid , wrapper . placeholder , thisArg , args , newHolders , argPos , ary , arity - length ) ; } var thisBinding = isBind ? thisArg : this , fn = isBindKey ? thisBinding [ func ] : func ; length = args . length ; if ( argPos ) { args = reorder ( args , argPos ) ; } else if ( isFlip && length > 1 ) { args . reverse ( ) ; } if ( isAry && ary < length ) { args . length = ary ; } if ( this && this !== root && this instanceof wrapper ) { fn = Ctor || createCtor ( fn ) ; } return fn . apply ( thisBinding , args ) ; } return wrapper ; }
Creates a function that wraps `func` to invoke it with optional `this`
binding of `thisArg`, partial application, and currying.

@private
@param {Function|string} func The function or method name to wrap.
@param {number} bitmask The bitmask flags. See `createWrap` for more details.
@param {*} [thisArg] The `this` binding of `func`.
@param {Array} [partials] The arguments to prepend to those provided to
the new function.
@param {Array} [holders] The `partials` placeholder indexes.
@param {Array} [partialsRight] The arguments to append to those provided
to the new function.
@param {Array} [holdersRight] The `partialsRight` placeholder indexes.
@param {Array} [argPos] The argument positions of the new function.
@param {number} [ary] The arity cap of `func`.
@param {number} [arity] The arity of `func`.
@returns {Function} Returns the new wrapped function.
Creates a function that wraps func to invoke it with optional this binding of thisArg partial application and currying .