local function D(D,Y,n,g,u,T)if D==0 then return Y end D=(D/g)*2 if D==2 then return Y+n end if not T then T=g*.45 end if not u then u=0 end local Q if not u or u<abs(n)then u=n Q=T/4 else Q=(T/(2*pi))*asin(n/u)end if D<1 then D=D-1 return-0.5*((u*pow(2,10*D))*sin(((D*g-Q)*(2*pi))/T))+Y else D=D-1 return(((u*pow(2,-10*D))*sin(((D*g-Q)*(2*pi))/T))*.5+n)+Y end end

local function inOutElastic(t, b, c, d, a, p)
	if t == 0 then return b end

	t = t / d * 2

	if t == 2 then return b + c end

	if not p then p = d * (0.3 * 1.5) end
	if not a then a = 0 end

	local s

	if not a or a < abs(c) then
		a = c
		s = p / 4
	else
		s = p / (2 * pi) * asin(c / a)
	end

	if t < 1 then
		t = t - 1
		return -0.5 * (a * pow(2, 10 * t) * sin((t * d - s) * (2 * pi) / p)) + b
	else
		t = t - 1
		return a * pow(2, -10 * t) * sin((t * d - s) * (2 * pi) / p ) * 0.5 + c + b
	end
end
