return {
    ["jest.config"] = script["jest.config"],
    FriendsListContext = require(script.Context.FriendsListContext),
    FriendsMenuContextWrapper = require(script.Context.FriendsMenuContextWrapper),
    FriendsMenuFriendsList = require(script.Components.FriendsMenuFriendsList),
    FriendsMenuSearch = require(script.Components.FriendsMenuSearch),
    InviteFriendContext = require(script.Context.InviteFriendContext),
    InviteCallbackContext = require(script.Context.InviteCallbackContext),
    FriendsListContextProvider = require(script.Context.FriendsListContextProvider),
    InviteStatus = require(script.Constants).InviteStatus,
    FriendMenuType = require(script.Enums.FriendMenuType),
    SelectedUsersContext = require(script.Context.SelectedUsersContext),
    SelectedUsersScroller = require(script.Components.SelectedUsersScroller)
};


local v0 = require(script.Parent.Parent.Dev.JestConfigs);
return {
    displayName = "SocialWidgets-FriendsMenu",
    testMatch = {
        "**/*.test"
    },
    setupFilesAfterEnv = {
        v0.setupFiles.LogHandler,
        v0.setupFiles.UIBloxInitializer,
        v0.setupFiles.createPromiseRejectionHandler()
    }
};


local l_Parent_0 = script:FindFirstAncestor("FriendsMenu").Parent;
local v1 = require(l_Parent_0.React);
local v2 = require(l_Parent_0.Rodux);
local v3 = require(l_Parent_0.RoactRodux);
local l_RoactServices_0 = require(l_Parent_0.Dev.RoactServices).RoactServices;
local l_AppStyleProvider_0 = require(l_Parent_0.Style).AppStyleProvider;
local l_Constants_0 = require(l_Parent_0.Style).Constants;
local v7 = {
    themeName = l_Constants_0.ThemeName.Dark,
    fontName = l_Constants_0.FontName.Gotham
};
local v8 = {
    ScreenSize = Vector2.new(500, 500),
    SetAlias = {
        Aliases = {
            byUserId = {
                ["1"] = "foo"
            }
        }
    }
};
local function v12(v9, v10)
    return v2.Store.new(v10 or function(v11)
        return v11;
    end, v9 or {}, {
        v2.thunkMiddleware
    });
end;
return {
    mockServices = function(v13, v14)
        return (v1.createElement(l_RoactServices_0.ServiceProvider, {}, {
            storeProvider = v1.createElement(v3.StoreProvider, {
                store = v14 or v12(v8)
            }, {
                styleProvider = v1.createElement(l_AppStyleProvider_0, {
                    style = v7
                }, v13)
            })
        }));
    end,
    mockStore = v12
};


local l_script_FirstAncestor_0 = script:FindFirstAncestor("FriendsMenu");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local _ = require(l_script_FirstAncestor_0.friendsMenuModalType);
local v3 = require(l_script_FirstAncestor_0.Constants);
local l_GetFFlagFriendsMenuDummyLoadingFriendsFix_0 = require(l_Parent_0.SharedFlags).GetFFlagFriendsMenuDummyLoadingFriendsFix;
local function v6(v5)
    return {
        displayName = "",
        friendFrequentRank = v5,
        friendRank = v5,
        hasVerifiedBadge = false,
        id = not not l_GetFFlagFriendsMenuDummyLoadingFriendsFix_0() and v3.DummyFriendsPrefix .. tostring(v5) or tostring(v5),
        isFetching = true,
        isFriend = true,
        lastLocation = "",
        lastOnline = DateTime.now(),
        name = "",
        presence = "",
        isLoadingPlaceholder = true
    };
end;
return function(v7)
    local v8 = {};
    for v9 = 1, v7 do
        v8[v9] = v6(v9);
    end;
    return v8;
end;


local l_RunService_0 = game:GetService("RunService");
local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameCollectionViews");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v3 = require(l_Parent_0.React);
local l_useDesignTokens_0 = require(l_Parent_0.Style).useDesignTokens;
local v5 = require(l_script_FirstAncestor_0.calculateCountdownTime);
local function _(v6)
    if v6.days < 0 then
        return false;
    elseif not (v6.hours >= 0) or v6.hours > 23 then
        return false;
    elseif not (v6.minutes >= 0) or v6.minutes > 59 then
        return false;
    else
        return true;
    end;
end;
local function _(v8)
    if v8 < 15 then
        return 1;
    else
        return 15;
    end;
end;
return function(v10)
    local l_endTimestamp_0 = v10.endTimestamp;
    local l_formatStringHoursMinutes_0 = v10.formatStringHoursMinutes;
    local l_defaultString_0 = v10.defaultString;
    local v14, v15 = v3.useState("");
    local v19 = v3.useCallback(function()
        local l_l_defaultString_0_0 = l_defaultString_0;
        local v17 = l_endTimestamp_0 - DateTime.now().UnixTimestamp;
        local v18 = v5(v17);
        if (((v18.days >= 0 and v18.hours >= 0) and v18.hours <= 23) and v18.minutes >= 0) and v18.minutes <= 59 then
            l_l_defaultString_0_0 = if v18.days > 0 then l_defaultString_0 else l_formatStringHoursMinutes_0:gsub("{hours}", (tostring(v18.hours))):gsub("{minutes}", (tostring(v18.minutes)));
        end;
        if l_l_defaultString_0_0 ~= v14 then
            v15(l_l_defaultString_0_0);
        end;
        return v17;
    end, {
        l_defaultString_0,
        l_endTimestamp_0,
        l_formatStringHoursMinutes_0
    });
    v3.useEffect(function()
        v19();
    end, {
        v19
    });
    v3.useEffect(function()
        local v20 = l_endTimestamp_0 - DateTime.now().UnixTimestamp;
        local v21 = nil;
        if v20 > 0 then
            local v22 = 0;
            local v23 = v20 < 15 and 1 or 15;
            do
                local l_v22_0, l_v23_0 = v22, v23;
                v21 = l_RunService_0.Heartbeat:Connect(function()
                    local v26 = os.clock();
                    if v26 - l_v22_0 < l_v23_0 then
                        return ;
                    else
                        l_v22_0 = v26;
                        v20 = v19();
                        l_v23_0 = v20 < 15 and 1 or 15;
                        if not (not (v20 <= 0) or not v21) then
                            v21:Disconnect();
                            v21 = nil;
                        end;
                        return ;
                    end;
                end);
            end;
        end;
        return function()
            if v21 ~= nil then
                v21:Disconnect();
                v21 = nil;
            end;
        end;
    end, {
        l_endTimestamp_0,
        v19
    });
    local v27 = l_useDesignTokens_0();
    local l_Subheader_0 = v27.Semantic.Typography.Subheader;
    local l_Default_0 = v27.Semantic.Color.Text.Default;
    local l_FontSize_0 = l_Subheader_0.FontSize;
    return v3.createElement("TextLabel", {
        TextSize = l_FontSize_0,
        Size = UDim2.new(1, 0, 0, l_FontSize_0),
        Text = v14,
        TextXAlignment = Enum.TextXAlignment.Left,
        LayoutOrder = v10.LayoutOrder,
        BackgroundTransparency = 1,
        Font = l_Subheader_0.Font,
        TextColor3 = l_Default_0.Color3
    });
end;


return function(v0)
    v0 = v0 + 59;
    local v1 = 0;
    local v2 = 0;
    local v3 = 0;
    if v0 >= 86400 then
        v1 = math.floor(v0 / 86400);
        v0 = v0 - v1 * 86400;
    end;
    if v0 >= 3600 then
        v2 = math.floor(v0 / 3600);
        v0 = v0 - v2 * 3600;
    end;
    if v0 > 0 then
        v3 = math.floor(v0 / 60);
    end;
    return {
        days = v1,
        hours = v2,
        minutes = v3
    };
end;


return {
    useAnimateScrollViewToSelection = require(script.useAnimateScrollViewToSelection),
    ["jest.config"] = script["jest.config"],
    CountdownSubtitleText = require(script.CountdownSubtitleText)
};


local v0 = require(script.Parent.Parent.Dev.JestConfigs);
return {
    displayName = "GameCollectionViews",
    setupFilesAfterEnv = {
        v0.setupFiles.LogHandler,
        v0.setupFiles.UIBloxInitializer,
        v0.setupFiles.createPromiseRejectionHandler()
    }
};


local l_TweenService_0 = game:GetService("TweenService");
local v1 = require(script:FindFirstAncestor("GameCollectionViews").Parent.React);
return function(v2, v3)
    v1.useEffect(function()
        local v4 = {};
        local v5 = nil;
        local v6 = 0;
        local v7 = 0;
        local v8 = 0;
        if v2 and v2.current ~= nil then
            local l_current_0 = v2.current;
            v6 = l_current_0.AbsolutePosition.Y;
            v7 = l_current_0.AbsoluteWindowSize.Y;
            table.insert(v4, l_current_0:GetPropertyChangedSignal("AbsolutePosition"):Connect(function()
                v6 = l_current_0.AbsolutePosition.Y;
            end));
            table.insert(v4, l_current_0:GetPropertyChangedSignal("AbsoluteWindowSize"):Connect(function()
                v7 = l_current_0.AbsoluteWindowSize.Y;
            end));
            table.insert(v4, l_current_0.SelectionChanged:Connect(function(_, _, v12)
                if v12 ~= nil and v12:IsDescendantOf(l_current_0) then
                    if v5 then
                        v5:Cancel();
                        v5 = nil;
                    end;
                    local v13 = v12.AbsolutePosition.Y - ((v7 * 0.5 - v12.AbsoluteSize.Y * 0.5) + v6);
                    local l_CanvasPosition_0 = l_current_0.CanvasPosition;
                    local v15 = Vector2.new(l_CanvasPosition_0.X, l_CanvasPosition_0.Y + v13);
                    local v16 = os.clock();
                    if v3 * 0.5 <= v16 - v8 then
                        v5 = l_TweenService_0:Create(l_current_0, TweenInfo.new(v3, Enum.EasingStyle.Sine, Enum.EasingDirection.Out), {
                            CanvasPosition = v15
                        });
                        if v5 then
                            v5:Play();
                        end;
                    else
                        l_current_0.CanvasPosition = v15;
                    end;
                    v8 = v16;
                    return ;
                else
                    return ;
                end;
            end));
        end;
        return function()
            for _, v18 in v4, nil, nil do
                v18:Disconnect();
            end;
            if v5 then
                v5:Cancel();
            end;
        end;
    end, {
        v2,
        v3
    });
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameDetail");
local v1 = require(l_script_FirstAncestor_0.PeekView.SetGameDetailsPeekViewState);
local v2 = require(l_script_FirstAncestor_0.PeekView.UseGameDetailsPeekView);
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v4 = require(l_Parent_0.Cryo);
local l_AppPage_0 = require(l_Parent_0.RobloxAppEnums).AppPage;
local l_FormFactor_0 = require(l_Parent_0.FormFactor).Enums.FormFactor;
local l_PeekViewState_0 = require(l_Parent_0.PeekView).PeekViewState;
local l_NavigateDown_0 = require(l_Parent_0.NavigationRodux).Thunks.NavigateDown;
return function(v9, v10, v11)
    return function(v12)
        local v13 = v12:getState();
        local l_FormFactor_1 = v13.FormFactor;
        local l_viewState_0 = v13.GameDetailsPeekView.viewState;
        local v16 = nil;
        if not (l_FormFactor_1 == l_FormFactor_0.COMPACT) or not v2() then
            v16 = {
                name = l_AppPage_0.ExperienceDetail,
                detail = tostring(v9),
                extraProps = v11
            };
        else
            v16 = {
                name = l_AppPage_0.GameDetail,
                detail = tostring(v9),
                extraProps = v11
            };
            if (l_viewState_0 ~= l_PeekViewState_0.Full and l_viewState_0 ~= l_PeekViewState_0.Extended) and (not v11 or not v11.mountAsFullView) then
                v12:dispatch(v1(l_PeekViewState_0.Closed));
                v10.clearAppScreens({
                    l_AppPage_0.GameDetail,
                    l_AppPage_0.ProfilePeekView
                });
            else
                v16 = v4.Dictionary.join(v16, {
                    extraProps = v4.Dictionary.join(v16.extraProps or {}, {
                        mountAsFullView = true
                    })
                });
            end;
        end;
        v12:dispatch(l_NavigateDown_0(v16));
    end;
end;


return require(script:FindFirstAncestor("GameDetail").Parent.Rodux).makeActionCreator("SetGameDetailsPeekViewState", function(v0)
    return {
        viewState = v0
    };
end);


local l_isSubjectToDesktopPolicies_0 = require(script:FindFirstAncestor("GameDetail").Parent.SharedFlags).isSubjectToDesktopPolicies;
local l_Players_0 = game:GetService("Players");
return function()
    if l_Players_0.LocalPlayer then
        if not l_isSubjectToDesktopPolicies_0() then
            return true;
        else
            return false;
        end;
    else
        return false;
    end;
end;


return {
    SetGameDetailsPeekViewState = require(script.SetGameDetailsPeekViewState),
    UseGameDetailsPeekView = require(script.UseGameDetailsPeekView)
};


return {
    OpenGameDetails = require(script.OpenGameDetails),
    PeekView = require(script.PeekView),
    ["jest.config"] = script["jest.config"]
};


