function segment_evaluator(input, state) {
    let segment = (multi) ? [] : undefined;
    let _state = (state && typeof state === 'object') ? Object.assign({}, state) : Object.assign({}, input);
    for (let key in segment_evaluations) {
      let passes = segment_evaluations[key](input, _state);
      if (passes && !multi) {
        segment = passes;
        break;
      } else if (passes && multi) segment.push(passes);
    }
    return segment;
  }
/**
   * Given state and options default data function will return segment information once a passing condition is returned
   * @param {Object} input Optional default data this argument will be used as state if state argument is not passed
   * @param {Object} state State data this argument only needs to be passed if not passing default data as the input argument
   * @return {Object} Segment data for a passing segment
   */
Given state and options default data function will return segment information once a passing condition is returned
@param {Object} input Optional default data this argument will be used as state if state argument is not passed
@param {Object} state State data this argument only needs to be passed if not passing default data as the input argument
@return {Object} Segment data for a passing segment
Given state and options default data function will return segment information once a passing condition is returned @param { Object } input Optional default data this argument will be used as state if state argument is not passed @param { Object } state State data this argument only needs to be passed if not passing default data as the input argument @return { Object } Segment data for a passing segment
function segment_evaluator(input, state) {
    let segment = (multi) ? [] : undefined;
    let _state = (state && typeof state === 'object') ? Object.assign({}, state) : Object.assign({}, input);
    for (let key in segment_evaluations) {
      let passes = segment_evaluations[key](input, _state);
      if (passes && !multi) {
        segment = passes;
        break;
      } else if (passes && multi) segment.push(passes);
    }
    return segment;
  }
function segment_evaluator ( input , state ) { let segment = ( multi ) ? [ ] : undefined ; let _state = ( state && typeof state === 'object' ) ? Object . assign ( { } , state ) : Object . assign ( { } , input ) ; for ( let key in segment_evaluations ) { let passes = segment_evaluations [ key ] ( input , _state ) ; if ( passes && ! multi ) { segment = passes ; break ; } else if ( passes && multi ) segment . push ( passes ) ; } return segment ; }
Given state and options default data function will return segment information once a passing condition is returned
 @param {Object} input Optional default data this argument will be used as state if state argument is not passed
 @param {Object} state State data this argument only needs to be passed if not passing default data as the input argument
 @return {Object} Segment data for a passing segment
Given state and options default data function will return segment information once a passing condition is returned @param { Object } input Optional default data this argument will be used as state if state argument is not passed @param { Object } state State data this argument only needs to be passed if not passing default data as the input argument @return { Object } Segment data for a passing segment