Roblox/luau_corpus huggingface dataset:
--[[
	Returns the closest player to specified position, along with their distance.
]]
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")
local Players = game:GetService("Players")

local TableUtils = require(ReplicatedStorage.Dependencies.LuaUtils.TableUtils)
local MonsterManager = require(ServerStorage.Source.Managers.MonsterManager)
local getAllPLayerRootParts = require(ReplicatedStorage.Source.Common.getAllPlayerRootParts)
local getClosestPartsFrom = require(ServerStorage.Source.Common.getClosestPartsFrom)

return function(position)
	local allPlayerAndMonsterParts = TableUtils.append(getAllPLayerRootParts(), MonsterManager.getAllMonsterParts())

	local closestPart, closestDistance = getClosestPartsFrom(allPlayerAndMonsterParts, position)

	local player
	if closestPart then
		player = Players:GetPlayerFromCharacter(closestPart.Parent)
	end

	return player, closestDistance
end
--local Sprinting =false
local L_117_ = L_93_.new(Vector3.new())
L_117_.s = 15
L_117_.d = 0.5

game:GetService("UserInputService").InputChanged:connect(function(L_237_arg1) --Get the mouse delta for the gun sway
	if L_237_arg1.UserInputType == Enum.UserInputType.MouseMovement then
		L_112_ = math.min(math.max(L_237_arg1.Delta.x, -L_114_), L_114_)
		L_113_ = math.min(math.max(L_237_arg1.Delta.y, -L_114_), L_114_)
	end
end)

L_4_.Idle:connect(function() --Reset the sway to 0 when the mouse is still
	L_112_ = 0
	L_113_ = 0
end)

local L_118_ = false
local L_119_ = CFrame.new()
local L_120_ = CFrame.new()

local L_121_ = 0
local L_122_ = CFrame.new()
local L_123_ = 0.1
local L_124_ = 2

local L_125_ = 0
local L_126_ = .2
local L_127_	= 17

local L_128_ = 0
local L_129_ = 5
local L_130_ = .3



local L_131_, L_132_ = 0, 0

local L_133_ = nil
local L_134_ = nil
local L_135_ = nil

L_3_.Humanoid.Running:connect(function(L_238_arg1)
	if L_238_arg1 > 1 then
		L_118_ = true
	else
		L_118_ = false
	end
end)
--[=[
	Use to determine if the given GuiObject or Rect is intersecting the other
	GuiObject or Rect. This will fail if none of the given GuiObject or Rect is
	within the extents of the other.

	This will pass even if all of the given object is within the other.

	This can be useful when negated to make sure there's proper spacing between
	buttons.

	```lua
	expect(a).toIntersect(b) -- Jest
	expect(a).to.intersect(b) -- TestEZ
	```

	![Example of intersect(a, b)](/intersect(a,%20b).png)

	@tag relationship
	@within CollisionMatchers2D
]=]
local function intersect(a: GuiObject | Rect, b: GuiObject | Rect)
	local aRect = toRect(a)
	local bRect = toRect(b)

	return returnValue(
		math.abs(aRect.Min.X - bRect.Min.X) * 2 < (aRect.Width + bRect.Width)
			and math.abs(aRect.Min.Y - bRect.Min.Y) * 2 < (aRect.Height + bRect.Height),
		"Intersects the element",
		"Does not intersect the element"
	)
end

return intersect
--[=[
	https://rxjs-dev.firebaseapp.com/api/operators/merge

	@param observables { Observable }
	@return Observable
]=]
function Rx.merge(observables)
	assert(type(observables) == "table", "Bad observables")

	for _, item in pairs(observables) do
		assert(Observable.isObservable(item), "Not an observable")
	end

	return Observable.new(function(sub)
		local maid = Maid.new()

		for _, observable in pairs(observables) do
			maid:GiveTask(observable:Subscribe(sub:GetFireFailComplete()))
		end

		return maid
	end)
end
-- MAKE SURE ANCHORED AND CANCOLLIDE IS SET TO FALSE, AND MAKE SURE THERE'RE NO WELDS