local v0 = require(script.Parent.Parent.Dev.JestConfigs);
return {
    displayName = "GameDetail",
    setupFilesAfterEnv = {
        v0.setupFiles.LogHandler,
        v0.setupFiles.UIBloxInitializer,
        v0.setupFiles.createPromiseRejectionHandler()
    }
};


return require(script:FindFirstAncestor("GameDetailRodux").Parent.Rodux).makeActionCreator(script.Name, function(v0)
    return {
        gameDetails = v0
    };
end);


local l_Parent_0 = script:FindFirstAncestor("GameDetailRodux").Parent;
local l_DateTime_0 = require(l_Parent_0.Time).DateTime;
local l_GetFFlagEnableSwapToSourceButton_0 = require(l_Parent_0.SharedFlags).GetFFlagEnableSwapToSourceButton;
local v3 = {
    new = function()
        return {};
    end
};
v3.mock = function(v4, v5)
    local v6 = v3.new();
    local v7 = l_DateTime_0.new();
    local v8 = l_DateTime_0.fromUnixTimestamp(v7:GetUnixTimestamp() + 60);
    v6.id = v4;
    v6.rootPlaceId = "370731277";
    v6.name = v5;
    v6.description = "This is MeepCity";
    v6.sourceName = if not l_GetFFlagEnableSwapToSourceButton_0() then nil else "source name";
    v6.sourceDescription = if not l_GetFFlagEnableSwapToSourceButton_0() then nil else "source description";
    v6.creator = {
        id = 123247,
        name = "alexnewtron",
        type = "User",
        isRNVAccount = false,
        hasVerifiedBadge = false
    };
    v6.price = nil;
    v6.isExperimental = false;
    v6.allowedGearGenres = {
        "TownAndCity"
    };
    v6.allowedGearCategories = {};
    v6.playing = 49252;
    v6.visits = 2358954901;
    v6.maxPlayers = 110;
    v6.created = v7:GetIsoDate();
    v6.updated = v8:GetIsoDate();
    v6.studioAccessToApisAllowed = true;
    v6.universeAvatarType = "MorphToR15";
    v6.genre = "Town and City";
    return v6;
end;
v3.fromJsonData = function(v9)
    local v10 = v3.new();
    v10.id = tostring(v9.id);
    v10.rootPlaceId = tostring(v9.rootPlaceId);
    v10.name = v9.name;
    v10.description = v9.description;
    v10.sourceName = if not l_GetFFlagEnableSwapToSourceButton_0() then nil else v9.sourceName;
    v10.sourceDescription = if not l_GetFFlagEnableSwapToSourceButton_0() then nil else v9.sourceDescription;
    v10.creator = {
        id = v9.creator.id,
        name = v9.creator.name,
        type = v9.creator.type,
        isRNVAccount = v9.creator.isRNVAccount,
        hasVerifiedBadge = v9.creator.hasVerifiedBadge
    };
    v10.price = v9.price;
    v10.isExperimental = v9.isExperimental;
    v10.allowedGearGenres = v9.allowedGearGenres;
    v10.allowedGearCategories = v9.allowedGearCategories;
    v10.playing = v9.playing;
    v10.visits = v9.visits;
    v10.maxPlayers = v9.maxPlayers;
    v10.created = v9.created;
    v10.updated = v9.updated;
    v10.studioAccessToApisAllowed = v9.studioAccessToApisAllowed;
    v10.universeAvatarType = v9.universeAvatarType;
    v10.genre = v9.genre;
    return v10;
end;
return v3;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameDetailRodux");
local l_Immutable_0 = require(l_script_FirstAncestor_0.Parent.AppCommonLib).Immutable;
local v2 = require(l_script_FirstAncestor_0.GameDetails.AddGameDetails);
return function(v3, v4)
    v3 = v3 or {};
    if v4.type == v2.name then
        v3 = l_Immutable_0.JoinDictionaries(v3, v4.gameDetails);
    end;
    return v3;
end;


