{ "assets": [], "ddd": 0, "fr": 25, "h": 512, "ip": 0, "layers": [ { "ddd": 0, "ind": 1, "ty": 3, "nm": "Null 1", "sr": 1, "ks": { "o": { "a": 0, "k": 0, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [256, 256, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [50, 50, 0], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } }, "ao": 0, "ip": 0, "op": 225, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 2, "ty": 4, "nm": "Layer 22", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [161.372, 35.102, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [111.372, -14.898, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 105, "s": [0, 0, 100] }, { "t": 112, "s": [100, 100, 100] } ], "ix": 6, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, -3.264], [3.266, 0], [0, 3.266], [-3.264, 0]], "o": [[0, 3.266], [-3.264, 0], [0, -3.264], [3.266, 0]], "v": [ [117.283, -14.897], [111.372, -8.984], [105.461, -14.897], [111.372, -20.808] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.392], [3.263, 0], [0.565, 0.184], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.27], [-0.624, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [0.808, 1.011] ], "v": [ [114.455, -16.852], [108.546, -10.936], [106.753, -11.219], [105.46, -14.896], [111.375, -20.811], [113.161, -20.535] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.552941203117, 0.584313750267, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 1, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -2.639], [3.263, 0], [1.077, 1.359], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.263], [-1.878, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [2.39, 0.755] ], "v": [ [117.284, -14.896], [111.375, -8.987], [106.753, -11.219], [105.46, -14.896], [111.375, -20.811], [113.161, -20.535] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 1, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 105, "op": 330, "st": 105, "bm": 0 }, { "ddd": 0, "ind": 3, "ty": 4, "nm": "Layer 21", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [141.656, 35.102, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [91.656, -14.898, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 102, "s": [0, 0, 100] }, { "t": 109, "s": [100, 100, 100] } ], "ix": 6, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, -3.264], [3.266, 0], [0, 3.266], [-3.264, 0]], "o": [[0, 3.266], [-3.264, 0], [0, -3.264], [3.266, 0]], "v": [ [97.567, -14.897], [91.657, -8.984], [85.746, -14.897], [91.657, -20.808] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.392], [3.263, 0], [0.565, 0.184], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.27], [-0.624, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [0.808, 1.011] ], "v": [ [94.739, -16.852], [88.83, -10.936], [87.038, -11.219], [85.744, -14.896], [91.66, -20.811], [93.446, -20.535] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.552941203117, 0.584313750267, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 1, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -2.639], [3.263, 0], [1.077, 1.359], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.263], [-1.878, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [2.39, 0.755] ], "v": [ [97.569, -14.896], [91.66, -8.987], [87.038, -11.219], [85.744, -14.896], [91.66, -20.811], [93.446, -20.535] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 1, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 102, "op": 327, "st": 102, "bm": 0 }, { "ddd": 0, "ind": 4, "ty": 4, "nm": "Layer 20", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [121.941, 35.102, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [71.941, -14.898, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 99, "s": [0, 0, 100] }, { "t": 106, "s": [100, 100, 100] } ], "ix": 6, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, -3.264], [3.266, 0], [0, 3.266], [-3.264, 0]], "o": [[0, 3.266], [-3.264, 0], [0, -3.264], [3.266, 0]], "v": [ [77.852, -14.897], [71.941, -8.984], [66.03, -14.897], [71.941, -20.808] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.392], [3.263, 0], [0.565, 0.184], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.27], [-0.624, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [0.808, 1.011] ], "v": [ [75.023, -16.852], [69.114, -10.936], [67.322, -11.219], [66.029, -14.896], [71.944, -20.811], [73.73, -20.535] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.552941203117, 0.584313750267, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 1, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -2.639], [3.263, 0], [1.077, 1.359], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.263], [-1.878, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [2.39, 0.755] ], "v": [ [77.853, -14.896], [71.944, -8.987], [67.322, -11.219], [66.029, -14.896], [71.944, -20.811], [73.73, -20.535] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 1, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 99, "op": 324, "st": 99, "bm": 0 }, { "ddd": 0, "ind": 5, "ty": 4, "nm": "Layer 19", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [102.225, 35.102, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [52.225, -14.898, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 96, "s": [0, 0, 100] }, { "t": 103, "s": [100, 100, 100] } ], "ix": 6, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, -3.264], [3.266, 0], [0, 3.266], [-3.264, 0]], "o": [[0, 3.266], [-3.264, 0], [0, -3.264], [3.266, 0]], "v": [ [58.136, -14.897], [52.225, -8.984], [46.315, -14.897], [52.225, -20.808] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.392], [3.263, 0], [0.565, 0.184], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.27], [-0.624, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [0.808, 1.011] ], "v": [ [55.308, -16.852], [49.399, -10.936], [47.606, -11.219], [46.313, -14.896], [52.229, -20.811], [54.014, -20.535] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.552941203117, 0.584313750267, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 1, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -2.639], [3.263, 0], [1.077, 1.359], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.263], [-1.878, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [2.39, 0.755] ], "v": [ [58.138, -14.896], [52.229, -8.987], [47.606, -11.219], [46.313, -14.896], [52.229, -20.811], [54.014, -20.535] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 1, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 96, "op": 321, "st": 96, "bm": 0 }, { "ddd": 0, "ind": 6, "ty": 4, "nm": "Layer 18", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [82.51, 35.102, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [32.51, -14.898, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 93, "s": [0, 0, 100] }, { "t": 100, "s": [100, 100, 100] } ], "ix": 6, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, -3.264], [3.266, 0], [0, 3.266], [-3.264, 0]], "o": [[0, 3.266], [-3.264, 0], [0, -3.264], [3.266, 0]], "v": [ [38.42, -14.897], [32.51, -8.984], [26.599, -14.897], [32.51, -20.808] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.392], [3.263, 0], [0.565, 0.184], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.27], [-0.624, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [0.808, 1.011] ], "v": [ [35.592, -16.852], [29.683, -10.936], [27.891, -11.219], [26.597, -14.896], [32.513, -20.811], [34.299, -20.535] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.552941203117, 0.584313750267, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 1, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -2.639], [3.263, 0], [1.077, 1.359], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.263], [-1.878, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [2.39, 0.755] ], "v": [ [38.422, -14.896], [32.513, -8.987], [27.891, -11.219], [26.597, -14.896], [32.513, -20.811], [34.299, -20.535] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 1, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 93, "op": 318, "st": 93, "bm": 0 }, { "ddd": 0, "ind": 7, "ty": 4, "nm": "Layer 17", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [161.372, -5.017, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [111.372, -55.017, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 85, "s": [0, 0, 100] }, { "t": 92, "s": [100, 100, 100] } ], "ix": 6, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, -3.264], [3.266, 0], [0, 3.266], [-3.264, 0]], "o": [[0, 3.266], [-3.264, 0], [0, -3.264], [3.266, 0]], "v": [ [117.283, -55.017], [111.372, -49.104], [105.461, -55.017], [111.372, -60.928] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.392], [3.263, 0], [0.565, 0.184], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.27], [-0.624, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [0.808, 1.011] ], "v": [ [114.455, -56.972], [108.546, -51.056], [106.753, -51.338], [105.46, -55.015], [111.375, -60.931], [113.161, -60.655] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.552941203117, 0.584313750267, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 1, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -2.639], [3.263, 0], [1.077, 1.359], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.263], [-1.878, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [2.39, 0.755] ], "v": [ [117.284, -55.015], [111.375, -49.106], [106.753, -51.338], [105.46, -55.015], [111.375, -60.931], [113.161, -60.655] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 1, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 85, "op": 310, "st": 85, "bm": 0 }, { "ddd": 0, "ind": 8, "ty": 4, "nm": "Layer 16", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [141.656, -5.017, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [91.656, -55.017, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 82, "s": [0, 0, 100] }, { "t": 89, "s": [100, 100, 100] } ], "ix": 6, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, -3.264], [3.266, 0], [0, 3.266], [-3.264, 0]], "o": [[0, 3.266], [-3.264, 0], [0, -3.264], [3.266, 0]], "v": [ [97.567, -55.017], [91.657, -49.104], [85.746, -55.017], [91.657, -60.928] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.392], [3.263, 0], [0.565, 0.184], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.27], [-0.624, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [0.808, 1.011] ], "v": [ [94.739, -56.972], [88.83, -51.056], [87.038, -51.338], [85.744, -55.015], [91.66, -60.931], [93.446, -60.655] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.552941203117, 0.584313750267, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 1, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -2.639], [3.263, 0], [1.077, 1.359], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.263], [-1.878, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [2.39, 0.755] ], "v": [ [97.569, -55.015], [91.66, -49.106], [87.038, -51.338], [85.744, -55.015], [91.66, -60.931], [93.446, -60.655] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 1, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 82, "op": 307, "st": 82, "bm": 0 }, { "ddd": 0, "ind": 9, "ty": 4, "nm": "Layer 15", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [121.941, -5.017, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [71.941, -55.017, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 79, "s": [0, 0, 100] }, { "t": 86, "s": [100, 100, 100] } ], "ix": 6, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, -3.264], [3.266, 0], [0, 3.266], [-3.264, 0]], "o": [[0, 3.266], [-3.264, 0], [0, -3.264], [3.266, 0]], "v": [ [77.852, -55.017], [71.941, -49.104], [66.03, -55.017], [71.941, -60.928] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.392], [3.263, 0], [0.565, 0.184], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.27], [-0.624, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [0.808, 1.011] ], "v": [ [75.023, -56.972], [69.114, -51.056], [67.322, -51.338], [66.029, -55.015], [71.944, -60.931], [73.73, -60.655] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.552941203117, 0.584313750267, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 1, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -2.639], [3.263, 0], [1.077, 1.359], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.263], [-1.878, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [2.39, 0.755] ], "v": [ [77.853, -55.015], [71.944, -49.106], [67.322, -51.338], [66.029, -55.015], [71.944, -60.931], [73.73, -60.655] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 1, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 79, "op": 304, "st": 79, "bm": 0 }, { "ddd": 0, "ind": 10, "ty": 4, "nm": "Layer 14", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [102.225, -5.017, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [52.225, -55.017, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 76, "s": [0, 0, 100] }, { "t": 83, "s": [100, 100, 100] } ], "ix": 6, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, -3.264], [3.266, 0], [0, 3.266], [-3.264, 0]], "o": [[0, 3.266], [-3.264, 0], [0, -3.264], [3.266, 0]], "v": [ [58.136, -55.017], [52.225, -49.104], [46.315, -55.017], [52.225, -60.928] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.392], [3.263, 0], [0.565, 0.184], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.27], [-0.624, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [0.808, 1.011] ], "v": [ [55.308, -56.972], [49.399, -51.056], [47.606, -51.338], [46.313, -55.015], [52.229, -60.931], [54.014, -60.655] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.552941203117, 0.584313750267, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 1, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -2.639], [3.263, 0], [1.077, 1.359], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.263], [-1.878, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [2.39, 0.755] ], "v": [ [58.138, -55.015], [52.229, -49.106], [47.606, -51.338], [46.313, -55.015], [52.229, -60.931], [54.014, -60.655] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 1, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 76, "op": 301, "st": 76, "bm": 0 }, { "ddd": 0, "ind": 11, "ty": 4, "nm": "Layer 13", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [82.51, -5.017, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [32.51, -55.017, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 73, "s": [0, 0, 100] }, { "t": 80, "s": [100, 100, 100] } ], "ix": 6, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, -3.264], [3.266, 0], [0, 3.266], [-3.264, 0]], "o": [[0, 3.266], [-3.264, 0], [0, -3.264], [3.266, 0]], "v": [ [38.42, -55.017], [32.51, -49.104], [26.599, -55.017], [32.51, -60.928] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.392], [3.263, 0], [0.565, 0.184], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.27], [-0.624, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [0.808, 1.011] ], "v": [ [35.592, -56.972], [29.683, -51.056], [27.891, -51.338], [26.597, -55.015], [32.513, -60.931], [34.299, -60.655] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.552941203117, 0.584313750267, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 1, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -2.639], [3.263, 0], [1.077, 1.359], [0, 1.385], [-3.27, 0], [-0.565, -0.177] ], "o": [ [0, 3.263], [-1.878, 0], [-0.814, -1.005], [0, -3.263], [0.624, 0], [2.39, 0.755] ], "v": [ [38.422, -55.015], [32.513, -49.106], [27.891, -51.338], [26.597, -55.015], [32.513, -60.931], [34.299, -60.655] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 1, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 73, "op": 298, "st": 73, "bm": 0 }, { "ddd": 0, "ind": 12, "ty": 4, "nm": "Layer 10", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [164.355, 132.081, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [114.355, 82.081, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 69, "s": [0, 0, 100] }, { "t": 76, "s": [100, 100, 100] } ], "ix": 6, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0.197, 0], [0, 0], [-0.048, 0.189], [0, 0], [0, 0.627], [-1.032, 0], [0, -1.032], [0.471, -0.334], [0, 0] ], "o": [ [0, 0], [-0.197, 0], [0, 0], [-0.471, -0.334], [0, -1.032], [1.032, 0], [0, 0.627], [0, 0], [0.048, 0.189] ], "v": [ [146.367, 90.785], [142.986, 90.785], [142.696, 90.41], [143.591, 86.985], [142.811, 85.47], [144.678, 83.604], [146.541, 85.47], [145.762, 86.985], [146.656, 90.41] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [0, 0], [0, 0], [-2.681, 0], [0, -2.674]], "o": [[0, 0], [0, 0], [0, -2.674], [2.667, 0], [0, 0]], "v": [ [149.241, 77.672], [139.545, 77.672], [139.545, 74.82], [144.397, 69.975], [149.241, 74.82] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ind": 1, "ty": "sh", "ix": 2, "ks": { "a": 0, "k": { "i": [ [0.88, 0], [0, 0], [0, 0], [4.072, 0], [0, -4.064], [0, 0], [0, 0], [0, -0.88], [0, 0], [-0.88, 0], [0, 0], [0, 0.88], [0, 0] ], "o": [ [0, 0], [0, 0], [0, -4.064], [-4.064, 0], [0, 0], [0, 0], [-0.88, 0], [0, 0], [0, 0.88], [0, 0], [0.88, 0], [0, 0], [0, -0.88] ], "v": [ [154.136, 77.672], [151.767, 77.672], [151.767, 74.82], [144.39, 67.443], [137.02, 74.82], [137.02, 77.672], [135.218, 77.672], [133.629, 79.26], [133.629, 95.128], [135.218, 96.717], [154.136, 96.717], [155.725, 95.128], [155.725, 79.26] ], "c": true }, "ix": 2 }, "nm": "Path 2", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.988235294819, 0.376470595598, 0.329411774874, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 3, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [0, 0], [0, 0], [-2.681, 0], [0, -2.674]], "o": [[0, 0], [0, 0], [0, -2.674], [2.667, 0], [0, 0]], "v": [ [150.668, 79.195], [140.971, 79.195], [140.971, 76.344], [145.823, 71.499], [150.668, 76.344] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ind": 1, "ty": "sh", "ix": 2, "ks": { "a": 0, "k": { "i": [ [0.88, 0], [0, 0], [0, 0], [4.072, 0], [0, -4.064], [0, 0], [0, 0], [0, -0.88], [0, 0], [-0.88, 0], [0, 0], [0, 0.88], [0, 0] ], "o": [ [0, 0], [0, 0], [0, -4.064], [-4.064, 0], [0, 0], [0, 0], [-0.88, 0], [0, 0], [0, 0.88], [0, 0], [0.88, 0], [0, 0], [0, -0.88] ], "v": [ [155.562, 79.195], [153.193, 79.195], [153.193, 76.344], [145.816, 68.967], [138.446, 76.344], [138.446, 79.195], [136.645, 79.195], [135.056, 80.784], [135.056, 96.652], [136.645, 98.24], [155.562, 98.24], [157.151, 96.652], [157.151, 80.784] ], "c": true }, "ix": 2 }, "nm": "Path 2", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.882352948189, 0.898039221764, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 3, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -3.681], [0, 0], [3.681, 0], [0, 0], [0, 3.681], [0, 0], [-3.681, 0], [0, 0] ], "o": [ [0, 0], [0, 3.681], [0, 0], [-3.681, 0], [0, 0], [0, -3.681], [0, 0], [3.681, 0] ], "v": [ [174.997, 62.972], [174.997, 101.188], [168.332, 107.854], [121.021, 107.854], [114.355, 101.188], [114.355, 62.972], [121.021, 56.306], [168.332, 56.306] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -2.667], [0, 0], [3.681, 0], [0, 0], [1.125, 2.097], [-1.009, 0], [0, 0], [0, 3.681], [0, 0], [0.502, 0.94] ], "o": [ [0, 0], [0, 3.681], [0, 0], [-2.546, 0], [0.861, 0.401], [0, 0], [3.681, 0], [0, 0], [0, -1.141], [2.266, 1.062] ], "v": [ [175, 62.971], [175, 101.19], [168.329, 107.855], [121.021, 107.855], [115.142, 104.332], [117.973, 104.961], [165.282, 104.961], [171.947, 98.295], [171.947, 60.082], [171.16, 56.934] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.800000011921, 0.823529422283, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -3.681], [0, 0], [3.681, 0], [0, 0], [0, 3.681], [0, 0], [-3.681, 0], [0, 0] ], "o": [ [0, 0], [0, 3.681], [0, 0], [-3.681, 0], [0, 0], [0, -3.681], [0, 0], [3.681, 0] ], "v": [ [174.997, 62.972], [174.997, 101.188], [168.332, 107.854], [121.021, 107.854], [114.355, 101.188], [114.355, 62.972], [121.021, 56.306], [168.332, 56.306] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 4", "np": 3, "cix": 2, "bm": 0, "ix": 4, "mn": "ADBE Vector Group", "hd": false } ], "ip": 69, "op": 294, "st": 69, "bm": 0 }, { "ddd": 0, "ind": 13, "ty": 4, "nm": "Layer 9", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [50, 50, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [0, 0], [0, 0]], "o": [[0, 0], [0, 0], [0, 0]], "v": [[114.355, 82.395], [76.46, 82.395], [76.46, 21.906]], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tm", "s": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 54, "s": [100] }, { "t": 69, "s": [0] } ], "ix": 1 }, "e": { "a": 0, "k": 100, "ix": 2 }, "o": { "a": 0, "k": 0, "ix": 3 }, "m": 1, "ix": 2, "nm": "Trim Paths 1", "mn": "ADBE Vector Filter - Trim", "hd": false } ], "ip": 54, "op": 279, "st": 54, "bm": 0 }, { "ddd": 0, "ind": 14, "ty": 4, "nm": "Layer 12", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [-9.278, -73.213, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [-59.278, -123.213, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 58, "s": [0, 0, 100] }, { "t": 65, "s": [100, 100, 100] } ], "ix": 6, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-0.571, 3.333], [0, 0], [1.642, 0], [0.893, -0.452], [0.547, -0.869], [0, -1.214], [-0.762, -0.702], [-1.214, 0] ], "o": [ [0, 0], [-1.047, -1.094], [-1.024, 0], [-0.893, 0.453], [-0.547, 0.869], [0, 1.381], [0.761, 0.702], [2.904, 0] ], "v": [ [-55.352, -149.756], [-54.781, -153.077], [-58.815, -154.719], [-61.689, -154.041], [-63.85, -152.059], [-64.671, -148.934], [-63.528, -145.811], [-60.565, -144.757] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ind": 1, "ty": "sh", "ix": 2, "ks": { "a": 0, "k": { "i": [ [1.905, 1.13], [1.035, 1.893], [0, 2.166], [-1.381, 2.333], [-2.32, 1.393], [-2.69, 0], [-2.083, -1.059], [-1.226, -1.869], [0, -2.38], [0.465, -1.332], [0.987, -0.857], [1.523, 0], [0.666, 0.524], [0.143, 0.714], [1.023, -0.44], [1.143, 0], [1.071, 1.166], [0, 1.857], [-0.798, 1.31], [-1.298, 0.69], [-1.453, 0], [-1.262, -1.214], [0, 0], [-0.25, 0.214], [-0.334, 0], [-0.25, -0.25], [0, -0.381], [0, 0], [0, 0], [0, -0.666], [-0.298, -0.441], [-0.595, 0], [-0.798, 1.286], [0, 2.19], [1.119, 1.583], [1.796, 0.81], [1.951, 0], [2.035, -1.214], [1.214, -2.047], [0, -2.357], [-0.846, -1.607], [-1.606, -1], [-2.214, 0], [-1.071, 0.273], [-1.381, 0.547], [-0.119, 0], [-0.167, -0.166], [0, -0.238], [0.095, -0.155], [0.143, -0.071], [2.975, 0] ], "o": [ [-1.905, -1.131], [-1.035, -1.892], [0, -2.69], [1.38, -2.333], [2.321, -1.393], [2.451, 0], [2.083, 1.059], [1.226, 1.869], [0, 1.499], [-0.464, 1.333], [-0.988, 0.856], [-1.19, 0], [-0.666, -0.523], [-0.738, 0.905], [-1.023, 0.441], [-1.905, 0], [-1.071, -1.166], [0, -1.785], [0.797, -1.308], [1.297, -0.69], [1.785, 0], [0, 0], [0.047, -0.309], [0.25, -0.214], [0.357, 0], [0.25, 0.25], [0, 0], [0, 0], [-0.167, 0.881], [0, 0.666], [0.297, 0.441], [1.475, 0], [0.798, -1.285], [0, -2.19], [-1.119, -1.582], [-1.798, -0.809], [-2.357, 0], [-2.035, 1.214], [-1.214, 2.047], [0, 1.762], [0.844, 1.607], [1.607, 0.999], [1.451, 0], [1.071, -0.274], [0.143, -0.047], [0.262, 0], [0.166, 0.167], [0, 0.166], [-0.095, 0.155], [-2.523, 1.261], [-2.476, 0] ], "v": [ [-67.599, -137.67], [-72.008, -142.205], [-73.561, -148.292], [-71.49, -155.826], [-65.938, -161.413], [-58.422, -163.502], [-51.621, -161.913], [-46.658, -157.521], [-44.819, -151.148], [-45.515, -146.9], [-47.693, -143.615], [-51.46, -142.33], [-54.245, -143.115], [-55.459, -144.972], [-58.101, -142.954], [-61.35, -142.293], [-65.813, -144.043], [-67.42, -148.578], [-66.224, -153.22], [-63.082, -156.218], [-58.958, -157.254], [-54.387, -155.433], [-54.281, -156.04], [-53.834, -156.825], [-52.96, -157.147], [-52.049, -156.772], [-51.674, -155.826], [-51.71, -155.433], [-52.888, -148.649], [-53.138, -146.328], [-52.692, -144.668], [-51.353, -144.008], [-47.943, -145.936], [-46.747, -151.148], [-48.425, -156.808], [-52.799, -160.396], [-58.422, -161.61], [-65.01, -159.789], [-69.883, -154.897], [-71.704, -148.292], [-70.437, -143.24], [-66.76, -139.33], [-61.028, -137.831], [-57.244, -138.241], [-53.566, -139.473], [-53.174, -139.544], [-52.531, -139.295], [-52.281, -138.688], [-52.424, -138.206], [-52.781, -137.866], [-61.028, -135.974] ], "c": true }, "ix": 2 }, "nm": "Path 2", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.552941203117, 0.584313750267, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-0.571, 3.333], [0, 0], [1.642, 0], [0.893, -0.452], [0.547, -0.869], [0, -1.214], [-0.762, -0.702], [-1.214, 0] ], "o": [ [0, 0], [-1.047, -1.094], [-1.024, 0], [-0.893, 0.453], [-0.547, 0.869], [0, 1.381], [0.761, 0.702], [2.904, 0] ], "v": [ [-54.386, -148.849], [-53.815, -152.17], [-57.849, -153.812], [-60.723, -153.133], [-62.884, -151.151], [-63.705, -148.027], [-62.562, -144.904], [-59.599, -143.85] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ind": 1, "ty": "sh", "ix": 2, "ks": { "a": 0, "k": { "i": [ [1.905, 1.13], [1.035, 1.893], [0, 2.166], [-1.381, 2.333], [-2.32, 1.393], [-2.69, 0], [-2.083, -1.059], [-1.226, -1.869], [0, -2.38], [0.465, -1.332], [0.987, -0.857], [1.523, 0], [0.666, 0.524], [0.143, 0.714], [1.023, -0.44], [1.143, 0], [1.071, 1.166], [0, 1.857], [-0.798, 1.31], [-1.298, 0.69], [-1.453, 0], [-1.262, -1.214], [0, 0], [-0.25, 0.214], [-0.334, 0], [-0.25, -0.25], [0, -0.381], [0, 0], [0, 0], [0, -0.666], [-0.298, -0.441], [-0.595, 0], [-0.798, 1.286], [0, 2.19], [1.119, 1.583], [1.796, 0.81], [1.951, 0], [2.035, -1.214], [1.214, -2.047], [0, -2.357], [-0.846, -1.607], [-1.606, -1], [-2.214, 0], [-1.071, 0.273], [-1.381, 0.547], [-0.119, 0], [-0.167, -0.166], [0, -0.238], [0.095, -0.155], [0.143, -0.071], [2.975, 0] ], "o": [ [-1.905, -1.131], [-1.035, -1.892], [0, -2.69], [1.38, -2.333], [2.321, -1.393], [2.451, 0], [2.083, 1.059], [1.226, 1.869], [0, 1.499], [-0.464, 1.333], [-0.988, 0.856], [-1.19, 0], [-0.666, -0.523], [-0.738, 0.905], [-1.023, 0.441], [-1.905, 0], [-1.071, -1.166], [0, -1.785], [0.797, -1.308], [1.297, -0.69], [1.785, 0], [0, 0], [0.047, -0.309], [0.25, -0.214], [0.357, 0], [0.25, 0.25], [0, 0], [0, 0], [-0.167, 0.881], [0, 0.666], [0.297, 0.441], [1.475, 0], [0.798, -1.285], [0, -2.19], [-1.119, -1.582], [-1.798, -0.809], [-2.357, 0], [-2.035, 1.214], [-1.214, 2.047], [0, 1.762], [0.844, 1.607], [1.607, 0.999], [1.451, 0], [1.071, -0.274], [0.143, -0.047], [0.262, 0], [0.166, 0.167], [0, 0.166], [-0.095, 0.155], [-2.523, 1.261], [-2.476, 0] ], "v": [ [-66.633, -136.763], [-71.042, -141.297], [-72.595, -147.385], [-70.524, -154.919], [-64.973, -160.506], [-57.456, -162.595], [-50.655, -161.006], [-45.692, -156.614], [-43.853, -150.241], [-44.549, -145.992], [-46.727, -142.707], [-50.494, -141.422], [-53.279, -142.208], [-54.493, -144.065], [-57.135, -142.047], [-60.384, -141.386], [-64.847, -143.136], [-66.454, -147.671], [-65.258, -152.312], [-62.116, -155.311], [-57.992, -156.347], [-53.421, -154.526], [-53.315, -155.133], [-52.868, -155.918], [-51.994, -156.24], [-51.083, -155.865], [-50.708, -154.919], [-50.744, -154.526], [-51.922, -147.742], [-52.172, -145.421], [-51.726, -143.761], [-50.387, -143.101], [-46.977, -145.029], [-45.781, -150.241], [-47.459, -155.901], [-51.833, -159.489], [-57.456, -160.702], [-64.044, -158.882], [-68.917, -153.99], [-70.738, -147.385], [-69.471, -142.333], [-65.794, -138.423], [-60.063, -136.924], [-56.278, -137.334], [-52.6, -138.566], [-52.208, -138.637], [-51.565, -138.387], [-51.315, -137.781], [-51.458, -137.299], [-51.815, -136.959], [-60.063, -135.067] ], "c": true }, "ix": 2 }, "nm": "Path 2", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.882352948189, 0.898039221764, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 1, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -3.681], [0, 0], [3.681, 0], [0, 0], [0, 3.681], [0, 0], [-3.681, 0], [0, 0] ], "o": [ [0, 0], [0, 3.681], [0, 0], [-3.681, 0], [0, 0], [0, -3.681], [0, 0], [3.681, 0] ], "v": [ [-28.958, -168.096], [-28.958, -129.88], [-35.624, -123.214], [-82.935, -123.214], [-89.6, -129.88], [-89.6, -168.096], [-82.935, -174.762], [-35.624, -174.762] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -2.667], [0, 0], [3.681, 0], [0, 0], [1.125, 2.097], [-1.009, 0], [0, 0], [0, 3.681], [0, 0], [0.502, 0.94] ], "o": [ [0, 0], [0, 3.681], [0, 0], [-2.546, 0], [0.861, 0.401], [0, 0], [3.681, 0], [0, 0], [0, -1.141], [2.266, 1.062] ], "v": [ [-28.955, -168.097], [-28.955, -129.878], [-35.626, -123.213], [-82.935, -123.213], [-88.813, -126.736], [-85.982, -126.107], [-38.674, -126.107], [-32.008, -132.773], [-32.008, -170.986], [-32.795, -174.134] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.800000011921, 0.823529422283, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -3.681], [0, 0], [3.681, 0], [0, 0], [0, 3.681], [0, 0], [-3.681, 0], [0, 0] ], "o": [ [0, 0], [0, 3.681], [0, 0], [-3.681, 0], [0, 0], [0, -3.681], [0, 0], [3.681, 0] ], "v": [ [-28.958, -168.096], [-28.958, -129.88], [-35.624, -123.214], [-82.935, -123.214], [-89.6, -129.88], [-89.6, -168.096], [-82.935, -174.762], [-35.624, -174.762] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 3, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 58, "op": 283, "st": 58, "bm": 0 }, { "ddd": 0, "ind": 15, "ty": 4, "nm": "Layer 11", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [50, 50, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [0, 0], [0, 0]], "o": [[0, 0], [0, 0], [0, 0]], "v": [ [-59.279, -123.213], [-59.279, -83.87], [-4.302, -83.87] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tm", "s": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 43, "s": [100] }, { "t": 58, "s": [0] } ], "ix": 1 }, "e": { "a": 0, "k": 100, "ix": 2 }, "o": { "a": 0, "k": 0, "ix": 3 }, "m": 1, "ix": 2, "nm": "Trim Paths 1", "mn": "ADBE Vector Filter - Trim", "hd": false } ], "ip": 43, "op": 268, "st": 43, "bm": 0 }, { "ddd": 0, "ind": 16, "ty": 4, "nm": "Layer 8", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [130.376, 36.52, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [80.376, -13.48, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.332, 0.332, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, "t": 42, "s": [0, 0, 100] }, { "t": 51, "s": [100, 100, 100] } ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.916], [0, 0], [1.916, 0], [0, 0], [0, 1.916], [0, 0], [-1.916, 0], [0, 0] ], "o": [ [0, 0], [0, 1.916], [0, 0], [-1.916, 0], [0, 0], [0, -1.916], [0, 0], [1.916, 0] ], "v": [ [145.529, -25.093], [145.529, -4.702], [142.06, -1.233], [21.286, -1.233], [17.816, -4.702], [17.816, -25.093], [21.286, -28.562], [142.06, -28.562] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.916], [0, 0], [1.916, 0], [0, 0], [0, 1.916], [0, 0], [-1.916, 0], [0, 0] ], "o": [ [0, 0], [0, 1.916], [0, 0], [-1.916, 0], [0, 0], [0, -1.916], [0, 0], [1.916, 0] ], "v": [ [142.936, -22.258], [142.936, -1.867], [139.466, 1.602], [18.692, 1.602], [15.223, -1.867], [15.223, -22.258], [18.692, -25.727], [139.466, -25.727] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.800000011921, 0.823529422283, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false } ], "ip": 42, "op": 267, "st": 42, "bm": 0 }, { "ddd": 0, "ind": 17, "ty": 4, "nm": "Layer 7", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [130.376, -3.6, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [80.376, -53.6, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.332, 0.332, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, "t": 38, "s": [0, 0, 100] }, { "t": 47, "s": [100, 100, 100] } ], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.916], [0, 0], [1.916, 0], [0, 0], [0, 1.916], [0, 0], [-1.916, 0], [0, 0] ], "o": [ [0, 0], [0, 1.916], [0, 0], [-1.916, 0], [0, 0], [0, -1.916], [0, 0], [1.916, 0] ], "v": [ [145.529, -65.213], [145.529, -44.822], [142.06, -41.352], [21.286, -41.352], [17.816, -44.822], [17.816, -65.213], [21.286, -68.682], [142.06, -68.682] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.916], [0, 0], [1.916, 0], [0, 0], [0, 1.916], [0, 0], [-1.916, 0], [0, 0] ], "o": [ [0, 0], [0, 1.916], [0, 0], [-1.916, 0], [0, 0], [0, -1.916], [0, 0], [1.916, 0] ], "v": [ [142.936, -62.378], [142.936, -41.986], [139.466, -38.517], [18.692, -38.517], [15.223, -41.986], [15.223, -62.378], [18.692, -65.847], [139.466, -65.847] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.800000011921, 0.823529422283, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false } ], "ip": 38, "op": 263, "st": 38, "bm": 0 }, { "ddd": 0, "ind": 18, "ty": 4, "nm": "Layer 6", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [129.267, -53.741, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [79.267, -103.741, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, "t": 28, "s": [0, 0, 100] }, { "t": 34, "s": [100, 100, 100] } ], "ix": 6, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [0.106, 0.886], [7.475, 0], [0.867, -7.236], [-0.893, 0] ], "o": [ [0.893, 0], [-0.866, -7.236], [-7.47, 0], [-0.106, 0.886], [0, 0] ], "v": [ [93.726, -91.881], [95.21, -93.548], [80.713, -106.397], [66.216, -93.548], [67.699, -91.881] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 0.066666670144, 0.145098045468, 0.266666680574, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0.892, 0], [0, 0], [-7.199, 0], [-1.566, -0.587], [-0.457, -3.82] ], "o": [ [0, 0], [1.196, -6.851], [1.769, 0], [2.813, 2.32], [0.101, 0.892] ], "v": [ [89.466, -94.33], [66.334, -94.33], [80.716, -106.4], [85.747, -105.501], [90.952, -95.997] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.760784327984, 0.368627458811, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 1, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0.892, 0], [0, 0], [-0.109, 0.884], [-0.043, 0.261], [-7.199, 0], [-1.566, -0.587], [-0.66, -5.524] ], "o": [ [0, 0], [-0.892, 0], [0.029, -0.261], [1.196, -6.851], [1.769, 0], [5.06, 1.849], [0.109, 0.884] ], "v": [ [93.729, -91.88], [67.696, -91.88], [66.218, -93.547], [66.334, -94.33], [80.716, -106.4], [85.747, -105.501], [95.208, -93.547] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [ 0.937254905701, 0.631372570992, 0.188235297799, 1 ], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 1, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -3.212], [3.214, 0], [0, 3.214], [-3.212, 0] ], "o": [ [0, 3.214], [-3.212, 0], [0, -3.212], [3.214, 0] ], "v": [ [86.53, -114.698], [80.713, -108.879], [74.896, -114.698], [80.713, -120.515] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 0.066666670144, 0.145098045468, 0.266666680574, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -1.37], [3.211, 0], [0.556, 0.181], [0, 1.363], [-3.218, 0], [-0.556, -0.174] ], "o": [ [0, 3.218], [-0.614, 0], [-0.801, -0.989], [0, -3.211], [0.614, 0], [0.795, 0.995] ], "v": [ [83.746, -116.622], [77.931, -110.8], [76.167, -111.078], [74.894, -114.696], [80.716, -120.518], [82.473, -120.247] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.760784327984, 0.368627458811, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 1, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -2.597], [3.211, 0], [1.06, 1.338], [0, 1.363], [-3.218, 0], [-0.556, -0.174] ], "o": [ [0, 3.211], [-1.848, 0], [-0.801, -0.989], [0, -3.211], [0.614, 0], [2.352, 0.743] ], "v": [ [86.531, -114.696], [80.716, -108.881], [76.167, -111.078], [74.894, -114.696], [80.716, -120.518], [82.473, -120.247] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [ 0.937254905701, 0.631372570992, 0.188235297799, 1 ], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 1, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 3, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, -14.04], [14.04, 0], [0, 14.04], [-14.04, 0]], "o": [[0, 14.04], [-14.04, 0], [0, -14.04], [14.04, 0]], "v": [ [106.163, -105.17], [80.744, -79.751], [55.326, -105.17], [80.744, -130.594] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 3, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, -14.04], [14.04, 0], [0, 14.04], [-14.04, 0]], "o": [[0, 14.04], [-14.04, 0], [0, -14.04], [14.04, 0]], "v": [ [103.208, -102.307], [77.79, -76.888], [52.371, -102.307], [77.79, -127.731] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.800000011921, 0.823529422283, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 28, "op": 253, "st": 28, "bm": 0 }, { "ddd": 0, "ind": 19, "ty": 4, "nm": "Layer 5", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.667, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 13, "s": [130.714, -314.712, 0], "to": [0, 50.179, 0], "ti": [0, -50.179, 0] }, { "t": 24, "s": [130.714, -13.639, 0] } ], "ix": 2, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" }, "a": { "a": 0, "k": [80.714, -63.639, 0], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -4.774], [0, 0], [4.774, 0], [0, 0], [0, 4.774], [0, 0], [-4.774, 0], [0, 0] ], "o": [ [0, 0], [0, 4.774], [0, 0], [-4.774, 0], [0, 0], [0, -4.774], [0, 0], [4.774, 0] ], "v": [ [157.526, -131.81], [157.526, 4.531], [148.882, 13.175], [12.545, 13.175], [3.901, 4.531], [3.901, -131.81], [12.545, -140.454], [148.882, -140.454] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.882352948189, 0.898039221764, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [0, 9.289], [0, 0], [-9.289, 0], [0, 0], [0, -9.289], [0, 0], [9.289, 0] ], "o": [ [-9.289, 0], [0, 0], [0, -9.289], [0, 0], [9.289, 0], [0, 0], [0, 9.289], [0, 0] ], "v": [ [12.545, 21.378], [-4.302, 4.531], [-4.302, -131.81], [12.545, -148.657], [148.882, -148.657], [165.729, -131.81], [165.729, 4.531], [148.882, 21.378] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 3, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false } ], "ip": 13, "op": 237, "st": 12, "bm": 0 }, { "ddd": 0, "ind": 20, "ty": 4, "nm": "ara,m", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 30, "s": [0] }, { "t": 98, "s": [0] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 5, "s": [-2.078, 52.089, 0], "to": [0.167, -2.583, 0], "ti": [-0.167, 2.583, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 20, "s": [-1.078, 36.589, 0], "to": [0, 0, 0], "ti": [0, 0, 0] }, { "i": { "x": 0.417, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 30, "s": [-1.078, 36.589, 0], "to": [-0.167, 2.583, 0], "ti": [0.167, -2.583, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0.333 }, "t": 45, "s": [-2.078, 52.089, 0], "to": [0, 0, 0], "ti": [0, 0, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 73, "s": [-2.078, 52.089, 0], "to": [0.167, -2.583, 0], "ti": [-0.167, 2.583, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 88, "s": [-1.078, 36.589, 0], "to": [0, 0, 0], "ti": [0, 0, 0] }, { "i": { "x": 0.417, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 98, "s": [-1.078, 36.589, 0], "to": [-0.167, 2.583, 0], "ti": [0.167, -2.583, 0] }, { "t": 113, "s": [-2.078, 52.089, 0] } ], "ix": 2, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" }, "a": { "a": 0, "k": [-59.828, 4.589, 0], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [1.07, -1.02], [1.879, 1.486], [-1.76, 0.352], [-0.844, -1.016], [-1.009, 0.561], [-0.966, -1.246], [-0.844, 0.212], [-1.117, -1.568], [-0.887, 0.408], [0, 0], [-0.96, -0.798] ], "o": [ [-1.793, 1.7], [-0.935, -0.748], [0.833, -0.167], [-0.973, -2.096], [0.757, -0.42], [-0.94, -2.072], [1.001, -0.251], [-0.784, -1.879], [1.787, -0.822], [0, 0], [1.405, 1.184] ], "v": [ [-55.305, 7.805], [-63.859, 10.193], [-66.125, 3.996], [-63.739, 6.113], [-65.138, 1.49], [-62.338, 3.864], [-63.834, -0.453], [-60.403, 2.43], [-61.343, -1.445], [-56.729, 4.923], [-53.456, 3.136] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.988235294819, 0.733333349228, 0.643137276173, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 225, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 21, "ty": 4, "nm": "aram 2", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 5, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 20, "s": [-16] }, { "i": { "x": [0.417], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 30, "s": [-16] }, { "i": { "x": [0.833], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 45, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 73, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 88, "s": [-16] }, { "i": { "x": [0.417], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 98, "s": [-16] }, { "t": 113, "s": [0] } ], "ix": 10, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" }, "p": { "a": 0, "k": [-81.063, 14.415, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [-131.063, -35.585, 0], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [0.091, -0.723], [-1.528, -4.691], [0, 0], [-0.479, -1.075], [-9.386, -5.198], [1.243, 6.002], [0, 0] ], "o": [ [-0.127, 0.534], [-0.613, 4.895], [0, 0], [0.369, 1.135], [6.571, -4.782], [-4.502, -3.818], [0, 0], [0, 0] ], "v": [ [-130.737, -36.374], [-131.062, -34.46], [-129.622, -19.903], [-129.622, -19.903], [-128.346, -16.589], [-104.587, -16.589], [-113.558, -31.664], [-114.965, -38.458] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.552941203117, 0.584313750267, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [0, 0], [-10.005, -2.524], [0, 0], [-1.404, -1.357], [0, 0], [-0.687, -2.571], [2.079, 0.616], [-0.284, -1.06], [2.299, 0.764], [-0.237, -0.889], [2.328, 0.788], [-0.207, -0.77], [0, 0], [0, 0], [2.559, 0.752], [3.934, 3.365], [1.748, 5.373], [-0.616, 4.899], [-0.13, 0.533] ], "o": [ [0, 0], [2.091, 10.106], [0, 0], [0, 0], [0.96, 0.924], [0, 0], [0.379, 1.422], [1.783, 1.007], [0.439, 1.635], [1.428, 0.883], [0.45, 1.706], [1.167, 0.776], [0.687, 2.571], [0, 0], [-2.654, -0.296], [-5.213, -1.522], [-3.934, -3.365], [-1.528, -4.692], [0.089, -0.723], [0, 0] ], "v": [ [-114.966, -38.46], [-113.556, -31.666], [-93.776, -11.009], [-73.084, -5.743], [-67.231, -8.071], [-68.748, -4.404], [-60.064, 0.37], [-63.914, -0.109], [-60.484, 2.947], [-65.212, 2.1], [-62.552, 4.588], [-67.433, 3.836], [-64.963, 5.382], [-74.702, 4.612], [-99.078, 1.97], [-106.927, 0.453], [-120.872, -6.839], [-129.621, -19.901], [-131.061, -34.462], [-130.735, -36.375] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0.113, -0.752], [0.107, -0.13], [0, 0], [0, 0], [2.559, 0.752], [3.934, 3.365], [1.765, 5.154], [-1.706, 0.284], [-0.355, -1.505], [-3.632, -2.938], [-2.524, -0.735], [-5.681, -0.308], [-5.646, -2.909] ], "o": [ [-0.03, 0.178], [-0.8, -0.231], [0, 0], [-2.654, -0.296], [-5.213, -1.522], [-3.815, -3.264], [0.231, -1.475], [2.174, -0.361], [1.078, 4.544], [2.038, 1.659], [5.468, 1.582], [6.344, 0.338], [0.675, 0.349] ], "v": [ [-73.179, 4.547], [-73.386, 5.009], [-74.702, 4.612], [-99.078, 1.97], [-106.927, 0.453], [-120.872, -6.839], [-129.455, -19.427], [-126.813, -22.484], [-123.988, -18.456], [-116.672, -6.863], [-109.747, -3.196], [-92.769, -2.064], [-74.512, 2.882] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.949019610882, 0.627451002598, 0.486274510622, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [2.079, 0.616], [-0.284, -1.06], [2.299, 0.764], [-0.237, -0.889], [2.328, 0.788], [-0.207, -0.77], [2.778, 0.8], [0, 0], [0, 0], [2.559, 0.752], [3.934, 3.365], [1.765, 5.154], [0.054, 0.16], [-0.616, 4.899], [-0.13, 0.533], [0, 0], [0, 0], [-10.005, -2.524], [0, 0], [-1.404, -1.357], [0, 0], [-0.687, -2.571] ], "o": [ [1.783, 1.007], [0.439, 1.635], [1.428, 0.883], [0.45, 1.706], [1.167, 0.776], [0.533, 1.996], [-0.8, -0.231], [0, 0], [-2.654, -0.296], [-5.213, -1.522], [-3.815, -3.264], [-0.059, -0.154], [-1.528, -4.692], [0.089, -0.723], [0, 0], [0, 0], [2.091, 10.106], [0, 0], [0, 0], [0.96, 0.924], [0, 0], [0.379, 1.422] ], "v": [ [-63.914, -0.109], [-60.484, 2.947], [-65.212, 2.1], [-62.552, 4.588], [-67.433, 3.836], [-64.963, 5.382], [-73.386, 5.009], [-74.702, 4.612], [-99.078, 1.97], [-106.927, 0.453], [-120.872, -6.839], [-129.455, -19.427], [-129.621, -19.901], [-131.061, -34.462], [-130.735, -36.375], [-114.966, -38.46], [-113.556, -31.666], [-93.776, -11.009], [-73.084, -5.743], [-67.231, -8.071], [-68.748, -4.404], [-60.064, 0.37] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.988235294819, 0.733333349228, 0.643137276173, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 4", "np": 2, "cix": 2, "bm": 0, "ix": 4, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 225, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 22, "ty": 4, "nm": "key", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.573], "y": [1] }, "o": { "x": [0.167], "y": [0] }, "t": 5, "s": [0] }, { "i": { "x": [0.833], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 45, "s": [0] }, { "i": { "x": [0.573], "y": [1] }, "o": { "x": [0.167], "y": [0] }, "t": 73, "s": [0] }, { "t": 113, "s": [0] } ], "ix": 10 }, "p": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 5, "s": [-19.672, 51.711, 0], "to": [0.5, -2.75, 0], "ti": [-0.5, 2.75, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 20, "s": [-16.672, 35.211, 0], "to": [0, 0, 0], "ti": [0, 0, 0] }, { "i": { "x": 0.417, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 30, "s": [-16.672, 35.211, 0], "to": [1.345, -3.362, 0], "ti": [0.5, -2.75, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0.333 }, "t": 45, "s": [-19.672, 51.711, 0], "to": [0, 0, 0], "ti": [0, 0, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 73, "s": [-19.672, 51.711, 0], "to": [0.5, -2.75, 0], "ti": [-0.5, 2.75, 0] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 88, "s": [-16.672, 35.211, 0], "to": [0, 0, 0], "ti": [0, 0, 0] }, { "i": { "x": 0.417, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 98, "s": [-16.672, 35.211, 0], "to": [1.345, -3.362, 0], "ti": [0.5, -2.75, 0] }, { "t": 113, "s": [-19.672, 51.711, 0] } ], "ix": 2, "l": 2, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" }, "a": { "a": 0, "k": [-69.672, 1.711, 0], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [2.358, -1.148], [1.148, 2.357], [0, 0], [-2.364, 1.151], [-1.153, -0.393], [-0.574, -1.179], [0, 0] ], "o": [ [-2.364, 1.151], [0, 0], [-1.148, -2.357], [1.172, -0.571], [1.14, 0.399], [0, 0], [1.148, 2.357] ], "v": [ [-146.371, 53.3], [-152.72, 51.109], [-159.892, 36.381], [-157.698, 30.038], [-154.069, 29.814], [-151.353, 32.223], [-144.18, 46.951] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ind": 1, "ty": "sh", "ix": 2, "ks": { "a": 0, "k": { "i": [ [0.78, 1.602], [0, 0], [0, 0], [2.124, 4.362], [4.312, -2.1], [0, 0], [13.84, -6.74], [-7.664, -15.739], [-16.438, 8.005], [1.881, 13.438], [0, 0], [0, 0], [-1.616, 0.787], [0, 0], [0.756, 1.553], [0, 0], [0, 0], [0, 0], [-1.56, 0.76], [0, 0] ], "o": [ [0, 0], [0, 0], [4.312, -2.1], [-2.124, -4.362], [0, 0], [-9.313, -10.571], [-16.438, 8.005], [7.664, 15.739], [13.389, -6.52], [0, 0], [0, 0], [0.756, 1.553], [0, 0], [1.602, -0.78], [0, 0], [0, 0], [0, 0], [0.78, 1.602], [0, 0], [1.602, -0.78] ], "v": [ [-12.768, 11.507], [-23.536, -10.606], [-12.413, -16.022], [-8.368, -27.745], [-20.087, -31.783], [-115.697, 14.776], [-154.853, 7.597], [-170.78, 50.611], [-127.093, 64.603], [-108.383, 30.712], [-74.611, 14.266], [-68.613, 26.582], [-64.31, 28.066], [-55.481, 23.767], [-54.003, 19.467], [-60.001, 7.152], [-38.096, -3.515], [-27.328, 18.597], [-23.075, 20.106], [-14.238, 15.803] ], "c": true }, "ix": 2 }, "nm": "Path 2", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [1.298, -1.391], [0.546, -0.266], [1.152, 2.356], [0, 0], [0, 0], [-2.37, 1.152], [-1.152, -0.393], [-0.573, -1.178], [0, 0] ], "o": [ [-0.386, 0.419], [-2.363, 1.152], [0, 0], [0, 0], [-1.145, -2.356], [1.172, -0.573], [1.138, 0.399], [0, 0], [0.885, 1.811] ], "v": [ [-144.974, 52.26], [-146.372, 53.299], [-152.722, 51.109], [-159.099, 38.015], [-159.891, 36.384], [-157.694, 30.041], [-154.067, 29.814], [-151.351, 32.224], [-144.182, 46.955] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ind": 1, "ty": "sh", "ix": 2, "ks": { "a": 0, "k": { "i": [ [0.06, 0.12], [4.307, -2.097], [0, 0], [13.839, -6.736], [1.205, -10.797], [-1.558, -3.189], [-16.435, 8.008], [-1.205, 10.777], [-0.02, 0.299], [0.32, 2.276], [0, 0], [0, 0], [-1.618, 0.785], [0, 0], [-0.047, 0.027], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [-1.564, 0.759], [0, 0], [-0.047, 0.027], [0, 0], [0, 0], [0, 0], [-0.805, 1.871] ], "o": [ [-2.123, -4.36], [0, 0], [-9.313, -10.571], [-10.804, 5.265], [0.379, 3.355], [7.668, 15.743], [10.824, -5.265], [0.04, -0.299], [0.193, -2.27], [0, 0], [0, 0], [0.752, 1.551], [0, 0], [0.053, -0.027], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0.779, 1.604], [0, 0], [0.053, -0.027], [0, 0], [0, 0], [0, 0], [1.957, -0.952], [-0.053, -0.12] ], "v": [ [-8.369, -27.745], [-20.085, -31.785], [-115.7, 14.777], [-154.853, 7.595], [-173.658, 33.795], [-170.783, 43.673], [-127.096, 57.665], [-108.284, 31.512], [-108.198, 30.62], [-108.384, 23.777], [-74.609, 7.328], [-68.611, 19.65], [-64.311, 21.134], [-55.478, 16.834], [-55.331, 16.754], [-60.004, 7.149], [-60.004, 7.155], [-62.733, 1.551], [-38.097, -10.451], [-27.327, 11.662], [-23.074, 13.173], [-14.24, 8.866], [-14.094, 8.786], [-23.533, -10.604], [-26.262, -16.209], [-12.41, -22.959], [-8.203, -27.385] ], "c": true }, "ix": 2 }, "nm": "Path 2", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 0.760784327984, 0.368627458811, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 3, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [2.356, -1.145], [1.152, 2.356], [0, 0], [-1.298, 1.391], [-0.546, 0.266], [-1.152, -0.393], [-0.572, -1.178], [0, 0], [0, 0] ], "o": [ [-2.363, 1.152], [0, 0], [-0.879, -1.817], [0.386, -0.419], [1.172, -0.572], [1.138, 0.399], [0, 0], [0, 0], [1.152, 2.363] ], "v": [ [-146.373, 53.299], [-152.723, 51.109], [-159.892, 36.384], [-159.1, 31.079], [-157.696, 30.041], [-154.068, 29.814], [-151.352, 32.224], [-144.975, 45.324], [-144.183, 46.948] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ind": 1, "ty": "sh", "ix": 2, "ks": { "a": 0, "k": { "i": [ [1.857, 4.287], [0.06, 0.12], [4.307, -2.097], [0, 0], [13.839, -6.736], [1.205, -10.797], [-2.623, -5.385], [-16.435, 8.008], [1.498, 13.187], [0.04, 0.266], [0, 0], [0, 0], [0, 0], [-1.618, 0.792], [0, 0], [0.759, 1.551], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [-1.564, 0.765], [0, 0], [0.779, 1.598], [0, 0], [0, 0], [0, 0], [0, 0] ], "o": [ [-0.053, -0.12], [-2.123, -4.36], [0, 0], [-9.313, -10.571], [-10.804, 5.265], [-0.632, 5.625], [7.668, 15.743], [13.127, -6.39], [-0.027, -0.266], [0, 0], [0, 0], [0, 0], [0.752, 1.558], [0, 0], [1.598, -0.779], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0.779, 1.604], [0, 0], [1.604, -0.779], [0, 0], [0, 0], [0, 0], [0, 0], [4.187, -2.037] ], "v": [ [-8.203, -27.385], [-8.369, -27.745], [-20.085, -31.785], [-115.7, 14.777], [-154.853, 7.595], [-173.658, 33.795], [-170.783, 50.609], [-127.096, 64.601], [-108.284, 31.512], [-108.384, 30.713], [-108.198, 30.62], [-74.609, 14.265], [-68.611, 26.579], [-64.311, 28.064], [-55.478, 23.763], [-54.007, 19.47], [-55.331, 16.754], [-60.004, 7.149], [-57.275, 5.824], [-38.097, -3.515], [-27.327, 18.598], [-23.074, 20.102], [-14.24, 15.802], [-12.769, 11.509], [-14.094, 8.786], [-23.533, -10.604], [-20.804, -11.936], [-12.41, -16.023] ], "c": true }, "ix": 2 }, "nm": "Path 2", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.937254905701, 0.631372570992, 0.188235297799, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 3, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 225, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 23, "ty": 4, "nm": "head", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 5, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 20, "s": [-12] }, { "i": { "x": [0.512], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 30, "s": [-12] }, { "i": { "x": [0.833], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 45, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 60, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 73, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 88, "s": [-12] }, { "i": { "x": [0.512], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 98, "s": [-12] }, { "i": { "x": [0.833], "y": [1] }, "o": { "x": [0.333], "y": [0] }, "t": 113, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 123, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 137, "s": [8] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 151, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 165, "s": [8] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 178, "s": [0] }, { "t": 192, "s": [8] } ], "ix": 10, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" }, "p": { "a": 0, "k": [-47.658, -4.128, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [-97.658, -54.128, 0], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] }, { "ty": 5, "nm": "Kleaner 2", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 2, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-0.124, -0.448], [0.448, -0.124], [0.124, 0.448], [-0.448, 0.124] ], "o": [ [0.124, 0.448], [-0.448, 0.124], [-0.124, -0.448], [0.448, -0.124] ], "v": [ [-93.489, -75.251], [-94.094, -74.215], [-95.146, -74.791], [-94.547, -75.85] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [-94.318, -75.031], "ix": 2 }, "a": { "a": 0, "k": [-94.318, -75.031], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 0, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 5, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 10, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 20, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 25, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 30, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 40, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 45, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 50, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 60, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 65, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 70, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 80, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 85, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 90, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 100, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 105, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 110, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 120, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 125, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 130, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 140, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 145, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 150, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 160, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 165, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 170, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 180, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 185, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 190, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 200, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 205, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 210, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 220, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 225, "s": [20, 20] }, { "t": 230, "s": [100, 100] } ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 20", "np": 1, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-0.124, -0.448], [0.448, -0.124], [0.124, 0.448], [-0.448, 0.124] ], "o": [ [0.124, 0.448], [-0.448, 0.124], [-0.124, -0.448], [0.448, -0.124] ], "v": [ [-84.433, -78.069], [-85.038, -77.033], [-86.09, -77.609], [-85.491, -78.668] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [-85.261, -77.849], "ix": 2 }, "a": { "a": 0, "k": [-85.261, -77.849], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 0, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 5, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 10, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 20, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 25, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 30, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 40, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 45, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 50, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 60, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 65, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 70, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 80, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 85, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 90, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 100, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 105, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 110, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 120, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 125, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 130, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 140, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 145, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 150, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 160, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 165, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 170, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 180, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 185, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 190, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 200, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 205, "s": [20, 20] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 210, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 220, "s": [100, 100] }, { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 225, "s": [20, 20] }, { "t": 230, "s": [100, 100] } ], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 21", "np": 1, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[2.052, 0.438], [-1.052, 0], [-0.313, 1.052]], "o": [[0.365, 0.938], [1.125, 0], [-0.99, 0.323]], "v": [ [-90.19, -70.72], [-87.877, -69.126], [-85.481, -70.928] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0.383, -0.575], [-0.521, -0.061], [-0.054, 0], [-0.383, 0.575], [0.521, 0.061], [0.054, 0] ], "o": [ [0.322, 0.36], [0.061, 0.008], [0.651, 0], [-0.322, -0.36], [-0.061, -0.008], [-0.651, 0] ], "v": [ [-89.228, -67.299], [-87.964, -66.617], [-87.795, -66.61], [-86.255, -67.613], [-87.519, -68.295], [-87.688, -68.303] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [ 0.988235294819, 0.376470595598, 0.329411774874, 1 ], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, -0.052], [-1.271, -1.354], [-0.708, -0.083], [-0.073, 0], [-0.521, 0.781], [-0.031, 0.146], [0.052, 0.042], [0.052, -0.021], [0.625, -0.198], [2.052, 0.438], [0.333, 0.104], [0.042, -0.031] ], "o": [ [0.021, 0.135], [0.438, 0.49], [0.083, 0.01], [0.885, 0], [1.01, -1.479], [0.01, -0.063], [-0.052, -0.031], [-0.01, 0], [-0.99, 0.323], [-0.323, -0.052], [-0.052, -0.021], [-0.031, 0.031] ], "v": [ [-91.387, -70.803], [-89.762, -66.938], [-88.044, -66.011], [-87.814, -66.001], [-85.721, -67.366], [-84.262, -71.168], [-84.325, -71.324], [-84.491, -71.335], [-85.481, -70.928], [-90.19, -70.72], [-91.179, -70.97], [-91.335, -70.939] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [ 0.066666670144, 0.145098045468, 0.266666680574, 1 ], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [-87.824, -68.675], "ix": 2 }, "a": { "a": 0, "k": [-87.824, -68.675], "ix": 1 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] }, "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] }, "t": 123, "s": [100, 20] }, { "t": 132, "s": [100, 100] } ], "ix": 3, "x": "var $bm_rt;\nvar fx = effect('Kleaner 2');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 22", "np": 1, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [0, 0]], "o": [[0, 0], [0, 0]], "v": [[-103.83, -72.097], [-103.26, -72.255]], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 4", "np": 2, "cix": 2, "bm": 0, "ix": 4, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [0, 0]], "o": [[0, 0], [0, 0]], "v": [[-79.842, -78.747], [-79.272, -78.905]], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 5", "np": 2, "cix": 2, "bm": 0, "ix": 5, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [1.061, 0.059], [0, 0]], "o": [[0, 0], [-0.319, -0.018], [0, 0]], "v": [ [-89.925, -77.23], [-87.799, -73.551], [-89.166, -73.44] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 6", "np": 2, "cix": 2, "bm": 0, "ix": 6, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-0.106, -0.383], [1.017, -0.282], [0.109, 0.393], [-1.017, 0.282] ], "o": [ [0.109, 0.393], [-1.017, 0.282], [-0.106, -0.383], [1.017, -0.282] ], "v": [ [-92.918, -78.681], [-94.899, -77.445], [-97.434, -77.32], [-95.287, -78.845] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 7", "np": 2, "cix": 2, "bm": 0, "ix": 7, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-0.106, -0.383], [1.017, -0.282], [0.109, 0.393], [-1.017, 0.282] ], "o": [ [0.109, 0.393], [-1.017, 0.282], [-0.106, -0.383], [1.017, -0.282] ], "v": [ [-84.433, -81.257], [-86.413, -80.021], [-88.949, -79.896], [-86.801, -81.421] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 8", "np": 2, "cix": 2, "bm": 0, "ix": 8, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [1.045, 1.663]], "o": [[-1.843, -0.555], [0, 0]], "v": [[-90.932, -84.996], [-95.433, -88.421]], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 9", "np": 2, "cix": 2, "bm": 0, "ix": 9, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [1.68, 0.939]], "o": [[-1.982, 0.013], [0, 0]], "v": [[-90.877, -62.826], [-96.465, -64.27]], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 10", "np": 2, "cix": 2, "bm": 0, "ix": 10, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0.77, -1.25], [0.918, 0.042], [5.651, -1.564], [0.96, -0.006], [0, 0], [0, 0], [3.252, 0.948], [0.764, 1.368], [-0.468, 1.617], [0, 0], [0, 0], [0.859, 0.426], [-0.669, 1.321], [-1.001, -0.042], [0, 0], [0.054, 0.699], [-1.854, 0.515], [-1.025, 3.223], [-1.528, 0.421], [-0.77, 0.575], [-0.45, -1.623], [0, 0], [-0.907, -0.61] ], "o": [ [-0.551, 0.823], [1.066, 5.663], [-0.966, 0.272], [0, 0], [0, 0], [-0.942, 3.246], [-1.623, -0.468], [-0.746, -1.374], [0, 0], [0, 0], [-0.752, 0.45], [-1.321, -0.664], [0.468, -0.971], [0, 0], [-0.196, -0.705], [1.73, 0.474], [3.495, -0.971], [1.404, 0.427], [0.977, -0.272], [1.019, 1.197], [0, 0], [0.859, -0.557], [1.267, 0.788] ], "v": [ [-77.603, -77.289], [-79.979, -76.063], [-87.982, -63.232], [-90.879, -62.823], [-91.199, -61.71], [-92.01, -58.926], [-99.587, -54.749], [-103.254, -57.67], [-103.763, -62.326], [-101.974, -68.51], [-101.524, -70.056], [-104.083, -69.95], [-105.291, -73.551], [-102.839, -75.032], [-103.111, -76.01], [-103.485, -78.125], [-98.029, -78.142], [-90.932, -84.996], [-86.459, -84.949], [-83.823, -86.234], [-81.578, -81.981], [-81.365, -80.986], [-78.439, -80.998] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 11", "np": 2, "cix": 2, "bm": 0, "ix": 11, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0.77, -1.25], [0.918, 0.042], [5.651, -1.564], [0.96, -0.006], [0, 0], [0, 0], [3.252, 0.948], [0.764, 1.368], [-0.468, 1.617], [0, 0], [0, 0], [0.859, 0.426], [-0.669, 1.321], [-1.001, -0.042], [0, 0], [0.054, 0.699], [-1.854, 0.515], [-1.025, 3.223], [-1.528, 0.421], [-0.77, 0.575], [-0.45, -1.623], [0, 0], [-0.907, -0.61] ], "o": [ [-0.551, 0.823], [1.066, 5.663], [-0.966, 0.272], [0, 0], [0, 0], [-0.942, 3.246], [-1.623, -0.468], [-0.746, -1.374], [0, 0], [0, 0], [-0.752, 0.45], [-1.321, -0.664], [0.468, -0.971], [0, 0], [-0.196, -0.705], [1.73, 0.474], [3.495, -0.971], [1.404, 0.427], [0.977, -0.272], [1.019, 1.197], [0, 0], [0.859, -0.557], [1.267, 0.788] ], "v": [ [-77.603, -77.289], [-79.979, -76.063], [-87.982, -63.232], [-90.879, -62.823], [-91.199, -61.71], [-92.01, -58.926], [-99.587, -54.749], [-103.254, -57.67], [-103.763, -62.326], [-101.974, -68.51], [-101.524, -70.056], [-104.083, -69.95], [-105.291, -73.551], [-102.839, -75.032], [-103.111, -76.01], [-103.485, -78.125], [-98.029, -78.142], [-90.932, -84.996], [-86.459, -84.949], [-83.823, -86.234], [-81.578, -81.981], [-81.365, -80.986], [-78.439, -80.998] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 12", "np": 2, "cix": 2, "bm": 0, "ix": 12, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-0.456, -1.167], [0.865, -0.498], [2.115, -0.213], [1.967, -0.794], [0.119, -1.351], [-0.148, -0.699], [1.38, -1.214], [0.681, -0.166], [0, 0], [0, 0], [0.859, 0.426], [-0.669, 1.321], [-1.001, -0.042], [0, 0], [0.054, 0.699], [-1.854, 0.515], [-1.025, 3.223], [-1.528, 0.421], [-0.77, 0.575] ], "o": [ [-0.569, 0.865], [-1.843, 1.054], [-2.109, 0.219], [-1.262, 0.51], [-0.059, 0.705], [0.379, 1.801], [-0.527, 0.468], [0, 0], [0, 0], [-0.752, 0.45], [-1.321, -0.664], [0.468, -0.971], [0, 0], [-0.196, -0.705], [1.73, 0.474], [3.495, -0.971], [1.404, 0.427], [0.977, -0.272], [0.776, 0.912] ], "v": [ [-81.957, -83.112], [-84.244, -81.027], [-90.363, -79.458], [-96.595, -78.296], [-99.243, -75.483], [-98.882, -73.392], [-100.44, -68.362], [-102.294, -67.402], [-101.974, -68.51], [-101.524, -70.056], [-104.083, -69.95], [-105.291, -73.551], [-102.839, -75.032], [-103.111, -76.01], [-103.485, -78.125], [-98.029, -78.142], [-90.932, -84.996], [-86.459, -84.949], [-83.823, -86.234] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.949019610882, 0.627451002598, 0.486274510622, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 13", "np": 2, "cix": 2, "bm": 0, "ix": 13, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[-1.345, -0.089], [0, 0], [0, 0], [0, 0], [0, 0]], "o": [ [0, 0], [0, 0], [0, 0], [-2.672, -0.675], [1.86, 0.586] ], "v": [ [-90.825, -62.823], [-90.879, -62.823], [-91.199, -61.71], [-91.761, -59.779], [-95.659, -63.86] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.949019610882, 0.627451002598, 0.486274510622, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 14", "np": 2, "cix": 2, "bm": 0, "ix": 14, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0.77, -1.25], [0.918, 0.042], [5.651, -1.564], [0.942, -0.012], [0, 0], [0, 0], [0, 0], [0, 0], [3.252, 0.948], [0.764, 1.368], [-0.468, 1.617], [0, 0], [0, 0], [0, 0], [0.859, 0.426], [-0.669, 1.321], [-1.001, -0.042], [0, 0], [0.054, 0.699], [-1.854, 0.515], [-1.025, 3.223], [-1.528, 0.421], [-0.77, 0.575], [-0.456, -1.167], [-0.107, -0.391], [0, 0], [-0.907, -0.61] ], "o": [ [-0.551, 0.823], [1.066, 5.663], [-0.948, 0.266], [0, 0], [0, 0], [0, 0], [0, 0], [-0.942, 3.246], [-1.623, -0.468], [-0.746, -1.374], [0, 0], [0, 0], [0, 0], [-0.752, 0.45], [-1.321, -0.664], [0.468, -0.971], [0, 0], [-0.196, -0.705], [1.73, 0.474], [3.495, -0.971], [1.404, 0.427], [0.977, -0.272], [0.776, 0.912], [0.142, 0.361], [0, 0], [0.859, -0.557], [1.267, 0.788] ], "v": [ [-77.603, -77.289], [-79.979, -76.063], [-87.982, -63.232], [-90.825, -62.823], [-90.879, -62.823], [-91.199, -61.71], [-91.761, -59.779], [-92.01, -58.926], [-99.587, -54.749], [-103.254, -57.67], [-103.763, -62.326], [-102.294, -67.402], [-101.974, -68.51], [-101.524, -70.056], [-104.083, -69.95], [-105.291, -73.551], [-102.839, -75.032], [-103.111, -76.01], [-103.485, -78.125], [-98.029, -78.142], [-90.932, -84.996], [-86.459, -84.949], [-83.823, -86.234], [-81.957, -83.112], [-81.578, -81.981], [-81.365, -80.986], [-78.439, -80.998] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.988235294819, 0.733333349228, 0.643137276173, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 15", "np": 2, "cix": 2, "bm": 0, "ix": 15, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [3.187, -0.889], [0.889, 3.193], [-0.089, 0.752], [0.503, 0.154], [2.991, -1.155], [2.867, -0.794], [0.883, 3.187], [-0.794, 1.351], [0.48, 1.736], [-5.521, 1.528], [-2.34, -1.41], [-2.044, 0.569], [-1.191, -4.307], [0.693, -1.623], [-0.521, -1.884] ], "o": [ [-3.205, 0.883], [-0.213, -0.776], [-0.527, -0.047], [-0.924, 2.915], [0.302, 2.861], [-3.199, 0.889], [-0.45, -1.635], [-1.173, -1.208], [-1.528, -5.515], [2.838, -0.788], [1.025, -1.665], [4.283, -1.185], [0.51, 1.831], [1.682, 0.669], [0.883, 3.187] ], "v": [ [-81.821, -78.196], [-89.208, -82.378], [-89.386, -84.694], [-90.932, -84.996], [-97.045, -78.474], [-101.411, -72.071], [-108.792, -76.247], [-108.188, -80.885], [-110.741, -85.34], [-103.544, -98.052], [-95.47, -96.957], [-90.766, -100.481], [-80.85, -94.865], [-81.205, -89.552], [-77.645, -85.583] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 16", "np": 2, "cix": 2, "bm": 0, "ix": 16, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-1.321, -4.099], [3.128, -0.865], [1.025, -1.665], [2.838, -0.788], [-1.528, -5.515], [-0.113, -0.272], [0.367, 1.333], [-5.521, 1.528], [-2.34, -1.41], [-2.044, 0.569] ], "o": [ [-1.973, -2.328], [-2.044, 0.569], [-2.34, -1.41], [-5.521, 1.528], [0.077, 0.284], [-0.8, -1.031], [-1.528, -5.515], [2.838, -0.788], [1.025, -1.665], [4.17, -1.155] ], "v": [ [-80.95, -95.197], [-89.261, -97.756], [-93.965, -94.231], [-102.039, -95.327], [-109.237, -82.615], [-108.958, -81.78], [-110.741, -85.34], [-103.544, -98.052], [-95.47, -96.957], [-90.766, -100.481] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.901960790157, 0.29411765933, 0.219607844949, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 17", "np": 2, "cix": 2, "bm": 0, "ix": 17, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[1.331, 1.267], [-3.751, -1.976], [0, 0]], "o": [[0, 0], [0, 0], [-1.921, -0.084]], "v": [ [-94.634, -87.36], [-90.932, -82.062], [-89.925, -84.996] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.901960790157, 0.29411765933, 0.219607844949, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 18", "np": 2, "cix": 2, "bm": 0, "ix": 18, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [3.187, -0.889], [0.889, 3.193], [-0.089, 0.752], [0.503, 0.154], [2.991, -1.155], [2.867, -0.794], [0.883, 3.187], [-0.794, 1.351], [0.48, 1.736], [-5.521, 1.528], [-2.34, -1.41], [-2.044, 0.569], [-1.191, -4.307], [0.693, -1.623], [-0.521, -1.884] ], "o": [ [-3.205, 0.883], [-0.213, -0.776], [-0.527, -0.047], [-0.924, 2.915], [0.302, 2.861], [-3.199, 0.889], [-0.45, -1.635], [-1.173, -1.208], [-1.528, -5.515], [2.838, -0.788], [1.025, -1.665], [4.283, -1.185], [0.51, 1.831], [1.682, 0.669], [0.883, 3.187] ], "v": [ [-81.821, -78.196], [-89.208, -82.378], [-89.386, -84.694], [-90.932, -84.996], [-97.045, -78.474], [-101.411, -72.071], [-108.792, -76.247], [-108.188, -80.885], [-110.741, -85.34], [-103.544, -98.052], [-95.47, -96.957], [-90.766, -100.481], [-80.85, -94.865], [-81.205, -89.552], [-77.645, -85.583] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.988235294819, 0.376470595598, 0.329411774874, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 19", "np": 2, "cix": 2, "bm": 0, "ix": 19, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 225, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 24, "ty": 4, "nm": "aram down", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [50, 50, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 1, "k": [ { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 5, "s": [ { "i": [ [2.876, 5.671], [5.53, 8.773], [5.713, -4.957], [0, 0], [-2.641, 1.427], [0, 0] ], "o": [ [-3.877, -7.646], [-6.232, 0.435], [0, 0], [1.576, 2.555], [0, 0], [5.595, -3.022] ], "v": [ [-44.21, -8.06], [-59.164, -34.554], [-77.068, -26.34], [-57.203, 5.866], [-49.69, 7.877], [-49.103, 7.56] ], "c": true } ] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 20, "s": [ { "i": [ [2.876, 5.671], [5.53, 8.773], [5.713, -4.957], [0, 0], [-2.641, 1.427], [0, 0] ], "o": [ [-3.877, -7.646], [-6.232, 0.435], [0, 0], [1.576, 2.555], [0, 0], [5.595, -3.022] ], "v": [ [-51.085, -23.185], [-59.164, -34.554], [-77.068, -26.34], [-64.078, -9.259], [-56.565, -7.248], [-55.978, -7.565] ], "c": true } ] }, { "i": { "x": 0.417, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 30, "s": [ { "i": [ [2.876, 5.671], [5.53, 8.773], [5.713, -4.957], [0, 0], [-2.641, 1.427], [0, 0] ], "o": [ [-3.877, -7.646], [-6.232, 0.435], [0, 0], [1.576, 2.555], [0, 0], [5.595, -3.022] ], "v": [ [-51.085, -23.185], [-59.164, -34.554], [-77.068, -26.34], [-64.078, -9.259], [-56.565, -7.248], [-55.978, -7.565] ], "c": true } ] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.333, "y": 0 }, "t": 45, "s": [ { "i": [ [2.876, 5.671], [5.53, 8.773], [5.713, -4.957], [0, 0], [-2.641, 1.427], [0, 0] ], "o": [ [-3.877, -7.646], [-6.232, 0.435], [0, 0], [1.576, 2.555], [0, 0], [5.595, -3.022] ], "v": [ [-44.21, -8.06], [-59.164, -34.554], [-77.068, -26.34], [-57.203, 5.866], [-49.69, 7.877], [-49.103, 7.56] ], "c": true } ] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 73, "s": [ { "i": [ [2.876, 5.671], [5.53, 8.773], [5.713, -4.957], [0, 0], [-2.641, 1.427], [0, 0] ], "o": [ [-3.877, -7.646], [-6.232, 0.435], [0, 0], [1.576, 2.555], [0, 0], [5.595, -3.022] ], "v": [ [-44.21, -8.06], [-59.164, -34.554], [-77.068, -26.34], [-57.203, 5.866], [-49.69, 7.877], [-49.103, 7.56] ], "c": true } ] }, { "i": { "x": 0.833, "y": 0.833 }, "o": { "x": 0.167, "y": 0.167 }, "t": 88, "s": [ { "i": [ [2.876, 5.671], [5.53, 8.773], [5.713, -4.957], [0, 0], [-2.641, 1.427], [0, 0] ], "o": [ [-3.877, -7.646], [-6.232, 0.435], [0, 0], [1.576, 2.555], [0, 0], [5.595, -3.022] ], "v": [ [-51.085, -23.185], [-59.164, -34.554], [-77.068, -26.34], [-64.078, -9.259], [-56.565, -7.248], [-55.978, -7.565] ], "c": true } ] }, { "i": { "x": 0.417, "y": 1 }, "o": { "x": 0.167, "y": 0.167 }, "t": 98, "s": [ { "i": [ [2.876, 5.671], [5.53, 8.773], [5.713, -4.957], [0, 0], [-2.641, 1.427], [0, 0] ], "o": [ [-3.877, -7.646], [-6.232, 0.435], [0, 0], [1.576, 2.555], [0, 0], [5.595, -3.022] ], "v": [ [-51.085, -23.185], [-59.164, -34.554], [-77.068, -26.34], [-64.078, -9.259], [-56.565, -7.248], [-55.978, -7.565] ], "c": true } ] }, { "t": 113, "s": [ { "i": [ [2.876, 5.671], [5.53, 8.773], [5.713, -4.957], [0, 0], [-2.641, 1.427], [0, 0] ], "o": [ [-3.877, -7.646], [-6.232, 0.435], [0, 0], [1.576, 2.555], [0, 0], [5.595, -3.022] ], "v": [ [-44.21, -8.06], [-59.164, -34.554], [-77.068, -26.34], [-57.203, 5.866], [-49.69, 7.877], [-49.103, 7.56] ], "c": true } ] } ], "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.988235294819, 0.733333349228, 0.643137276173, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 225, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 25, "ty": 4, "nm": "Body", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [50, 50, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [0, 0]], "o": [[0, 0], [0, 0]], "v": [[-77.205, -26.161], [-77.205, -31.49]], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [0, 0], [0, 0], [-7.63, 10.153], [-6.208, 1.108], [0, 0], [0, 0], [0, 0], [0, 0], [-4.431, -3.169], [-7.712, -11.239] ], "o": [ [0, 0], [0, 0], [-1.795, -15.153], [4.532, -6.03], [4.65, -0.829], [0, 0], [0, 0], [0, 0], [5.308, 1.22], [5.894, 4.212], [3.596, 5.241] ], "v": [ [-77.207, -26.162], [-77.456, 3.895], [-129.734, 3.895], [-126.482, -50.178], [-107.531, -59.905], [-99.351, -60.734], [-89.357, -58.435], [-88.51, -58.24], [-87.082, -57.908], [-72.332, -51.256], [-59.147, -34.187] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-2.34, -0.326], [0, 0], [0, 0], [0.35, 8.696], [-2.127, 0.45], [-2.524, 2.097], [-1.078, 2.298], [-1.801, -0.266], [-0.272, -1.268], [-2.837, -3.418], [-6.706, -0.942] ], "o": [ [0, 0], [0, 0], [-0.74, -6.238], [1.753, -1.22], [3.211, -0.675], [1.955, -1.617], [0.569, -1.214], [1.682, 0.243], [0.936, 4.336], [4.325, 5.207], [2.316, 0.326] ], "v": [ [-77.349, -9.149], [-77.456, 3.895], [-129.734, 3.895], [-131.843, -19.7], [-125.729, -22.039], [-116.559, -25.298], [-113.153, -29.995], [-114.172, -34.989], [-108.124, -28.218], [-101.791, -19.528], [-84.452, -9.866] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [0, 0], [4.271, 0], [0.883, 0.261], [1.262, 2.257], [0.095, 1.363], [0, 0], [0, 0] ], "o": [ [0, 0], [-1.191, 4.111], [-0.912, 0], [-2.458, -0.711], [-0.681, -1.256], [4.65, -0.829], [0, 0], [0, 0] ], "v": [ [-88.51, -58.24], [-88.599, -57.932], [-97.875, -50.948], [-100.583, -51.339], [-106.358, -55.936], [-107.531, -59.905], [-99.351, -60.734], [-89.357, -58.435] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 4", "np": 3, "cix": 2, "bm": 0, "ix": 4, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-3.353, -4.798], [2.441, 1.546], [4.402, 1.499], [8.317, -0.675], [3.916, -0.456], [0.439, 0.391], [0, 0], [0, 0], [0, 0], [-4.431, -3.169] ], "o": [ [-2.269, -1.795], [-3.927, -2.494], [-7.902, -2.683], [-3.963, 0.32], [-1.137, 0.13], [10.047, -7.352], [0, 0], [0, 0], [5.308, 1.22], [1.973, 1.41] ], "v": [ [-64.039, -41.375], [-71.076, -46.44], [-83.641, -52.441], [-108.319, -55.497], [-119.971, -53.507], [-122.288, -53.957], [-99.351, -60.734], [-89.357, -58.435], [-87.082, -57.908], [-72.332, -51.256] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 5", "np": 2, "cix": 2, "bm": 0, "ix": 5, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [0, 0], [0, 0], [0, 0], [0.35, 8.696], [-5, 5.557], [-1.475, 1.078], [0, 0], [0, 0], [0, 0], [-4.431, -3.169], [-3.353, -4.798], [-5, -9.614] ], "o": [ [0, 0], [0, 0], [0, 0], [-0.74, -6.238], [-0.503, -12.428], [1.303, -1.451], [10.047, -7.352], [0, 0], [0, 0], [5.308, 1.22], [1.973, 1.41], [6.67, 9.531], [2.932, 5.639] ], "v": [ [-77.207, -26.162], [-77.349, -9.149], [-77.456, 3.895], [-129.734, 3.895], [-131.843, -19.7], [-126.482, -50.178], [-122.288, -53.957], [-99.351, -60.734], [-89.357, -58.435], [-87.082, -57.908], [-72.332, -51.256], [-64.039, -41.375], [-59.101, -33.846] ], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.552941203117, 0.584313750267, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 6", "np": 2, "cix": 2, "bm": 0, "ix": 6, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 225, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 26, "ty": 4, "nm": "leg", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [50, 50, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-5.735, 0], [0, 0], [-1.179, 2.739], [0, 0], [-0.653, 5.281], [0, 0], [0, 0], [-0.733, -21.778], [1.581, -2.829], [0, 0] ], "o": [ [0, 0], [2.982, 0], [0, 0], [2.069, -4.902], [0, 0], [0, 0], [-10.84, 27.144], [0.109, 3.239], [0, 0], [-2.849, 4.977] ], "v": [ [-167.522, 148.329], [-138.87, 148.329], [-132.013, 143.815], [-109.531, 91.571], [-105.429, 76.223], [-96.483, 3.896], [-129.749, 3.896], [-141.226, 74.543], [-143.466, 83.818], [-174, 137.155] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 0.066666670144, 0.145098045468, 0.266666680574, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [0, 0], [5.663, -1.522], [2.263, -8.175], [-1.694, -10.58], [16.433, -15.734], [-5.041, -4.733], [-3.868, -1.7], [-0.865, -3.815], [0.201, 0], [0, 0], [-2.849, 4.976], [0, 0], [0.107, 3.24], [-10.835, 27.143] ], "o": [ [0, 0], [-4.567, -2.038], [-8.193, 2.198], [-2.849, 10.331], [3.602, 22.463], [-4.994, 4.775], [3.081, 2.891], [3.614, 1.588], [-0.196, 0.018], [0, 0], [-5.734, 0], [0, 0], [1.582, -2.831], [-0.735, -21.776], [0, 0] ], "v": [ [-96.483, 3.895], [-97.378, 11.122], [-112.442, 9.86], [-129.704, 26.986], [-126.766, 58.679], [-147.665, 120.891], [-158.352, 137.785], [-145.924, 139.817], [-138.27, 148.306], [-138.868, 148.33], [-167.522, 148.33], [-174.003, 137.158], [-143.465, 83.819], [-141.226, 74.543], [-129.752, 3.895] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [ 0.278431385756, 0.713725507259, 0.764705896378, 1 ], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [0, 0], [0, 0], [2.073, -4.905], [0, 0], [2.737, -0.219], [0.201, 0], [0, 0], [-2.849, 4.976], [0, 0], [0.107, 3.24], [-10.835, 27.143] ], "o": [ [0, 0], [0, 0], [-0.652, 5.278], [0, 0], [-1.102, 2.553], [-0.196, 0.018], [0, 0], [-5.734, 0], [0, 0], [1.582, -2.831], [-0.735, -21.776], [0, 0] ], "v": [ [-96.483, 3.895], [-97.378, 11.122], [-105.428, 76.225], [-109.534, 91.574], [-132.015, 143.816], [-138.27, 148.306], [-138.868, 148.33], [-167.522, 148.33], [-174.003, 137.158], [-143.465, 83.819], [-141.226, 74.543], [-129.752, 3.895] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.40000000596, 0.827450990677, 0.847058832645, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0.72, -3.465], [0, 0], [0.577, 0.12], [0, 0], [-0.162, 0.593], [-0.485, 3.302], [0, 0], [0, 0], [0, 0], [0, 0] ], "o": [ [0, 0], [-0.12, 0.577], [0, 0], [-0.602, -0.125], [0.267, -0.978], [0.914, -6.224], [10.744, 8.861], [0, 0], [0, 0], [3.156, 1.61] ], "v": [ [-130.741, 173.83], [-130.757, 173.911], [-132.02, 174.739], [-170.344, 166.772], [-171.159, 165.454], [-170.009, 159.357], [-164.906, 152.228], [-147.739, 154.602], [-143.727, 160.519], [-134.856, 165.234] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [ 0.066666670144, 0.145098045468, 0.266666680574, 1 ], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [10.745, 8.859], [0, 0], [0, 0]], "o": [[0, 0], [0, 0], [0, 0], [0, 0]], "v": [ [-147.737, 154.602], [-164.906, 152.229], [-163.695, 143.169], [-146.859, 146.678] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 0.066666670144, 0.145098045468, 0.266666680574, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [0, 0], [1.641, 0.575], [2.109, -1.066], [1.137, -0.746], [0.728, 0.604], [0, 0] ], "o": [ [0, 0], [-1.7, -0.219], [-2.233, -0.782], [-1.232, 0.622], [-0.687, -0.462], [0, 0], [0, 0] ], "v": [ [-146.859, 146.677], [-147.57, 153.116], [-152.576, 151.635], [-159.471, 151.357], [-162.771, 153.827], [-164.903, 152.228], [-163.695, 143.17] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [ 0.949019610882, 0.627451002598, 0.486274510622, 1 ], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [0, 0], [0, 0], [9.454, 6.409], [0.728, 0.604], [0, 0] ], "o": [ [0, 0], [0, 0], [0, 0], [-0.687, -0.462], [0, 0], [0, 0] ], "v": [ [-146.859, 146.677], [-147.57, 153.116], [-147.736, 154.603], [-162.771, 153.827], [-164.903, 152.228], [-163.695, 143.17] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [ 0.988235294819, 0.733333349228, 0.643137276173, 1 ], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 4", "np": 2, "cix": 2, "bm": 0, "ix": 4, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 4, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [-128.741, 4.328], "ix": 2 }, "a": { "a": 0, "k": [-128.741, 4.328], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 1, "k": [ { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 4, "s": [0] }, { "i": { "x": [0.833], "y": [0.833] }, "o": { "x": [0.167], "y": [0.167] }, "t": 20, "s": [10] }, { "i": { "x": [0.667], "y": [1] }, "o": { "x": [0.167], "y": [0.167] }, "t": 30, "s": [10] }, { "t": 45, "s": [0] } ], "ix": 6, "x": "var $bm_rt;\nvar fx = effect('Kleaner');\nvar doAnticipation = fx(1).value;\nvar doInterpolation = fx(2).value;\nvar doFollowThrough = fx(3).value;\nvar damping = $bm_div(fx(15).value, 10);\nvar elasticity = $bm_div(fx(13).value, 10);\nvar bounce = fx(17).value;\nvar anticipationDuration = fx(5).value;\nvar anticipationQuantity = $bm_div(fx(6).value, 100);\nvar slowIn = $bm_div(fx(9).value, 100);\nvar slowOut = $bm_div(fx(10).value, 100);\nvar spatialMode = fx(21).value;\nvar spatialDoInterpolation = fx(20).value;\nvar moBlurPrecision = fx(32).value;\nvar elasticityRandom = fx(14).value;\nvar dampingRandom = fx(16).value;\nvar softBody = fx(28).value;\nvar flexibility = $bm_div(fx(29).value, 100);\nvar doOverlap = fx(23).value;\nvar overlapDuration = fx(24).value;\nvar overlapRandom = fx(25).value;\nvar threshold = $bm_div($bm_div(1, moBlurPrecision), 1000);\nvar zeroValue;\nif ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n zeroValue = [\n 0,\n 0\n ];\n else if (value.length == 3)\n zeroValue = [\n 0,\n 0,\n 0\n ];\n else if (value.length == 4)\n zeroValue = [\n 0,\n 0,\n 0,\n 0\n ];\n} else\n zeroValue = 0;\nvar isThisSpatial = isSpatial(thisProperty);\nvar isThisPosition = thisProperty === $bm_transform.position;\nvar simulate = false;\nif (isThisSpatial) {\n doInterpolation = doInterpolation && spatialDoInterpolation;\n if (isThisPosition && thisProperty.numKeys > 0) {\n doOverlap = false;\n simulate = false;\n } else {\n simulate = spatialMode == 2;\n doOverlap = overlapDuration != 0 && doOverlap && simulate;\n }\n} else {\n doOverlap = false;\n}\nif (!doOverlap) {\n overlapDuration = 0;\n}\nif (simulate && softBody && isThisSpatial && !isThisPosition && (doFollowThrough || doOverlap)) {\n var distanceRatio = $bm_div(length(valueAtTime(0), $bm_transform.anchorPoint), $bm_div(thisLayer.width, 2));\n distanceRatio = $bm_div($bm_sum(1, $bm_mul(distanceRatio, flexibility)), 2);\n if (doFollowThrough) {\n elasticity = $bm_div(elasticity, distanceRatio);\n damping = $bm_div(damping, distanceRatio);\n }\n if (doOverlap) {\n overlapDuration = $bm_mul(overlapDuration, distanceRatio);\n }\n}\nseedRandom(0, true);\nif (doFollowThrough) {\n if (elasticityRandom > 0)\n elasticity = addNoise(elasticity, elasticityRandom);\n if (dampingRandom > 0)\n damping = addNoise(damping, dampingRandom);\n}\nif (doOverlap) {\n if (doOverlap && overlapRandom > 0)\n overlapDuration = addNoise(overlapDuration, overlapRandom);\n}\nvar result = value;\nfunction isSpatial(prop) {\n if (!(prop.value instanceof Array))\n return false;\n if (prop.value.length != 2 && prop.value.length != 3)\n return false;\n try {\n if (typeof prop.speed !== 'undefined')\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction addNoise(val, quantity) {\n var randomValue = random(0.9, 1.1);\n var noiseValue = noise($bm_mul(valueAtTime(0), randomValue));\n noiseValue = $bm_mul(noiseValue, $bm_div(quantity, 100));\n return $bm_mul(val, $bm_sum(noiseValue, 1));\n}\nfunction isAfterLastKey() {\n if (numKeys == 0)\n return false;\n var nKey = nearestKey(time);\n return nKey.time <= time && nKey.index == numKeys;\n}\nfunction isStill(t, threshold) {\n var d = $bm_sub(valueAtTime(t), valueAtTime($bm_sum(t, framesToTime(1))));\n if ($bm_isInstanceOfArray(d)) {\n for (var i = 0; i < d.length; i++) {\n d[i] = Math.abs(d[i]);\n if (d[i] >= threshold) {\n return false;\n }\n }\n return true;\n } else {\n d = Math.abs(d);\n return d < threshold;\n }\n}\nfunction bezierInterpolation(t, tMin, tMax, value1, value2, bezierPoints) {\n if (arguments.length !== 5 && arguments.length !== 6)\n return t;\n var a = $bm_sub(value2, value1);\n var b = $bm_sub(tMax, tMin);\n if (b == 0)\n return t;\n var c = clamp($bm_div($bm_sub(t, tMin), b), 0, 1);\n if (!(bezierPoints instanceof Array) || bezierPoints.length !== 4)\n bezierPoints = [\n 0.33,\n 0,\n 0.66,\n 1\n ];\n return $bm_sum($bm_mul(a, h(c, bezierPoints)), value1);\n function h(f, g) {\n var x = $bm_mul(3, g[0]);\n var j = $bm_sub($bm_mul(3, $bm_sub(g[2], g[0])), x);\n var k = $bm_sub($bm_sub(1, x), j);\n var l = $bm_mul(3, g[1]);\n var m = $bm_sub($bm_mul(3, $bm_sub(g[3], g[1])), l);\n var n = $bm_sub($bm_sub(1, l), m);\n var d = f;\n for (var i = 0; i < 5; i++) {\n var z = $bm_sub($bm_mul(d, $bm_sum(x, $bm_mul(d, $bm_sum(j, $bm_mul(d, k))))), f);\n if (Math.abs(z) < 0.001)\n break;\n d = $bm_sub(d, $bm_div(z, $bm_sum(x, $bm_mul(d, $bm_sum($bm_mul(2, j), $bm_mul($bm_mul(3, k), d))))));\n }\n return $bm_mul(d, $bm_sum(l, $bm_mul(d, $bm_sum(m, $bm_mul(d, n)))));\n }\n}\nfunction getPropWorldSpeed(t, prop) {\n return length(getPropWorldVelocity(t, prop));\n}\nfunction getPrevKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time <= t)\n return nKey;\n if (nKey.index > 1)\n return key($bm_sub(nKey.index, 1));\n return null;\n}\nfunction getNextKey(t) {\n if (numKeys == 0)\n return null;\n var nKey = nearestKey(t);\n if (nKey.time >= t)\n return nKey;\n if (nKey.index < numKeys)\n return key($bm_sum(nKey.index, 1));\n return null;\n}\nfunction getPropWorldVelocity(t, prop) {\n return $bm_mul($bm_sub(getPropWorldValue($bm_sum(t, 0.005), prop), getPropWorldValue($bm_sub(t, 0.005), prop)), 100);\n}\nfunction getLayerWorldPos(t, l) {\n return l.toWorld(l.anchorPoint, t);\n}\nfunction getPropWorldValue(t, prop) {\n if (isPosition(prop))\n return getLayerWorldPos(t, thisLayer);\n return thisLayer.toWorld(prop.valueAtTime(t), t);\n}\nfunction isPosition(prop) {\n return prop === $bm_transform.position;\n}\nfunction isKeyTop(k, axis) {\n var prevSpeed = velocityAtTime($bm_sub(k.time, threshold));\n var nextSpeed = velocityAtTime($bm_sum(k.time, threshold));\n if ($bm_isInstanceOfArray(value)) {\n prevSpeed = prevSpeed[axis];\n nextSpeed = nextSpeed[axis];\n }\n if (Math.abs(prevSpeed) < 0.01 || Math.abs(nextSpeed) < 0.01)\n return true;\n return $bm_mul(prevSpeed, nextSpeed) < 0;\n}\nfunction anticipate() {\n var anticipation = zeroValue;\n if (isAfterLastKey())\n return anticipation;\n if (numKeys < 2)\n return anticipation;\n var nextKey = getNextKey(time);\n var aKey = nextKey;\n if (!isStill(aKey.time - 0.1, 0.1)) {\n aKey = getPrevKey(time);\n if (!isStill(aKey.time - 0.1, 0.1))\n return anticipation;\n }\n if (aKey.index == numKeys)\n return anticipation;\n var anticipationMiddle = aKey.time;\n var anticipationStart = $bm_sub(anticipationMiddle, anticipationDuration);\n var anticipationEnd = key(aKey.index + 1).time;\n var startValue = anticipation;\n var midValue = $bm_mul($bm_sum($bm_neg(valueAtTime($bm_sum(anticipationMiddle, anticipationDuration))), aKey.value), anticipationQuantity);\n var endValue = anticipation;\n if (time < anticipationStart) {\n return anticipation;\n } else if (time < anticipationMiddle) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue[i], midValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationStart, anticipationMiddle, startValue, midValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else if (time <= anticipationEnd) {\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < value.length; i++) {\n anticipation[i] = bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue[i], endValue[i], [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n return anticipation;\n } else {\n return bezierInterpolation(time, anticipationMiddle, anticipationEnd, midValue, endValue, [\n slowOut,\n 0,\n slowIn,\n 1\n ]);\n }\n } else {\n return anticipation;\n }\n}\nfunction followThroughAtTime(t) {\n var fThrough = zeroValue;\n if (elasticity == 0)\n return fThrough;\n var propSpeed;\n if (!simulate) {\n if (numKeys < 2)\n return fThrough;\n if (nearestKey(t).index == 1)\n return fThrough;\n propSpeed = length(velocityAtTime(t));\n if (propSpeed >= threshold)\n return fThrough;\n } else {\n propSpeed = getPropWorldSpeed(t, thisProperty);\n if (propSpeed >= threshold)\n return fThrough;\n }\n var fThroughStart = 0;\n var fThroughTime = 0;\n if (simulate) {\n var speedI = getPropWorldSpeed(t, thisProperty);\n var i = t;\n while (speedI < threshold && i > 0) {\n i = $bm_sub(i, $bm_div(thisComp.frameDuration, moBlurPrecision));\n speedI = getPropWorldSpeed(i, thisProperty);\n }\n fThroughStart = i;\n } else {\n var fThroughKey = getPrevKey(t);\n fThroughStart = fThroughKey.time;\n }\n if (fThroughStart == 0)\n return fThrough;\n fThroughTime = $bm_sub(t, fThroughStart);\n if (simulate)\n fThrough = $bm_div(getPropWorldVelocity($bm_sub(fThroughStart, thisComp.frameDuration), thisProperty), 2);\n else\n fThrough = $bm_div(velocityAtTime($bm_sub(fThroughStart, thisComp.frameDuration)), 2);\n if (bounce) {\n var cycleDamp = Math.exp($bm_mul($bm_mul(fThroughTime, damping), 0.1));\n var damp = $bm_div(Math.exp($bm_mul(fThroughTime, damping)), $bm_div(elasticity, 2));\n var cycleDuration = $bm_div(1, $bm_mul(elasticity, 2));\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n cycleDuration = framesToTime(cycleDuration);\n var midDuration = $bm_div(cycleDuration, 2);\n var maxValue = $bm_mul(fThrough, midDuration);\n var cycvarime = fThroughTime;\n var numEndCycles = 1;\n while (cycvarime > cycleDuration) {\n cycvarime = $bm_sub(cycvarime, cycleDuration);\n cycleDuration = $bm_div(cycleDuration, cycleDamp);\n cycleDuration = Math.round(timeToFrames(cycleDuration));\n if (cycleDuration < 2) {\n cycleDuration = 2;\n numEndCycles++;\n }\n cycleDuration = framesToTime(cycleDuration);\n midDuration = $bm_div(cycleDuration, 2);\n maxValue = $bm_div($bm_mul(fThrough, midDuration), damp);\n if (numEndCycles > 100 / damping && maxValue < threshold)\n return zeroValue;\n }\n if (cycvarime < midDuration)\n fThrough = bezierInterpolation(cycvarime, 0, midDuration, 0, maxValue, [\n 0,\n 0.1,\n slowIn,\n 1\n ]);\n else\n fThrough = bezierInterpolation(cycvarime, midDuration, cycleDuration, maxValue, 0, [\n $bm_sub(1, slowIn),\n 0,\n 1,\n 0.9\n ]);\n } else {\n var damp = Math.exp($bm_mul(fThroughTime, damping));\n var sinus = $bm_mul($bm_mul($bm_mul(elasticity, fThroughTime), 2), Math.PI);\n sinus = Math.sin(sinus);\n sinus = $bm_mul($bm_div(0.3, elasticity), sinus);\n sinus = $bm_div(sinus, damp);\n if (Math.abs(sinus) < $bm_div(threshold, 100))\n return 0;\n fThrough = $bm_mul(fThrough, sinus);\n if (threshold > 0) {\n fThrough = $bm_mul(fThrough, $bm_sub(1, $bm_div(propSpeed, threshold)));\n }\n }\n if (bounce) {\n var prevValue = valueAtTime($bm_sub(fThroughStart, thisComp.frameDuration));\n var startValue = valueAtTime(fThroughStart);\n if ($bm_isInstanceOfArray(value)) {\n for (var i = 0; i < prevValue.length; i++) {\n if (prevValue[i] > startValue[i])\n fThrough[i] = Math.abs(fThrough[i]);\n if (prevValue[i] < startValue[i])\n fThrough[i] = $bm_neg(Math.abs(fThrough[i]));\n }\n } else {\n if (prevValue > startValue)\n fThrough = Math.abs(fThrough);\n if (prevValue < startValue)\n fThrough = $bm_neg(Math.abs(fThrough));\n }\n }\n if (simulate) {\n if (!isThisPosition) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer));\n fThrough = $bm_sub(thisLayer.fromWorld(fThrough), thisLayer.anchorPoint);\n } else if (thisLayer.hasParent) {\n fThrough = $bm_sum(fThrough, getLayerWorldPos(time, thisLayer.parent));\n fThrough = $bm_sub(thisLayer.parent.fromWorld(fThrough), thisLayer.parent.anchorPoint);\n }\n }\n return fThrough;\n}\nfunction followThrough() {\n var propSpeed = length(velocity);\n if (propSpeed < threshold)\n return followThroughAtTime($bm_sub(time, overlapDuration));\n var fThrough = zeroValue;\n var t = time;\n while (t > 0) {\n t = $bm_sub(t, thisComp.frameDuration);\n if (simulate)\n propSpeed = getPropWorldSpeed($bm_sub(t, overlapDuration), thisProperty);\n else\n propSpeed = length(velocityAtTime(t));\n if (propSpeed < threshold) {\n fThrough = followThroughAtTime($bm_sub(t, overlapDuration));\n break;\n }\n }\n return linear(time, t, $bm_sum(t, $bm_mul(anticipationDuration, 2)), fThrough, zeroValue);\n}\nfunction smartSmooth(axis) {\n var startKey = nearestKey(time);\n var endKey = startKey;\n if (time == startKey.time)\n return 0;\n if (time < startKey.time && startKey.index == 1)\n return 0;\n if (time > startKey.time && startKey.index == numKeys)\n return 0;\n if (time < startKey.time)\n startKey = key($bm_sub(startKey.index, 1));\n if (time > startKey.time)\n endKey = key($bm_sum(startKey.index, 1));\n var sI = 0.66;\n var sO = 0.33;\n var sIV = 1;\n var sOV = 0;\n var sVal = startKey.value;\n var eVal = endKey.value;\n if ($bm_isInstanceOfArray(value)) {\n sVal = sVal[axis];\n eVal = eVal[axis];\n }\n var sTime = startKey.time;\n var eTime = endKey.time;\n if (isKeyTop(startKey, axis))\n sO = slowOut;\n else {\n var prevKey = key($bm_sub(startKey.index, 1));\n var pVal = prevKey.value;\n if ($bm_isInstanceOfArray(value))\n pVal = pVal[axis];\n sOV = $bm_div($bm_sub(sVal, pVal), $bm_sub(eVal, pVal));\n }\n if (isKeyTop(endKey, axis)) {\n sI = slowIn;\n if (endKey.index != numKeys) {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n if (Math.abs(nVal - eVal) < 0.01 && doFollowThrough)\n sI = 1;\n }\n } else {\n var nextKey = key($bm_sum(endKey.index, 1));\n var nVal = nextKey.value;\n if ($bm_isInstanceOfArray(value))\n nVal = nVal[axis];\n sIV = $bm_div($bm_sub(eVal, sVal), $bm_sub(nVal, sVal));\n }\n if (endKey.index == numKeys && doFollowThrough) {\n sI = 1;\n }\n var val = value;\n if ($bm_isInstanceOfArray(value))\n val = val[axis];\n return $bm_sub(bezierInterpolation(time, sTime, eTime, sVal, eVal, [\n sO,\n sOV,\n sI,\n sIV\n ]), val);\n}\nfunction overlap() {\n var ol = zeroValue;\n if (isThisPosition && !hasParent)\n return zeroValue;\n ol = $bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisProperty), getPropWorldValue(time, thisProperty));\n var motionRatio = $bm_div($bm_div(length(zeroValue, ol), thisLayer.width), 2);\n if (isThisPosition) {\n var originalDistance = length(valueAtTime(0));\n motionRatio = $bm_div(length(zeroValue, ol), thisComp.width);\n }\n ol = $bm_sum(ol, getPropWorldValue(time, thisProperty));\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_sub(getPropWorldValue($bm_sub(time, overlapDuration), thisLayer.anchorPoint), ol), motionRatio), flexibility));\n ol = thisLayer.fromWorld(ol);\n if (!isThisPosition)\n ol = $bm_sub(ol, value);\n else {\n ol = linear(flexibility, 0, 100, $bm_div(ol, 2), 0);\n var prevParentWorldPos = getLayerWorldPos($bm_sub(time, overlapDuration), parent);\n ol = $bm_sum(ol, $bm_mul($bm_mul($bm_mul(thisLayer.fromWorld(prevParentWorldPos), motionRatio), flexibility), 5));\n }\n return ol;\n}\nvar okToGo = false;\nif (simulate && fx.enabled)\n okToGo = true;\nelse if (numKeys > 1 && fx.enabled)\n okToGo = true;\nif (okToGo) {\n var smartSmoothResult = zeroValue;\n if (doInterpolation) {\n if ($bm_isInstanceOfArray(value)) {\n if (value.length == 2)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1)\n ];\n else if (value.length == 3)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2)\n ];\n else if (value.length == 4)\n smartSmoothResult = [\n smartSmooth(0),\n smartSmooth(1),\n smartSmooth(2),\n smartSmooth(3)\n ];\n } else {\n smartSmoothResult = smartSmooth(0);\n }\n }\n if (doAnticipation)\n result = $bm_sum(result, anticipate());\n result = $bm_sum(result, smartSmoothResult);\n if (doFollowThrough)\n result = $bm_sum(result, followThrough());\n if (doOverlap)\n result = $bm_sum(result, overlap());\n}\n$bm_rt = result;" }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 4", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0.661, -2.796], [0, 0], [-4.817, 0], [0, 0], [-0.392, 3.807], [0, 0], [0.717, 4.425], [0, 0], [0, 0], [-10.643, -27.599] ], "o": [ [0, 0], [-1.109, 4.688], [0, 0], [3.827, 0], [0, 0], [0.572, -4.446], [0, 0], [0, 0], [-1.486, 20.659], [1.034, 2.681] ], "v": [ [-96.711, 84.843], [-110.265, 142.168], [-103.001, 151.351], [-79.04, 151.351], [-71.614, 144.65], [-65.794, 88.147], [-66.014, 74.772], [-77.505, 3.896], [-111.284, 3.896], [-97.287, 76.434] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 0.066666670144, 0.145098045468, 0.266666680574, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-4.348, -4.17], [-0.361, -0.924], [0.729, 0], [0, 0], [-1.108, 4.686], [0, 0], [1.037, 2.684], [-1.487, 20.662], [0, 0], [0, 0], [4.579, -5.616], [-4.283, -10.29], [-2.002, -10.965], [6.576, -8.572], [1.812, -3.773], [-3.063, -2.855] ], "o": [ [0.734, 0.699], [-0.669, 0.195], [0, 0], [-4.816, 0], [0, 0], [0.657, -2.796], [-10.639, -27.599], [0, 0], [0, 0], [-5.995, 4.105], [-7.044, 8.631], [4.283, 10.284], [1.931, 10.622], [-2.547, 3.323], [-1.813, 3.773], [4.407, 4.117] ], "v": [ [-78.57, 148.579], [-76.929, 151.049], [-79.038, 151.351], [-102.999, 151.351], [-110.268, 142.169], [-96.709, 84.844], [-97.289, 76.432], [-111.281, 3.895], [-77.504, 3.895], [-75.566, 15.826], [-93.367, 28.1], [-94.475, 59.875], [-81.638, 90.632], [-89.031, 121.211], [-96.507, 131.263], [-95.393, 142.939] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [ 0.278431385756, 0.713725507259, 0.764705896378, 1 ], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0.569, -4.449], [0, 0], [2.838, -0.835], [0.729, 0], [0, 0], [-1.108, 4.686], [0, 0], [1.037, 2.684], [-1.487, 20.662], [0, 0], [0, 0], [0, 0] ], "o": [ [0, 0], [-0.314, 3.075], [-0.669, 0.195], [0, 0], [-4.816, 0], [0, 0], [0.657, -2.796], [-10.639, -27.599], [0, 0], [0, 0], [0, 0], [0.717, 4.425] ], "v": [ [-65.792, 88.15], [-71.615, 144.651], [-76.929, 151.049], [-79.038, 151.351], [-102.999, 151.351], [-110.268, 142.169], [-96.709, 84.844], [-97.289, 76.432], [-111.281, 3.895], [-77.504, 3.895], [-75.566, 15.826], [-66.011, 74.774] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.40000000596, 0.827450990677, 0.847058832645, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-0.002, -3.539], [0, 0], [0.59, 0], [0, 0], [-0.037, 0.613], [0.199, 3.331], [0, 0], [0, 0], [0, 0], [0, 0] ], "o": [ [0, 0], [0, 0.59], [0, 0], [-0.614, 0], [0.062, -1.012], [-0.375, -6.279], [12.326, 6.483], [0, 0], [0, 0], [3.418, 0.932] ], "v": [ [-60.524, 173.591], [-60.524, 173.674], [-61.591, 174.742], [-100.735, 174.762], [-101.801, 173.637], [-101.92, 167.434], [-98.378, 159.414], [-81.088, 158.235], [-75.953, 163.21], [-66.307, 166.015] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [ 0.066666670144, 0.145098045468, 0.266666680574, 1 ], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [12.326, 6.48], [0, 0], [0, 0]], "o": [[0, 0], [0, 0], [0, 0], [0, 0]], "v": [ [-81.816, 158.235], [-99.108, 159.414], [-99.771, 150.299], [-82.573, 150.299] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [ 0.066666670144, 0.145098045468, 0.266666680574, 1 ], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [0.231, 0.053], [1.558, 0.065], [0.752, -1.363], [0.492, -0.865], [1.445, -0.03], [0.93, 0.361], [0, 0], [0, 0] ], "o": [ [-0.231, -0.041], [-1.523, -0.343], [-1.552, -0.065], [-0.486, 0.871], [-0.717, 1.256], [-1.001, 0.018], [0, 0], [0, 0], [0, 0] ], "v": [ [-82.26, 153.584], [-82.953, 153.442], [-87.515, 152.471], [-91.537, 154.331], [-92.538, 157.145], [-96.258, 158.975], [-99.179, 158.436], [-99.771, 150.297], [-82.574, 150.297] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [ 0.949019610882, 0.627451002598, 0.486274510622, 1 ], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [12.328, 6.481], [0, 0], [0, 0], [0, 0], [0, 0] ], "o": [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]], "v": [ [-81.816, 158.235], [-99.108, 159.413], [-99.179, 158.436], [-99.771, 150.297], [-82.574, 150.297], [-82.26, 153.584] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [ 0.988235294819, 0.733333349228, 0.643137276173, 1 ], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 4", "np": 2, "cix": 2, "bm": 0, "ix": 4, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 4, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 225, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 27, "ty": 4, "nm": "Layer 4", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [96.667, 224.762, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [46.667, 174.762, 0], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-3.381, -3.11], [0, 0], [3.079, 3.605], [0, 0], [5.457, 2.987], [0, 0], [9.326, -0.166], [0, 0], [8.239, -3.219], [0, 0], [6.132, -5.016] ], "o": [ [0, 0], [2.276, -3.709], [-3.671, -4.297], [0, 0], [-6.398, -3.501], [0, 0], [-8.845, 0.158], [0, 0], [-8.933, 3.49], [0, 0], [-7.368, 6.028] ], "v": [ [21.163, 174.762], [79.279, 174.762], [85.267, 155.688], [71.748, 162.492], [73.897, 144.05], [58.871, 151.088], [52.514, 127.115], [42.183, 153.207], [21.918, 124.201], [27.084, 162.213], [9.203, 150.293] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-1.654, -3.521], [-0.24, 0.194], [-0.416, -0.591], [2.236, 7.624], [3.521, -2.883] ], "o": [ [0.185, -0.213], [6.025, -4.926], [-0.139, -0.342], [-3.937, -4.232], [-2.615, 2.144] ], "v": [ [8.563, 159.264], [9.201, 158.654], [27.073, 170.556], [22.028, 155.992], [9.201, 150.291] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.882352948189, 0.898039221764, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [-8.844, 0.157], [-0.425, -5.997], [7.005, -0.129], [0, 0], [8.243, -3.225], [-0.832, -5.794], [-1.322, 0.518] ], "o": [ [0, 0], [4.648, -0.083], [0.398, -6.765], [-8.844, 0.157], [0, 0], [-3.04, 1.183], [0.434, -1.673], [8.243, -3.225] ], "v": [ [42.183, 161.565], [52.514, 135.477], [59.186, 147.352], [52.514, 127.114], [42.183, 153.211], [21.917, 124.203], [19.339, 135.967], [21.917, 132.566] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.882352948189, 0.898039221764, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [0, 0], [-6.395, -3.493], [-0.296, -0.471], [2.541, 1.395], [1.848, -2.07] ], "o": [ [0, 0], [0.508, 0.277], [1.044, -3.983], [-5.526, -3.031], [0.055, 4.796] ], "v": [ [58.872, 159.448], [73.898, 152.407], [75.099, 153.543], [73.898, 144.053], [59.316, 150.568] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.882352948189, 0.898039221764, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 4", "np": 2, "cix": 2, "bm": 0, "ix": 4, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-3.381, -3.11], [0, 0], [3.079, 3.605], [0, 0], [5.457, 2.987], [0, 0], [9.326, -0.166], [0, 0], [8.239, -3.219], [0, 0], [6.132, -5.016] ], "o": [ [0, 0], [2.276, -3.709], [-3.671, -4.297], [0, 0], [-6.398, -3.501], [0, 0], [-8.845, 0.158], [0, 0], [-8.933, 3.49], [0, 0], [-7.368, 6.028] ], "v": [ [21.163, 174.762], [79.279, 174.762], [85.267, 155.688], [71.748, 162.492], [73.897, 144.05], [58.871, 151.088], [52.514, 127.115], [42.183, 153.207], [21.918, 124.201], [27.084, 162.213], [9.203, 150.293] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.72549021244, 0.764705896378, 0.988235294819, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 5", "np": 2, "cix": 2, "bm": 0, "ix": 5, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 225, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 28, "ty": 4, "nm": "Layer 3", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [96.668, 224.762, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [46.668, 174.762, 0], "ix": 1, "l": 2 }, "s": { "a": 1, "k": [ { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 0, "s": [100, 105, 100] }, { "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 0.833] }, "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0.167] }, "t": 12.5, "s": [100, 95, 100] }, { "t": 25, "s": [100, 105, 100] } ], "ix": 6, "l": 2, "x": "var $bm_rt;\n$bm_rt = loopOutDuration();" } }, "ao": 0, "ef": [ { "ty": 5, "nm": "Kleaner", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 1, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] }, { "ty": 5, "nm": "Kleaner 2", "np": 34, "mn": "Pseudo/Duik Kleaner v3.2", "ix": 2, "en": 1, "ef": [ { "ty": 7, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0001", "ix": 1, "v": { "a": 0, "k": 0, "ix": 1 } }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0002", "ix": 2, "v": { "a": 0, "k": 0, "ix": 2 } }, { "ty": 7, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0003", "ix": 3, "v": { "a": 0, "k": 1, "ix": 3 } }, { "ty": 6, "nm": "Anticipation", "mn": "Pseudo/Duik Kleaner v3.2-0004", "ix": 4, "v": 0 }, { "ty": 0, "nm": "Duration (s)", "mn": "Pseudo/Duik Kleaner v3.2-0005", "ix": 5, "v": { "a": 0, "k": 0.3, "ix": 5 } }, { "ty": 0, "nm": "Amplitude", "mn": "Pseudo/Duik Kleaner v3.2-0006", "ix": 6, "v": { "a": 0, "k": 50, "ix": 6 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0007", "ix": 7, "v": 0 }, { "ty": 6, "nm": "Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0008", "ix": 8, "v": 0 }, { "ty": 0, "nm": "Slow In", "mn": "Pseudo/Duik Kleaner v3.2-0009", "ix": 9, "v": { "a": 0, "k": 60, "ix": 9 } }, { "ty": 0, "nm": "Slow Out", "mn": "Pseudo/Duik Kleaner v3.2-0010", "ix": 10, "v": { "a": 0, "k": 25, "ix": 10 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0011", "ix": 11, "v": 0 }, { "ty": 6, "nm": "Follow Through", "mn": "Pseudo/Duik Kleaner v3.2-0012", "ix": 12, "v": 0 }, { "ty": 0, "nm": "Elasticity", "mn": "Pseudo/Duik Kleaner v3.2-0013", "ix": 13, "v": { "a": 0, "k": 10, "ix": 13 } }, { "ty": 0, "nm": "Elasticity random", "mn": "Pseudo/Duik Kleaner v3.2-0014", "ix": 14, "v": { "a": 0, "k": 0, "ix": 14 } }, { "ty": 0, "nm": "Damping", "mn": "Pseudo/Duik Kleaner v3.2-0015", "ix": 15, "v": { "a": 0, "k": 50, "ix": 15 } }, { "ty": 0, "nm": "Damping random", "mn": "Pseudo/Duik Kleaner v3.2-0016", "ix": 16, "v": { "a": 0, "k": 0, "ix": 16 } }, { "ty": 7, "nm": "Bounce", "mn": "Pseudo/Duik Kleaner v3.2-0017", "ix": 17, "v": { "a": 0, "k": 0, "ix": 17 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0018", "ix": 18, "v": 0 }, { "ty": 6, "nm": "Spatial Options", "mn": "Pseudo/Duik Kleaner v3.2-0019", "ix": 19, "v": 0 }, { "ty": 7, "nm": "Smart Interpolation", "mn": "Pseudo/Duik Kleaner v3.2-0020", "ix": 20, "v": { "a": 0, "k": 0, "ix": 20 } }, { "ty": 7, "nm": "Mode", "mn": "Pseudo/Duik Kleaner v3.2-0021", "ix": 21, "v": { "a": 0, "k": 1, "ix": 21 } }, { "ty": 6, "nm": "Overlap (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0022", "ix": 22, "v": 0 }, { "ty": 7, "nm": "Overlap", "mn": "Pseudo/Duik Kleaner v3.2-0023", "ix": 23, "v": { "a": 0, "k": 1, "ix": 23 } }, { "ty": 0, "nm": "Delay (s)", "mn": "Pseudo/Duik Kleaner v3.2-0024", "ix": 24, "v": { "a": 0, "k": 0.05, "ix": 24 } }, { "ty": 0, "nm": "Overlap random", "mn": "Pseudo/Duik Kleaner v3.2-0025", "ix": 25, "v": { "a": 0, "k": 0, "ix": 25 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0026", "ix": 26, "v": 0 }, { "ty": 6, "nm": "Soft Body (simulation)", "mn": "Pseudo/Duik Kleaner v3.2-0027", "ix": 27, "v": 0 }, { "ty": 7, "nm": "Soft Body", "mn": "Pseudo/Duik Kleaner v3.2-0028", "ix": 28, "v": { "a": 0, "k": 1, "ix": 28 } }, { "ty": 0, "nm": "Soft-Body Flexibility", "mn": "Pseudo/Duik Kleaner v3.2-0029", "ix": 29, "v": { "a": 0, "k": 100, "ix": 29 } }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0030", "ix": 30, "v": 0 }, { "ty": 6, "nm": "", "mn": "Pseudo/Duik Kleaner v3.2-0031", "ix": 31, "v": 0 }, { "ty": 0, "nm": "Precision", "mn": "Pseudo/Duik Kleaner v3.2-0032", "ix": 32, "v": { "a": 0, "k": 1, "ix": 32 } } ] } ], "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-6.299, -5.795], [0, 0], [5.737, 6.717], [0, 0], [10.167, 5.565], [0, 0], [17.378, -0.31], [0, 0], [15.353, -5.997], [0, 0], [11.427, -9.347] ], "o": [ [0, 0], [4.241, -6.911], [-6.84, -8.006], [0, 0], [-11.921, -6.523], [0, 0], [-16.48, 0.294], [0, 0], [-16.645, 6.503], [0, 0], [-13.729, 11.232] ], "v": [ [-0.855, 174.762], [107.432, 174.762], [118.591, 139.221], [93.401, 151.899], [97.405, 117.535], [69.407, 130.65], [57.561, 85.981], [38.311, 134.599], [0.552, 80.551], [10.177, 151.38], [-23.14, 129.168] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-8.446, -7.984], [-10.378, 8.492], [-6.349, -5.591], [6.857, -5.6] ], "o": [ [-10.387, -10.978], [5.046, -4.131], [-7.402, -8.188], [-12.845, 10.516] ], "v": [ [-2.322, 173.384], [-16.757, 135.542], [1.734, 140.865], [-23.143, 129.165] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 2, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-5.064, -13.178], [-0.268, -0.361], [-16.449, 6.432], [-2.699, -1.894], [4.371, -1.71] ], "o": [ [4.334, 4.898], [-0.61, -1.488], [2.449, -0.961], [-4.833, -6.099], [-14.379, 5.619] ], "v": [ [8.887, 148.11], [16.548, 157.73], [6.928, 86.924], [14.709, 88.588], [0.551, 80.548] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 2, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [1.534, -13.566], [0, 0], [-16.477, 0.296], [-0.85, -0.277], [4.316, -0.074] ], "o": [ [3.493, 7.92], [0, 0], [0.998, -0.018], [-1.931, -4.131], [-12.392, 0.222] ], "v": [ [38.994, 127.16], [44.687, 140.975], [63.936, 92.358], [66.708, 92.746], [57.56, 85.982] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 4", "np": 2, "cix": 2, "bm": 0, "ix": 4, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [5.757, -4.824], [0, 0], [-11.45, -2.384], [1.922, 1.053] ], "o": [ [-0.092, 7.578], [0, 0], [-0.434, -2.366], [-6.838, -3.733] ], "v": [ [76.615, 123.482], [75.783, 137.03], [100.817, 122.826], [97.407, 117.531] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.458823531866, 0.482352942228, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 5", "np": 2, "cix": 2, "bm": 0, "ix": 5, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [-6.299, -5.795], [0, 0], [5.737, 6.717], [0, 0], [10.167, 5.565], [0, 0], [17.378, -0.31], [0, 0], [15.353, -5.997], [0, 0], [11.427, -9.347] ], "o": [ [0, 0], [4.241, -6.911], [-6.84, -8.006], [0, 0], [-11.921, -6.523], [0, 0], [-16.48, 0.294], [0, 0], [-16.645, 6.503], [0, 0], [-13.729, 11.232] ], "v": [ [-0.855, 174.762], [107.432, 174.762], [118.591, 139.221], [93.401, 151.899], [97.405, 117.535], [69.407, 130.65], [57.561, 85.981], [38.311, 134.599], [0.552, 80.551], [10.177, 151.38], [-23.14, 129.168] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.552941203117, 0.584313750267, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 6", "np": 2, "cix": 2, "bm": 0, "ix": 6, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 225, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 29, "ty": 4, "nm": "Layer 2", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [50, 50, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [0, 0]], "o": [[0, 0], [0, 0]], "v": [[136.775, 174.762], [145.314, 174.762]], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.882352948189, 0.898039221764, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 3, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [0, 0]], "o": [[0, 0], [0, 0]], "v": [[107.432, 174.762], [128.526, 174.762]], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.882352948189, 0.898039221764, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 2", "np": 3, "cix": 2, "bm": 0, "ix": 2, "mn": "ADBE Vector Group", "hd": false }, { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [[0, 0], [0, 0]], "o": [[0, 0], [0, 0]], "v": [[-22.042, 174.762], [-33.881, 174.762]], "c": false }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "st", "c": { "a": 0, "k": [0.066666670144, 0.145098045468, 0.266666680574, 1], "ix": 3 }, "o": { "a": 0, "k": 100, "ix": 4 }, "w": { "a": 0, "k": 1.025, "ix": 5 }, "lc": 2, "lj": 2, "bm": 0, "nm": "Stroke 1", "mn": "ADBE Vector Graphic - Stroke", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.882352948189, 0.898039221764, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 3", "np": 3, "cix": 2, "bm": 0, "ix": 3, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 225, "st": 0, "bm": 0 }, { "ddd": 0, "ind": 30, "ty": 4, "nm": "Layer 1", "parent": 1, "sr": 1, "ks": { "o": { "a": 0, "k": 100, "ix": 11 }, "r": { "a": 0, "k": 0, "ix": 10 }, "p": { "a": 0, "k": [50, 50, 0], "ix": 2, "l": 2 }, "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } }, "ao": 0, "shapes": [ { "ty": "gr", "it": [ { "ind": 0, "ty": "sh", "ix": 1, "ks": { "a": 0, "k": { "i": [ [4.864, -30.745], [17.418, -10.523], [14.881, 0.014], [14.65, -2.638], [5.977, -7.9], [16.363, -3.014], [16.384, 2.905], [13.428, 8.405], [-0.52, 15.828], [-0.173, 21.697], [10.776, 19.131], [-11.983, 21.429], [-24.537, 0.947], [-36.556, -8.124], [-15.987, -3.115], [-17.859, -25.498] ], "o": [ [-3.173, 20.107], [-12.742, 7.697], [-14.881, -0.014], [-9.873, 1.778], [-10.033, 13.262], [-16.363, 3.021], [-15.604, -2.761], [-13.421, -8.405], [0.715, -21.689], [0.181, -21.95], [-12.041, -21.4], [11.983, -21.436], [37.416, -1.438], [15.9, 3.534], [30.557, 5.941], [17.859, 25.491] ], "v": [ [159.609, 37.383], [129.731, 88.408], [86.627, 97.631], [42.071, 98.895], [14.758, 111.052], [-24.71, 139.477], [-74.297, 137.157], [-119.237, 122.666], [-142.777, 83.877], [-121.369, 23.102], [-151.999, -33.944], [-152.1, -104.44], [-91.99, -141.278], [14.289, -107.533], [62.69, -101.007], [139.098, -51.383] ], "c": true }, "ix": 2 }, "nm": "Path 1", "mn": "ADBE Vector Shape - Group", "hd": false }, { "ty": "fl", "c": { "a": 0, "k": [0.933333337307, 0.956862747669, 1, 1], "ix": 4 }, "o": { "a": 0, "k": 100, "ix": 5 }, "r": 1, "bm": 0, "nm": "Fill 1", "mn": "ADBE Vector Graphic - Fill", "hd": false }, { "ty": "tr", "p": { "a": 0, "k": [0, 0], "ix": 2 }, "a": { "a": 0, "k": [0, 0], "ix": 1 }, "s": { "a": 0, "k": [100, 100], "ix": 3 }, "r": { "a": 0, "k": 0, "ix": 6 }, "o": { "a": 0, "k": 100, "ix": 7 }, "sk": { "a": 0, "k": 0, "ix": 4 }, "sa": { "a": 0, "k": 0, "ix": 5 }, "nm": "Transform" } ], "nm": "Group 1", "np": 2, "cix": 2, "bm": 0, "ix": 1, "mn": "ADBE Vector Group", "hd": false } ], "ip": 0, "op": 225, "st": 0, "bm": 0 } ], "markers": [], "nm": "Comp 20", "op": 200, "v": "5.7.11", "w": 512 }