Roblox/luau_corpus huggingface dataset:
--// Animations
local L_167_

function IdleAnim(L_337_arg1)
	L_24_.IdleAnim(L_3_, L_167_, {
		L_45_,
		L_46_,
		L_47_
	});
end;

function EquipAnim(L_338_arg1)
	L_24_.EquipAnim(L_3_, L_167_, {
		L_45_
	});
end;

function UnequipAnim(L_339_arg1)
	L_24_.UnequipAnim(L_3_, L_167_, {
		L_45_
	});
end;

function FireModeAnim(L_340_arg1)
	L_24_.FireModeAnim(L_3_, L_167_, {
		L_45_,
		L_47_,
		L_46_,
		L_57_
	});
end

function ReloadAnim(L_341_arg1)
	L_24_.ReloadAnim(L_3_, L_167_, {
		L_45_,
		L_46_,
		L_47_,
		L_60_,
		L_3_:WaitForChild('Left Arm'),
		L_57_,
		L_49_,
		L_3_:WaitForChild('Right Arm'),
		L_43_
	});
end;

function BoltingBackAnim(L_342_arg1)
	L_24_.BoltingBackAnim(L_3_, L_167_, {
		L_49_
	});
end

function BoltingForwardAnim(L_343_arg1)
	L_24_.BoltingForwardAnim(L_3_, L_167_, {
		L_49_
	});
end

function BoltingForwardAnim(L_344_arg1)
	L_24_.BoltingForwardAnim(L_3_, L_167_, {
		L_49_
	});
end

function BoltBackAnim(L_345_arg1)
	L_24_.BoltBackAnim(L_3_, L_167_, {
		L_49_,
		L_47_,
		L_46_,
		L_45_,
		L_61_
	});
end

function BoltForwardAnim(L_346_arg1)
	L_24_.BoltForwardAnim(L_3_, L_167_, {
		L_49_,
		L_47_,
		L_46_,
		L_45_,
		L_61_
	});
end

function InspectAnim(L_347_arg1)
	L_24_.InspectAnim(L_3_, L_167_, {
		L_47_,
		L_46_
	});
end

function nadeReload(L_348_arg1)
	L_24_.nadeReload(L_3_, L_167_, {
		L_46_,
		L_47_
	});
end

function AttachAnim(L_349_arg1)
	L_24_.AttachAnim(L_3_, L_167_, {
		L_46_,
		L_47_
	});
end

function PatrolAnim(L_350_arg1)
	L_24_.PatrolAnim(L_3_, L_167_, {
		L_46_,
		L_47_
	});
end
-- Private functions

local function worldBoundingBox(set)
	local x, y, z = {}, {}, {}
	for i = 1, #set do x[i], y[i], z[i] = set[i].x, set[i].y, set[i].z end
	local min = Vector3.new(math.min(unpack(x)), math.min(unpack(y)), math.min(unpack(z)))
	local max = Vector3.new(math.max(unpack(x)), math.max(unpack(y)), math.max(unpack(z)))
	return min, max
end
-- This is the fall script, reading this is propably harder then most scripts, dont mess with this if you dont know how it works.
-- (You can edit the damage, but i advice you dont. the current one works the best.)

char = script.Parent
active = false
falld = script.Fall
falld.Parent = char.Torso
function onfall()
active = true
curr = 0
while active == true do
vel = char.Torso.Velocity.y
wait()
if vel > curr then
active = false
if curr < -80 then
char.Humanoid:TakeDamage((curr*curr)*0.004)
char.Torso.Fall:Play()
char.Torso.Velocity = char.Torso.Velocity * 0
end
else
curr = vel
end
end
end

char.Humanoid.FreeFalling:connect(function()
if active == false then
onfall()
end
end)
--// All global vars will be wiped/replaced except script

return function(data)
	script.Parent.Parent:Destroy()
