off(event, el, callback, options) {
        const events =  event.split(' ')

        for (let i = 0; i < events.length; i++) {
			if (el === undefined) {
				listeners[events[i]] = []
				continue
			}

			if (typeof el === 'function') {
				makeBusStack(events[i])

				for (let n = 0; n < listeners[events[i]].length; n++) {
					if (listeners[events[i]][n] === el) {
						listeners[events[i]].splice(n, 1)
					}
				}
				continue
			}

            const map = eventTypes[events[i]]

            if (map !== undefined) {
                map.remove(el, callback)

                if (map.size === 0) {
                    delete eventTypes[events[i]]

					if (nonBubblers.indexOf(events[i]) !== -1) {
						document.removeEventListener(events[i], handleDelegation, true)
					} else {
						document.removeEventListener(events[i], handleDelegation)
					}
                    continue
                }
            }

            if (el.removeEventListener !== undefined) {
                el.removeEventListener(events[i], callback, options)
                continue
            }

            el = maybeRunQuerySelector(el)

            for (let n = 0; n < el.length;n++) {
                el[n].removeEventListener(events[i], callback, options)
            }
        }
    }
Remove a callback from a DOM element, or one or all Bus events.

@param {string} event
@param {string|NodeList|HTMLElement|Element|window|Undefined} [el]
@param {*} [callback]
@param {{}|boolean} [options]