function ServiceBag.Start(B)assert(B._serviceTypesToStart,"\065\108\114\101\097\100\121 \115\116\097\114\116\101\100")assert(not B._initializing,"\083\116\105\108\108 \105\110\105\116\105\097\108\105\122\105\110\103")while next(B._serviceTypesToStart)do local H=table.remove(B._serviceTypesToStart)local t=assert(B._services[H],"\078\111 \115\101\114\118\105\099\101")if t.Start then local B task.spawn(function()B=coroutine.running()t:Start()end)assert(coroutine.status(B)=="\100\101\097\100","\083\116\097\114\116\105\110\103 \115\101\114\118\105\099\101 \121\105\101\108\100\101\100")end end B._serviceTypesToStart=nil end

function ServiceBag:Start()
	assert(self._serviceTypesToStart, "Already started")
	assert(not self._initializing, "Still initializing")

	while next(self._serviceTypesToStart) do
		local serviceType = table.remove(self._serviceTypesToStart)
		local service = assert(self._services[serviceType], "No service")

		if service.Start then
			local current
			task.spawn(function()
				current = coroutine.running()
				service:Start()
			end)

			assert(coroutine.status(current) == "dead", "Starting service yielded")
		end
	end

	self._serviceTypesToStart = nil
end