local l_Url_0 = require(script:FindFirstAncestor("GameDetailRodux").Parent.Http).Url;
return function(v1, v2)
    assert(type(v2) == "table", "GamesMultigetDetails request expects universeIds to be a table");
    if not (#v2 ~= 0) or #v2 > 100 then
        error("GamesMultigetDetails request expects universeIds count between 1-100");
    end;
    return v1(string.format("%sv1/games?universeIds=%s", l_Url_0.GAME_URL, (table.concat(v2, ","))), "GET");
end;


return {
    ApiFetchGameDetails = require(script.ApiFetchGameDetails),
    GameDetailModel = require(script.GameDetailModel),
    GameDetailReducer = require(script.GameDetailReducer)
};


local l_Url_0 = require(script:FindFirstAncestor("GameDetailRodux").Parent.Http).Url;
return function(v1, v2)
    return v1(string.format("%s/v1/games/multiget-place-details?%s", l_Url_0.GAME_URL, (l_Url_0:makeQueryString({
        placeIds = v2
    }))), "GET");
end;


return {
    ApiFetchGamesDataByPlaceIds = require(script.ApiFetchGamesDataByPlaceIds),
    GamesMultigetPlaceDetails = require(script.GamesMultigetPlaceDetails)
};


local v0 = require(script:FindFirstAncestor("GameDetailRodux").Parent.Lumberyak).Logger.new(nil, "GameDetailRodux");
v0:addSink({
    maxLevel = v0.Levels.Warning,
    log = function(_, v2, _)
        print(v2);
    end
});
return v0;


return {
    FetchGamePlayabilityAndProductInfo = require(script.FetchGamePlayabilityAndProductInfo),
    GameDetails = require(script.GameDetails),
    GamesByPlaceId = require(script.GamesByPlaceId),
    GetGameNameAndDescription = require(script.GetGameNameAndDescription),
    ["jest.config"] = script["jest.config"]
};


local v0 = require(script.Parent.Parent.Dev.JestConfigs);
return {
    displayName = "GameDetailRodux",
    setupFilesAfterEnv = {
        v0.setupFiles.LogHandler,
        v0.setupFiles.UIBloxInitializer,
        v0.setupFiles.createPromiseRejectionHandler()
    }
};


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameIconRodux");
local v1 = require(l_script_FirstAncestor_0.GamesGetIcons);
local v2 = require(l_script_FirstAncestor_0.BigGameIcons.SetBigGameIcons);
local v3 = require(l_script_FirstAncestor_0.BigGameIcons.BigGameIconReducer);
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v5 = require(l_Parent_0.Promise);
local l_ApiFetchThumbnails_0 = require(l_Parent_0.Http).Utils.ApiFetchThumbnails;
return function(v7, v8, v9)
    return function(v10)
        local v11 = v10:getState()[v3.key];
        local v12 = {};
        for _, v14 in pairs(v8) do
            if v11[v14] == nil then
                table.insert(v12, v14);
            end;
        end;
        if #v12 == 0 then
            return v5.resolve();
        else
            return l_ApiFetchThumbnails_0.Fetch(v7, v12, v9 or "512x512", "Game", v1, v2, v10);
        end;
    end;
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameIconRodux");
local v1 = require(l_script_FirstAncestor_0.Parent.Cryo);
local v2 = require(l_script_FirstAncestor_0.BigGameIcons.SetBigGameIcons);
return {
    key = "BigGameIconsKey",
    reducer = function(v3, v4)
        v3 = v3 or {};
        if v4.type == v2.name then
            v3 = v1.Dictionary.join(v3, v4.gameIcons);
        end;
        return v3;
    end
};


local l_Parent_0 = script:FindFirstAncestor("GameIconRodux").Parent;
local l_makeActionCreator_0 = require(l_Parent_0.Rodux).makeActionCreator;
local v2 = require(l_Parent_0.ArgCheck);
return l_makeActionCreator_0(script.Name, function(v3)
    v2.isType(v3, "table", "iconsTable");
    return {
        gameIcons = v3
    };
end);


return {
    ApiFetchBigGameIcons = require(script.ApiFetchBigGameIcons),
    BigGameIconReducer = require(script.BigGameIconReducer)
};


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameIconRodux");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.Promise);
local l_ApiFetchThumbnails_0 = require(l_Parent_0.Http).Utils.ApiFetchThumbnails;
local v4 = require(l_script_FirstAncestor_0.GamesGetIcons);
local v5 = require(l_script_FirstAncestor_0.GameIcons.SetGameIcons);
local v6 = require(l_script_FirstAncestor_0.GameIcons.GameIconReducer);
return function(v7, v8, v9)
    return function(v10)
        local v11 = v10:getState()[v6.key];
        local v12 = {};
        for _, v14 in pairs(v8) do
            if v11[v14] == nil then
                table.insert(v12, v14);
            end;
        end;
        if #v12 == 0 then
            return v2.resolve();
        else
            return l_ApiFetchThumbnails_0.Fetch(v7, v12, v9 or "150x150", "Game", v4, v5, v10);
        end;
    end;
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameIconRodux");
local v1 = require(l_script_FirstAncestor_0.Parent.Cryo);
local v2 = require(l_script_FirstAncestor_0.GameIcons.SetGameIcons);
return {
    key = "GameIconsKey",
    reducer = function(v3, v4)
        v3 = v3 or {};
        if v4.type == v2.name then
            v3 = v1.Dictionary.join(v3, v4.gameIcons);
        end;
        return v3;
    end
};


local v0 = require(script:FindFirstAncestor("GameIconRodux").GameIcons.GameIconReducer);
return function(v1, v2)
    local v3 = v1[v0.key][v2];
    if not v3 then
        return "";
    else
        return v3.url;
    end;
end;


return {
    ApiFetchGameIcons = require(script.ApiFetchGameIcons),
    GameIconReducer = require(script.GameIconReducer),
    getGameIcon = require(script.getGameIcon),
    SetGameIcons = require(script.SetGameIcons),
    useGameIconSelector = require(script.useGameIconSelector)
};


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameIconRodux");
local v1 = require(l_script_FirstAncestor_0.GameIcons.GameIconReducer);
local l_useSelector_0 = require(l_script_FirstAncestor_0.Parent.RoactUtils).Hooks.RoactRodux.useSelector;
return function(v3)
    return (l_useSelector_0(function(v4)
        return v4[v1.key][v3];
    end));
end;


local l_Url_0 = require(script:FindFirstAncestor("GameIconRodux").Parent.Http).Url;
return function(v1, v2, v3)
    return v1(string.format("%sv1/games/icons?%s", l_Url_0.THUMBNAILS_URL, (l_Url_0:makeQueryString({
        universeIds = table.concat(v2, ","),
        format = "png",
        size = v3
    }))), "GET");
end;


return {
    BigGameIcons = require(script.BigGameIcons),
    GameIcons = require(script.GameIcons),
    ["jest.config"] = script["jest.config"]
};


local v0 = require(script.Parent.Parent.Dev.JestConfigs);
return {
    displayName = "GameIconRodux",
    setupFilesAfterEnv = {
        v0.setupFiles.LogHandler,
        v0.setupFiles.UIBloxInitializer,
        v0.setupFiles.createPromiseRejectionHandler()
    }
};


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameInvite");
local l_Components_0 = l_script_FirstAncestor_0.Components;
local l_Context_0 = l_script_FirstAncestor_0.Context;
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v4 = require(l_Parent_0.FriendsMenu);
local v5 = require(l_Parent_0.React);
local l_DeviceInfo_0 = require(l_Parent_0.NotificationsCommon).DeviceInfo;
local v7 = require(l_Parent_0.RoactUtils);
local l_FriendsMenuFriendsList_0 = v4.FriendsMenuFriendsList;
local l_InviteFriendContext_0 = v4.InviteFriendContext;
local l_FriendsMenuContextWrapper_0 = v4.FriendsMenuContextWrapper;
local l_FriendsMenuSearch_0 = v4.FriendsMenuSearch;
local l_FriendMenuType_0 = v4.FriendMenuType;
local l_GetFFlagEnableFriendMenuMultiSelect_0 = require(l_Parent_0.SharedFlags).GetFFlagEnableFriendMenuMultiSelect;
local v14 = require(l_script_FirstAncestor_0.analytics.GameInviteAnalyticsManager);
local v15 = require(l_Components_0.GameInviteTitle);
local v16 = require(l_Components_0.GameInviteCustomText);
local v17 = require(l_script_FirstAncestor_0.GameInviteConstants);
local v18 = require(l_Context_0.GameInviteModalLayoutContext);
local v19 = require(l_Context_0.GameDetailsContext);
local l_useSelector_0 = v7.Hooks.RoactRodux.useSelector;
local l_GetFFlagEnableCommonFriendsMenu_0 = require(l_Parent_0.SharedFlags).GetFFlagEnableCommonFriendsMenu;
local l_GetFFlagEnableUniversalAppGameInviteUnification_0 = require(l_Parent_0.SharedFlags).GetFFlagEnableUniversalAppGameInviteUnification;
local l_SidePadding_0 = v17.Layout.SidePadding;
local l_TitleHeight_0 = v17.Layout.TitleHeight;
local function v38(_)
    local v26 = v5.useContext(v18);
    local v27 = v5.useContext(v19);
    local v29 = l_useSelector_0(function(v28)
        if not l_GetFFlagEnableUniversalAppGameInviteUnification_0() then
            return nil;
        else
            return v28.TopBar;
        end;
    end);
    local v30 = l_DeviceInfo_0.isConsole();
    local v31 = v26.modalMode == "compact";
    local l_promptMessage_0 = v27.promptMessage;
    local v33 = l_promptMessage_0 and #l_promptMessage_0 > 0;
    local v34 = l_TitleHeight_0 + 12;
    local v35 = not v31 and not v30;
    if v35 then
        v34 = v34 + 48;
    end;
    if v33 then
        v34 = v34 + 48;
    end;
    local l_l_TitleHeight_0_0 = l_TitleHeight_0;
    local _ = false;
    if not ((not l_GetFFlagEnableUniversalAppGameInviteUnification_0() or not (not v27.isCoreScript and ((v29 and v29.statusBarHeight) and true or false))) or not v29) then
        v34 = v34 + v29.statusBarHeight;
        l_l_TitleHeight_0_0 = l_l_TitleHeight_0_0 + v29.statusBarHeight;
    end;
    return v5.createElement("Frame", {
        BorderSizePixel = 0,
        BackgroundTransparency = 1,
        Size = UDim2.new(1, 0, 1, 0)
    }, {
        UIPadding = v5.createElement("UIPadding", {
            PaddingBottom = UDim.new(0, 8),
            PaddingTop = UDim.new(0, 8)
        }),
        UIListLayout = v5.createElement("UIListLayout", {
            FillDirection = Enum.FillDirection.Vertical,
            Padding = UDim.new(0, 12),
            SortOrder = Enum.SortOrder.LayoutOrder,
            VerticalAlignment = Enum.VerticalAlignment.Top
        }),
        TitleContainer = if not l_GetFFlagEnableUniversalAppGameInviteUnification_0() then v5.createElement(v15, {
            layoutOrder = 0,
            size = UDim2.new(1, 0, 0, l_TitleHeight_0)
        }) else v5.createElement("Frame", {
            BorderSizePixel = 0,
            BackgroundTransparency = 1,
            LayoutOrder = 0,
            Size = UDim2.new(1, 0, 0, l_l_TitleHeight_0_0)
        }, {
            GameInviteTitle = v5.createElement(v15, {
                layoutOrder = 0,
                size = UDim2.new(1, 0, 0, l_TitleHeight_0)
            })
        }),
        SearchBox = not not v35 and v5.createElement("Frame", {
            BorderSizePixel = 0,
            BackgroundTransparency = 1,
            LayoutOrder = 1,
            Size = UDim2.new(1, 0, 0, 36)
        }, {
            UIPadding = v5.createElement("UIPadding", {
                PaddingLeft = UDim.new(0, l_SidePadding_0),
                PaddingRight = UDim.new(0, l_SidePadding_0)
            }),
            UIListLayout = v5.createElement("UIListLayout", {
                FillDirection = Enum.FillDirection.Vertical,
                Padding = UDim.new(0, 12),
                SortOrder = Enum.SortOrder.LayoutOrder,
                VerticalAlignment = Enum.VerticalAlignment.Top
            }),
            FriendsMenuSearch = v5.createElement(l_FriendsMenuSearch_0, {
                layoutOrder = 1,
                size = UDim2.new(1, 0, 0, 36),
                focusElement = false,
                onFocus = function()
                    v14:onSearchFocused();
                end
            })
        }) or nil,
        CustomTextContainer = not not v33 and v5.createElement(v16, {
            layoutOrder = 2,
            size = UDim2.new(1, 0, 0, 36),
            promptMessage = l_promptMessage_0
        }) or nil,
        FriendsList = v5.createElement(l_FriendsMenuFriendsList_0, {
            layoutOrder = 3,
            size = UDim2.new(1, 0, 1, -v34),
            parentComponentName = v17.ParentComponentName,
            menuType = if not l_GetFFlagEnableFriendMenuMultiSelect_0() then nil else l_FriendMenuType_0.SingleSelect
        })
    });
end;
return function(v39)
    local v40 = if not l_GetFFlagEnableCommonFriendsMenu_0() then {
        inviteSingleFriend = function()
        end,
        getMaxRecipientRowNum = function()
        end
    } else v5.useContext(l_InviteFriendContext_0);
    if not l_GetFFlagEnableCommonFriendsMenu_0() then
        return (v5.createElement(v38, v39));
    else
        return (v5.createElement(l_FriendsMenuContextWrapper_0, {
            inviteSingleFriend = v40.inviteSingleFriend,
            inviteMultiFriends = function()
            end,
            isLoadingCustomParams = v39.isLoadingCustomParams
        }, {
            GameInviteContent = v5.createElement(v38, v39)
        }));
    end;
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameInvite");
local l_Components_0 = l_script_FirstAncestor_0.Components;
local l_Context_0 = l_script_FirstAncestor_0.Context;
local v3 = require(l_script_FirstAncestor_0.Parent.React);
local v4 = require(l_Context_0.GameInviteContextProvider);
local v5 = require(l_Components_0.GameInviteContent);
local _ = require(l_script_FirstAncestor_0.gameInviteModalType);
return function(v7)
    return v3.createElement(v4, {
        options = v7.options,
        serverType = v7.serverType,
        gameDetails = v7.gameDetails,
        isLoadingCustomParams = v7.isLoading,
        isCoreScript = v7.isCoreScript
    }, {
        GameInviteContent = v3.createElement(v5, {
            isLoadingCustomParams = v7.isLoading
        })
    });
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameInvite");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.React);
local v3 = require(l_Parent_0.UIBlox);
local v4 = require(l_script_FirstAncestor_0.GameInviteConstants);
local l_useStyle_0 = v3.Core.Style.useStyle;
local l_SidePadding_0 = v4.Layout.SidePadding;
return function(v7)
    local v8 = l_useStyle_0();
    local l_Theme_0 = v8.Theme;
    local l_Font_0 = v8.Font;
    return v2.createElement("Frame", {
        Size = v7.size,
        LayoutOrder = v7.layoutOrder,
        BackgroundTransparency = 1,
        ClipsDescendants = true
    }, {
        UIPadding = v2.createElement("UIPadding", {
            PaddingLeft = UDim.new(0, l_SidePadding_0),
            PaddingRight = UDim.new(0, l_SidePadding_0)
        }),
        CustomText = v2.createElement("TextLabel", {
            Text = v7.promptMessage,
            TextSize = l_Font_0.BaseSize * l_Font_0.Body.RelativeSize,
            TextColor3 = l_Theme_0.TextEmphasis.Color,
            TextTransparency = l_Theme_0.TextEmphasis.Transparency,
            Font = l_Font_0.Body.Font,
            TextXAlignment = Enum.TextXAlignment.Left,
            TextWrapped = true,
            TextTruncate = Enum.TextTruncate.AtEnd,
            Size = UDim2.new(1, 0, 1, 0),
            BackgroundTransparency = 1
        })
    });
end;


local l_RobloxReplicatedStorage_0 = game:GetService("RobloxReplicatedStorage");
local l_RunService_0 = game:GetService("RunService");
local l_GuiService_0 = game:GetService("GuiService");
local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameInvite");
local l_Components_0 = l_script_FirstAncestor_0.Components;
local l_Context_0 = l_script_FirstAncestor_0.Context;
local l_Actions_0 = l_script_FirstAncestor_0.State.Actions;
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v8 = require(l_Parent_0.React);
local v9 = require(l_Parent_0.RoactUtils);
local v10 = require(l_Parent_0.Promise);
local l_GetGameNameAndDescription_0 = require(l_Parent_0.GameDetailRodux).GetGameNameAndDescription;
local _ = require(l_script_FirstAncestor_0.gameInviteModalType);
local v13 = require(l_script_FirstAncestor_0.GameInviteModalManager);
local v14 = require(l_Context_0.GameInviteModalLayoutProvider);
local v15 = require(l_Components_0.GameInviteModalWindow);
local v16 = require(l_Components_0.GameInviteContentWrapper);
local v17 = require(l_script_FirstAncestor_0.GameInviteDependencies);
local v18 = require(l_script_FirstAncestor_0.GameInviteConstants);
local v19 = require(l_Actions_0.ResetUserInviteStatus);
local v20 = require(l_Parent_0.VrCompatibility);
local l_VRReadyWrapper_0 = v20.VRReadyWrapper;
local l_VRConstants_0 = v20.VRConstants;
local l_useDispatch_0 = v9.Hooks.RoactRodux.useDispatch;
local l_networkImpl_0 = v17.networkImpl;
game:DefineFastFlag("LuaEnableGameInviteModal2023V5", false);
local v25 = require(l_Parent_0.SharedFlags);
local l_GetFFlagEnableUniversalAppGameInviteUnification_0 = v25.GetFFlagEnableUniversalAppGameInviteUnification;
local l_GetFFlagEnableGameInviteModalVRSupport_0 = v25.GetFFlagEnableGameInviteModalVRSupport;
local l_GetFFlagAdjustVRFloor_0 = v25.GetFFlagAdjustVRFloor;
return function(v29)
    if game:GetFastFlag("LuaEnableGameInviteModal2023V5") then
        local v30, v31 = v8.useState(false);
        local v32, v33 = v8.useState(false);
        local v34, v35 = v8.useState({});
        local v36, v37 = v8.useState({});
        local v38, v39 = v8.useState("");
        local v40 = not l_RunService_0:IsStudio();
        local v41 = nil;
        local v42 = nil;
        local v43 = nil;
        if l_GetFFlagEnableUniversalAppGameInviteUnification_0() then
            v41 = v29.renderLocation == v18.RenderLocation.CoreScripts;
            v42 = v29.renderLocation == v18.RenderLocation.UniversalApp;
            v43 = l_useDispatch_0();
        end;
        local function v47(v44, v45, v46)
            v31(v44);
            v33(v45 or false);
            if v46 then
                v35(v46);
            end;
            if not (((not l_GetFFlagEnableUniversalAppGameInviteUnification_0() or not v42) or v44) or not v43) then
                v43(v19());
            end;
        end;
        v8.useEffect(function()
            local v48 = v13.ToggleGameInviteModalEvent.Event:Connect(v47);
            return function()
                v48:Disconnect();
            end;
        end, {});
        v8.useEffect(function()
            if not l_GetFFlagEnableUniversalAppGameInviteUnification_0() then
                local v49 = l_GuiService_0.MenuOpened:Connect(function()
                    if v30 then
                        v13:closeModal();
                    end;
                end);
                return function()
                    v49:Disconnect();
                end;
            elseif not v41 then
                return function()
                end;
            else
                local v50 = l_GuiService_0.MenuOpened:Connect(function()
                    if v30 then
                        v13:closeModal();
                    end;
                end);
                return function()
                    v50:Disconnect();
                end;
            end;
        end, {
            v30,
            v41
        });
        v8.useEffect(function()
            if not ((not v40 or not v30) or l_GetFFlagEnableUniversalAppGameInviteUnification_0() and (not l_GetFFlagEnableUniversalAppGameInviteUnification_0() or not v41)) then
                if v38 == "" then
                    v10.try(function()
                        return l_RobloxReplicatedStorage_0:WaitForChild("GetServerType", 2):InvokeServer();
                    end):andThen(function(v51)
                        v39(v51);
                    end);
                end;
                if not (not l_GetGameNameAndDescription_0 or v36.Created) then
                    l_GetGameNameAndDescription_0(l_networkImpl_0, game.GameId):andThen(function(v52)
                        v37(v52);
                    end);
                end;
            end;
        end, {
            v30
        });
        if not v30 then
            return nil;
        elseif not l_GetFFlagEnableGameInviteModalVRSupport_0() or not v42 then
            return v8.createElement("ScreenGui", {
                DisplayOrder = v29.displayOrder,
                ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
                IgnoreGuiInset = true,
                Name = v18.ParentComponentName
            }, {
                GameInviteModalLayoutProvider = v8.createElement(v14, {}, {
                    ModalWindowContainer = v8.createElement(v15, {}, {
                        GameInviteModalContentWrapper = v8.createElement(v16, {
                            options = v34,
                            serverType = v38,
                            gameDetails = v36,
                            isLoading = v32,
                            isCoreScript = v41
                        })
                    })
                })
            });
        else
            return v8.createElement(l_VRReadyWrapper_0, {
                component = "ScreenGui",
                props = {
                    DisplayOrder = v29.displayOrder,
                    ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
                    IgnoreGuiInset = true,
                    Name = v18.ParentComponentName
                },
                vrProps = {
                    partSize = l_VRConstants_0.MainScreenSize,
                    offset = not not l_GetFFlagAdjustVRFloor_0() and l_VRConstants_0.MainScreenPosition or CFrame.lookAt(l_VRConstants_0.MainScreenPosition, l_VRConstants_0.DefaultCameraPosition),
                    virtualScreenSize = l_VRConstants_0.MainScreenResolution,
                    panelName = "GameInviteMenu",
                    curvature = l_VRConstants_0.MainScreenCurvature
                }
            }, {
                GameInviteModalLayoutProvider = v8.createElement(v14, {}, {
                    ModalWindowContainer = v8.createElement(v15, {}, {
                        GameInviteModalContentWrapper = v8.createElement(v16, {
                            options = v34,
                            serverType = v38,
                            gameDetails = v36,
                            isLoading = v32,
                            isCoreScript = v41
                        })
                    })
                })
            });
        end;
    else
        return nil;
    end;
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameInvite");
local l_Context_0 = l_script_FirstAncestor_0.Context;
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v3 = require(l_Parent_0.React);
local v4 = require(l_Parent_0.UIBlox);
local v5 = require(l_Context_0.GameInviteModalLayoutContext);
local v6 = require(l_script_FirstAncestor_0.GameInviteModalManager);
local l_useStyle_0 = v4.Core.Style.useStyle;
local l_ImageSet_0 = v4.Core.ImageSet;
local l_Images_0 = v4.App.ImageSet.Images;
local v10 = Rect.new(8, 8, 9, 9);
return function(v11)
    local v12 = l_useStyle_0();
    local l_Theme_0 = v12.Theme;
    local v14 = nil;
    local v15 = nil;
    local v16 = nil;
    local v17 = v3.useContext(v5);
    local l_isFullWidth_0 = v17.isFullWidth;
    local l_isFullHeight_0 = v17.isFullHeight;
    local l_modalSize_0 = v17.modalSize;
    if not l_isFullWidth_0 and not l_isFullHeight_0 then
        v14 = Vector2.new(0.5, 0.5);
        v15 = "component_assets/circle_17";
        v16 = UDim2.new(0.5, 0, 0.5, 0);
    else
        v14 = Vector2.new(0.5, 1);
        v15 = "component_assets/bullet_17";
        v16 = UDim2.new(0.5, 0, 1, 0);
    end;
    return v3.createElement(l_ImageSet_0.ImageSetButton, {
        Size = UDim2.new(1, 0, 1, 0),
        Position = UDim2.new(0.5, 0, 0.5, 0),
        AnchorPoint = Vector2.new(0.5, 0.5),
        BackgroundColor3 = v12.Theme.Overlay.Color,
        Transparency = v12.Theme.Overlay.Transparency,
        AutoButtonColor = false,
        ZIndex = 0,
        [v3.Event.Activated] = function()
            v6:closeModal();
        end
    }, {
        GameInviteModalContainer = v3.createElement(l_ImageSet_0.ImageSetButton, {
            Position = v16,
            Size = l_modalSize_0,
            AnchorPoint = v14,
            BackgroundTransparency = 1,
            BorderSizePixel = 0,
            Image = l_Images_0[v15],
            ImageColor3 = l_Theme_0.BackgroundDefault.Color,
            ImageTransparency = l_Theme_0.BackgroundDefault.Transparency,
            ScaleType = Enum.ScaleType.Slice,
            SliceCenter = v10,
            AutoButtonColor = false,
            ClipsDescendants = true,
            Selectable = false
        }, v11.children)
    });
end;


local l_Parent_0 = script.Parent.Parent;
local v1 = require(l_Parent_0.Parent.React);
local _ = require(l_Parent_0.gameInviteModalType);
return (v1.createContext({
    gameDetails = {},
    serverType = "",
    promptMessage = "",
    trigger = "",
    isCoreScript = false
}));


local l_Parent_0 = script.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local l_Parent_2 = l_Parent_1.Parent;
local v3 = require(l_Parent_0.GameDetailsContext);
local v4 = require(l_Parent_2.React);
local _ = require(l_Parent_1.gameInviteModalType);
return function(v6)
    return v4.createElement(v3.Provider, {
        value = {
            gameDetails = v6.gameDetails or {},
            serverType = v6.serverType or "",
            promptMessage = v6.promptMessage or "",
            trigger = v6.trigger or "",
            isCoreScript = v6.isCoreScript or false
        }
    }, v6.children);
end;


local l_Parent_0 = script.Parent;
local l_Parent_1 = l_Parent_0.Parent;
local l_Parent_2 = l_Parent_1.Parent;
local v3 = require(l_Parent_2.FriendsMenu);
local v4 = require(l_Parent_2.React);
local l_GetFFlagEnableCommonFriendsMenu_0 = require(l_Parent_2.SharedFlags).GetFFlagEnableCommonFriendsMenu;
local l_FriendsListContextProvider_0 = v3.FriendsListContextProvider;
local v7 = require(l_Parent_0.InviteFriendProvider);
local v8 = require(l_Parent_0.GameDetailsContextProvider);
local _ = require(l_Parent_1.gameInviteModalType);
return function(v10)
    local v11 = nil;
    local v12 = nil;
    local v13 = nil;
    local v14 = nil;
    local v15 = nil;
    local v16 = nil;
    local v17 = nil;
    if v10.options then
        v11 = v10.options.trigger;
        v12 = v10.options.inviteMessageId;
        v13 = v10.options.launchData;
        v14 = v10.options.promptMessage;
        v15 = v10.isCoreScript or false;
        v16 = v10.options.rootPlaceId;
        v17 = v10.options.universeId;
    end;
    return v4.createElement(v8, {
        gameDetails = v10.gameDetails,
        serverType = v10.serverType,
        promptMessage = v14,
        trigger = v11,
        isCoreScript = v15
    }, {
        if not l_GetFFlagEnableCommonFriendsMenu_0() then v4.createElement(l_FriendsListContextProvider_0, {
            isLoadingCustomParams = v10.isLoadingCustomParams
        }, v4.createElement(v7, {
            trigger = v11,
            inviteMessageId = v12,
            launchData = v13,
            promptMessage = v14,
            isCoreScript = v15,
            rootPlaceId = v16,
            universeId = v17
        }, v10.children)) else v4.createElement(v7, {
            trigger = v11,
            inviteMessageId = v12,
            launchData = v13,
            promptMessage = v14,
            isCoreScript = v15,
            rootPlaceId = v16,
            universeId = v17
        }, v10.children)
    });
end;


local l_Parent_0 = script.Parent.Parent;
local v1 = require(l_Parent_0.Parent.React);
local _ = require(l_Parent_0.gameInviteModalType);
return (v1.createContext({
    isFullHeight = false,
    isFullWidth = false,
    modalSize = UDim2.new(0, 0, 0, 0),
    modalMode = "default"
}));


local l_GuiService_0 = game:GetService("GuiService");
local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameInvite");
local l_Context_0 = l_script_FirstAncestor_0.Context;
local v3 = require(l_script_FirstAncestor_0.Parent.React);
local _ = require(l_script_FirstAncestor_0.gameInviteModalType);
local v5 = require(l_Context_0.GameInviteModalLayoutContext);
local function _()
    if not l_GuiService_0 then
        return 50;
    else
        return l_GuiService_0:GetGuiInset().Y;
    end;
end;
local function _()
    return workspace.CurrentCamera.ViewportSize;
end;
local function _(v8)
    return v8 < 800;
end;
local function _(v10)
    return v10 < 624;
end;
local function _(v12)
    return (v12.X < 800 or v12.Y < 624) and v12.X or 800;
end;
local function _(v14)
    return (v14.X < 800 or v14.Y < 624) and v14.Y - (not l_GuiService_0 and 50 or l_GuiService_0:GetGuiInset().Y) or 624;
end;
local function v17(v16)
    return UDim2.new(UDim.new(0, (v16.X < 800 or v16.Y < 624) and v16.X or 800), (UDim.new(0, (v16.X < 800 or v16.Y < 624) and v16.Y - (not l_GuiService_0 and 50 or l_GuiService_0:GetGuiInset().Y) or 624)));
end;
local function _(v18)
    if not (v18.X < 800) and not (v18.Y < 624) then
        return "default";
    else
        return "compact";
    end;
end;
return function(v20)
    local v21, v22 = v3.useState(v17(workspace.CurrentCamera.ViewportSize));
    local v23, v24 = v3.useState(workspace.CurrentCamera.ViewportSize.Y < 624);
    local v25, v26 = v3.useState(workspace.CurrentCamera.ViewportSize.X < 800);
    local l_useState_0 = v3.useState;
    local l_ViewportSize_0 = workspace.CurrentCamera.ViewportSize;
    local v29;
    l_useState_0, v29 = l_useState_0((l_ViewportSize_0.X < 800 or l_ViewportSize_0.Y < 624) and "compact" or "default");
    l_ViewportSize_0 = function()
        local l_ViewportSize_1 = workspace.CurrentCamera.ViewportSize;
        local v31 = l_ViewportSize_1.Y < 624;
        local v32 = l_ViewportSize_1.X < 800;
        local v33 = UDim2.new(UDim.new(0, (l_ViewportSize_1.X < 800 or l_ViewportSize_1.Y < 624) and l_ViewportSize_1.X or 800), (UDim.new(0, (l_ViewportSize_1.X < 800 or l_ViewportSize_1.Y < 624) and l_ViewportSize_1.Y - (not l_GuiService_0 and 50 or l_GuiService_0:GetGuiInset().Y) or 624)));
        v24(v31);
        v26(v32);
        v22(v33);
        v29((l_ViewportSize_1.X < 800 or l_ViewportSize_1.Y < 624) and "compact" or "default");
    end;
    v3.useEffect(function()
        l_ViewportSize_0();
        local v34 = workspace.CurrentCamera:GetPropertyChangedSignal("ViewportSize"):Connect(l_ViewportSize_0);
        return function()
            if v34 then
                v34:Disconnect();
            end;
        end;
    end, {});
    return v3.createElement(v5.Provider, {
        value = {
            isFullHeight = v23,
            isFullWidth = v25,
            modalSize = v21,
            modalMode = l_useState_0
        }
    }, v20.children);
end;


local l_Players_0 = game:GetService("Players");
local l_Parent_0 = script.Parent.Parent;
local l_Actions_0 = l_Parent_0.State.Actions;
local l_Parent_1 = l_Parent_0.Parent;
local v4 = require(l_Parent_1.FriendsMenu);
local v5 = require(l_Parent_1.React);
local v6 = require(l_Parent_1.RoactUtils);
local l_InviteFriendContext_0 = v4.InviteFriendContext;
local l_InviteStatus_0 = v4.InviteStatus;
local v9 = require(l_Parent_0.GameInviteDependencies);
local v10 = require(l_Parent_0.analytics.GameInviteAnalyticsManager);
local l_Throttle_0 = require(l_Parent_1.NotificationsCommon).Throttle;
local v12 = require(l_Actions_0.ReceivedUserInviteStatus);
local l_networkImpl_0 = v9.networkImpl;
local l_useDispatch_0 = v6.Hooks.RoactRodux.useDispatch;
local v15 = require(l_Parent_0.Requests.PostSendExperienceInvite);
local l_useSelector_0 = v6.Hooks.RoactRodux.useSelector;
local v17 = require(l_Parent_1.SharedFlags);
local l_GetFFlagEnableUniversalAppGameInviteUnification_0 = v17.GetFFlagEnableUniversalAppGameInviteUnification;
local l_GetFFlagFriendsMenuDummyLoadingFriendsFix_0 = v17.GetFFlagFriendsMenuDummyLoadingFriendsFix;
return function(v20)
    local v21 = l_useDispatch_0();
    local v22 = v5.useRef(0);
    local v24 = l_useSelector_0(function(v23)
        if not l_GetFFlagEnableUniversalAppGameInviteUnification_0() then
            return v23.Invites;
        else
            return v23.GameInvitesStatus;
        end;
    end);
    return v5.createElement(l_InviteFriendContext_0.Provider, {
        value = {
            inviteSingleFriend = l_Throttle_0(function(v25, v26)
                v22.current = math.max(v26, v22.current);
                if l_GetFFlagFriendsMenuDummyLoadingFriendsFix_0() and ((not (v25 and v25 ~= "") or not tonumber(v25)) or tonumber(v25) == 0) then
                    return ;
                elseif v24[v25] and (not (v24[v25] == l_InviteStatus_0.Failed) or v24[v25] == l_InviteStatus_0.Pending) then
                    return ;
                else
                    local v27 = nil;
                    v27 = if not l_GetFFlagEnableUniversalAppGameInviteUnification_0() then tostring(game.PlaceId) else if v20.isCoreScript then tostring(game.PlaceId) else v20.rootPlaceId or tostring(game.PlaceId);
                    if v27 == "0" then
                        warn("Game Invite failed to send. Cannot send invite to unpublished Place.");
                        v21(v12(v25, l_InviteStatus_0.Failed));
                        return ;
                    else
                        local v28 = false;
                        if v20.launchData ~= nil then
                            v28 = v20.launchData ~= "";
                        end;
                        local v29 = false;
                        if v20.promptMessage ~= nil then
                            v29 = v20.promptMessage ~= "";
                        end;
                        local v30 = false;
                        if v20.inviteMessageId ~= nil then
                            v30 = v20.inviteMessageId ~= "";
                        end;
                        v10:sendGameInviteModalEvent(v20.trigger, {
                            action_type = v10.ActionType.InviteTriggered,
                            is_launch_data_provided = v28,
                            is_prompt_customized = v29,
                            is_invite_message_id_provided = v30,
                            recipient_user_id = v25,
                            recipient_row_number = v26
                        });
                        v21(v12(v25, l_InviteStatus_0.Pending));
                        v15(l_networkImpl_0, v25, v27, v20.trigger, v20.inviteMessageId, v20.launchData):andThen(function(v31)
                            v10:onActivatedInviteSent(l_Players_0.LocalPlayer.UserId, v31.conversationId, {
                                v25
                            }, v20.rootPlaceId, v20.universeId);
                            v21(v12(v25, l_InviteStatus_0.Success));
                        end, function()
                            v10:sendGameInviteModalEvent(v20.trigger, {
                                action_type = v10.ActionType.InviteFailure,
                                is_launch_data_provided = v28,
                                is_prompt_customized = v29,
                                is_invite_message_id_provided = v30,
                                recipient_user_id = v25,
                                recipient_row_number = v26
                            });
                            v21(v12(v25, l_InviteStatus_0.Failed));
                        end);
                        return ;
                    end;
                end;
            end),
            getMaxRecipientRowNum = function()
                return v22.current;
            end
        }
    }, v20.children);
end;


local v0 = require(script.Parent.Parent.HttpRequest);
return {
    networkImpl = v0.config({
        requestFunction = v0.requestFunctions.HttpRbxApi
    })
};


local l_Players_0 = game:GetService("Players");
local l_SocialService_0 = game:GetService("SocialService");
local l_ContextActionService_0 = game:GetService("ContextActionService");
local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameInvite");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local l_utils_0 = l_script_FirstAncestor_0.utils;
local _ = require(l_script_FirstAncestor_0.gameInviteModalType);
local v7 = require(l_Parent_0.Cryo);
local v8 = require(l_script_FirstAncestor_0.analytics.GameInviteAnalyticsManager);
local v9 = require(l_utils_0.getCustomizedInvitePromptParams);
local v10 = require(l_utils_0.getCanSendAndCanCustomizeInvites);
local l_isTriggerDDI_0 = require(l_utils_0.gameInviteModalHelper).isTriggerDDI;
game:DefineFastFlag("GameInviteModalAnalyticsEmptyEventContextFix", false);
local l_GetFFlagEnableUniversalAppGameInviteUnification_0 = require(l_Parent_0.SharedFlags).GetFFlagEnableUniversalAppGameInviteUnification;
local v13 = {};
v13.__index = v13;
v13.new = function()
    return (setmetatable({}, v13));
end;
v13.ToggleGameInviteModalEvent = Instance.new("BindableEvent");
v13.isModalOpen = false;
v13.openTrigger = nil;
v13.customParams = nil;
v13.placeId = nil;
v13.openModal = function(v14, v15, v16)
    if v14.isModalOpen then
        if l_isTriggerDDI_0(v15.trigger) then
            v14:invokeGameInvitePromptClosed();
        end;
        return ;
    else
        v14.isModalOpen = true;
        v14.openTrigger = v15.trigger;
        if l_GetFFlagEnableUniversalAppGameInviteUnification_0() then
            v14.placeId = v15.rootPlaceId or tostring(game.PlaceId);
        end;
        local v17 = false;
        local v18 = false;
        local v19 = false;
        if not l_isTriggerDDI_0(v15.trigger) then
            v14.ToggleGameInviteModalEvent:Fire(true, false, v15);
            if game:GetFastFlag("GameInviteModalAnalyticsEmptyEventContextFix") then
                v8:sendGameInviteModalEvent(v14.openTrigger, {
                    action_type = v8.ActionType.ModalOpen,
                    is_launch_data_provided = v17,
                    is_prompt_customized = v18,
                    is_invite_message_id_provided = v19,
                    place_id = v15.rootPlaceId
                });
            end;
        else
            v14.ToggleGameInviteModalEvent:Fire(true, true, v15);
            local v20 = v9(v16, v15.trigger, v10);
            v14.customParams = v20;
            if not v20 then
                v14:closeModal();
            else
                local v21 = false;
                if v20.launchData ~= nil then
                    v21 = v20.launchData ~= "";
                end;
                v17 = v21;
                v21 = false;
                if v20.promptMessage ~= nil then
                    v21 = v20.promptMessage ~= "";
                end;
                v18 = v21;
                v21 = false;
                if v20.inviteMessageId ~= nil then
                    v21 = v20.inviteMessageId ~= "";
                end;
                v19 = v21;
                v14.ToggleGameInviteModalEvent:Fire(true, false, v7.Dictionary.join(v15, v20));
                if game:GetFastFlag("GameInviteModalAnalyticsEmptyEventContextFix") then
                    v8:sendGameInviteModalEvent(v14.openTrigger, {
                        action_type = v8.ActionType.ModalOpen,
                        is_launch_data_provided = v17,
                        is_prompt_customized = v18,
                        is_invite_message_id_provided = v19,
                        place_id = v15.rootPlaceId
                    });
                end;
            end;
        end;
        if not game:GetFastFlag("GameInviteModalAnalyticsEmptyEventContextFix") then
            v8:sendGameInviteModalEvent(v14.openTrigger, {
                action_type = v8.ActionType.ModalOpen,
                is_launch_data_provided = v17,
                is_prompt_customized = v18,
                is_invite_message_id_provided = v19,
                place_id = v15.rootPlaceId
            });
        end;
        l_ContextActionService_0:BindCoreAction("hideGameInviteModal", function(_, v23)
            if v23 == Enum.UserInputState.Begin then
                v14:closeModal();
            end;
        end, false, Enum.KeyCode.ButtonB, Enum.KeyCode.Backspace);
        return ;
    end;
end;
v13.closeModal = function(v24, v25)
    if v24.isModalOpen then
        local v26 = false;
        local v27 = false;
        local v28 = false;
        if l_isTriggerDDI_0(v24.openTrigger) then
            if v24.customParams then
                local v29 = false;
                if v24.customParams.launchData ~= nil then
                    v29 = v24.customParams.launchData ~= "";
                end;
                v26 = v29;
                v29 = false;
                if v24.customParams.promptMessage ~= nil then
                    v29 = v24.customParams.promptMessage ~= "";
                end;
                v27 = v29;
                v29 = false;
                if v24.customParams.inviteMessageId ~= nil then
                    v29 = v24.customParams.inviteMessageId ~= "";
                end;
                v28 = v29;
            end;
            v24:invokeGameInvitePromptClosed();
        end;
        v8:sendGameInviteModalEvent(v24.openTrigger, {
            action_type = v8.ActionType.ModalClose,
            is_launch_data_provided = v26,
            is_prompt_customized = v27,
            is_invite_message_id_provided = v28,
            max_recipient_row_number = v25,
            place_id = v24.placeId
        });
        l_ContextActionService_0:UnbindCoreAction("hideGameInviteModal");
        v24.isModalOpen = false;
        v24.openTrigger = nil;
        v24.placeId = nil;
    end;
    v24.ToggleGameInviteModalEvent:Fire(false);
end;
v13.isGameModalOpen = function(v30)
    return v30.isModalOpen;
end;
v13.invokeGameInvitePromptClosed = function(_)
    if not (not l_SocialService_0 or not l_Players_0.LocalPlayer) then
        l_SocialService_0:InvokeGameInvitePromptClosed(l_Players_0.LocalPlayer, {});
    end;
end;
return v13.new();


local l_Url_0 = require(script:FindFirstAncestor("GameInvite").Parent.Http).Url;
return function(v1, v2, v3)
    return v1(string.format("%snotifications/v1/can-prompt-experience-invite?%s", l_Url_0.APIS_URL, (l_Url_0:makeQueryString({
        RecipientUserId = v3,
        Trigger = v2,
        PlaceId = game.PlaceId
    }))), "GET");
end;


local l_HttpService_0 = game:GetService("HttpService");
local l_Url_0 = require(script:FindFirstAncestor("GameInvite").Parent.Http).Url;
game:DefineFastFlag("LuaAppExperienceJoinIdempotencyKey", false);
return function(v2, v3, v4, v5, v6, v7)
    return v2(string.format("%snotifications/v1/send-experience-invite", l_Url_0.APIS_URL), "POST", {
        postBody = l_HttpService_0:JSONEncode({
            recipientUserId = v3,
            inviteMessageId = v6,
            placeId = v4,
            launchData = v7,
            trigger = v5,
            idempotencyKey = if not game:GetFastFlag("LuaAppExperienceJoinIdempotencyKey") then nil else l_HttpService_0:GenerateGUID(false)
        })
    });
end;


return require(script:FindFirstAncestor("GameInvite").Parent.Rodux).makeActionCreator(script.Name, function(v0, v1)
    return {
        userId = tostring(v0),
        inviteStatus = v1
    };
end);


return require(script:FindFirstAncestor("GameInvite").Parent.Rodux).makeActionCreator(script.Name, function()
    return {};
end);


local l_Parent_0 = script.Parent;
local v1 = require(l_Parent_0.Parent.Parent.Rodux);
return v1.Store.new(require(l_Parent_0.Reducers.GameInviteReducer), nil, {
    v1.thunkMiddleware
});


local l_Parent_0 = script:FindFirstAncestor("GameInvite").Parent;
local l_Parent_1 = script.Parent;
local l_UserReducer_0 = require(l_Parent_0.UserLib).Reducers.UserReducer;
local v3 = require(l_Parent_0.Rodux);
local v4 = require(l_Parent_0.LegacyFriendsRodux);
local l_ReducerDependencies_0 = require(l_Parent_0.NotificationsCommon).ReducerDependencies;
local l_Friends_0 = v4.Reducers.Friends;
local l_FriendCount_0 = v4.Reducers.FriendCount;
local v8 = require(l_Parent_1.Invites);
local l_RoduxShareLinks_0 = l_ReducerDependencies_0.RoduxShareLinks;
local v10 = l_ReducerDependencies_0.RoduxNetworking.installReducer();
local v11 = l_RoduxShareLinks_0.installReducer();
local l_GetFFlagEnableUniversalAppGameInviteUnification_0 = require(l_Parent_0.SharedFlags).GetFFlagEnableUniversalAppGameInviteUnification;
return v3.combineReducers({
    Friends = if not l_GetFFlagEnableUniversalAppGameInviteUnification_0() then l_Friends_0 else nil,
    FriendCount = l_FriendCount_0,
    GameInvitesStatus = if not l_GetFFlagEnableUniversalAppGameInviteUnification_0() then nil else v8,
    Invites = if not l_GetFFlagEnableUniversalAppGameInviteUnification_0() then v8 else nil,
    Users = l_UserReducer_0,
    ShareLinks = v11,
    NetworkStatus = v10
});


local l_Parent_0 = script.Parent.Parent;
local l_Actions_0 = l_Parent_0.Actions;
local l_Parent_1 = l_Parent_0.Parent.Parent;
local l_Immutable_0 = require(l_Parent_1.AppCommonLib).Immutable;
local l_GetFFlagEnableUniversalAppGameInviteUnification_0 = require(l_Parent_1.SharedFlags).GetFFlagEnableUniversalAppGameInviteUnification;
local v5 = require(l_Actions_0.ReceivedUserInviteStatus);
local v6 = require(l_Actions_0.ResetUserInviteStatus);
return function(v7, v8)
    v7 = v7 or {};
    if v8.type == v5.name then
        return (l_Immutable_0.Set(v7, v8.userId, v8.inviteStatus));
    else
        if l_GetFFlagEnableUniversalAppGameInviteUnification_0() and v8.type == v6.name then
            v7 = {};
        end;
        return v7;
    end;
end;


local l_RbxAnalyticsService_0 = game:GetService("RbxAnalyticsService");
local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameInvite");
local v2 = require(l_script_FirstAncestor_0.analytics.GameInviteAnalytics);
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
return (v2.new():withEventStream(require(l_Parent_0.Analytics).AnalyticsReporters.EventStream.new(l_RbxAnalyticsService_0)):withDiag(require(l_Parent_0.Analytics).AnalyticsReporters.Diag.new(l_RbxAnalyticsService_0)));


return {
    ModalOpened = {
        Type = "pageLoad",
        Args = {}
    },
    SendInvite = {
        Type = "formInteraction",
        Args = {
            btn = "inviteFriend",
            aType = "click"
        }
    },
    CancelInvite = {
        Type = "formInteraction",
        Args = {
            btn = "cancelInvite",
            aType = "click"
        }
    },
    ErrorShown = {
        Type = "formInteraction",
        Args = {
            field = "inviteFailed",
            aType = "shown"
        }
    },
    CustomTextShown = {
        Type = "formInteraction",
        Args = {
            field = "customText",
            aType = "shown"
        }
    }
};


local _ = require(script.gameInviteModalType);
return {
    renderCoreScriptGameInviteModalContainer = require(script.renderCoreScriptGameInviteModalContainer),
    GetCustomizedInvitePromptTrigger = require(script.utils.getCustomizedInvitePromptTrigger),
    GameInviteModalManager = require(script.GameInviteModalManager),
    GameInviteModal = require(script.Components.GameInviteModal),
    GameInviteInviteExperimentVariant = require(script.GameInviteConstants).GameInviteInviteExperimentVariant,
    GameInviteConstants = require(script.GameInviteConstants),
    GameInviteAnalytics = require(script.analytics.GameInviteAnalytics),
    GameInviteEvents = require(script.analytics.GameInviteEvents),
    GameInviteAnalyticsManager = require(script.analytics.GameInviteAnalyticsManager),
    GameInvitesStatusReducer = require(script.State.Reducers.Invites),
    GetCanSendAndCanCustomizeInvites = require(script.Requests.GetCanSendAndCanCustomizeInvites),
    PostSendExperienceInvite = require(script.Requests.PostSendExperienceInvite),
    ["jest.config"] = script["jest.config"]
};


local v0 = require(script.Parent.Parent.Dev.JestConfigs);
return {
    displayName = "GameInvite",
    testMatch = {
        "**/*.test"
    },
    setupFilesAfterEnv = {
        v0.setupFiles.LogHandler,
        v0.setupFiles.UIBloxInitializer,
        v0.setupFiles.createPromiseRejectionHandler()
    }
};


local l_CoreGui_0 = game:GetService("CoreGui");
local l_Parent_0 = script.Parent;
local l_Components_0 = l_Parent_0.Components;
local l_Parent_1 = l_Parent_0.Parent;
local v4 = require(l_Parent_1.React);
local v5 = require(l_Parent_1.RoactRodux);
local v6 = require(l_Parent_1.ReactRoblox);
local v7 = require(l_Parent_1.SharedFlags);
local v8 = require(l_Parent_1.Style);
local v9 = require(l_Parent_1.UniversalAppPolicy);
local l_ApolloProvider_0 = require(l_Parent_1.ApolloClient).ApolloProvider;
local v11 = require(l_Parent_0.GameInviteConstants);
local v12 = require(l_Components_0.GameInviteModal);
local _ = require(l_Parent_0.gameInviteModalType);
local l_AppFeaturePolicies_0 = v9.AppFeaturePolicies;
local l_RoactAppPolicy_0 = v9.RoactAppPolicy;
local l_StyleProviderWithDefaultTheme_0 = v8.StyleProviderWithDefaultTheme;
game:DefineFastFlag("FixGameInviteModalLoadTimeIncrease", false);
local l_FFlagGameInviteModalInviteLinkPolicy_0 = v7.FFlagGameInviteModalInviteLinkPolicy;
local v18 = nil;
if not game:GetFastFlag("FixGameInviteModalLoadTimeIncrease") then
    v18 = require(l_Parent_1.RobloxApolloClient).initializeApolloClient({});
end;
local function v20(v19)
    if not l_FFlagGameInviteModalInviteLinkPolicy_0 then
        return v19;
    else
        return {
            PolicyProvider = v4.createElement(l_RoactAppPolicy_0.Provider, {
                policy = {
                    l_AppFeaturePolicies_0
                }
            }, v19)
        };
    end;
end;
return function(v21)
    local v22 = require(l_Parent_0.State.GameInviteStore);
    local l_Folder_0 = Instance.new("Folder");
    l_Folder_0.Name = "GameInvite";
    l_Folder_0.Parent = l_CoreGui_0;
    local v24 = v4.createElement(v5.StoreProvider, {
        store = v22
    }, (v20({
        StyleProvider = v4.createElement(l_StyleProviderWithDefaultTheme_0, {}, {
            ApolloClientProvider = v4.createElement(l_ApolloProvider_0, {
                client = if not game:GetFastFlag("FixGameInviteModalLoadTimeIncrease") then v18 else v21
            }, {
                GameInviteModalWrapper = v4.createElement(v12, {
                    displayOrder = -1,
                    renderLocation = v11.RenderLocation.CoreScripts
                })
            })
        })
    })));
    local v25 = v6.createRoot(l_Folder_0);
    v25:render(v24);
    return v25;
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameInvite");
local v1 = require(l_script_FirstAncestor_0.GameInviteConstants);
local _ = require(l_script_FirstAncestor_0.gameInviteModalType);
isTriggerDDI = function(v3)
    local v4 = true;
    if v3 ~= v1.Triggers.DeveloperSingle then
        v4 = v3 == v1.Triggers.DeveloperMultiple;
    end;
    return v4;
end;
isTriggerGameMenu = function(v5)
    return v5 == v1.Triggers.GameMenu;
end;
return {
    isTriggerDDI = isTriggerDDI,
    isTriggerGameMenu = isTriggerGameMenu
};


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameInvite");
local v1 = require(script.Parent.getCustomizedInvitePromptUserId);
local _ = require(l_script_FirstAncestor_0.gameInviteModalType);
return function(v3, v4, v5)
    local v6 = v1(v3);
    local v7, v8 = v5(v4, v6);
    if v7 then
        local v9 = {
            trigger = v4
        };
        if not (not v8 or not v3) then
            if v3.InviteMessageId ~= "" then
                v9.inviteMessageId = v3.InviteMessageId;
            end;
            if v6 then
                v9.inviteUserId = v6;
            end;
            if v3.PromptMessage ~= "" then
                v9.promptMessage = v3.PromptMessage;
            end;
            if v3.LaunchData ~= "" then
                v9.launchData = v3.LaunchData;
            end;
        end;
        return v9;
    else
        return nil;
    end;
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameInvite");
local v1 = require(l_script_FirstAncestor_0.GameInviteConstants);
local _ = require(l_script_FirstAncestor_0.gameInviteModalType);
local v3 = require(script.Parent.getCustomizedInvitePromptUserId);
return function(v4)
    return not not v3(v4) and v1.Triggers.DeveloperSingle or v1.Triggers.DeveloperMultiple;
end;


return function(v0)
    if v0 and v0.InviteUser ~= 0 then
        return v0.InviteUser;
    else
        return nil;
    end;
end;


local l_Workspace_0 = game:GetService("Workspace");
return function(v1)
    if v1 ~= nil and v1.Created ~= nil then
        local v2 = DateTime.fromIsoDate(v1.Created);
        if v2 and l_Workspace_0:GetServerTimeNow() * 1000 - v2.UnixTimestampMillis > 604800000 then
            return true;
        end;
    end;
    return false;
end;


local l_Parent_0 = script:FindFirstAncestor("GameLaunch").Parent;
local l_RetrievalStatus_0 = require(l_Parent_0.Http).Enum.RetrievalStatus;
local l_PlayabilityStatusEnum_0 = require(l_Parent_0.PlayabilityRodux).Enums.PlayabilityStatusEnum;
local v3 = {};
local v4 = {
    [l_RetrievalStatus_0.Failed] = "Feature.GamePage.QuickLaunch.LaunchError.RequestFailed",
    [l_PlayabilityStatusEnum_0.GuestProhibited] = "Feature.GamePage.QuickLaunch.LaunchError.GuestProhibited",
    [l_PlayabilityStatusEnum_0.GameUnapproved] = "Feature.GamePage.QuickLaunch.LaunchError.GameUnapproved",
    [l_PlayabilityStatusEnum_0.UniverseRootPlaceIsPrivate] = "Feature.GamePage.QuickLaunch.LaunchError.UniverseRootPlaceIsPrivate",
    [l_PlayabilityStatusEnum_0.InsufficientPermissionFriendsOnly] = "Feature.GamePage.QuickLaunch.LaunchError.InsufficientPermissionFriendsOnly",
    [l_PlayabilityStatusEnum_0.InsufficientPermissionGroupOnly] = "Feature.GamePage.QuickLaunch.LaunchError.InsufficientPermissionGroupOnly",
    [l_PlayabilityStatusEnum_0.DeviceRestricted] = "Feature.GamePage.QuickLaunch.LaunchError.DeviceRestricted",
    [l_PlayabilityStatusEnum_0.UnderReview] = "Feature.GamePage.QuickLaunch.LaunchError.UnderReview",
    [l_PlayabilityStatusEnum_0.PurchaseRequired] = "Feature.GamePage.QuickLaunch.LaunchError.PurchaseRequired",
    [l_PlayabilityStatusEnum_0.AccountRestricted] = "Feature.GamePage.QuickLaunch.LaunchError.AccountRestricted",
    [l_PlayabilityStatusEnum_0.TemporarilyUnavailable] = "Feature.GamePage.QuickLaunch.LaunchError.TemporarilyUnavailable",
    [l_PlayabilityStatusEnum_0.ComplianceBlocked] = "Feature.GamePage.QuickLaunch.LaunchError.ComplianceBlocked",
    [l_PlayabilityStatusEnum_0.ContextualPlayabilityAgeRecommendationParentalControls] = "Feature.GamePage.QuickLaunch.LaunchError.ContextualPlayabilityAgeRecommendationParentalControls",
    [l_PlayabilityStatusEnum_0.ContextualPlayabilityRegionalAvailability] = "Feature.GamePage.QuickLaunch.LaunchError.ContextualPlayabilityRegionalAvailability",
    [l_PlayabilityStatusEnum_0.ContextualPlayabilityRegionalCompliance] = "Feature.GamePage.QuickLaunch.LaunchError.ContextualPlayabilityRegionalCompliance",
    [l_PlayabilityStatusEnum_0.ContextualPlayabilityUnverifiedSeventeenPlusUser] = "Feature.GamePage.QuickLaunch.LaunchError.ContextualPlayabilityUnverifiedSeventeenPlusUser",
    Default = "Feature.GamePage.QuickLaunch.LaunchError.UnplayableOtherReason"
};
setmetatable(v3, {
    __newindex = function(_, _, _)
    end,
    __index = function(_, v9)
        assert(v9 ~= nil, "LaunchErrorLocalizationKeys needs a key");
        return v4[v9] or v4.Default;
    end
});
return v3;


local l_Parent_0 = script:FindFirstAncestor("GameLaunch").Parent;
local l_default_0 = require(l_Parent_0.LoggingProtocol).default;
local v2 = require(l_Parent_0.Cryo);
local _ = require(l_Parent_0.ExperienceService);
local l_ExperienceService_0 = require(l_Parent_0.ExperienceService).ExperienceService;
local l_UseExperienceService_0 = require(l_Parent_0.ExperienceService).Flags.UseExperienceService;
local l_GetFFlagMoveLuaExpLaunchBegin_0 = require(l_Parent_0.ExperienceService).Flags.GetFFlagMoveLuaExpLaunchBegin;
return function(v7, v8, v9, v10, v11, v12)
    if not l_GetFFlagMoveLuaExpLaunchBegin_0() then
        l_default_0:logEvent("experience_launch_begin");
    end;
    local v13 = {
        placeId = tonumber(v7),
        referralPage = v8
    };
    if v9 then
        v13 = v2.Dictionary.join(v13, v9);
    end;
    if not l_UseExperienceService_0() then
        v10:launchGame(v13, v11, v12);
        return ;
    else
        l_ExperienceService_0:LaunchExperience(v13, v11, v12);
        return ;
    end;
end;


return {
    LaunchErrorLocalizationKeys = require(script.LaunchErrorLocalizationKeys),
    LaunchGame = require(script.LaunchGame),
    ["jest.config"] = script["jest.config"]
};


local v0 = require(script.Parent.Parent.Dev.JestConfigs);
return {
    displayName = "GameLaunch",
    setupFilesAfterEnv = {
        v0.setupFiles.LogHandler,
        v0.setupFiles.UIBloxInitializer,
        v0.setupFiles.createPromiseRejectionHandler()
    }
};


local l_Parent_0 = script:FindFirstAncestor("GamePlayButton").Parent;
local l_AppPage_0 = require(l_Parent_0.RobloxAppEnums).AppPage;
local l_PromiseUtilities_0 = require(l_Parent_0.AppCommonLib).Utils.PromiseUtilities;
local l_RetrievalStatus_0 = require(l_Parent_0.Http).Enum.RetrievalStatus;
local v4 = require(l_Parent_0.GameDetailRodux);
local l_ApiFetchGameDetails_0 = v4.GameDetails.ApiFetchGameDetails;
local l_FetchGamePlayabilityAndProductInfo_0 = v4.FetchGamePlayabilityAndProductInfo;
local l_FetchUserGameVotes_0 = require(l_Parent_0.GameVotesRodux).UserGameVotes.FetchUserGameVotes;
local l_SetNextDataExpirationTime_0 = require(l_Parent_0.NextDataExpirationTimeRodux).SetNextDataExpirationTime;
local l_ApiFetchShowAgeVerificationOverlay_0 = require(l_Parent_0.VoiceChat).AgeVerificationOverlay.ApiFetchShowAgeVerificationOverlay;
local l_GetFFlagAgeVerificationFlowFromVoiceEligibleGames_0 = require(l_Parent_0.SharedFlags).GetFFlagAgeVerificationFlowFromVoiceEligibleGames;
local l_GetFIntLuaAppThrottleRefreshPlayabilityIntervalSeconds_0 = require(l_Parent_0.SharedFlags).GetFIntLuaAppThrottleRefreshPlayabilityIntervalSeconds;
local l_RunService_0 = game:GetService("RunService");
local v13 = {};
local function v20(v14, v15, v16, v17)
    local v18 = {};
    if l_ApiFetchGameDetails_0.GetFetchingStatus(v15:getState(), v16) ~= l_RetrievalStatus_0.Fetching and (v17 or v15:getState().GameDetails[v16] == nil) then
        table.insert(v18, v15:dispatch(l_ApiFetchGameDetails_0.Fetch(v14, {
            v16
        })));
    end;
    local v19 = l_FetchGamePlayabilityAndProductInfo_0.GetFetchingStatus(v15:getState(), v16);
    if not (not v17 and v19 ~= l_RetrievalStatus_0.NotStarted) or v19 == l_RetrievalStatus_0.Failed then
        table.insert(v18, v15:dispatch(l_FetchGamePlayabilityAndProductInfo_0.Fetch(v14, v16)));
    end;
    if (l_GetFFlagAgeVerificationFlowFromVoiceEligibleGames_0() and l_ApiFetchShowAgeVerificationOverlay_0.GetFetchingStatus(v15:getState(), v16) ~= l_RetrievalStatus_0.Fetching) and (v17 or v15:getState().ShowAgeVerificationOverlay[v16] == nil) then
        table.insert(v18, v15:dispatch(l_ApiFetchShowAgeVerificationOverlay_0.Fetch(v14, v16)));
    end;
    if l_FetchUserGameVotes_0.GetFetchingStatus(v15:getState(), v16) ~= l_RetrievalStatus_0.Fetching and (v17 or v15:getState().UserGameVotes[v16] == nil) then
        v15:dispatch(l_FetchUserGameVotes_0.Fetch(v14, v16));
    end;
    return v18;
end;
v13.IsLoading = function(v21, v22)
    local v23 = l_ApiFetchGameDetails_0.GetFetchingStatus(v21, v22);
    if not (v23 ~= l_RetrievalStatus_0.NotStarted) or v23 == l_RetrievalStatus_0.Fetching then
        return true;
    else
        local v24 = l_FetchGamePlayabilityAndProductInfo_0.GetFetchingStatus(v21, v22);
        if not (v24 ~= l_RetrievalStatus_0.NotStarted) or v24 == l_RetrievalStatus_0.Fetching then
            return true;
        else
            if l_GetFFlagAgeVerificationFlowFromVoiceEligibleGames_0() then
                local v25 = l_ApiFetchShowAgeVerificationOverlay_0.GetFetchingStatus(v21, v22);
                if not (v25 ~= l_RetrievalStatus_0.NotStarted) or v25 == l_RetrievalStatus_0.Fetching then
                    return true;
                end;
            end;
            return false;
        end;
    end;
end;
v13.Fetch = function(v26, v27)
    return function(v28)
        local v29 = tick();
        local v30 = l_AppPage_0.GameDetail .. v27 .. "playability";
        local v31 = v28:getState().NextDataExpirationTime[v30];
        local v32 = false;
        if not (v31 ~= nil) or v31 < v29 then
            v32 = true;
        end;
        local v33 = v20(v26, v28, v27, v32);
        if #v33 > 0 then
            local v34 = nil;
            if not (not _G.__TESTEZ_RUNNING_TEST__ and not l_RunService_0:IsStudio()) then
                v34 = warn;
            end;
            return l_PromiseUtilities_0.Batch(v33, v34):andThen(function(v35)
                if l_PromiseUtilities_0.CountResults(v35).failureCount == 0 then
                    v29 = tick();
                    v31 = math.floor(v29 + l_GetFIntLuaAppThrottleRefreshPlayabilityIntervalSeconds_0());
                    v28:dispatch(l_SetNextDataExpirationTime_0(v30, v31));
                end;
            end);
        else
            return ;
        end;
    end;
end;
return v13;


game:DefineFastFlag("LuaAppFetchPlayabilityKillSwitch1", false);
return function()
    return game:GetFastFlag("LuaAppFetchPlayabilityKillSwitch1");
end;


return {
    GetFFlagLuaAppFetchPlayabilityKillSwitch = require(script.GetFFlagLuaAppFetchPlayabilityKillSwitch)
};


local l_Parent_0 = script:FindFirstAncestor("GamePlayButton").Parent;
local v1 = require(l_Parent_0.t);
local l_mutedError_0 = require(l_Parent_0.Loggers).mutedError;
local v3 = v1.strictInterface({
    placeId = v1.string,
    playButtonState = v1.string,
    universeId = v1.string
});
return function(v4, v5)
    local v6, v7 = v3(v5);
    if not v6 then
        l_mutedError_0(v7);
    end;
    v4.EventStream:setRBXEventStream("GamePlayButton", "shareLinkGameJoin", v5);
    v4.Diag:reportCounter("shareLinkGameJoin", 1);
end;


local l_Parent_0 = script:FindFirstAncestor("GamePlayButton").Parent;
local l_CentralOverlayType_0 = require(l_Parent_0.RobloxAppEnums).CentralOverlayType;
local l_SetCentralOverlay_0 = require(l_Parent_0.CentralOverlay).Actions.SetCentralOverlay;
return function(v3, v4, v5, v6, v7, v8, v9)
    return function(v10)
        v10:dispatch(l_SetCentralOverlay_0(l_CentralOverlayType_0.PurchaseGame, {
            universeId = v3,
            gameName = v4,
            price = v5,
            productId = v6,
            sellerId = v7,
            theme = v8,
            pageFilter = v9
        }));
    end;
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GamePlayButton");
local l_IXPService_0 = game:GetService("IXPService");
local _ = require(l_script_FirstAncestor_0.PlayButtonTypes);
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v4 = require(l_Parent_0.React);
local l_useRoactService_0 = require(l_Parent_0.RobloxAppHooks).useRoactService;
local l_RoactNetworking_0 = require(l_Parent_0.RoactServiceTags).RoactNetworking;
local v7 = require(l_Parent_0.RoactUtils);
local l_useDispatch_0 = v7.Hooks.RoactRodux.useDispatch;
local l_useSelector_0 = v7.Hooks.RoactRodux.useSelector;
local v10 = require(l_Parent_0.VoiceChat);
local l_OpenCentralOverlayForVerifiedEnableVoice_0 = v10.AgeVerificationOverlay.OpenCentralOverlayForVerifiedEnableVoice;
local l_ApiPostRecordUserSeenModal_0 = v10.AgeVerificationOverlay.ApiPostRecordUserSeenModal;
local l_SetShowAgeVerificationOverlay_0 = v10.AgeVerificationOverlay.SetShowAgeVerificationOverlay;
local l_useAppPolicy_0 = require(l_Parent_0.UniversalAppPolicy).useAppPolicy;
local l_GetFStringVoiceUpsellLayer_0 = v10.Flags.GetFStringVoiceUpsellLayer;
local l_GetFFlagLogExposureForExperienceUpsell_0 = v10.Flags.GetFFlagLogExposureForExperienceUpsell;
return function(v17, v18, v19)
    local v20 = l_useRoactService_0(l_RoactNetworking_0);
    local v21 = l_useDispatch_0();
    local v23 = l_useAppPolicy_0(function(v22)
        return {
            RequireExplicitVoiceConsent = v22.RequireExplicitVoiceConsent(),
            showVoiceOptInOverlayEnabled = v22.getShowVoiceUpsellV2()
        };
    end);
    local v25 = l_useSelector_0(function(v24)
        if v24.ShowAgeVerificationOverlay[v17] ~= nil then
            return v24.ShowAgeVerificationOverlay[v17];
        else
            return {};
        end;
    end);
    local l_isPlaceEnabledForVoice_0 = v25.isPlaceEnabledForVoice;
    local l_isUniverseEnabledForVoice_0 = v25.isUniverseEnabledForVoice;
    local l_showVoiceOptInOverlay_0 = v25.showVoiceOptInOverlay;
    local l_elegibleToSeeVoiceUpsell_0 = v25.elegibleToSeeVoiceUpsell;
    return (v4.useCallback(function(v30)
        if not ((not l_GetFFlagLogExposureForExperienceUpsell_0() or not l_isUniverseEnabledForVoice_0) or not l_elegibleToSeeVoiceUpsell_0) then
            local v31 = l_GetFStringVoiceUpsellLayer_0();
            if v31 ~= "" then
                l_IXPService_0:LogUserLayerExposure(v31);
            end;
        end;
        if not l_showVoiceOptInOverlay_0 or not v23.showVoiceOptInOverlayEnabled then
            v19(v30);
            return ;
        else
            v21(l_OpenCentralOverlayForVerifiedEnableVoice_0({
                launchGame = function()
                    v18(v30);
                end,
                RequireExplicitVoiceConsent = v23.RequireExplicitVoiceConsent,
                postUserSeenModal = function()
                    return v21(l_ApiPostRecordUserSeenModal_0.Fetch(v20));
                end,
                setShowVoiceOptIn = function(v32)
                    v21(l_SetShowAgeVerificationOverlay_0(v17, l_isPlaceEnabledForVoice_0, l_isUniverseEnabledForVoice_0, v32.voiceEnabled, v32.showVoiceOptInOverlay));
                end
            }));
            return ;
        end;
    end, {
        v20,
        v17,
        l_isPlaceEnabledForVoice_0,
        l_isUniverseEnabledForVoice_0,
        l_showVoiceOptInOverlay_0,
        v23.showVoiceOptInOverlayEnabled,
        v23.RequireExplicitVoiceConsent,
        v25.isVoiceEnabled,
        v18,
        v19,
        l_elegibleToSeeVoiceUpsell_0
    }));
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GamePlayButton");
local _ = require(l_script_FirstAncestor_0.PlayButtonTypes);
local v2 = require(l_script_FirstAncestor_0.Flags.GetFFlagLuaAppFetchPlayabilityKillSwitch);
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v4 = require(l_Parent_0.React);
local l_useDispatch_0 = require(l_Parent_0.RoactUtils).Hooks.RoactRodux.useDispatch;
local l_useRoactService_0 = require(l_Parent_0.RobloxAppHooks).useRoactService;
local l_RoactNetworking_0 = require(l_Parent_0.RoactServiceTags).RoactNetworking;
local l_PlayabilityStatusEnum_0 = require(l_Parent_0.PlayabilityRodux).Enums.PlayabilityStatusEnum;
local l_FetchGamePlayabilityAndProductInfo_0 = require(l_Parent_0.GameDetailRodux).FetchGamePlayabilityAndProductInfo;
local l_OpenAgeVerificationModal_0 = require(l_Parent_0.VoiceChat).AgeVerificationOverlay.OpenAgeVerificationModal;
return function(v11, v12, v13)
    local v14 = l_useRoactService_0(l_RoactNetworking_0);
    local v15 = l_useDispatch_0();
    return (v4.useCallback(function(v16)
        if not v11 then
            v13(v16);
            return ;
        elseif not (v11.playabilityStatus == l_PlayabilityStatusEnum_0.ContextualPlayabilityUnverifiedSeventeenPlusUser) or v2() then
            v13(v16);
            return ;
        else
            v15(l_FetchGamePlayabilityAndProductInfo_0.Fetch(v14, v12)):andThen(function(v17)
                if not (v17 == l_PlayabilityStatusEnum_0.ContextualPlayabilityUnverifiedSeventeenPlusUser) then
                    v13(v16);
                    return ;
                else
                    v15(l_OpenAgeVerificationModal_0(v12));
                    return ;
                end;
            end):catch(function()
                v13(v16);
            end);
            return ;
        end;
    end, {
        v14,
        v12,
        v11,
        v13
    }));
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GamePlayButton");
local _ = require(l_script_FirstAncestor_0.PlayButtonTypes);
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v3 = require(l_Parent_0.React);
local l_useRoactService_0 = require(l_Parent_0.RobloxAppHooks).useRoactService;
local v5 = require(l_Parent_0.RoactServiceTags);
local l_RoactAnalytics_0 = v5.RoactAnalytics;
local l_AppEventIngestService_0 = v5.AppEventIngestService;
local l_AppGame_0 = v5.AppGame;
local v9 = require(l_Parent_0.RoactUtils);
local l_useSelector_0 = v9.Hooks.RoactRodux.useSelector;
local l_useDispatch_0 = v9.Hooks.RoactRodux.useDispatch;
local v12 = require(l_Parent_0.ExperienceAnalytics);
local l_gamePlayIntent_0 = v12.Events.gamePlayIntent;
local l_joinGamePlayButton_0 = v12.Points.joinGamePlayButton;
local v15 = require(l_Parent_0.GameVotesRodux);
local l_ReasonForNotVoteable_0 = v15.Enums.ReasonForNotVoteable;
local l_ClearUserGameVotes_0 = v15.UserGameVotes.ClearUserGameVotes;
local l_IsVRAppBuild_0 = require(l_Parent_0.AppCommonLib).IsVRAppBuild;
local l_SplashScreenManager_0 = require(l_Parent_0.SplashScreenManager).SplashScreenManager;
local l_LaunchGame_0 = require(l_Parent_0.GameLaunch).LaunchGame;
return function(v21, v22, v23, v24, v25)
    local v26 = l_useRoactService_0(l_RoactAnalytics_0);
    local v27 = l_useRoactService_0(l_AppEventIngestService_0);
    local v28 = l_useRoactService_0(l_AppGame_0);
    local v30 = l_useSelector_0(function(v29)
        return v29.UserGameVotes[v21];
    end);
    local v31 = l_useDispatch_0();
    return (v3.useCallback(function(v32)
        if v22 then
            if v32 ~= nil then
                v32();
            else
                l_gamePlayIntent_0(v27, "PlayButton", {
                    placeId = v22,
                    rootPlaceId = tonumber(v22),
                    referralSource = v23
                });
            end;
            l_joinGamePlayButton_0(v26.InfluxDb, "gamePlayIntent", {
                isUniversalApp = true,
                referralSource = v23,
                placeId = v22,
                ctx = v24
            });
            if l_IsVRAppBuild_0() then
                l_SplashScreenManager_0.initialize(36);
                wait(0.3);
            end;
            l_LaunchGame_0(v22, v25, nil, v28);
            if v30 and v30.reasonForNotVoteable == l_ReasonForNotVoteable_0.PlayGame then
                v31(l_ClearUserGameVotes_0(v21));
            end;
            return ;
        else
            return ;
        end;
    end, {
        v27,
        v26,
        v28,
        v30,
        v21,
        v22,
        v23,
        v24
    }));
end;


return {
    Loading = "Loading",
    Playable = "Playable",
    PaidAccess = "PaidAccess",
    Private = "Private",
    UnplayableOther = "UnplayableOther"
};


local _ = require(script.PlayButtonTypes);
return {
    Flags = require(script.Flags),
    FetchGamePlayButtonData = require(script.FetchGamePlayButtonData),
    PlayButtonReferralSource = require(script.PlayButtonReferralSource),
    PlayButtonStates = require(script.PlayButtonStates),
    useOnPlayButtonCallback = require(script.useOnPlayButtonCallback),
    usePlayButtonState = require(script.usePlayButtonState),
    ["jest.config"] = script["jest.config"]
};


local v0 = require(script.Parent.Parent.Dev.JestConfigs);
return {
    displayName = "GamePlayButton",
    setupFilesAfterEnv = {
        v0.setupFiles.LogHandler,
        v0.setupFiles.UIBloxInitializer,
        v0.setupFiles.createPromiseRejectionHandler()
    }
};


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GamePlayButton");
local v1 = require(l_script_FirstAncestor_0.GamePlayButtonShareLinkAnalytics);
local v2 = require(l_script_FirstAncestor_0.OpenCentralOverlayForPurchaseGame);
local v3 = require(l_script_FirstAncestor_0.PlayButtonReferralSource);
local v4 = require(l_script_FirstAncestor_0.PlayButtonStates);
local _ = require(l_script_FirstAncestor_0.PlayButtonTypes);
local v6 = require(l_script_FirstAncestor_0.PlayButtonLaunchChecks.usePlayButtonLaunchAfterSeventeenPlusUpsell);
local v7 = require(l_script_FirstAncestor_0.PlayButtonLaunchChecks.usePlayButtonLaunchGame);
local v8 = require(l_script_FirstAncestor_0.PlayButtonLaunchChecks.useAgeVerificationOverlayCallback);
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v10 = require(l_Parent_0.React);
local v11 = require(l_Parent_0.RoactUtils);
local l_useDispatch_0 = v11.Hooks.RoactRodux.useDispatch;
local l_useSelector_0 = v11.Hooks.RoactRodux.useSelector;
local l_useRouteName_0 = v11.Hooks.useRouteName;
local l_useRoactService_0 = require(l_Parent_0.RobloxAppHooks).useRoactService;
local v16 = require(l_Parent_0.RoactServiceTags);
local l_RoactAnalytics_0 = v16.RoactAnalytics;
local l_AppUpdateService_0 = v16.AppUpdateService;
local l_joinGamePlayButton_0 = require(l_Parent_0.ExperienceAnalytics).Points.joinGamePlayButton;
local l_LaunchErrorLocalizationKeys_0 = require(l_Parent_0.GameLaunch).LaunchErrorLocalizationKeys;
local l_PlayabilityStatusEnum_0 = require(l_Parent_0.PlayabilityRodux).Enums.PlayabilityStatusEnum;
local v22 = require(l_Parent_0.ToastRodux);
local l_SetCurrentToastMessage_0 = v22.Actions.SetCurrentToastMessage;
local l_ToastType_0 = v22.Enums.ToastType;
local l_getAppFeaturePolicies_0 = require(l_Parent_0.UniversalAppPolicy).getAppFeaturePolicies;
local l_Localization_0 = require(l_Parent_0.RobloxAppLocales).Localization;
local l_CheckForUpdate_0 = require(l_Parent_0.RobloxAppUpdate).Thunks.CheckForUpdate;
local l_useGameProductInfoSelector_0 = require(l_Parent_0.GameProductInfoRodux).useGameProductInfoSelector;
local l_GetFFlagAgeVerificationFlowFromVoiceEligibleGames_0 = require(l_Parent_0.SharedFlags).GetFFlagAgeVerificationFlowFromVoiceEligibleGames;
local l_LocalizationService_0 = game:GetService("LocalizationService");
local l_game_EngineFeature_0 = game:GetEngineFeature("AutoUpgradeEngineFeatureOnly");
local l_game_EngineFeature_1 = game:GetEngineFeature("CanPerformBinaryUpdateEnabled");
local v33 = nil;
local v34 = "";
local function _(v35, v36)
    local l_RobloxLocaleId_0 = l_LocalizationService_0.RobloxLocaleId;
    if v33 == nil then
        v33 = l_Localization_0.new(l_RobloxLocaleId_0);
        v34 = l_RobloxLocaleId_0;
    end;
    if v34 ~= l_RobloxLocaleId_0 then
        v33:SetLocale(l_RobloxLocaleId_0);
        v34 = l_RobloxLocaleId_0;
    end;
    return v33:Format(v35, v36);
end;
local function v48(v39, v40, v41, v42)
    local v43 = nil;
    local v44 = nil;
    if not (v39 ~= nil) or v40.playabilityStatus == l_PlayabilityStatusEnum_0.PurchaseRequired and (not (v41 ~= nil) or v41.isForSale == false) then
        v43 = "Feature.GamePage.QuickLaunch.LaunchError.UnplayableOtherReason";
    else
        if v40.playabilityStatus == l_PlayabilityStatusEnum_0.DeviceRestricted then
            local v45 = l_getAppFeaturePolicies_0().getPlatformDisplayName() or "";
            if v45 ~= "" then
                local v46 = {
                    device = v45
                };
                local l_RobloxLocaleId_1 = l_LocalizationService_0.RobloxLocaleId;
                if v33 == nil then
                    v33 = l_Localization_0.new(l_RobloxLocaleId_1);
                    v34 = l_RobloxLocaleId_1;
                end;
                if v34 ~= l_RobloxLocaleId_1 then
                    v33:SetLocale(l_RobloxLocaleId_1);
                    v34 = l_RobloxLocaleId_1;
                end;
                v43 = v33:Format("Feature.GamePage.QuickLaunch.LaunchError.DeviceRestrictedCustom", v46);
                v44 = true;
            end;
        end;
        if not v43 then
            v43 = l_LaunchErrorLocalizationKeys_0[v40.playabilityStatus];
        end;
    end;
    v42(l_SetCurrentToastMessage_0({
        toastType = l_ToastType_0.PlayButtonError,
        toastMessage = v43,
        isLocalized = v44
    }));
end;
return function(v49, v50, v51, v52, v53)
    local v54 = l_useRoactService_0(l_RoactAnalytics_0);
    local v55 = l_useRoactService_0(l_AppUpdateService_0);
    local v56 = l_useDispatch_0();
    local v58 = l_useSelector_0(function(v57)
        return v57.GameDetails[v49];
    end);
    local v60 = l_useSelector_0(function(v59)
        return v59.Games[v49];
    end);
    local v61 = l_useGameProductInfoSelector_0(v49);
    local v63 = l_useSelector_0(function(v62)
        return v62.PlayabilityStatus[v49];
    end);
    local v64 = l_useRouteName_0();
    local v65 = (not not v58 and v58.rootPlaceId or v60 and v60.placeId) or nil;
    local v66 = (not not v58 and v58.name or v60 and v60.name) or nil;
    local v67 = v7(v49, v65, v50, v51, v53);
    local v68 = v6(v63, v49, v67);
    local v69 = v8(v49, v67, v68);
    return (v10.useCallback(function(v70, v71)
        l_joinGamePlayButton_0(v54.InfluxDb, "playButtonClicked", {
            isUniversalApp = true,
            referralSource = v50,
            placeId = v65,
            buttonState = not not v70 and v70 or "Invalid",
            ctx = v51
        });
        if v50 == v3.ExperienceDetailsLink then
            v1(v54, {
                placeId = v65,
                playButtonState = v70,
                universeId = v49
            });
        end;
        if v70 == v4.Playable then
            local v72 = nil;
            v72 = not l_GetFFlagAgeVerificationFlowFromVoiceEligibleGames_0() and function()
                v68(v71);
            end or function()
                v69(v71);
            end;
            if not l_game_EngineFeature_0 then
                v72();
                return ;
            else
                v56(l_CheckForUpdate_0(v55, l_game_EngineFeature_1, v54, v72, {
                    ctx = v51
                }));
                return ;
            end;
        elseif not (v70 ~= v4.UnplayableOther) or v70 == v4.Private then
            v48(v65, v63, v61, v56);
            return ;
        elseif v70 == v4.PaidAccess then
            v56(v2(v49, v66, not not v61 and v61.price or nil, not not v61 and v61.productId or nil, not not v61 and v61.sellerId or nil, v52, {
                v64
            }));
            return ;
        elseif v70 == v4.Loading then
            return ;
        else
            error((("invalid play button state %*format(v70)));
            return ;
        end;
    end, {
        v54,
        v55,
        l_game_EngineFeature_1,
        v49,
        v65,
        v66,
        v50,
        v51,
        v69,
        v68,
        v52,
        v61,
        v64
    }));
end;


local v0 = require(script:FindFirstAncestor("GameProductInfoRodux").Parent.Result);
local v1 = {
    new = function()
        return {};
    end
};
v1.mock = function(v2)
    local v3 = v1.new();
    v3.universeId = v2;
    v3.isForSale = true;
    v3.productId = 12345;
    v3.price = 5;
    v3.sellerId = 6789;
    return v3;
end;
v1.fromJsonData = function(v4)
    if not (((type(v4.universeId) == "number" and type(v4.isForSale) == "boolean") and type(v4.productId) == "number") and type(v4.price) == "number") or type(v4.sellerId) ~= "number" then
        return v0.error("invalid data type");
    else
        local v5 = v1.new();
        v5.universeId = tostring(v4.universeId);
        v5.isForSale = v4.isForSale;
        v5.productId = v4.productId;
        v5.price = v4.price;
        v5.sellerId = v4.sellerId;
        return v0.success(v5);
    end;
end;
return v1;


local l_Url_0 = require(script:FindFirstAncestor("GameProductInfoRodux").Parent.Http).Url;
return function(v1, v2)
    assert(type(v2) == "table", "GamesGetProductInfo request expects universeIds to be a table");
    assert(#v2 > 0, "GamesGetProductInfo request expects universeIds count to be greater than 0");
    assert(#v2 <= 100, "GamesGetProductInfo request expects universeIds count to not exceed " .. 100);
    return v1(string.format("%sv1/games/games-product-info?universeIds=%s", l_Url_0.GAME_URL, (table.concat(v2, ","))), "GET");
end;


local v0 = require(script.Parent.Parent.Dev.JestConfigs);
return {
    displayName = "GameProductInfoRodux",
    setupFilesAfterEnv = {
        v0.setupFiles.LogHandler,
        v0.setupFiles.UIBloxInitializer,
        v0.setupFiles.createPromiseRejectionHandler()
    }
};


return require(script:FindFirstAncestor("GameThumbnailsRodux").Parent.Rodux).makeActionCreator(script.Name, function(v0)
    assert(type(v0) == "table", string.format("SetGameThumbnails action expects thumbnailsTable to be a table, was %s", (type(v0))));
    return {
        thumbnails = v0
    };
end);


local l_script_FirstAncestor_0 = script:FindFirstAncestor("GameThumbnailsRodux");
local l_Immutable_0 = require(l_script_FirstAncestor_0.Parent.AppCommonLib).Immutable;
local v2 = require(l_script_FirstAncestor_0.Actions.SetGameThumbnails);
return function(v3, v4)
    v3 = v3 or {};
    assert(v3, "");
    if v4.type == v2.name then
        local v5 = {};
        for v6, v7 in pairs(v4.thumbnails) do
            v5[v6] = v7.url;
        end;
        v3 = l_Immutable_0.JoinDictionaries(v3, v5);
    end;
    return v3;
end;


return {
    SetGameThumbnails = require(script.Actions.SetGameThumbnails),
    GameThumbnailsReducer = require(script.Reducers.GameThumbnails),
    ["jest.config"] = script["jest.config"]
};


local v0 = require(script.Parent.Parent.Dev.JestConfigs);
return {
    displayName = "GameThumbnailsRodux",
    setupFilesAfterEnv = {
        v0.setupFiles.LogHandler,
        v0.setupFiles.UIBloxInitializer,
        v0.setupFiles.createPromiseRejectionHandler()
    }
};


local l_Parent_0 = script:FindFirstAncestor("GameTile").Parent;
local v1 = require(l_Parent_0.React);
local v2 = require(l_Parent_0.Roact);
local l_Object_0 = require(l_Parent_0.LuauPolyfill).Object;
local l_FFlagLuaAppGameTileProps_0 = require(l_Parent_0.SharedFlags).FFlagLuaAppGameTileProps;
local v5 = {
    overlaySize = UDim2.new(1, 0, 1, 0),
    overlayPosition = UDim2.new(0, 0, 0, 0),
    overlayZIndex = 0
};
local function v10(v6)
    local v7 = l_Object_0.assign({}, v5, v6);
    local v8, v9 = v1.useState(false);
    return v2.createElement("Frame", {
        Size = if not l_FFlagLuaAppGameTileProps_0 then if v7.size then UDim2.new(0, v7.size.X, 0, v7.size.Y) else UDim2.fromScale(1, 1) else v7.size,
        BackgroundTransparency = 1,
        LayoutOrder = v7.layoutOrder,
        [v2.Ref] = v7.gameTileRef,
        [v2.Event.MouseEnter] = if not v7.overlay then nil else function()
            v9(true);
        end,
        [v2.Event.MouseLeave] = if not v7.overlay then nil else function()
            v9(false);
        end
    }, l_Object_0.assign({
        OverlayContainer = if not v7.overlay then nil else v2.createElement("Frame", {
            Size = v7.overlaySize,
            Position = v7.overlayPosition,
            ZIndex = v7.overlayZIndex,
            BackgroundTransparency = 1,
            Visible = v8
        }, {
            Overlay = v2.createElement(v7.overlay)
        })
    }, v7.children));
end;
return v1.forwardRef(function(v11, v12)
    return v1.createElement(v10, l_Object_0.assign({}, v11, {
        gameTileRef = v12
    }));
end);


game:DefineFastFlag("LuaAppOverrideExperienceTitle", false);
return function()
    return game:GetFastFlag("LuaAppOverrideExperienceTitle");
end;


game:DefineFastFlag("LuaAppSingleHoveredGridTile2", false);
return function()
    return game:GetFastFlag("LuaAppSingleHoveredGridTile2");
end;