function Blend.AccelTween(F,u)local A=Blend.toPropertyObservable(F)or Rx.of(F)local l=Blend.toNumberObservable(u)local function I(F,u)local A=AccelTween.new(u)if l then F:GiveTask(l:Subscribe(function(F)assert(type(F)=="\110\117\109\098\101\114","\066\097\100 \118\097\108\117\101")A.a=F end))end return A end return Observable.new(function(F)local u local l=Maid.new()local H,i=StepUtils.bindToRenderStep(function()F:Fire(u.p)return u.rtime>0 end)l:GiveTask(i)l:GiveTask(A:Subscribe(function(F)u=u or I(l,F)u.t=F H()end))return l end)end
--[=[
	Like Blend.Spring, but for AccelTween

	@param source any -- Source observable (or convertable)
	@param acceleration any -- Source acceleration (or convertable)
	@return Observable
]=]
function Blend.AccelTween(source, acceleration)
	local sourceObservable = Blend.toPropertyObservable(source) or Rx.of(source)
	local accelerationObservable = Blend.toNumberObservable(acceleration)

	local function createAccelTween(maid, initialValue)
		local accelTween = AccelTween.new(initialValue)

		if accelerationObservable then
			maid:GiveTask(accelerationObservable:Subscribe(function(value)
				assert(type(value) == "number", "Bad value")
				accelTween.a = value
			end))
		end

		return accelTween
	end

	-- TODO: Centralize and cache
	return Observable.new(function(sub)
		local accelTween
		local maid = Maid.new()

		local startAnimate, stopAnimate = StepUtils.bindToRenderStep(function()
			sub:Fire(accelTween.p)
			return accelTween.rtime > 0
		end)

		maid:GiveTask(stopAnimate)
		maid:GiveTask(sourceObservable:Subscribe(function(value)
			accelTween = accelTween or createAccelTween(maid, value)
			accelTween.t = value
			startAnimate()
		end))

		return maid
	end)
end
