function expandProperties(animation, properties) {
    var tweens = animation.tweens = Object.create(null),
        elements = animation.elements,
        element = animation.element,
        elementArrayIndex = elements.indexOf(element),
        data = Data(element),
        queue = getValue(animation.queue, animation.options.queue),
        duration = getValue(animation.options.duration, defaults$1.duration);
    for (var property in properties) {
        if (properties.hasOwnProperty(property)) {
            var propertyName = camelCase(property),
                fn = getNormalization(element, propertyName);
            var valueData = properties[property];
            if (!fn && propertyName !== "tween") {
                if (Velocity$$1.debug) {
                    console.log("Skipping \"" + property + "\" due to a lack of browser support.");
                }
                continue;
            }
            if (valueData == null) {
                if (Velocity$$1.debug) {
                    console.log("Skipping \"" + property + "\" due to no value supplied.");
                }
                continue;
            }
            var tween = tweens[propertyName] = {};
            var endValue = void 0,
                startValue = void 0;
            tween.fn = fn;
            if (isFunction(valueData)) {
                // If we have a function as the main argument then resolve
                // it first, in case it returns an array that needs to be
                // split.
                valueData = valueData.call(element, elementArrayIndex, elements.length, elements);
            }
            if (Array.isArray(valueData)) {
                // valueData is an array in the form of
                // [ endValue, [, easing] [, startValue] ]
                var arr1 = valueData[1],
                    arr2 = valueData[2];
                endValue = valueData[0];
                if (isString(arr1) && (/^[\d-]/.test(arr1) || rxHex.test(arr1)) || isFunction(arr1) || isNumber(arr1)) {
                    startValue = arr1;
                } else if (isString(arr1) && Easings[arr1] || Array.isArray(arr1)) {
                    tween.easing = validateEasing(arr1, duration);
                    startValue = arr2;
                } else {
                    startValue = arr1 || arr2;
                }
            } else {
                endValue = valueData;
            }
            tween.end = commands[typeof endValue === "undefined" ? "undefined" : _typeof(endValue)](endValue, element, elements, elementArrayIndex, propertyName, tween);
            if (startValue != null || queue === false || data.queueList[queue] === undefined) {
                tween.start = commands[typeof startValue === "undefined" ? "undefined" : _typeof(startValue)](startValue, element, elements, elementArrayIndex, propertyName, tween);
                explodeTween(propertyName, tween, duration);
            }
        }
    }
}
Expand a VelocityProperty argument into a valid sparse Tween array. This
pre-allocates the array as it is then the correct size and slightly
faster to access.