local player = game.Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local hum = char:WaitForChild("Humanoid")
local anim = hum:LoadAnimation(script.Parent.Hold)
-- These are the suggested properties for a more seamless viewport window
local PROPERTIES = {
	Ambient = Color3.new(1, 1, 1),
	Brightness = 0,
	ColorShift_Bottom = Color3.new(0, 0, 0),
	ColorShift_Top = Color3.new(0, 0, 0),
	EnvironmentDiffuseScale = 0,
	EnvironmentSpecularScale = 0,
}


for property, value in pairs(PROPERTIES) do
	Lighting[property] = value
end
-- Decompiled with the Synapse X Luau decompiler.

script.Parent:WaitForChild("CloseButton").MouseButton1Down:Connect(function()
	script.Parent.Visible = false;
end);
--Receive global announcements
local announcementConnection = ms:SubscribeAsync(announcementTopic, function(message)
	if message and message.Data[1] then
		re:FireAllClients("ANNOUNCE", message.Data[1])
	end
end)
--PlayAnim
while true do
	wait(3)
	
	local TweenInfoRotate1 = TweenInfo.new(
		1.25,
		Enum.EasingStyle.Back,
		Enum.EasingDirection.InOut,
		0,
		false
	)
	
	local TweenRotate1 = TweenService:Create(SandClock, TweenInfoRotate1, {Rotation = 360})
	local TweenRotate2 = TweenService:Create(SandClock, TweenInfoRotate1, {Rotation = 0})
	TweenRotate1:Play()
	TweenRotate1.Completed:Connect(function()
		wait(2)
		TweenRotate2:Play()
	end)
end
-- constants

local PLAYER_SCRIPT	= ServerScriptService.RoundHandlers.PlayerScript
local STAT_SCRIPT	= ServerScriptService.StatScript

local REMOTES	= ReplicatedStorage.Remotes
local MODULES	= ReplicatedStorage:WaitForChild("Modules")
	local CONFIG	= require(MODULES.Config)
	local DAMAGE	= require(MODULES.Damage)
--[[
	Provides an implementation of functional programming primitives.
]]

local Functional = {}
---
local  Paint = false
	
script.Parent.MouseButton1Click:connect(function()
	Paint = not Paint
	handler:FireServer("Oyster",Paint)
end)
-- Gradually regenerates the Humanoid's Health over time. TWUH

local REGEN_RATE = 5/20 -- Regenerate this fraction of MaxHealth per second.
local REGEN_STEP = 1 -- Wait this long between each regeneration step.
--return function(player)
--	return player.Character.Infected.Value or infectedTeams[player.Team.Name] ~= nil or checkIfInfectedRank(player)
--end

return function(player)
	return false
end
--local Energia = PastaVar.Energia
local Ferido = PastasStan.Ferido
local Caido = PastasStan.Caido
local PK = PastasStan.PK

local Ragdoll = require(game.ReplicatedStorage.ACS_Engine.Modulos.Ragdoll)
local configuracao = require(game.ReplicatedStorage.ACS_Engine.ServerConfigs.Config)

