2025-11-26 19:56:16 -08:00

19242 lines
962 KiB
JSON

{
"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
}