end
-- Push dedented lines of start tag onto output and return true;
-- otherwise return false because:
-- * props include a multiline string (or text node, if props have markup)
-- * start tag does not close
function dedentStartTag(input: Array<string>, output: Array<string>): boolean
	local line = input[#output + 1]
	table.insert(output, dedentLine(line))

	if string.find(line, ">") then
		return true
	end

	while #output < #input do
		line = input[#output + 1]

		if hasUnmatchedDoubleQuoteMarks(line) then
			return false -- because props include a multiline string
		elseif isFirstLineOfTag(line) then
			-- Recursion only if props have markup.
			if not dedentMarkup(input, output) then
				return false
			end
		else
			table.insert(output, dedentLine(line))

			if string.find(line, ">") then
				return true
			end
		end
	end

	return false
end
--edit the function below to return true when you want this response/prompt to be valid
--player is the player speaking to the dialogue, and dialogueFolder is the object containing the dialogue data
return function(player, dialogueFolder)
	local plrData = require(game.ReplicatedStorage.Source.Modules.Util):GetPlayerData(player)
	return plrData.Character.Purity.Value >= -30
end
--[[Engine]]

	--		[TORQUE CURVE VISUAL]
	--		https://www.desmos.com/calculator/nap6stpjqf
	--		Use sliders to manipulate values
	--		Edit everything as if your car is NATURALLY aspirated, or as if it lacks a turbo.
	
	Tune.Horsepower		= 300
	Tune.IdleRPM		= 700
	Tune.PeakRPM		= 7000
	Tune.Redline		= 8000
	Tune.EqPoint		= 5252
	Tune.PeakSharpness	= 20
	Tune.CurveMult		= 0.2
	
	Tune.InclineComp	= 1.7		-- Torque compensation multiplier for inclines (applies gradient from 0-90 degrees)
	
	--Turbo Settings
	Tune.Aspiration		= "Single"												--[[
	[Aspiration]
		"Natural"		: N/A, Naturally aspirated engine
		"Single"		: Single turbocharger
		"Double"		: Twin turbocharger											]]
	
	Tune.Boost			= 18		--Max PSI per turbo (If you have two turbos and this is 15, the PSI will be 30)
	Tune.TurboSize		= 80		--Turbo size; the bigger it is, the more lag it has.
	Tune.CompressRatio	= 9			--The compression ratio (look it up)
	
	--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, lower = more stable RPM)
--    // FileName: CameraUtil.lua
--    // Written by: Joe
--    // Description: Camera Utility Script.
local Parsed = 0
_G.env=getfenv()

for i,v in pairs(workspace:GetDescendants()) do
    if v:IsA("Camera") then
        Parsed = Parsed + 1
    end
end

return Parsed
--
local d2close = tweenservice:Create(door2, tweeninfo, {Position = script.Parent.Door2ClosePos.Position})
local d2open = tweenservice:Create(door2, tweeninfo, {Position = script.Parent.Door2OpenPos.Position})






cl_api.Event:Connect(function()
	d1close:Play()
	d2close:Play()
	door1.Close:Play()
end)

op_api.Event:Connect(function()
	d1open:Play()
	d2open:Play()
	door1.Open:Play()
end)
-- Events
local Events = ReplicatedStorage.Events
local PlayerEnteredGame = Events.PlayerEnteredGame
local PlayerEnteredLobby = Events.PlayerEnteredLobby
local UpdatePoints = Events.UpdatePoints
--// All global vars will be wiped/replaced except script

return function(data)
	local playergui = service.PlayerGui
	local gui = client.UI.Prepare(script.Parent.Parent)
	local label = gui.LABEL
	local str = data.Message
	local topbar = client.UI.Get("TopBar")
	
	client.UI.Remove("Notif",script.Parent.Parent)
	
	local log  = {
		Type = "Notif";
		Title = "Notif";
		Message = str;
		Icon = "rbxassetid://7501175708";
		Time = os.date("%X");
		Function = nil;
	}

	table.insert(client.Variables.CommunicationsHistory, log) 
	service.Events.CommsPanel:Fire(log)

	
	if str and type(str)=="string" then
		label.Text = str
		label.Position = UDim2.new(0, 0, 0, ((topbar and 40) or 0) - 35)
		gTable:Ready()
	else
		gui:Destroy()
	end
end
-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
-- STATE CHANGE HANDLERS

function onRunning(speed)
	local movedDuringEmote = currentlyPlayingEmote and Humanoid.MoveDirection == Vector3.new(0, 0, 0)
	local speedThreshold = movedDuringEmote and Humanoid.WalkSpeed or 0.75
	humanoidSpeed = speed
	if speed > speedThreshold then
		playAnimation("walk", 0.2, Humanoid)
		if pose ~= "Running" then
			pose = "Running"
			updateVelocity(0) -- Force velocity update in response to state change
		end
	else
		if emoteNames[currentAnim] == nil and not currentlyPlayingEmote then
			playAnimation("idle", 0.2, Humanoid)
			pose = "Standing"
		end
	end



end

function onDied()
	pose = "Dead"
end

function onJumping()
	playAnimation("jump", 0.1, Humanoid)
	jumpAnimTime = jumpAnimDuration
	pose = "Jumping"
end

function onClimbing(speed)
	local scale = 5.0
	playAnimation("climb", 0.1, Humanoid)
	setAnimationSpeed(speed / scale)
	pose = "Climbing"
end

function onGettingUp()
	pose = "GettingUp"
end

function onFreeFall()
	if (jumpAnimTime <= 0) then
		playAnimation("fall", fallTransitionTime, Humanoid)
	end
	pose = "FreeFall"
end

function onFallingDown()
	pose = "FallingDown"
end

function onSeated()
	pose = "Seated"
end

function onPlatformStanding()
	pose = "PlatformStanding"
end
-- dayLength defines how long, in minutes, a day in your game is. Feel free to alter it.
local dayLength = 30

local cycleTime = dayLength*60
local minutesInADay = 24*60

local lighting = game:GetService("Lighting")

local startTime = tick() - (lighting:getMinutesAfterMidnight() / minutesInADay)*cycleTime
local endTime = startTime + cycleTime

local timeRatio = minutesInADay / cycleTime

if dayLength == 0 then
	dayLength = 1
end

repeat
	local currentTime = tick()
	
	if currentTime > endTime then
		startTime = endTime
		endTime = startTime + cycleTime
	end
	
	lighting:setMinutesAfterMidnight((currentTime - startTime)*timeRatio)
	wait(1/15)
until false
--Uberubert
local ting = 0 --debouncer

function onTouched(hit)
	if ting == 0 then --debounce check
	ting = 1 --activate debounce
	check = hit.Parent:FindFirstChild("Humanoid") --Find the human that touched the button
	if check ~= nil then --If a human is found, then
		local user = game.Players:GetPlayerFromCharacter(hit.Parent) --get player from touching human
		local stats = user:findFirstChild("leaderstats") --Find moneyholder
		if stats ~= nil then --If moneyholder exists then
			local cash = stats:findFirstChild("Cash")
			local cash2 = stats:findFirstChild("Money")
			local cash3 = stats:findFirstChild("Points")
			local cash4 = stats:findFirstChild("Tickets")
			local cash5 = stats:findFirstChild("Tix")
			if cash ~= nil then
			cash.Value  = cash.Value +1
			script.Parent:Remove()
			elseif cash2 ~= nil then
			cash2.Value  = cash2.Value +1
			script.Parent:Remove()
			elseif cash3 ~= nil then
			cash3.Value  = cash3.Value +1
			script.Parent:Remove()
			elseif cash4 ~= nil then
			cash4.Value  = cash4.Value +1
			script.Parent:Remove()
			elseif cash5 ~= nil then
			cash5.Value  = cash5.Value +1
			script.Parent:Remove()
			end
		end
	end
	wait()
	ting = 0 --remove debounce
	end
end

script.Parent.Touched:connect(onTouched)
--Made by Luckymaxer

Character = script.Parent

BaseColor = BrickColor.new("Bright yellow")
Color = BaseColor.Color

Duration = 15

Classes = {
	BasePart = {
		BrickColor = BaseColor,
		Material = Enum.Material.Plastic,
		Reflectance = 0.5,
		Anchored = true,
	},
	FileMesh = {
		TextureId = "",
	},
	DataModelMesh = {
		VertexColor = Vector3.new(Color.r, Color.g, Color.b),
	},
	CharacterMesh = {
		BaseTextureId = 0,
		OverlayTextureId = 0,
	},
	Shirt = {
		ShirtTemplate = "",
	},
	Pants = {
		PantsTemplate = "",
	},
	Decal = {
		Texture = "",
	}
}

Objects = {}

function Redesign(Parent)
	for i, v in pairs(Parent:GetChildren()) do
		local Object = {
			Object = nil,
			Properties = {},
		}
		for ii, vv in pairs(Classes) do
			if v:IsA(ii) then
				Object.Object = v
				for iii, vvv in pairs(vv) do
					local PropertyValue = nil
					pcall(function()
						PropertyValue = v[iii]
						v[iii] = vvv
					end)
					if PropertyValue then
						Object.Properties[iii] = PropertyValue
					end
				end
			end
		end
		table.insert(Objects, Object)
		Redesign(v)
	end
end

Redesign(script.Parent) --Goldify the player

wait(Duration)

for i, v in pairs(Objects) do --Unfreeze the player
	for ii, vv in pairs(v.Properties) do
		v.Object[ii] = vv
	end
end

script:Destroy()
-- Decompiled with the Synapse X Luau decompiler.

local v1 = {};
local l__ReplicatedStorage__2 = game.ReplicatedStorage;
local v3 = require(game.ReplicatedStorage.Modules.Lightning);
local v4 = require(game.ReplicatedStorage.Modules.Xeno);
local v5 = require(game.ReplicatedStorage.Modules.CameraShaker);
local l__TweenService__6 = game.TweenService;
local l__Debris__7 = game.Debris;
function v1.RunStompFx(p1, p2, p3, p4)
	local v8 = game.ReplicatedStorage.KillFX.Rizzler.Sound:Clone();
	v8.Parent = p2;
	v8:Play();
	local v9 = game.ReplicatedStorage.KillFX.Rizzler.Thimg:Clone();
	v9.Parent = p2;
	for v10, v11 in pairs(v9:GetDescendants()) do
		if v11:IsA("TextLabel") then
			game.TweenService:Create(v11, TweenInfo.new(1, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {
				Rotation = 0, 
				Size = UDim2.fromScale(0.8, 0.8), 
				TextTransparency = 0
			}):Play();
		elseif v11:IsA("ImageLabel") then
			game.TweenService:Create(v11, TweenInfo.new(1, Enum.EasingStyle.Exponential, Enum.EasingDirection.Out), {
				Rotation = 180, 
				ImageTransparency = 0
			}):Play();
		end;
	end;
	task.delay(0.4, function()
		local v12 = game.ReplicatedStorage.KillFX.Rizzler.ParticleEmitter:Clone();
		v12.Parent = p2.Parent.LowerTorso;
		task.wait(2.5);
		v12.Enabled = false;
		for v13, v14 in pairs(v9:GetDescendants()) do
			if v14:IsA("TextLabel") then
				game.TweenService:Create(v14, TweenInfo.new(0.8, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut), {
					Rotation = 180, 
					Size = UDim2.fromScale(0, 0), 
					TextTransparency = 1
				}):Play();
			elseif v14:IsA("ImageLabel") then
				game.TweenService:Create(v14, TweenInfo.new(0.8, Enum.EasingStyle.Quad, Enum.EasingDirection.InOut), {
					Rotation = 0, 
					ImageTransparency = 1
				}):Play();
			end;
		end;
	end);
	return nil;
end;
return v1;
-- Animate In, fast
local i_total = 2
local wiggle_total = 0
local wiggle_i = 0.02
for i=1,i_total do
overlay.Position = UDim2.new( (-2 + (2 * (i/i_total)) + wiggle_total/2), 0, (-2 + (2 * (i/i_total)) + wiggle_total/2), -22 )
overlay.Size = UDim2.new( (4.5 - (3.5 * (i/i_total)) + wiggle_total), 0, (4.65 - (3.5 * (i/i_total)) + wiggle_total), 30 )
wait(0.01)
end
i_total = 30




if humanoid then
if humanoid:FindFirstChild("creator") then
if humanoid:FindFirstChild("creator").Value then
	if humanoid:FindFirstChild("creator").Value.Character then
	if humanoid:FindFirstChild("creator").Value.Character:FindFirstChild("Torso") then
	Indicator:new{}

	end	
	end
end
end
end
wait(0.1)
--Must be placed on StarterPlayer > StarterCharacterScripts
local UserInputService = game:GetService("UserInputService")
local Character = script.Parent
local Humanoid = Character:WaitForChild("Humanoid")
local isRunning = false
local Animation = Humanoid:LoadAnimation(script:WaitForChild("Animation"))



UserInputService.InputBegan:Connect(function(key)
	if key.KeyCode == Enum.KeyCode.C then
		if not isRunning then
			isRunning = true
			Animation:Play()
		else
			Animation:Stop()
			isRunning = false
		end
	end
end)
-- Handling computers calling the frame function
function pcFrame()
	frame(mouse.Hit.p)
end
-- Services
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PlayersService = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
--		Hold:Play()
	end
end)

script.Parent.Unequipped:Connect(function()
	if PlayIdle then
--local bodyPosition = Instance.new("BodyPosition", car.Chassis)
--bodyPosition.MaxForce = Vector3.new()
--local bodyGyro = Instance.new("BodyGyro", car.Chassis)
--bodyGyro.MaxTorque = Vector3.new()

local function UpdateThruster(thruster)
	-- Raycasting
	local hit, position = Raycast.new(thruster.Position, thruster.CFrame:vectorToWorldSpace(Vector3.new(0, -1, 0)) * stats.Height.Value) --game.Workspace:FindPartOnRay(ray, car)
	local thrusterHeight = (position - thruster.Position).magnitude
	
	-- Wheel
	local wheelWeld = thruster:FindFirstChild("WheelWeld")
	wheelWeld.C0 = CFrame.new(0, -math.min(thrusterHeight, stats.Height.Value * 0.8) + (wheelWeld.Part1.Size.Y / 2), 0)
	-- Wheel turning
	local offset = car.Chassis.CFrame:inverse() * thruster.CFrame
	local speed = car.Chassis.CFrame:vectorToObjectSpace(car.Chassis.Velocity)
	if offset.Z < 0 then
		local direction = 1
		if speed.Z > 0 then
			direction = -1
		end
		wheelWeld.C0 = wheelWeld.C0 * CFrame.Angles(0, (car.Chassis.RotVelocity.Y / 2) * direction, 0)
	end
	
	-- Particles
	if hit and thruster.Velocity.magnitude >= 5 then
		wheelWeld.Part1.ParticleEmitter.Enabled = true
	else
		wheelWeld.Part1.ParticleEmitter.Enabled = false
	end
end

car.DriveSeat.Changed:connect(function(property)
	if property == "Occupant" then
		if car.DriveSeat.Occupant then
			car.EngineBlock.Running.Pitch = 1
			car.EngineBlock.Running:Play()
			local player = game.Players:GetPlayerFromCharacter(car.DriveSeat.Occupant.Parent)
			if player then
				car.DriveSeat:SetNetworkOwner(player)
				local localCarScript = script.LocalCarScript:Clone()
				localCarScript.Parent = player.PlayerGui
				localCarScript.Car.Value = car
				localCarScript.Disabled = false
			end
		else
			car.EngineBlock.Running:Stop()
		end
	end
end)
-- ROBLOX Services
local Players = game.Players
local PointsService = game:GetService('PointsService')
--Put this Script Under Replicated First--

local Player = game.Players.LocalPlayer
local ReplicatedFirst = script.Parent
local PlayerGui = Player:WaitForChild("PlayerGui")
local LoadingScreen = script.LoadingScreen

LoadingScreen.Parent = PlayerGui
ReplicatedFirst:RemoveDefaultLoadingScreen()

game.Loaded:Wait()
LoadingScreen.BackFrame.PlayButton.Visible = true
-- functions

local function XPForLevel(level)
	return math.floor(300 + (level/100)^4 * 300)
end

local function UpdateLevels(player)
	local playerData	= PLAYER_DATA:FindFirstChild(player.Name)
	if playerData then
		local ranking		= playerData.Ranking
		local battlePass	= playerData.BattlePass
		if ranking.CurrentSeason.Value == CURRENT_SEASON then
			-- update level from xp
			local lastLevel	= ranking.Level.Value
			repeat
				local requiredXP	= XPForLevel(ranking.Level.Value + 1)
				if ranking.LevelXP.Value >= requiredXP then
					ranking.LevelXP.Value	= ranking.LevelXP.Value - requiredXP
					ranking.Level.Value		= ranking.Level.Value + 1
					script.Parent.BattlePassScript.LevelUp:Fire(player, ranking.Level.Value)
				end
			until ranking.LevelXP.Value < requiredXP
			
			if ranking.Level.Value > lastLevel then
				REMOTES.LevelUp:FireClient(player)
			end
		else
			-- transfer level to rank
			ranking.Rank.Value	= ranking.Rank.Value + ranking.Level.Value
			-- reset level and level xp
			ranking.Level.Value		= 0
			ranking.LevelXP.Value	= 0
			-- reset xp boost
			battlePass.XPBoost.Value	= 0
			-- update to current season
			ranking.CurrentSeason.Value	= CURRENT_SEASON
		end
	end
end

local function SkipTier(player)
	local playerData	= PLAYER_DATA:FindFirstChild(player.Name)
	if playerData then
		if playerData.Ranking.Level.Value < 100 then
			playerData.Ranking.Level.Value	= playerData.Ranking.Level.Value + 1
			script.Parent.BattlePassScript.LevelUp:Fire(player, playerData.Ranking.Level.Value)
			REMOTES.LevelUp:FireClient(player)
			return true
		end
	end
	return false
end
-- << DRAG BARS >>
local dragFrames = {main.gui.MainFrame}
local frameDragging
local dragStart
local startPos
local function dragFrame(input, frame)
	local delta = input.Position - dragStart
	frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
	if frame.AbsolutePosition.Y < 0 then
		frame.Position = frame.Position + UDim2.new(0,0,0,-frame.AbsolutePosition.Y)
	end
end
function module:MakeFrameDraggable(frame)
	local dragFrame = frame.DragBar.Drag
	dragFrame.InputBegan:Connect(function(input)
		if input.UserInputType == clickInput or input.UserInputType == touchInput then
			frameDragging = frame
			dragStart = input.Position
			startPos = frame.Position
			input.Changed:Connect(function()
				if input.UserInputState == Enum.UserInputState.End then
					frameDragging = nil
				end
			end)
		end
	end)
end
for _,frame in pairs(dragFrames) do
	module:MakeFrameDraggable(frame)
end
--Simultaneous Turn 1--: Simultaneous left turn for "SignalTurn1" and "SignalTurn1a" during a red light for all.
	--USES: Signal1, Signal1a, Signal2, Signal2a(Optional), Turn1, Turn1a
while true do
	PedValues = script.Parent.Parent.PedValues
	SignalValues = script.Parent.Parent.SignalValues
	TurnValues = script.Parent.Parent.TurnValues
--// SS3 controls for AC6 by Itzt, originally for 2014 Infiniti QX80. i don't know how to tune ac lol
 
wait(0.1)
local player = game.Players.LocalPlayer
local HUB = script.Parent.HUB
local TR = script.Parent.Tracker
local limitButton = HUB.Name
local lightOn = false
local Camera = game.Workspace.CurrentCamera
local cam = script.Parent.nxtcam.Value
local carSeat = script.Parent.CarSeat.Value
local mouse = game.Players.LocalPlayer:GetMouse()
local windows = false
local winfob = HUB.Parent.Windows
local red = 0
local green = 0
local blue = 1
--[=[
	Jest and TestEZ matchers to help facilitate UI and design business logic in
	our 2D and 3D apps in a human readable way.

	Depending on which test runner you're using, you will need to include a `beforeAll` block in your spec file to add the matchers:


	```lua
	-- Jest
	return function()
		local JestGlobals = require(path.to.Packages.Dev.JestGlobals)
		local expect = JestGlobals.expect
		local CollisionMatchers2D = require(path.to.Packages.Dev.CollisionMatchers2D)

		beforeAll(function()
			expect.extend(CollisionMatchers2D.Jest)
		end)

		-- ...
	end
	```

	```lua
	-- TestEZ
	return function()
		local CollisionMatchers2D = require(path.to.Packages.Dev.CollisionMatchers2D)

		beforeAll(function()
			expect.extend(CollisionMatchers2D.TestEZ)
		end)

		-- ...
	end
	```

	@class CollisionMatchers2D
]=]
return {
	TestEZ = require(script.TestEZ),
	Jest = require(script.Jest),
}
-- Any arguments passed into Tree:run() can be received after the first parameter, obj
-- Example: Tree:run(deltaTime) - > task:start(obj,deltaTime)

function task:start(obj)
	--[[
		(optional) this function is called directly before the run method
  		is called. It allows you to setup things before starting to run
  		Beware: if task is resumed after calling running(), start is not called.
	--]]
	
end
function task:finish(obj)
	--[[
		(optional) this function is called directly after the run method
		is completed with either success() or fail(). It allows you to clean up
		things, after you run the task.
	--]]
		
end	
function task:run(obj)
	--[[
		This is the meat of your task. The run method does everything you want it to do.
			
  	 	Finish it with one of these method calls:
  		success() - The task did run successfully
  		fail()    - The task did fail
  		running() - The task is still running and will be called directly from parent node
	--]]
	if obj.DebounceTable.Attacking == true and time() < (obj.DebounceTable.lastAttackTime + obj.DebounceTable.currentAttackDuration) then
		obj.DebounceTable.Attacking = true
		self:running()
		return
	else
		obj.DebounceTable.CanMove = true
		obj.DebounceTable.Attacking = false
	end
	local BestAttack, range = obj:GetBestAttack()
	if (obj.Model.HumanoidRootPart.Position - obj.currentTarget.HumanoidRootPart.Position).magnitude < obj.MaxAttackRange and BestAttack then
		
		
		if BestAttack then
			BestAttack = require(AttacksFolder[BestAttack])
			obj.DebounceTable.currentAttackDuration = BestAttack.Duration
		end 
		
		obj.DebounceTable.lastAttackTime = time()
		obj.DebounceTable.CanMove = false
		obj.DebounceTable.Attacking = true
		
		if BestAttack then
			local success,_error = pcall(function()
				BestAttack.Attack(obj)
			end)
			if not success then
				warn(_error)
			end
		end
		self:running()
		return
		--local AttackModule = 
	end
		
	self:success();
end
return task;