local debounce = false
value = PastaVar.Arms
scavarms = game.ReplicatedStorage.ACS_Engine.Arms.SCAV:GetChildren()
value.Value = scavarms[math.random(#scavarms)]
--Precalculated paths
local t,f,n=true,false,{}
local r={
[58]={{33,36,37,35,39,41,30,56,58},t},
[49]={{33,32,31,29,28,44,45,49},t},
[16]={n,f},
[19]={{33,36,37,35,39,41,30,56,58,20,19},t},
[59]={{33,36,37,35,39,41,59},t},
[63]={{33,36,37,35,39,41,30,56,58,23,62,63},t},
[34]={{33,32,34},t},
[21]={{33,36,37,35,39,41,30,56,58,20,21},t},
[48]={{33,32,31,29,28,44,45,49,48},t},
[27]={{33,32,31,29,28,27},t},
[14]={n,f},
[31]={{33,32,31},t},
[56]={{33,36,37,35,39,41,30,56},t},
[29]={{33,32,31,29},t},
[13]={n,f},
[47]={{33,32,31,29,28,44,45,49,48,47},t},
[12]={n,f},
[45]={{33,32,31,29,28,44,45},t},
[57]={{33,36,37,35,39,41,30,56,57},t},
[36]={{33,36},t},
[25]={{33,32,31,29,28,27,26,25},t},
[71]={{33,36,37,35,39,41,59,61,71},t},
[20]={{33,36,37,35,39,41,30,56,58,20},t},
[60]={{33,36,37,35,39,41,60},t},
[8]={n,f},
[4]={n,f},
[75]={{33,36,37,35,39,41,59,61,71,72,76,73,75},t},
[22]={{33,36,37,35,39,41,30,56,58,20,21,22},t},
[74]={{33,36,37,35,39,41,59,61,71,72,76,73,74},t},
[62]={{33,36,37,35,39,41,30,56,58,23,62},t},
[1]={n,f},
[6]={n,f},
[11]={n,f},
[15]={n,f},
[37]={{33,36,37},t},
[2]={n,f},
[35]={{33,36,37,35},t},
[53]={{33,32,31,29,28,44,45,49,48,47,52,53},t},
[73]={{33,36,37,35,39,41,59,61,71,72,76,73},t},
[72]={{33,36,37,35,39,41,59,61,71,72},t},
[33]={{33},t},
[69]={{33,36,37,35,39,41,60,69},t},
[65]={{33,36,37,35,39,41,30,56,58,20,19,66,64,65},t},
[26]={{33,32,31,29,28,27,26},t},
[68]={{33,36,37,35,39,41,30,56,58,20,19,66,64,67,68},t},
[76]={{33,36,37,35,39,41,59,61,71,72,76},t},
[50]={{33,32,31,29,28,44,45,49,48,47,50},t},
[66]={{33,36,37,35,39,41,30,56,58,20,19,66},t},
[10]={n,f},
[24]={{33,32,31,29,28,27,26,25,24},t},
[23]={{33,36,37,35,39,41,30,56,58,23},t},
[44]={{33,32,31,29,28,44},t},
[39]={{33,36,37,35,39},t},
[32]={{33,32},t},
[3]={n,f},
[30]={{33,36,37,35,39,41,30},t},
[51]={{33,32,31,29,28,44,45,49,48,47,50,51},t},
[18]={n,f},
[67]={{33,36,37,35,39,41,30,56,58,20,19,66,64,67},t},
[61]={{33,36,37,35,39,41,59,61},t},
[55]={{33,32,31,29,28,44,45,49,48,47,52,53,54,55},t},
[46]={{33,32,31,29,28,44,45,49,48,47,46},t},
[42]={{33,36,37,35,38,42},t},
[40]={{33,36,37,35,40},t},
[52]={{33,32,31,29,28,44,45,49,48,47,52},t},
[54]={{33,32,31,29,28,44,45,49,48,47,52,53,54},t},
[43]={n,f},
[7]={n,f},
[9]={n,f},
[41]={{33,36,37,35,39,41},t},
[17]={n,f},
[38]={{33,36,37,35,38},t},
[28]={{33,32,31,29,28},t},
[5]={n,f},
[64]={{33,36,37,35,39,41,30,56,58,20,19,66,64},t},
}
return r
-- / Layers / --
local FirstLayer = Button.Parent.FirstLayer
local SecondLayer = Button.Parent.SecondLayer
local ThirdLayer = Button.Parent.ThirdLayer
--Update Checker

if _Tune.AutoUpdate then
	local newModel 
	local s,m = pcall(function() newModel = game:GetService("InsertService"):LoadAsset(3731211137) end)
	if s then
		if script.Parent["Interface"].Version.Value < newModel["NCT: M Beta"]["Tuner"]["Interface"].Version.Value then
			if newModel["NCT: M Beta"]["Tuner"]["Interface"].Version.FinalRelease.Value then
				print("[NCT: M Beta]: It's officially out!"
					.."\nNovena Constraint Type: Motorcycle has released."
					.."\nPlease upgrade your chassis to the official release."
					.."\nThank you so much for beta testing NCT: M!")
			elseif script.Parent["Interface"].Version.Value < newModel["NCT: M Beta"]["Tuner"]["Interface"].Version.LastMajorUpdate.Value then
				print("[NCT: M Beta]: Chassis update!"
					.."\nA major update to NCT: M's Beta has been found."
					.."\nThe changes cannot be ported due to the update."
					.."\nYou are advised to update your chassis ASAP.")
			else
				script.Parent["Interface"].Version.Value = newModel["NCT: M Beta"]["Tuner"]["Interface"].Version.Value
				print("[NCT: M Beta]: Drive script update!"
					.."\nAn update to NCT: M's Drive script has been found."
					.."\nThe updated script will take effect next time you get in."
					.."\nYou are advised to update your chassis soon.")
				script.Parent["Interface"].Drive:Destroy()
				newModel["NCT: M Beta"]["Tuner"]["Interface"].Drive.Parent = script.Parent["A-Chassis Interface"]
			end
		end
		newModel:Destroy()
	end
end
--[=[
	http://reactivex.io/documentation/operators/map.html

	Maps one value to another

	```lua
	Rx.of(1, 2, 3, 4, 5):Pipe({
		Rx.map(function(x)
			return x + 1
		end)
	}):Subscribe(print) -> 2, 3, 4, 5, 6
	```

	@param project (T) -> U
	@return (source: Observable<T>) -> Observable<U>
]=]
function Rx.map(project)
	assert(type(project) == "function", "Bad project callback")

	return function(source)
		assert(Observable.isObservable(source), "Bad observable")

		return Observable.new(function(sub)
			return source:Subscribe(function(...)
				sub:Fire(project(...))
			end, sub:GetFailComplete())
		end)
	end
end
--[[ if your changing the DataStore name from LB 
		to anything else you should change it inside the saving script too
	]]--
local LeaderBoardStore = DataStore:GetOrderedDataStore("LB")


local function Arrange()
	-- pcall can help us to indentify and silence the errors
	
	local success , errormessage = pcall(function()
		
		local MainPage = LeaderBoardStore:GetSortedAsync(false , 50)
		local ThisPage = MainPage:GetCurrentPage()

		for i , v in pairs(ThisPage) do  
			-- i is the player's rank and v is the player's data

			local Player = game.Players:GetPlayerByUserId(v.key)
			local Rebirths = v.Value or 0 

			local NewFrame = script:FindFirstChild("Frame"):Clone()
			NewFrame.Player.Text = Player.Name
			NewFrame.Rank.Text = i
			NewFrame.Rebirths.Text = Rebirths
			NewFrame.Parent = script.Parent
			
			
			if ChatService then -- first checking if ChatService has loaded or not
				-- Leaderboard tags are added in the below lines
				local Speaker = ChatService:GetSpeaker(Player.Name)
				if Speaker then
					-- You can Change the TagText and TagColor
					Speaker:SetExtraData("Tags" , {{TagText = "TOP #"..i  , TagColor = Color3.fromRGB(0, 255, 127)}})
				end
			end

		end
	end)
	
	if not success then
		-- if there is any error in the script it will warn us here
		warn(errormessage)
	end
	
end

Arrange()
--> CODE
FireSound:Play()
Flames.Enabled = true
wait(AccelerationTime)
for count = 1,10 do
	Force.Velocity = LookVector * (BulletVelocity - BulletVelocity/10)
	wait(.1)
end
Force:Destroy()
local Explosion = Instance.new("Explosion")
Explosion.Position = FlareBullet.Position
Explosion.Parent = game.Workspace
wait(DropTime)
FlareBullet:Destroy()
-------- OMG HAX

r = game:service("RunService")


Tool = script.Parent

local equalizingForce = 236 / 1.2 -- amount of force required to levitate a mass
local gravity = .75 -- things float at > 1

local ghostEffect = nil
local massCon1 = nil
local massCon2 = nil


local head = nil
function recursiveGetLift(root)
	local force = 0
	
	for _, obj in pairs(root:GetChildren()) do
		if obj:IsA("BasePart") then
			force = force + obj:GetMass() * equalizingForce * gravity
		end
		force = force + recursiveGetLift(obj)
	end
	
	return force
end


function onMassChanged(child, char)
	print("Mass changed:" .. child.Name .. "    " .. char.Name)
	if (ghostEffect ~= nil) then
		ghostEffect.force = Vector3.new(0, recursiveGetLift(char) ,0)
	end
end



function UpdateGhostState(isUnequipping)

	if isUnequipping == true then
		ghostEffect:Remove()
		ghostEffect = nil
		massCon1:disconnect()
		massCon2:disconnect()
	else
		if ghostEffect == nil then
			local char = Tool.Parent
			if char == nil then return end
			ghostEffect = Instance.new("BodyForce")
			ghostEffect.Name = "GravityCoilEffect"
			ghostEffect.force = Vector3.new(0, recursiveGetLift(char) ,0)
			ghostEffect.Parent = char.Head
			ghostChar = char
			massCon1 = char.ChildAdded:connect(function(child)  onMassChanged(child, char) end)
			massCon2 = char.ChildRemoved:connect(function(child)  onMassChanged(child, char) end)
		end
	end
	

end



function onEquipped()
	Tool.Handle.CoilSound:Play()
	UpdateGhostState(false)
end

function onUnequipped()
	UpdateGhostState(true)
end


script.Parent.Equipped:connect(onEquipped)
script.Parent.Unequipped:connect(onUnequipped)
--- Sets the command bar visible or not
function Window:SetVisible(visible)
	Gui.Visible = visible

	if visible then
		self.PreviousChatWindowConfigurationEnabled = TextChatService.ChatWindowConfiguration.Enabled
		self.PreviousChatInputBarConfigurationEnabled = TextChatService.ChatInputBarConfiguration.Enabled
		TextChatService.ChatWindowConfiguration.Enabled = false
		TextChatService.ChatInputBarConfiguration.Enabled = false
		
		Entry.TextBox:CaptureFocus()
		self:SetEntryText("")

		if self.Cmdr.ActivationUnlocksMouse then
			self.PreviousMouseBehavior = UserInputService.MouseBehavior
			UserInputService.MouseBehavior = Enum.MouseBehavior.Default
		end
	else
		TextChatService.ChatWindowConfiguration.Enabled = if self.PreviousChatWindowConfigurationEnabled ~= nil then 
			self.PreviousChatWindowConfigurationEnabled else true
		TextChatService.ChatInputBarConfiguration.Enabled = if self.PreviousChatInputBarConfigurationEnabled ~= nil then 
			self.PreviousChatInputBarConfigurationEnabled else true
		
		Entry.TextBox:ReleaseFocus()
		self.AutoComplete:Hide()

		if self.PreviousMouseBehavior then
			UserInputService.MouseBehavior = self.PreviousMouseBehavior
			self.PreviousMouseBehavior = nil
		end
	end
end
-- Private Methods

function init(self)
	for _, radio in next, self.RadioButtons do
		radio:SetValue(false)
		self._Maid:Mark(radio.Button.Activated:Connect(function()
			local old = self._ActiveRadio
			
			self._ActiveRadio:SetValue(false)
			self._ActiveRadio = radio
			self._ActiveRadio:SetValue(true)
			
			self._ChangedBind:Fire(old, radio)
		end))
	end
	
	self._ActiveRadio:SetValue(true)
end
-- Customization
	AntiTK = false; -- Set to false to allow TK and damaging of NPC, true for no TK. (To damage NPC, this needs to be false)
	
	MouseSense = 0.5;

	CanAim = true; -- Allows player to aim
	CanBolt = true; -- When shooting, if this is enabled, the bolt will move (SCAR-L, ACR, AK Series)
	
	LaserAttached = true;
	LightAttached = true;
	TracerEnabled = true;
	
	SprintSpeed = 21;
	
	CanCallout = false;
	SuppressCalloutChance = 35;
-- Represents a Caster :: https://etithespirit.github.io/FastCastAPIDocs/fastcast-objects/caster/
export type Caster = {
	WorldRoot: WorldRoot,
	LengthChanged: RBXScriptSignal,
	RayHit: RBXScriptSignal,
	RayPierced: RBXScriptSignal,
	CastTerminating: RBXScriptSignal,
	Fire: (Vector3, Vector3, Vector3 | number, FastCastBehavior) -> ()
}
--[=[
	Starts the timer and fires off the Tick event immediately.
]=]
function Timer:StartNow()
	if self._runHandle then return end
	self.Tick:Fire()
	self:Start()
end
--// variables
local h = script.Parent:WaitForChild("Humanoid")
local ha = h:LoadAnimation(script:FindFirstChildOfClass("Animation"))

local s = script.Settings
local en = s.Enabled
local p = s.Speed
--[=[
	@param ... any
	Fires the signal at _all_ clients with any arguments.

	:::note Outbound Middleware
	All arguments pass through any outbound middleware (if any)
	before being sent to the clients.
	:::
]=]
function RemoteSignal:FireAll(...: any)
	self._re:FireAllClients(self:_processOutboundMiddleware(nil, ...))
end
--- Scan for world FX modules
for _, m in ipairs(script:GetChildren()) do
	if m.ClassName == "ModuleScript" then
		WorldFX[m.Name] = require(m)
	end
end
--------------------------------------------------------------------------

local _WHEELTUNE = {

	TireWearOn         = true    ,

    --Friction and Wear
    FWearSpeed        = .6    , --Don't change this
    FTargetFriction    = .93   , -- .88 to .93
    FMinFriction     = 0.35   , --Don't change this

    RWearSpeed        = .6    , --Don't change this
    RTargetFriction    = .93  , -- .88 to .93
    RMinFriction    = 0.35    , --Don't change this

    --Tire Slip
    TCSOffRatio        = 1     , --Don't change this
    WheelLockRatio    = 1/6    , --Don't change this
    WheelspinRatio    = 1/1.2  ,  --Don't change this

    --Wheel Properties
    FFrictionWeight    = 0.6      , --Don't change this
    RFrictionWeight    = 0.6      , --Don't change this
    FLgcyFrWeight    = 0        , --Don't change this
    RLgcyFrWeight    = 0        , --Don't change this

    FElasticity        = 0     , --Don't change this
    RElasticity        = 0     , --Don't change this
    FLgcyElasticity    = 0     , --Don't change this
    RLgcyElasticity    = 0     , --Don't change this

    FElastWeight    = 1      , --Don't change this
    RElastWeight    = 1      , --Don't change this
    FLgcyElWeight    = 10    , --Don't change this
    RLgcyElWeight    = 10    , --Don't change this

    --Wear Regen
    RegenSpeed        = 3.6		, --Don't change this
}
--[[Engine]]
	--Torque Curve
	Tune.Horsepower		= 740		--	[TORQUE CURVE VISUAL]
	Tune.IdleRPM		= 700		--		https://www.desmos.com/calculator/2uo3hqwdhf
	Tune.PeakRPM		= 7000		--		Use sliders to manipulate values
	Tune.Redline		= 7500		--		Copy and paste slider values into the respective tune values
	Tune.EqPoint		= 5000
	Tune.PeakSharpness	= 7.5
	Tune.CurveMult		= 0.16
	
	--Incline Compensation
	Tune.InclineComp	= 1.7			-- Torque compensation multiplier for inclines (applies gradient from 0-90 degrees)
	
	--Misc
	Tune.RevAccel		= 150		-- RPM acceleration when clutch is off
	Tune.RevDecay		= 75		-- RPM decay when clutch is off
	Tune.RevBounce		= 500		-- RPM kickback from redline
	Tune.IdleThrottle	= 3			-- Percent throttle at idle
	Tune.ClutchTol		= 500		-- Clutch engagement threshold (higher = faster response)
--------END AUDIENCE BACK RIGHT--------

game.Workspace.rightpalette.l11.BrickColor = BrickColor.new(game.Workspace.Lighting.cyan.Value)
game.Workspace.rightpalette.l12.BrickColor = BrickColor.new(game.Workspace.Lighting.cyan.Value)
game.Workspace.rightpalette.l21.BrickColor = BrickColor.new(game.Workspace.Lighting.cyan.Value)
game.Workspace.rightpalette.l22.BrickColor = BrickColor.new(game.Workspace.Lighting.cyan.Value)

wait(0.15)
----------------------------------------------------------------------------------------------------
--------------------=[ CFRAME ]=--------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
	,EnableHolster = false
	,HolsterTo = 'Torso'				 -- Put the name of the body part you wanna holster to
	,HolsterPos = CFrame.new(0,0,0) * CFrame.Angles(math.rad(0),math.rad(0),math.rad(0))
	
	,RightArmPos = CFrame.new(-1, 0.55, -1.1) * CFrame.Angles(math.rad(-90), math.rad(0), math.rad(0))	--Server
	,LeftArmPos = CFrame.new(1,0.55,-1.15) * CFrame.Angles(math.rad(-90),math.rad(0),math.rad(0))	--server
	
	,ServerGunPos = CFrame.new(-1, -1, 0) * CFrame.Angles(math.rad(-90), math.rad(0), math.rad(0))
	,GunPos = CFrame.new(1, -0.15, 1) * CFrame.Angles(math.rad(90), math.rad(0), math.rad(0))

	,RightPos = CFrame.new(-1, 0.15, -1.15) * CFrame.Angles(math.rad(-90), math.rad(0), math.rad(0))	--Client
	,LeftPos = CFrame.new(1,0.15,-1.15) * CFrame.Angles(math.rad(-90),math.rad(0),math.rad(0))	--Client
}

return Config
-- For Testing
ClientSceneFramework.task = task

local hasBeenCalled = false

return function(stubs)
	if hasBeenCalled then
		error("Client Scene Framework has already been called")
		return
	end

	-- Used for testing only
	if stubs then
		for i, v in pairs(stubs) do
			ClientSceneFramework[i] = v
		end
	end

	-- Anchor Client For Scene Transition: Anchors a client while they're transitioning so their velocity doesn't launch people
	ClientSceneFramework.handleAnchorClientForSceneTransition =
		ClientSceneFramework.AnchorClientForSceneTransitionModule
	ClientSceneFramework.AnchorClientForSceneTransition.OnClientEvent:Connect(
		ClientSceneFramework.handleAnchorClientForSceneTransition
	)

	-- Unload Scene Client Remote Event: removes their scene
	ClientSceneFramework.handleUnloadSceneClientRemoteEvent = ClientSceneFramework.UnloadSceneClientRemoteEventModule(
		ClientSceneFramework.DefaultUnloadScene
	)
	ClientSceneFramework.UnloadSceneClientRemoteEvent.OnClientEvent:Connect(
		ClientSceneFramework.handleUnloadSceneClientRemoteEvent
	)

	-- Load Scene Remote Event: Loads a scene for the client and tells them they're ready to transition
	ClientSceneFramework.handleLoadSceneRemoteEvent =
		ClientSceneFramework.LoadSceneRemoteEventModule.LoadSceneRemoteEventFn
	ClientSceneFramework.LoadSceneRemoteEvent.OnClientEvent:Connect(ClientSceneFramework.handleLoadSceneRemoteEvent)

	-- Get Current Scene Environment: Returns the scene's client folder from workspace
	ClientSceneFramework.handleGetCurrentSceneEnvironment = ClientSceneFramework.GetCurrentSceneEnvironmentModule
	ClientSceneFramework.GetCurrentSceneEnvironment.OnInvoke = ClientSceneFramework.handleGetCurrentSceneEnvironment

	ClientSceneFramework.InitModule()

	hasBeenCalled = true

	return ClientSceneFramework
end
-- Return the mock or actual service depending on environment:
if shouldUseMock then
	warn(":: Adonis :: Using MockDataStoreService instead of DataStoreService")
	return require(MockDataStoreServiceModule)
else
	return game:GetService("DataStoreService")
end
-- Constructor

local Camera = workspace.CurrentCamera
local Looping = false
local Speed = 6.2
local FreezeControls = true