local l_Url_0 = require(script:FindFirstAncestor("TenFootUiShell").Parent.Http).Url;
local v1 = require(script.Parent.FStringDebugOverrideCrossPlayApiUrl);
return function(v2)
    return v2.roduxNetworking.POST(script, function(v3, v4, v5, v6, v7)
        local v8 = v3(if v1 ~= "" then v1 else l_Url_0.APIS_URL, {
            crossPlaySettingsKey = v5,
            crossPlayValue = v6
        }):path("user-settings-api"):path("v1"):path("user-settings");
        if not v7 then
            v8 = v8:path("platform");
        end;
        return v8:body({
            [v4] = v6
        });
    end);
end;


local l_MessageBusService_0 = game:GetService("MessageBusService");
local l_HttpService_0 = game:GetService("HttpService");
local l_Parent_0 = script:FindFirstAncestor("TenFootUiShell").Parent;
local l_UrlBuilder_0 = require(l_Parent_0.UrlBuilder).UrlBuilder;
local l_UrlBase_0 = require(l_Parent_0.UrlBuilder).UrlBase;
local v5 = require(l_Parent_0.Promise);
local l_FetchFriendsCarousel_0 = require(l_Parent_0.FriendsCarousel).FetchFriendsCarousel;
local v7 = game:DefineFastInt("FriendListRefreshRequestRetryCount", 3);
local v8 = l_UrlBuilder_0.new({
    base = l_UrlBase_0.APIS,
    path = "platform-social-processor/v1/start-sync"
});
local _ = function()
    return v5.new(function(v9, _)
        l_MessageBusService_0:MakeRequest("CredentialsProtocol", "getHeaders", {}, function(v11)
            v9(v11);
        end, {});
    end);
end;
return function(v13, v14, v15)
    return v5.new(function(v16, _)
        l_MessageBusService_0:MakeRequest("CredentialsProtocol", "getHeaders", {}, function(v18)
            v16(v18);
        end, {});
    end):andThen(function(v19)
        if v19 ~= nil and v19.success then
            local l_headers_0 = v19.headers;
            local v21 = {};
            if not (not l_headers_0 or not l_headers_0.Authorization) then
                v21.Authorization = l_headers_0.Authorization;
            end;
            return v14(v8(), "POST", {
                headers = l_headers_0 or {},
                postBody = l_HttpService_0:JSONEncode(v21),
                maxRetryCount = v7
            }):andThen(function(_)
                v13(l_FetchFriendsCarousel_0()):andThen(function(_)
                    return v5.resolve();
                end, function(_)
                    warn("Refresh friends carousel failed after syncing platform friends");
                    return v5.resolve();
                end);
            end, function(_)
                warn("Platform friend list refresh failed.");
                v15.Diag:reportCounter("TriggerFriendListRefreshFailed", 1);
                return v5.resolve();
            end);
        else
            warn("credential headers error");
            return ;
        end;
    end);
end;


return {
    TabOpening = "TabOpening",
    TabOpened = "TabOpened",
    TabClosing = "TabClosing",
    TabClosed = "TabClosed"
};


local l_Parent_0 = script:FindFirstAncestor("TenFootUiShell").Parent;
local _ = require(l_Parent_0.AppCommonLib);
local v2 = require(l_Parent_0.React);
local l_useDispatch_0 = require(l_Parent_0.RoactUtils).Hooks.RoactRodux.useDispatch;
local _ = require(l_Parent_0.TenFootUiCommon);
return function(v5, v6)
    local v7 = l_useDispatch_0();
    return (v2.useCallback(function(_, v9, _)
        if v6 then
            v6(v9);
        end;
        v7(v5(v9));
    end, {
        v7,
        v5,
        v6
    }));
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("TenFootUiShell");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.React);
local v3 = require(l_Parent_0.ReactOtter);
local l_useEarlyIsFocused_0 = require(l_Parent_0.RoactUtils).Hooks.useEarlyIsFocused;
local l_ReactNavigationExtend_0 = l_script_FirstAncestor_0.ReactNavigationExtend;
local v6 = require(l_ReactNavigationExtend_0.Views.RouteViewState);
local v7 = require(l_ReactNavigationExtend_0.Views.Constants);
local v8 = require(l_script_FirstAncestor_0.Hooks.TenFootUiScene);
local v9 = {
    FRONT_HIDDEN = -1,
    CENTER_VISIBLE = 0,
    BACK_HIDDEN = 1
};
local l_FRONT_HIDDEN_0 = v9.FRONT_HIDDEN;
local function _(v11)
    if not v11 then
        return v9.BACK_HIDDEN;
    else
        return v9.CENTER_VISIBLE;
    end;
end;
return function(v13)
    local l_isTopOfStack_0 = v13.isTopOfStack;
    local l_totalInStack_0 = v13.totalInStack;
    local l_viewState_0 = v13.viewState;
    local v17, v18 = v2.useState(false);
    local v19 = l_isTopOfStack_0 or v17;
    local v20, v21 = v3.useAnimatedBinding(l_FRONT_HIDDEN_0, (v2.useCallback(function()
        v13.onAnimationComplete();
        v18(false);
    end, {
        v13.onAnimationComplete
    })));
    v2.useEffect(function()
        if not (l_viewState_0 ~= v6.ViewState.Opening) or l_viewState_0 == v6.ViewState.Opened then
            v18(true);
            v21(v3.spring(if not l_isTopOfStack_0 then v9.BACK_HIDDEN else v9.CENTER_VISIBLE, v7.Z_DIRECTION_ANIMATION_SPRING_CONFIG));
            return ;
        else
            if l_viewState_0 == v6.ViewState.Closing then
                v18(true);
                v21(v3.spring(v9.FRONT_HIDDEN, v7.Z_DIRECTION_ANIMATION_SPRING_CONFIG));
            end;
            return ;
        end;
    end, {
        l_viewState_0,
        l_isTopOfStack_0
    });
    local v22 = l_useEarlyIsFocused_0();
    v2.useEffect(function()
        if not (not v22 or not l_isTopOfStack_0) then
            v8.updateZPosition(-((l_totalInStack_0 - 1) * (v7.DEFAULT_SCREEN_DISTANCE_TO_CAMERA * v7.Z_DIRECTION_ZOOM_FACTOR)));
        end;
    end, {
        v22,
        l_isTopOfStack_0,
        l_totalInStack_0
    });
    return v2.useMemo(function()
        return {
            isVisible = v19,
            cFrame = v20:map(function(v23)
                return CFrame.new(0, 0, -((v7.DEFAULT_SCREEN_DISTANCE_TO_CAMERA * v7.Z_DIRECTION_ZOOM_FACTOR) * v23));
            end),
            transparency = v20:map(function(v24)
                return (math.abs(v24));
            end)
        };
    end, {
        v19,
        v20
    });
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("TenFootUiShell");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local l_ReactNavigationExtend_0 = l_script_FirstAncestor_0.ReactNavigationExtend;
local v3 = require(l_Parent_0.React);
local v4 = require(l_Parent_0.LuauPolyfill);
local _ = require(l_Parent_0.Navigation);
local l_Array_0 = v4.Array;
local l_Object_0 = v4.Object;
local l_StackActions_0 = require(l_Parent_0.RoactNavigation).StackActions;
local l_ViewState_0 = require(l_ReactNavigationExtend_0.Views.RouteViewState).ViewState;
local _ = require(l_Parent_0.TenFootUiCommon);
local v11 = {
    SetCurrent = "SetCurrent",
    SetOpening = "SetOpening",
    SetOpened = "SetOpened",
    SetClosing = "SetClosing",
    SetClosed = "SetClosed"
};
local function v12(v13, v14)
    local v16 = l_Array_0.findIndex(v13, function(v15)
        return v15.descriptor.key == v14.key;
    end);
    if v14.type == v11.SetCurrent then
        for _, v18 in v14.navigationState.routes, nil, nil do
            v13 = v12(v13, {
                type = v11.SetOpening,
                key = v18.key,
                descriptor = v14.descriptors[v18.key]
            });
        end;
        for _, v20 in v13, nil, nil do
            if not (v14.descriptors[v20.descriptor.key] ~= nil) then
                v13 = v12(v13, {
                    type = v11.SetClosing,
                    key = v20.descriptor.key
                });
            end;
        end;
        return v13;
    else
        if v14.type == v11.SetOpening then
            if v16 == -1 then
                v13 = table.clone(v13);
                table.insert(v13, {
                    viewState = l_ViewState_0.Opening,
                    descriptor = v14.descriptor
                });
                return v13;
            elseif v13[v16].viewState == l_ViewState_0.Closing then
                v13 = table.clone(v13);
                v13[v16] = l_Object_0.assign({}, v13[v16], {
                    viewState = l_ViewState_0.Opening,
                    descriptor = v14.descriptor
                });
                return v13;
            elseif v13[v16].descriptor ~= v14.descriptor then
                v13 = table.clone(v13);
                v13[v16] = l_Object_0.assign({}, v13[v16], {
                    descriptor = v14.descriptor
                });
                return v13;
            end;
        elseif v14.type == v11.SetOpened then
            if v16 ~= -1 and v13[v16].viewState == l_ViewState_0.Opening then
                v13 = table.clone(v13);
                v13[v16] = l_Object_0.assign({}, v13[v16], {
                    viewState = l_ViewState_0.Opened
                });
                return v13;
            end;
        elseif v14.type == v11.SetClosing then
            if v16 ~= -1 and v13[v16].viewState ~= l_ViewState_0.Closing then
                v13 = table.clone(v13);
                v13[v16] = l_Object_0.assign({}, v13[v16], {
                    viewState = l_ViewState_0.Closing
                });
                return v13;
            end;
        elseif (v14.type == v11.SetClosed and v16 ~= -1) and v13[v16].viewState == l_ViewState_0.Closing then
            v13 = table.clone(v13);
            table.remove(v13, v16);
        end;
        return v13;
    end;
end;
return function(v21)
    local l_navigation_0 = v21.navigation;
    local l_state_0 = l_navigation_0.state;
    local l_descriptors_0 = v21.descriptors;
    local v25, v26 = v3.useReducer(v12, {});
    v3.useLayoutEffect(function()
        v26({
            type = v11.SetCurrent,
            navigationState = l_state_0,
            descriptors = l_descriptors_0
        });
    end, {
        l_state_0,
        l_descriptors_0
    });
    local v28 = v3.useCallback(function(v27)
        l_navigation_0.dispatch(l_StackActions_0.completeTransition({
            key = l_navigation_0.state.key,
            toChildKey = v27
        }));
    end, {
        l_navigation_0
    });
    local v30 = v3.useCallback(function(v29)
        v26({
            type = v11.SetOpened,
            key = v29.descriptor.key
        });
        v28(v29.descriptor.key);
    end, {
        v28
    });
    local v32 = v3.useCallback(function(v31)
        v26({
            type = v11.SetClosed,
            key = v31.descriptor.key
        });
    end, {});
    return (v3.useMemo(function()
        return l_Array_0.map(v25, function(v33)
            return l_Object_0.assign({}, v33, {
                setOpened = function()
                    v30(v33);
                end,
                setClosed = function()
                    v32(v33);
                end
            });
        end);
    end, {
        v25,
        v30,
        v32
    }));
end;


local l_Parent_0 = script:FindFirstAncestor("TenFootUiShell").Parent;
local v1 = require(l_Parent_0.React);
local _ = require(l_Parent_0.TenFootUiCommon);
return function(v3)
    local v4, v5 = v1.useState({});
    local v6 = v3.keepVisitedScreensMounted == nil and true or v3.keepVisitedScreensMounted;
    v1.useLayoutEffect(function()
        v5(function(v7)
            local v8 = {};
            if v6 then
                for _, v10 in v7, nil, nil do
                    if v3.descriptors[v10] then
                        table.insert(v8, v10);
                    end;
                end;
            end;
            if table.find(v8, v3.activeKey) == nil then
                table.insert(v8, v3.activeKey);
            end;
            return v8;
        end);
    end, {
        v3.activeKey,
        v3.descriptors,
        v6
    });
    return v4;
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("TenFootUiShell");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.React);
local v3 = require(l_Parent_0.ReactOtter);
local v4 = require(l_script_FirstAncestor_0.ReactNavigationExtend.Views.Constants);
local v5 = require(l_script_FirstAncestor_0.Hooks.TenFootUiScene);
local v6 = require(script.Parent.TabAnimationStateEnum);
local l_useCameraFacingGeometry_0 = require(l_Parent_0.SceneManagement).useCameraFacingGeometry;
local function _(v8, v9)
    local v10 = true;
    if v8 ~= v6.TabOpening then
        v10 = v8 == v6.TabOpened;
    end;
    local function _(v11)
        if v9 == 0 then
            return 0;
        elseif not v10 then
            if v9 < 0 then
                return v11;
            else
                return -v11;
            end;
        elseif v9 < 0 then
            return -v11;
        else
            return v11;
        end;
    end;
    return function(v13)
        local v14 = (1 - v13.step) * (v13.viewportFillDimensions.X * 0.3333);
        return CFrame.new(v9 == 0 and 0 or if v10 then if v9 < 0 then -v14 else v14 else if v9 < 0 then v14 else -v14, 0, 0);
    end;
end;
local function v20(v16)
    local v17, v18 = v2.useState(v6.TabClosed);
    v2.useEffect(function()
        v18(function(v19)
            if v16 and (not (v19 ~= v6.TabClosed) or v19 == v6.TabClosing) then
                return v6.TabOpening;
            elseif not v16 and (not (v19 ~= v6.TabOpened) or v19 == v6.TabOpening) then
                return v6.TabClosing;
            else
                return v19;
            end;
        end);
    end, {
        v16
    });
    return v17, v18;
end;
return function(v21)
    local l_currentTabIndex_0 = v21.currentTabIndex;
    local v23 = l_currentTabIndex_0 - v21.previousTabIndex;
    local v24, v25 = v20(v21.isActiveTab);
    local v26 = l_useCameraFacingGeometry_0(v4.DEFAULT_SCREEN_DISTANCE_TO_CAMERA);
    local v28, v29 = v3.useAnimatedBinding(0, (v2.useCallback(function()
        v25(function(v27)
            if v27 == v6.TabOpening then
                return v6.TabOpened;
            elseif v27 == v6.TabClosing then
                return v6.TabClosed;
            else
                return v27;
            end;
        end);
    end, {})));
    v2.useEffect(function()
        if v24 == v6.TabOpening then
            v29(v3.spring(1, v4.X_DIRECTION_ANIMATION_SPRING_CONFIG));
            return ;
        else
            if v24 == v6.TabClosing then
                v29(v3.spring(0, v4.X_DIRECTION_ANIMATION_SPRING_CONFIG));
            end;
            return ;
        end;
    end, {
        v24
    });
    v2.useEffect(function()
        if not (v24 ~= v6.TabOpening) or v24 == v6.TabOpened then
            v5.updateXPosition(-((v26.viewportFillDimensions:getValue().X * 0.1634) * (l_currentTabIndex_0 - 1)));
        end;
    end, {
        v24,
        v26.viewportFillDimensions,
        l_currentTabIndex_0
    });
    return v2.useMemo(function()
        local l_v24_0 = v24;
        local l_v23_0 = v23;
        local v32 = true;
        if l_v24_0 ~= v6.TabOpening then
            v32 = l_v24_0 == v6.TabOpened;
        end;
        local function _(v33)
            if l_v23_0 == 0 then
                return 0;
            elseif not v32 then
                if l_v23_0 < 0 then
                    return v33;
                else
                    return -v33;
                end;
            elseif l_v23_0 < 0 then
                return -v33;
            else
                return v33;
            end;
        end;
        return {
            isVisible = v24 ~= v6.TabClosed,
            cFrame = v2.joinBindings({
                step = v28,
                viewportFillDimensions = v26.viewportFillDimensions
            }):map(function(v35)
                local v36 = (1 - v35.step) * (v35.viewportFillDimensions.X * 0.3333);
                return CFrame.new(l_v23_0 == 0 and 0 or if v32 then if l_v23_0 < 0 then -v36 else v36 else if l_v23_0 < 0 then v36 else -v36, 0, 0);
            end),
            transparency = v28:map(function(v37)
                return 1 - v37;
            end)
        };
    end, {
        v28,
        v26,
        v24,
        v23
    });
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("TenFootUiShell");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local _ = require(l_Parent_0.AppCommonLib);
local v3 = require(l_Parent_0.React);
local l_useLazyRef_0 = require(l_Parent_0.UIBlox).Core.Hooks.useLazyRef;
local l_useNavigation_0 = require(l_Parent_0.RoactUtils).Hooks.useNavigation;
local v6 = require(l_script_FirstAncestor_0.ReactNavigationExtend.Hooks.useProcessNavigationStateChange);
local _ = require(l_Parent_0.Navigation);
local l_FFlagUnifyNavigationGraph_0 = require(l_Parent_0.SharedFlags).FFlagUnifyNavigationGraph;
return function(v9)
    local l_rnBypassActionSignal_0 = v9.rnBypassActionSignal;
    local v11 = l_useNavigation_0();
    if l_FFlagUnifyNavigationGraph_0 then
        local v13 = l_useLazyRef_0(function()
            return l_rnBypassActionSignal_0:connect(function(v12)
                v11.dispatch(v12);
            end);
        end);
        local l_v13_0 = v13 --[[ copy: 3 -> 4 ]];
        v3.useEffect(function()
            l_v13_0.current:disconnect();
        end, {});
    end;
    v3.useEffect(function()
        local v16 = l_rnBypassActionSignal_0:connect(function(v15)
            v11.dispatch(v15);
        end);
        return function()
            v16:disconnect();
        end;
    end, {
        v11,
        l_rnBypassActionSignal_0
    });
    if l_FFlagUnifyNavigationGraph_0 then
        local v17 = v6(v9.ApplyRoactNavigationHistory, v9.updateRoute);
        v3.useEffect(function()
            v17(nil, v11.state, nil);
        end, {
            v11.state
        });
    end;
    return nil;
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("TenFootUiShell");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local _ = require(l_Parent_0.TenFootUiCommon);
local v3 = require(l_Parent_0.React);
local v4 = require(l_Parent_0.RoactNavigation);
local v5 = require(l_Parent_0.ReactFocusNavigation);
local v6 = require(l_Parent_0.FocusNavigationUtils);
local v7 = require(l_script_FirstAncestor_0.Components.FocusNavigableWrapper);
local l_FocusNavigableSurfaceRegistry_0 = v6.FocusNavigableSurfaceRegistry;
local l_useRegisterFocusNavigableSurface_0 = l_FocusNavigableSurfaceRegistry_0.useRegisterFocusNavigableSurface;
local l_useDeRegisterFocusNavigableSurface_0 = l_FocusNavigableSurfaceRegistry_0.useDeRegisterFocusNavigableSurface;
local l_FocusNavigableSurfaceIdentifierEnum_0 = v6.FocusNavigableSurfaceIdentifierEnum;
local v12 = require(l_script_FirstAncestor_0.Hooks.useRootFocusNavigationBindings);
local l_SceneView_0 = v4.SceneView;
local _ = require(l_Parent_0.Navigation);
return function(v15)
    local v16, v17 = v3.useState(nil);
    local v18 = l_useRegisterFocusNavigableSurface_0();
    local v19 = l_useDeRegisterFocusNavigableSurface_0();
    local v20 = v12(v17);
    local v21 = if not (not (v15.shouldRestoreFocus ~= nil) or v15.shouldRestoreFocus) then v20 else v5.useMostRecentFocusBehavior(v20);
    local l_isFocusable_0 = v15.isFocusable;
    v3.useEffect(function()
        if not v16 or not l_isFocusable_0 then
            v19(l_FocusNavigableSurfaceIdentifierEnum_0.RouterView, v16);
        else
            v18(l_FocusNavigableSurfaceIdentifierEnum_0.RouterView, v16);
        end;
        return function()
            v19(l_FocusNavigableSurfaceIdentifierEnum_0.RouterView, v16);
        end;
    end, {
        v16,
        l_isFocusable_0
    });
    return v3.createElement(v7, {
        ref = v21,
        onSelectUp = v15.onSelectUp
    }, v3.createElement(l_SceneView_0, {
        navigation = v15.navigation,
        component = v15.component,
        screenProps = v15.screenProps
    }));
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("TenFootUiShell");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local l_ReactNavigationExtend_0 = l_script_FirstAncestor_0.ReactNavigationExtend;
local v3 = require(l_Parent_0.React);
local v4 = require(l_Parent_0.SceneManagement);
local l_SurfaceGuiWithAdornee_new_0 = v4.SurfaceGuiWithAdornee_new;
local l_useCameraFacingGeometry_0 = v4.useCameraFacingGeometry;
local v7 = require(l_ReactNavigationExtend_0.Views.Constants);
local l_ScreenKind_0 = require(l_Parent_0.TenFootUiCommon).TenFootUiRNTypes.ScreenKind;
local v9 = require(script.Parent.SceneViewWithFocusRoot);
local v10 = require(l_script_FirstAncestor_0.Components.TenFootUiOverflowScreen);
local v11 = require(l_script_FirstAncestor_0.Hooks.useFocusGlobalNav);
local v12 = require(l_Parent_0.Navigation);
local l_getCurrentRouteKey_0 = v12.getCurrentRouteKey;
local l_getRouteKeyIsInNavigationState_0 = v12.getRouteKeyIsInNavigationState;
local l_getActiveChildNavigationOptionsRecursively_0 = v12.getActiveChildNavigationOptionsRecursively;
local l_useEarlyIsFocused_0 = require(l_Parent_0.RoactUtils).Hooks.useEarlyIsFocused;
local v17 = require(l_Parent_0.LuauPolyfill);
local l_Array_0 = v17.Array;
local l_Object_0 = v17.Object;
local function v21(v20)
    return (Vector3.new(v20.X, v20.Y, v7.ADORNEE_DEPTH));
end;
local function _(v22)
    if (v22.options.screenKind or l_ScreenKind_0.Default) == l_ScreenKind_0.FullScreen then
        return v7.FULLSCREEN_CANVAS_SIZE;
    else
        return v7.DEFAULT_CANVAS_SIZE;
    end;
end;
local function v27(v24)
    return 1 - l_Array_0.reduce(v24, function(v25, v26)
        return v25 * (1 - (v26 or 0));
    end, 1);
end;
local function v29(...)
    local v28 = {
        ...
    };
    return v3.useMemo(function()
        return v3.joinBindings(v28):map(v27);
    end, v28);
end;
local function _(v30, v31)
    local v32 = l_getCurrentRouteKey_0(v30);
    if v31.options.hasSubNavigation and v32 ~= nil then
        return (l_getRouteKeyIsInNavigationState_0(v32, v31.state));
    else
        return v32 == v31.key;
    end;
end;
local function _(v34, v35)
    return (if not v35.options.hasSubNavigation then nil else l_getActiveChildNavigationOptionsRecursively_0(v34).screenKind or v35.options.screenKind) or l_ScreenKind_0.Default;
end;
return function(v37)
    local l_descriptor_0 = v37.descriptor;
    local l_screenProps_0 = v37.screenProps;
    local l_navigation_0 = v37.navigation;
    local v41 = v11(l_navigation_0);
    local v42 = l_useCameraFacingGeometry_0(v7.DEFAULT_SCREEN_DISTANCE_TO_CAMERA);
    local v43 = l_useEarlyIsFocused_0() and v37.isActiveCard;
    local v44 = l_getCurrentRouteKey_0(l_navigation_0);
    local v45 = if not not l_descriptor_0.options.hasSubNavigation and v44 ~= nil then l_getRouteKeyIsInNavigationState_0(v44, l_descriptor_0.state) else v44 == l_descriptor_0.key;
    v44 = (if not l_descriptor_0.options.hasSubNavigation then nil else l_getActiveChildNavigationOptionsRecursively_0(l_navigation_0).screenKind or l_descriptor_0.options.screenKind) or l_ScreenKind_0.Default;
    local v46 = v37.isVisible and (l_screenProps_0.isVisible == nil and true or l_screenProps_0.isVisible);
    local v47 = v29(v37.groupTransparency, l_screenProps_0.groupTransparency);
    return v3.createElement(l_SurfaceGuiWithAdornee_new_0, {
        name = l_descriptor_0.key,
        adorneeSize = v42.viewportFillDimensions:map(v21),
        adorneeCFrame = v37.adorneeCFrame,
        adorneeParent = l_screenProps_0.worldContainer,
        canvasSize = if (l_descriptor_0.options.screenKind or l_ScreenKind_0.Default) == l_ScreenKind_0.FullScreen then v7.FULLSCREEN_CANVAS_SIZE else v7.DEFAULT_CANVAS_SIZE,
        isVisible = v46,
        surfaceGuiParent = l_screenProps_0.surfaceGuiContainer
    }, (v3.createElement(v10, {
        screenKind = v44,
        groupTransparency = v47
    }, {
        SceneView = v3.createElement(v9, {
            component = l_descriptor_0.getComponent(),
            navigation = l_descriptor_0.navigation,
            screenProps = v3.useMemo(function()
                return l_Object_0.assign({}, l_screenProps_0, {
                    isVisible = v46,
                    groupTransparency = v47
                });
            end, {
                l_screenProps_0,
                v46,
                v47
            }),
            isFocusable = v43 and v45,
            onSelectUp = v41,
            shouldRestoreFocus = l_descriptor_0.options.enableFocusRestoration
        })
    })));
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("TenFootUiShell");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local l_ReactNavigationExtend_0 = l_script_FirstAncestor_0.ReactNavigationExtend;
local v3 = require(l_Parent_0.React);
local _ = require(l_ReactNavigationExtend_0.Views.RouteViewState);
local v5 = require(l_ReactNavigationExtend_0.Hooks.useStackAnimation_new);
local v6 = require(l_ReactNavigationExtend_0.Views.Cards.TenFootUiBaseViewCard_new);
local _ = require(l_Parent_0.TenFootUiCommon);
local _ = require(l_Parent_0.Navigation);
return function(v9)
    local v10 = v5({
        isTopOfStack = v9.isTopOfStack,
        totalInStack = v9.totalInStack,
        viewState = v9.viewState,
        onAnimationComplete = v9.onAnimationComplete
    });
    return v3.createElement(v6, {
        descriptor = v9.descriptor,
        screenProps = v9.screenProps,
        navigation = v9.navigation,
        isActiveCard = v9.isTopOfStack,
        isVisible = v10.isVisible,
        adorneeCFrame = v10.cFrame,
        groupTransparency = v10.transparency
    });
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("TenFootUiShell");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local v2 = require(l_Parent_0.React);
local l_ReactNavigationExtend_0 = l_script_FirstAncestor_0.ReactNavigationExtend;
local v4 = require(l_ReactNavigationExtend_0.Hooks.useTabAnimation_new);
local v5 = require(l_ReactNavigationExtend_0.Views.Cards.TenFootUiBaseViewCard_new);
local _ = require(l_Parent_0.TenFootUiCommon);
local _ = require(l_Parent_0.Navigation);
return function(v8)
    local v9 = v4({
        isActiveTab = v8.isActiveTab,
        currentTabIndex = v8.currentTabIndex,
        previousTabIndex = v8.previousTabIndex
    });
    return v2.createElement(v5, {
        descriptor = v8.descriptor,
        screenProps = v8.screenProps,
        navigation = v8.navigation,
        isActiveCard = v8.isActiveTab,
        isVisible = v9.isVisible,
        adorneeCFrame = v9.cFrame,
        groupTransparency = v9.transparency
    });
end;


local _ = require(script:FindFirstAncestor("TenFootUiShell").Parent.ReactOtter);
return {
    DEFAULT_SCREEN_DISTANCE_TO_CAMERA = 6,
    DEFAULT_BACKGROUND_DISTANCE_TO_CAMERA = 50,
    CANVAS_SIZE = Vector2.new(1920, 1080),
    TOP_BAR_HEIGHT_RATIO = 0.13333333333333333,
    TOP_BAR_CANVAS_SIZE = Vector2.new(1920, 144),
    DEFAULT_CANVAS_SIZE = Vector2.new(1920, 1080),
    FULLSCREEN_CANVAS_SIZE = Vector2.new(1920, 1080),
    CONTROLLER_BAR_HEIGHT_RATIO = 0.09074074074074075,
    CONTROLLER_BAR_CANVAS_SIZE = Vector2.new(1920, 98),
    PAGE_CONTENT_CANVAS_HEIGHT = 936,
    PAGE_CONTENT_HEIGHT_RATIO = 0.8666666666666667,
    X_DIRECTION_ANIMATION_SPRING_CONFIG = {
        stiffness = 150,
        damping = 20,
        mass = 1
    },
    Z_DIRECTION_ANIMATION_SPRING_CONFIG = {
        stiffness = 710,
        damping = 40,
        mass = 1
    },
    Z_DIRECTION_ZOOM_FACTOR = 0.1,
    ADORNEE_DEPTH = 0.01
};


local l_Parent_0 = script:FindFirstAncestor("TenFootUiShell").Parent;
local _ = require(l_Parent_0.TenFootUiCommon);
local _ = require(l_Parent_0.Navigation);
return {
    ViewState = {
        Opening = "Opening",
        Opened = "Opened",
        Closing = "Closing"
    }
};


local l_script_FirstAncestor_0 = script:FindFirstAncestor("TenFootUiShell");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local l_ReactNavigationExtend_0 = l_script_FirstAncestor_0.ReactNavigationExtend;
local v3 = require(l_Parent_0.React);
local _ = require(l_Parent_0.Navigation);
local v5 = require(l_ReactNavigationExtend_0.Views.RouteViewState);
local v6 = require(l_ReactNavigationExtend_0.Views.Cards.TenFootUiStackViewCard_new);
local _ = require(l_Parent_0.TenFootUiCommon);
local v8 = require(l_ReactNavigationExtend_0.Hooks.useStackScreens_new);
local l_FFlagUnifyNavigationGraph_0 = require(l_Parent_0.SharedFlags).FFlagUnifyNavigationGraph;
return function(v10)
    local l_descriptors_0 = v10.descriptors;
    local l_navigation_0 = v10.navigation;
    local l_state_0 = l_navigation_0.state;
    local l_key_0 = l_state_0.routes[l_state_0.index].key;
    local v15 = v8({
        navigation = l_navigation_0,
        descriptors = l_descriptors_0
    });
    local v16 = {};
    for _, v18 in v15, nil, nil do
        v16[v18.descriptor.key] = v3.createElement(v6, {
            descriptor = v18.descriptor,
            screenProps = v10.screenProps,
            navigation = l_navigation_0,
            isTopOfStack = v18.descriptor.key == l_key_0,
            totalInStack = l_state_0.index,
            viewState = v18.viewState,
            onAnimationComplete = function()
                if not (v18.viewState ~= v5.ViewState.Opening) or l_FFlagUnifyNavigationGraph_0 and v18.viewState == v5.ViewState.Opened then
                    v18.setOpened();
                    return ;
                else
                    if v18.viewState == v5.ViewState.Closing then
                        v18.setClosed();
                    end;
                    return ;
                end;
            end
        });
    end;
    return v16;
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("TenFootUiShell");
local l_Parent_0 = l_script_FirstAncestor_0.Parent;
local l_ReactNavigationExtend_0 = l_script_FirstAncestor_0.ReactNavigationExtend;
local v3 = require(l_Parent_0.React);
local _ = require(l_Parent_0.TenFootUiCommon);
local v5 = require(l_ReactNavigationExtend_0.Views.Cards.TenFootUiSwitchViewCard_new);
local v6 = require(l_ReactNavigationExtend_0.Hooks.useSwitchScreenKeys);
local _ = require(l_Parent_0.Navigation);
local l_FFlagUnifyNavigationGraph_0 = require(l_Parent_0.SharedFlags).FFlagUnifyNavigationGraph;
local function v13(v9)
    local v10, v11 = v3.useState({
        current = v9,
        previous = v9
    });
    v3.useEffect(function()
        v11(function(v12)
            if v9 ~= v12.current then
                return {
                    current = v9,
                    previous = v12.current
                };
            else
                return v12;
            end;
        end);
    end, {
        v9
    });
    return v10.current, v10.previous;
end;
return function(v14)
    local l_descriptors_0 = v14.descriptors;
    local l_navigation_0 = v14.navigation;
    local l_state_0 = l_navigation_0.state;
    local l_key_0 = l_state_0.routes[l_state_0.index].key;
    local v19, v20 = v13(if not l_FFlagUnifyNavigationGraph_0 then l_descriptors_0[l_key_0].options.tabIndex or 1 else l_state_0.index);
    local v21 = v6({
        activeKey = l_key_0,
        descriptors = l_descriptors_0,
        keepVisitedScreensMounted = v14.navigationConfig.keepVisitedScreensMounted
    });
    local v22 = {};
    for _, v24 in v21, nil, nil do
        v22[v24] = v3.createElement(v5, {
            descriptor = l_descriptors_0[v24],
            screenProps = v14.screenProps,
            navigation = l_navigation_0,
            isActiveTab = v24 == l_key_0,
            currentTabIndex = v19,
            previousTabIndex = v20
        });
    end;
    return v22;
end;


return {
    TenFootUiStackView = require(script.TenFootUiStackView),
    TenFootUiSwitchView = require(script.TenFootUiSwitchView)
};


local l_Parent_0 = script:FindFirstAncestor("TenFootUiShell").Parent;
local _ = require(l_Parent_0.TenFootUiCommon);
local l_Array_0 = require(l_Parent_0.LuauPolyfill).Array;
local v3 = require(script.Parent.createTenFootUiStackNavigator);
local v4 = require(script.Parent.createTenFootUiSwitchNavigator);
return function(v5, v6)
    local v7 = table.clone(v5.switchRoutes);
    for _, v9 in v5.stackRoutes, nil, nil do
        for v10, v11 in v9, nil, nil do
            table.insert(v7, {
                [v10] = {
                    screen = v3(l_Array_0.concat(v11.screenStack, v5.commonStackRoutes), v11.navigatorConfig),
                    navigationOptions = v11.navigationOptions
                }
            });
        end;
    end;
    return v4(v7, v6);
end;


local l_Parent_0 = script:FindFirstAncestor("TenFootUiShell").Parent;
local v1 = require(l_Parent_0.RoactNavigation);
local _ = require(l_Parent_0.TenFootUiCommon);
local l_createNavigator_0 = v1.createNavigator;
local l_StackRouter_0 = v1.StackRouter;
local v5 = require(script.Parent.Views.TenFootUiStackView);
return function(v6, v7)
    return l_createNavigator_0(v5, l_StackRouter_0(v6, v7), v7);
end;


local l_Parent_0 = script:FindFirstAncestor("TenFootUiShell").Parent;
local v1 = require(l_Parent_0.RoactNavigation);
local _ = require(l_Parent_0.TenFootUiCommon);
local l_createNavigator_0 = v1.createNavigator;
local l_SwitchRouter_0 = v1.SwitchRouter;
local v5 = require(script.Parent.Views.TenFootUiSwitchView);
return function(v6, v7)
    return l_createNavigator_0(v5, l_SwitchRouter_0(v6, v7), v7);
end;


local _ = require(script:FindFirstAncestor("TenFootUiShell").Reducers.CrossPlaySettings);
return function(v1)
    local l_CrossPlaySettings_0 = v1.CrossPlaySettings;
    return l_CrossPlaySettings_0.Status.isEnabled and l_CrossPlaySettings_0.Status.isSystemPrivilegeEnabled or false;
end;


local l_script_FirstAncestor_0 = script:FindFirstAncestor("TenFootUiShell");
local l_Signal_0 = require(l_script_FirstAncestor_0.Parent.AppCommonLib).Signal;
local v2 = require(l_script_FirstAncestor_0.Hooks.CrossPlay.Constants);
local v6 = {
    OnLeaveConstrained = l_Signal_0.new(),
    BeginCheckXboxPrivilege = function(_, _)
        return {
            CanJoinGame = true,
            PrivilegeCheckResult = v2.PrivilegeCheckResults.NO_ISSUE,
            Success = true
        };
    end,
    GetPlatformPartyMembers = function(_)
        return {};
    end
};
local v7 = nil;
pcall(function()
    v7 = game:GetService("PlatformService");
end);
return v7 or v6;


local v0 = {
    ActiveUserSignedOut = require(script:FindFirstAncestor("TenFootUiShell").Parent.AppCommonLib).Signal.new()
};
local v1 = nil;
pcall(function()
    v1 = game:GetService("ThirdPartyUserService");
end);
return v1 or v0;


local l_Parent_0 = script:FindFirstAncestor("TenFootUiShell").Parent;
local v1 = require(l_Parent_0.React);
local _ = require(l_Parent_0.TenFootUiCommon);
return function(v3)
    return v1.createElement("CanvasGroup", {
        GroupTransparency = 0
    }, v3.children);
end;


local l_Parent_0 = script:FindFirstAncestor("TenFootUiShell").Parent;
local v1 = require(l_Parent_0.React);
local v2 = require(l_Parent_0.ReactFocusNavigation);
local l_Provider_0 = require(l_Parent_0.FocusNavigationUtils).FocusNavigableSurfaceRegistry.Provider;
local l_FocusNavigationService_0 = v2.FocusNavigationService;
local l_TestHelpers_0 = require(l_Parent_0.Dev.TenFootUiTesting).TestHelpers;
local l_mapProviderListToSpecs_0 = l_TestHelpers_0.mapProviderListToSpecs;
local l_ProviderContainer_0 = require(l_Parent_0.RoactUtils).Components.ProviderContainer;
local l_mocks_0 = l_TestHelpers_0.mocks;
local l_CoreGui_0 = v2.EngineInterface.CoreGui;
local function _()
    local v10 = table.clone(l_CoreGui_0);
    v10.setSelection = function()
    end;
    return l_FocusNavigationService_0.new(v10);
end;
return function(v12, v13)
    local v14, v15 = l_mocks_0.makeMockProviders(v13);
    local v16 = l_mapProviderListToSpecs_0(v14);
    return v1.forwardRef(function(v17, _)
        local l_createElement_0 = v1.createElement;
        local l_Provider_1 = v2.FocusNavigationContext.Provider;
        local v21 = {};
        local l_v12_0 = v12;
        if not l_v12_0 then
            local v23 = table.clone(l_CoreGui_0);
            v23.setSelection = function()
            end;
            l_v12_0 = l_FocusNavigationService_0.new(v23);
        end;
        v21.value = l_v12_0;
        return l_createElement_0(l_Provider_1, v21, v1.createElement(l_ProviderContainer_0, {
            providers = v16
        }, v1.createElement(l_Provider_0, nil, v17.children)));
    end), v15;
end;


return {
    ["jest.config"] = script["jest.config"],
    TenFootUiContainer = require(script.Components.TenFootUiContainer),
    TenFootUiOverflowScreen = require(script.Components.TenFootUiOverflowScreen),
    createTenFootUiStackNavigator = require(script.ReactNavigationExtend.createTenFootUiStackNavigator),
    createTenFootUiSwitchNavigator = require(script.ReactNavigationExtend.createTenFootUiSwitchNavigator),
    Constants = require(script.Constants),
    useCrossPlaySettings = require(script.Hooks.CrossPlay.useCrossPlaySettings),
    Reducers = {
        CrossPlaySettings = require(script.Reducers.CrossPlaySettings)
    },
    PlatformServiceOrStub = require(script.ServiceWrappers.PlatformServiceOrStub),
    Views = require(script.ReactNavigationExtend.Views),
    RnBypassAdapter = require(script.ReactNavigationExtend.RnBypassAdapter)
};


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


return {
    mocks = require(script.mocks),
    mapProviderListToSpecs = require(script.mapProviderListToSpecs)
};


local l_Parent_0 = script:FindFirstAncestor("TenFootUiTesting").Parent;
local v1 = require(l_Parent_0.Cryo);
local _ = require(l_Parent_0.Dev.RoactUtils);
return function(v3)
    return v1.List.map(v3, function(v4)
        return {
            class = v4
        };
    end);
end;


local l_Parent_0 = script:FindFirstAncestor("TenFootUiTesting").Parent;
local v1 = require(l_Parent_0.Dash);
local v2 = require(l_Parent_0.React);
local v3 = require(l_Parent_0.RoactNavigation);
local v4 = require(l_Parent_0.RoactRodux);
local v5 = require(l_Parent_0.Rodux);
local v6 = require(l_Parent_0.UIBlox);
local l_RoactAppPolicy_0 = require(l_Parent_0.UniversalAppPolicy).RoactAppPolicy;
local l_AppFeaturePolicies_0 = require(l_Parent_0.UniversalAppPolicy).AppFeaturePolicies;
local v9 = require(l_Parent_0.t);
local l_AppStyleProvider_0 = v6.App.Style.AppStyleProvider;
local l_Constants_0 = v6.App.Style.Constants;
local l_MockContentProvider_0 = v6.UnitTestHelpers.MockContentProvider;
local v13 = v9.strictInterface({
    includeStoreProvider = v9.optional(v9.boolean),
    store = v9.optional(v9.table),
    topLevelReducer = v9.optional(v9.callback),
    initialStoreState = v9.optional(v9.table),
    includeStyleProvider = v9.optional(v9.boolean),
    includeLocalizationProvider = v9.optional(v9.boolean),
    includeNavigationProvider = v9.optional(v9.boolean),
    includeAppPolicyProvider = v9.optional(v9.boolean),
    includeFocusControllerProvider = v9.optional(v9.boolean),
    middlewareList = v9.optional(v9.table),
    appStyle = v9.optional(v9.table),
    appPolicy = v9.optional(v9.table),
    policyFactory = v9.optional(v9.union(v9.callback, v9.table)),
    focusController = v9.optional(v9.table),
    captureFocusOnMount = v9.optional(v9.boolean),
    includeContentProvider = v9.optional(v9.boolean),
    localization = v9.optional(v9.table),
    navigation = v9.optional(v9.table)
});
local function v14()
    return {
        includeStoreProvider = false,
        store = nil,
        topLevelReducer = nil,
        initialStoreState = nil,
        includeStyleProvider = true,
        includeLocalizationProvider = true,
        includeNavigationProvider = false,
        includeAppPolicyProvider = true,
        includeFocusControllerProvider = false,
        focusController = nil,
        captureFocusOnMount = false,
        includeContentProvider = false,
        middlewareList = nil,
        policyFactory = nil,
        appPolicy = nil,
        appStyle = {
            themeName = l_Constants_0.ThemeName.Dark,
            fontName = l_Constants_0.FontName.Gotham
        },
        localization = {},
        navigation = {
            isFocused = function()
                return false;
            end,
            addListener = function()
                return {
                    remove = function()
                    end
                };
            end,
            getParam = function()
                return nil;
            end,
            navigate = function()
            end,
            state = {
                routeName = "DummyRoute"
            }
        }
    };
end;
assert(v13((v14())));
local function v16(v15)
    return v15;
end;
return function(v17, v18)
    assert(v17, "Expected a map of components, received none");
    local v19 = v14();
    if v18 then
        assert(v13(v18));
        v19 = v1.join(v19, v18);
    end;
    if v19.includeStoreProvider then
        local v20 = {
            v5.thunkMiddleware
        };
        if v19.middlewareList then
            v1.append(v20, v19.middlewareList);
        end;
        local v21 = v19.topLevelReducer or v16;
        local _ = nil;
        v17 = {
            StoreProvider = v2.createElement(v4.StoreProvider, {
                store = if not v19.store then if v19.initialStoreState then v5.Store.new(v21, v19.initialStoreState, v20) else v5.Store.new(v21, nil, v20) else v19.store
            }, v17)
        };
    end;
    if v19.includeAppPolicyProvider then
        v17 = {
            PolicyProvider = v2.createElement(l_RoactAppPolicy_0.Provider, {
                policy = {
                    l_AppFeaturePolicies_0,
                    v19.policyFactory or function()
                        return {};
                    end
                },
                policyData = v19.appPolicy
            }, v17)
        };
    end;
    if v19.includeStyleProvider then
        v17 = {
            StyleProvider = v2.createElement(l_AppStyleProvider_0, {
                style = v19.appStyle
            }, v17)
        };
    end;
    if v19.includeNavigationProvider then
        v17 = {
            NavigationProvider = v2.createElement(v3.Provider, {
                value = v19.navigation
            }, v17)
        };
    end;
    local v23 = v2.createElement("Folder", {}, v17);
    if v19.includeContentProvider then
        v23 = v2.createElement(v6.App.Context.ContentProvider.Provider, {
            value = l_MockContentProvider_0.new()
        }, v23);
    end;
    return v23;
end;


local l_Parent_0 = script:FindFirstAncestor("TenFootUiTesting").Parent;
local v1 = require(l_Parent_0.Cryo);
local v2 = require(l_Parent_0.React);
local v3 = require(l_Parent_0.Style);
local v4 = require(l_Parent_0.UIBlox);
local l_AppNotificationService_0 = require(l_Parent_0.RoactServiceTags).AppNotificationService;
local l_AppLogging_0 = require(l_Parent_0.RoactServiceTags).AppLogging;
local v7 = require(l_Parent_0.AppCommonLib);
local l_LocalizationProvider_0 = require(l_Parent_0.Localization).LocalizationProvider;
local v9 = require(l_Parent_0.RoactServices);
local v10 = require(l_Parent_0.Dev.JestGlobals);
local v11 = require(script.Parent.mockProviders);
local l_TenFootUiContext_0 = require(l_Parent_0.TenFootUiCommon).TenFootUiContext;
local v13 = require(l_Parent_0.TenFootUiCommon);
local l_LoginStatus_0 = require(l_Parent_0.RobloxAppEnums).LoginStatus;
local l_AppPage_0 = require(l_Parent_0.RobloxAppEnums).AppPage;
local l_SwitchTab_0 = require(l_Parent_0.RobloxAppEnums).SwitchTab;
local l_ScreenKind_0 = v13.TenFootUiRNTypes.ScreenKind;
local l_Constants_0 = v4.App.Style.Constants;
local v19 = require(l_Parent_0.RoactNavigation);
local v20 = require(l_Parent_0.NavigationRodux);
local l_jest_0 = v10.jest;
local l_Signal_0 = v7.Signal;
local l_DesignTokenProvider_0 = v3.DesignTokenProvider;
local v24 = {
    AuthenticationStatus = {
        status = l_LoginStatus_0.LOGGED_IN
    },
    Startup = {
        Preloading = false
    },
    CrossPlaySettings = {
        Status = {
            isEnabled = true,
            isSystemPrivilegeEnabled = true
        },
        SystemPrivileges = {},
        NetworkStatus = {},
        LuaError = nil,
        HttpError = nil,
        SystemError = nil
    }
};
local v25 = {
    tabs = {
        {
            titleLocalizationKey = "CommonUI.Features.Label.Home",
            page = l_SwitchTab_0.HomeTab,
            icon = "icons/menu/home_on",
            actionType = nil
        },
        {
            titleLocalizationKey = "CommonUI.Features.Label.Discover",
            page = l_SwitchTab_0.GamesTab,
            icon = "icons/menu/games_on",
            actionType = Enum.AppShellActionType.TapGamePageTab
        },
        {
            titleLocalizationKey = "CommonUI.Features.Label.Avatar",
            page = l_SwitchTab_0.AvatarExperienceTab,
            iconComponent = function()
                return v2.createElement("Frame");
            end,
            actionType = Enum.AppShellActionType.TapAvatarTab
        }
    },
    options = {
        {
            titleLocalizationKey = "Feature.Catalog.Label.Search",
            page = l_AppPage_0.SearchPage,
            icon = "icons/common/search",
            actionType = nil
        },
        {
            titleLocalizationKey = "Feature.Home.Robux",
            page = l_AppPage_0.PurchaseRobux,
            icon = "icons/common/goldrobux",
            actionType = nil
        }
    }
};
local function _(v26)
    return v19.createNavigator(v19.RobloxSwitchView, v19.StackRouter(v26), {});
end;
local function v29(_)
    return v2.createElement("Frame", {});
end;
local v30 = {
    switchRoutes = {
        {
            [l_AppPage_0.Landing] = {
                screen = v29,
                navigationOptions = {
                    screenKind = l_ScreenKind_0.Default,
                    animationStyle = "None"
                }
            }
        },
        {
            [l_AppPage_0.Startup] = {
                screen = v29,
                navigationOptions = {
                    screenKind = l_ScreenKind_0.Default,
                    animationStyle = "None"
                }
            }
        },
        {
            [l_SwitchTab_0.HomeTab] = {
                screen = v29,
                navigationOptions = {
                    screenKind = l_ScreenKind_0.Default,
                    animationStyle = "None"
                }
            }
        },
        {
            [l_SwitchTab_0.AvatarExperienceTab] = {
                screen = v29,
                navigationOptions = {
                    screenKind = l_ScreenKind_0.Default,
                    animationStyle = "None"
                }
            }
        }
    },
    stackRoutes = {
        {
            [l_SwitchTab_0.GamesTab] = {
                navigatorConfig = {
                    initialRouteKey = l_AppPage_0.Games
                },
                navigationOptions = {
                    screenKind = l_ScreenKind_0.Default,
                    animationStyle = "None"
                },
                screenStack = {
                    {
                        [l_AppPage_0.Games] = {
                            screen = v29,
                            navigationOptions = {
                                screenKind = l_ScreenKind_0.Default,
                                animationStyle = "None"
                            }
                        }
                    }
                }
            }
        }
    },
    commonStackRoutes = {
        {
            [l_AppPage_0.SearchPage] = {
                screen = v29,
                navigationOptions = {
                    screenKind = l_ScreenKind_0.Default,
                    animationStyle = "None"
                }
            }
        },
        {
            [l_AppPage_0.PurchaseRobux] = {
                screen = v29,
                navigationOptions = {
                    screenKind = l_ScreenKind_0.Default,
                    animationStyle = "None"
                }
            }
        }
    }
};
local function v37(v31, v32)
    local v33 = {
        ReloadPage = l_Signal_0.new(),
        ReportMutedError = l_Signal_0.new()
    };
    v33.ReloadPage.fire = l_jest_0.fn();
    v33.ReportMutedError.fire = l_jest_0.fn();
    local v34 = newproxy(true);
    local v35 = {
        [l_AppNotificationService_0] = v32,
        [v34] = {
            EventStream = {}
        }
    };
    return {
        LuaAppEvents = v33,
        RoactAnalytics = v34,
        buttonClick = l_jest_0.fn(),
        globalNavConfig = v31,
        useRoactService = l_jest_0.fn().mockImplementation(function(v36)
            return v35[v36];
        end),
        routerConfig = v30,
        ApplyRoactNavigationHistory = l_jest_0.fn().mockImplementation(function()
            return {
                type = "ApplyRoactNavigationHistory"
            };
        end),
        RootNavigator = v19.createNavigator(v19.RobloxSwitchView, v19.StackRouter({
            {
                Foo = function()
                    return nil;
                end
            }
        }), {})
    };
end;
local function _()
    return {
        ActionTaken = l_jest_0.fn()
    };
end;
local function v39()
    return {
        logEventWithTimestamp = l_jest_0.fn(),
        logEvent = l_jest_0.fn(),
        logEventOnce = l_jest_0.fn(),
        getTimestamp = l_jest_0.fn(),
        logRobloxTelemetryEvent = l_jest_0.fn(),
        logEphemeralCounterEvent = l_jest_0.fn(),
        logEphemeralStatEvent = l_jest_0.fn()
    };
end;
local function v41(v40)
    return v40 or v25;
end;
local function v47(v42)
    local v43 = {
        state = v1.Dictionary.join({
            index = 1,
            routes = {
                {
                    key = "Landing",
                    routeName = l_AppPage_0.Landing
                },
                {
                    key = "Startup",
                    routeName = l_AppPage_0.Startup
                },
                {
                    key = "Home",
                    routeName = l_SwitchTab_0.HomeTab
                },
                {
                    key = "Games",
                    routeName = l_SwitchTab_0.GamesTab
                },
                {
                    key = "AvatarExperienceRoot",
                    routeName = l_SwitchTab_0.AvatarExperienceTab
                },
                {
                    key = "SearchPage",
                    routeName = l_AppPage_0.SearchPage
                },
                {
                    key = "PurchaseRobux",
                    routeName = l_AppPage_0.PurchaseRobux
                }
            },
            routeName = v20.Constants.TempRnSwitchNavigatorName
        }, v42 or {}),
        isFocused = l_jest_0.fn().mockReturnValue(false),
        addListener = l_jest_0.fn().mockImplementation(function()
            return {
                remove = l_jest_0.fn()
            };
        end),
        dispatch = l_jest_0.fn(),
        getParam = l_jest_0.fn()
    };
    v43.navigate = l_jest_0.fn().mockImplementation(function(v44)
        local v46 = v1.List.findWhere(v43.state.routes, function(v45)
            return v45.routeName == v44;
        end);
        if v46 ~= nil then
            v43.state = v1.Dictionary.join(v43.state, {
                index = v46
            });
            return ;
        else
            error("No navigated route [" .. v44 .. "] has been mocked");
            return ;
        end;
    end);
    v43.getChildNavigation = l_jest_0.fn();
    v43.router = {
        getScreenOptions = l_jest_0.fn()
    };
    return v43;
end;
local v48 = {};
v48.__index = v48;
v48.new = function(v49)
    local v50 = {
        locale = v49,
        changed = l_Signal_0.new()
    };
    setmetatable(v50, v48);
    return v50;
end;
v48.SetLocale = function(v51, v52)
    if v51.locale ~= v52 then
        v51.locale = v52;
        v51.changed:fire();
    end;
end;
v48.GetLocale = function(v53)
    return v53.locale;
end;
v48.Format = function(_, v55, _)
    return "Localized:" .. v55;
end;
makeMockLocalization = function()
    return v48.new("en-us");
end;
local function v69(v57)
    v57 = v57 or {};
    assert(v57, "Config must not be nil");
    local v58 = makeMockLocalization();
    local v59 = v57.globalNavConfig or v25;
    local v60 = {
        ActionTaken = l_jest_0.fn()
    };
    local v61 = v39();
    local v62 = v47(v57.navigationState);
    local v63 = v37(v59, v60);
    return {
        function(v64)
            return v11(v64.children, {
                includeStoreProvider = true,
                includeStyleProvider = true,
                includeNavigationProvider = true,
                includeAppPolicyProvider = true,
                store = v57.store,
                initialStoreState = v57.initialStoreState or {},
                navigation = v62,
                appStyle = {
                    themeName = l_Constants_0.ThemeName.Dark,
                    fontName = l_Constants_0.FontName.Gotham,
                    deviceType = "Console"
                },
                policyFactory = v57.policyFactory,
                appPolicy = v57.appPolicy
            });
        end,
        function(v65)
            return v2.createElement(l_DesignTokenProvider_0, {
                tokenMappers = v57.tokenMappers or {},
                uiModeInfo = {
                    deviceType = "Console",
                    uiMode = "TenFoot"
                }
            }, v65.children);
        end,
        function(v66)
            return v2.createElement(l_LocalizationProvider_0, {
                localization = v58
            }, v66.children);
        end,
        function(v67)
            return v2.createElement(l_TenFootUiContext_0.Provider, {
                value = v57.tenFootUiContext or v63
            }, v67.children);
        end,
        function(v68)
            return v2.createElement(v9.RoactServices.ServiceProvider, {
                services = {
                    [l_AppLogging_0] = v61
                }
            }, v68.children);
        end
    }, {
        globalNavConfig = v59,
        mockNavigation = v62,
        mockTenFootUiContext = v63,
        mockNotificationService = v60,
        mockLogging = v61
    };
end;
local function v78(v70)
    return {
        state = v70,
        dispatch = function()
        end,
        getParam = function(...)
        end,
        addListener = function(_, _)
            return {
                remove = function()
                end
            };
        end,
        getChildNavigation = function(_)
            return nil;
        end,
        router = {
            getScreenOptions = function(_, _)
                return {};
            end,
            getStateForAction = function(_, v77)
                return v77;
            end
        },
        _dangerouslyGetParent = function()
            return nil;
        end
    };
end;
return {
    makeMockGlobalNavConfig = v41,
    makeMockProviders = v69,
    makeMockDescriptor = function(v79, v80, v81, _, _, _, _, _)
        local v87 = nil;
        local v88 = nil;
        local v89 = v2.Component:extend("TestComponent");
        v89.render = function(v90)
            v87 = v90.props.navigation;
            v88 = v90.props.screenProps;
            return nil;
        end;
        return {
            getComponent = function()
                return v89;
            end,
            key = v79,
            options = {
                screenKind = v81
            },
            navigation = v78(v80),
            state = v80
        }, v87, v88;
    end,
    makeMockLocalization = makeMockLocalization,
    makeTenFootUiContextMocks = v37,
    mockCrossPlayState = v24
};


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


local v0 = require(script.Parent.Parent.ReactRoblox);
local function v4(v1, v2)
    for _ = 1, v2 do
        v1(function()
            task.defer(coroutine.running());
            coroutine.yield();
        end);
    end;
end;
local function v6(v5)
    v4(v5, 1);
end;
local function v12(v7, ...)
    for v8 = 1, select("#", ...) do
        local v9 = select(v8, ...);
        if not v9:IsA("ScrollingFrame") then
            local _ = v9.AbsoluteSize.Y;
        else
            local _ = v9.AbsoluteCanvasSize.Y;
        end;
    end;
    v7(function()
        task.wait();
    end);
end;
local function v14(v13)
    v13();
end;
local function v17(v15)
    return (setmetatable({
        act = function(...)
            return v15(v0.act, ...);
        end
    }, {
        __call = function(_, ...)
            return v15(v14, ...);
        end
    }));
end;
return {
    forceUpdateGuiObject = v17(v12),
    waitForEvents = v17(v6),
    waitForEventsTimes = v17(v4)
};


return {
    DeferredLuaHelpers = require(script.DeferredLuaHelpers),
    findFirstInstance = require(script.findFirstInstance),
    runStorybookAsSpec = require(script.runStorybookAsSpec),
    waitUntil = require(script.waitUntil)
};


return function(v0, v1, v2)
    local l_storyRoot_0 = v0.storyRoot;
    local v4 = v0.middleware or function(...)
        return ...;
    end;
    local l_ScreenGui_0 = Instance.new("ScreenGui");
    v1("SHOULD run all stories with no issue", function()
        for _, v7 in ipairs(l_storyRoot_0:GetDescendants()) do
            if not (not v7:IsA("ModuleScript") or not v7.Name:find(".story$")) then
                v2("SHOULD mount: " .. v7:GetFullName(), function()
                    v4(require(v7), l_ScreenGui_0)();
                end);
            end;
        end;
    end);
end;


local l_act_0 = require(game:GetService("CorePackages").Packages.ReactRoblox).act;
return function(v1, v2)
    local v3 = v2 == nil and 1 or v2;
    local v4 = os.clock() + v3;
    local v5 = nil;
    while true do
        if os.clock() < v4 then
            local v6, v7, v8 = pcall(v1);
            if not v6 or not v7 then
                if not v6 then
                    v5 = v7;
                end;
                l_act_0(function()
                    task.wait();
                end);
            else
                return v8;
            end;
        else
            local v9 = ("operation has timed out (maximum time allowed was %f seconds)"):format(v3);
            if v5 ~= nil then
                v9 = v9 .. ": " .. tostring(v5);
            end;
            error(v9);
            return ;
        end;
    end;
end;


local v0 = require(script:FindFirstAncestor("Time").Parent.ArgCheck);
local v1 = require(script.Parent.TimeUnit);
local v2 = require(script.Parent.DateTime);
local v5 = {
    ReasonDateInvalid = {
        IsFutureDate = "IsFutureDate",
        IsInvalidDayOfMonth = "IsInvalidDayOfMonth"
    },
    MonthsLocalizationKeys = {
        "CommonUI.Controls.Label.January",
        "CommonUI.Controls.Label.February",
        "CommonUI.Controls.Label.March",
        "CommonUI.Controls.Label.April",
        "CommonUI.Controls.Label.May",
        "CommonUI.Controls.Label.June",
        "CommonUI.Controls.Label.July",
        "CommonUI.Controls.Label.August",
        "CommonUI.Controls.Label.September",
        "CommonUI.Controls.Label.October",
        "CommonUI.Controls.Label.November",
        "CommonUI.Controls.Label.December"
    },
    DateTypeOrder = setmetatable({
        ["en-us"] = {
            [v1.Months] = 1,
            [v1.Days] = 2,
            [v1.Years] = 3
        },
        ["es-es"] = {
            [v1.Days] = 1,
            [v1.Months] = 2,
            [v1.Years] = 3
        },
        ["fr-fr"] = {
            [v1.Days] = 1,
            [v1.Months] = 2,
            [v1.Years] = 3
        },
        ["de-de"] = {
            [v1.Days] = 1,
            [v1.Months] = 2,
            [v1.Years] = 3
        },
        ["pt-br"] = {
            [v1.Days] = 1,
            [v1.Months] = 2,
            [v1.Years] = 3
        },
        ["zh-cn"] = {
            [v1.Years] = 1,
            [v1.Months] = 2,
            [v1.Days] = 3
        },
        ["zh-cjv"] = {
            [v1.Years] = 1,
            [v1.Months] = 2,
            [v1.Days] = 3
        },
        ["zh-tw"] = {
            [v1.Years] = 1,
            [v1.Months] = 2,
            [v1.Days] = 3
        },
        ["ko-kr"] = {
            [v1.Years] = 1,
            [v1.Months] = 2,
            [v1.Days] = 3
        },
        ["ja-jp"] = {
            [v1.Years] = 1,
            [v1.Months] = 2,
            [v1.Days] = 3
        },
        ["it-it"] = {
            [v1.Days] = 1,
            [v1.Months] = 2,
            [v1.Years] = 3
        },
        ["ru-ru"] = {
            [v1.Days] = 1,
            [v1.Months] = 2,
            [v1.Years] = 3
        },
        ["id-id"] = {
            [v1.Days] = 1,
            [v1.Months] = 2,
            [v1.Years] = 3
        },
        ["vi-vn"] = {
            [v1.Days] = 1,
            [v1.Months] = 2,
            [v1.Years] = 3
        },
        ["th-th"] = {
            [v1.Days] = 1,
            [v1.Months] = 2,
            [v1.Years] = 3
        },
        ["tr-tr"] = {
            [v1.Days] = 1,
            [v1.Months] = 2,
            [v1.Years] = 3
        }
    }, {
        __index = function(_, _)
            return {
                [v1.Years] = 1,
                [v1.Months] = 2,
                [v1.Days] = 3
            };
        end
    })
};
local v6 = {
    Prefix = "Prefix",
    Suffix = "Suffix",
    None = "None"
};
v5.DayAffixLocalizationKey = "CommonUI.Controls.Label.Day";
v5.DayAffixType = setmetatable({
    ["zh-cn"] = v6.Suffix,
    ["zh-tw"] = v6.Suffix,
    ["ko-kr"] = v6.Suffix,
    ["ja-jp"] = v6.Suffix
}, {
    __index = function(_, _)
        return v6.None;
    end
});
v5.YearAffixLocalizationKey = "CommonUI.Controls.Label.Year";
v5.YearAffixType = setmetatable({
    ["zh-cn"] = v6.Suffix,
    ["zh-tw"] = v6.Suffix,
    ["ko-kr"] = v6.Suffix,
    ["ja-jp"] = v6.Suffix
}, {
    __index = function(_, _)
        return v6.None;
    end
});
v5.GetFormattedDayString = function(v11, v12, v13, v14)
    return v11:GetFormattedString(v1.Days, v12, v13, v14);
end;
v5.GetFormattedYearString = function(v15, v16, v17, v18)
    return v15:GetFormattedString(v1.Years, v16, v17, v18);
end;
v5.GetFormattedString = function(v19, v20, v21, v22, v23)
    v0.isNotNil(v20, "timeUnit passed into DateHelper:GetFormattedString");
    v0.isNotNil(v22, "affix passed into DateHelper:GetFormattedString");
    v21 = v0.isType(tostring(v21), "string", "dateValue passed into DateHelper:GetFormattedString");
    local v24 = nil;
    if v20 == v1.Days then
        v24 = v19.DayAffixType[v23];
    elseif v20 == v1.Years then
        v24 = v19.YearAffixType[v23];
    end;
    if v24 == v6.Prefix then
        return v22 .. v21;
    elseif v24 == v6.Suffix then
        return v21 .. v22;
    else
        return v21;
    end;
end;
v5.GetFormattedFullString = function(v25, v26, v27, v28, v29, v30, v31, v32)
    v26 = v0.isType(v26, "string", "localizedMonthString passed into DateHelper:GetFormattedFullString");
    v31 = v0.isType(v31, "string", "divider passed into DateHelper:GetFormattedFullString");
    v32 = v0.isType(v32, "string", "localeKey passed into DateHelper:GetFormattedFullString");
    local v33 = v25.DateTypeOrder[v32];
    local l_v25_FormattedDayString_0 = v25:GetFormattedDayString(v27, v28, v32);
    local l_v25_FormattedYearString_0 = v25:GetFormattedYearString(v29, v30, v32);
    local v36 = "";
    local v37 = {
        [v33[v1.Months]] = v26,
        [v33[v1.Days]] = l_v25_FormattedDayString_0,
        [v33[v1.Years]] = l_v25_FormattedYearString_0
    };
    for v38, v39 in ipairs(v37) do
        v36 = v36 .. v39;
        if v38 < #v37 then
            v36 = v36 .. v31;
        end;
    end;
    return v36;
end;
local function v41()
    local l_Values_0 = v2.now():GetValues();
    return {
        [v1.Months] = v0.isNonNegativeNumber(l_Values_0.Month, "current month in BirthdayPicker"),
        [v1.Days] = v0.isNonNegativeNumber(l_Values_0.Day, "current day in BirthdayPicker"),
        [v1.Years] = v0.isNonNegativeNumber(l_Values_0.Year, "current year in BirthdayPicker")
    };
end;
v5.getCurrentDate = function(_)
    return (v41());
end;
local function v45(v43)
    local l_Values_1 = v2.fromUnixTimestamp(v2.now():GetUnixTimestamp() + v43):GetValues();
    return {
        [v1.Months] = v0.isNonNegativeNumber(l_Values_1.Month, "current month in BirthdayPicker"),
        [v1.Days] = v0.isNonNegativeNumber(l_Values_1.Day, "current day in BirthdayPicker"),
        [v1.Years] = v0.isNonNegativeNumber(l_Values_1.Year, "current year in BirthdayPicker")
    };
end;
v5.isLeapYear = function(_, v47)
    local v48 = false;
    if v47 % 4 == 0 then
        v48 = true;
        if v47 % 100 == 0 then
            v48 = v47 % 400 == 0;
        end;
    end;
    return v48;
end;
local v49 = {};
v5._isFutureDate = function(_, v51, v52, v53, v54)
    if v51[v1.Years] < v54 then
        return true;
    elseif v54 == v51[v1.Years] and v51[v1.Months] < v52 then
        return true;
    elseif (v54 == v51[v1.Years] and v52 == v51[v1.Months]) and v51[v1.Days] < v53 then
        return true;
    else
        return false;
    end;
end;
v5.isFutureDate = function(v55, v56, v57, v58)
    return v55:_isFutureDate(v41(), v56, v57, v58);
end;
v5.isRecentOrFutureDate = function(v59, v60, v61, v62)
    return v59:_isFutureDate(v45(-172800), v60, v61, v62);
end;
v5.getLastDayOfTheMonthInYear = function(v63, v64, v65)
    if not v49[v64] or not v49[v64][v65] then
        local v66 = nil;
        v66 = if v64 == 2 then not v63:isLeapYear(v65) and 28 or 29 else (not (not (v64 % 2 == 0) or v64 >= 7) or v64 % 2 == 1 and v64 > 7) and 30 or 31;
        if not v49[v64] then
            v49[v64] = {};
        end;
        v49[v64][v65] = v66;
        return v66;
    else
        return v49[v64][v65];
    end;
end;
v5.isInvalidDayOfTheMonth = function(v67, v68, v69, v70)
    return v67:getLastDayOfTheMonthInYear(v68, v70) < v69;
end;
v5.isValidDate = function(v71, v72, v73, v74)
    if not v71:isRecentOrFutureDate(v72, v73, v74) then
        if not v71:isInvalidDayOfTheMonth(v72, v73, v74) then
            return true, nil;
        else
            return false, v71.ReasonDateInvalid.IsInvalidDayOfMonth;
        end;
    else
        return false, v71.ReasonDateInvalid.IsFutureDate;
    end;
end;
return v5;


local l_LocalizationService_0 = game:GetService("LocalizationService");
local v1 = require(script.Parent.TimeZone);
local v2 = {};
v2.new = function(v3, v4, v5, v6, v7, v8, v9)
    local v10 = {
        dateTime = DateTime.fromUniversalTime(v3 or 1970, v4 or 1, v5 or 1, v6 or 0, v7 or 0, v8 or 0, v9 or 0)
    };
    setmetatable(v10, v2);
    return v10;
end;
v2.now = function()
    local v11 = {
        dateTime = DateTime.now()
    };
    setmetatable(v11, v2);
    return v11;
end;
v2.fromUnixTimestamp = function(v12)
    assert(type(v12) == "number", "Invalid argument #1 to fromUnixTimestamp, expected number.");
    local v13 = {
        dateTime = DateTime.fromUnixTimestampMillis(v12 * 1000)
    };
    setmetatable(v13, v2);
    return v13;
end;
v2.fromIsoDate = function(v14)
    assert(type(v14) == "string", "Invalid argument #1 to DateTime.fromIsoDate, expected string.");
    local v15 = {
        dateTime = DateTime.fromIsoDate(v14)
    };
    setmetatable(v15, v2);
    return v15;
end;
v2.Format = function(v16, v17, v18, v19)
    assert(type(v17) == "string", "Invalid argument #1 to Format, expected string.");
    v18 = v18 or v1.Current;
    v19 = v19 or l_LocalizationService_0.RobloxLocaleId;
    if v18 == v1.UTC then
        return v16.dateTime:FormatUniversalTime(v17, v19);
    elseif v18 == v1.Current then
        return v16.dateTime:FormatLocalTime(v17, v19);
    else
        error(("Invalid TimeZone \"%s\""):format((tostring(v18))), 2);
        return ;
    end;
end;
v2.GetValues = function(v20, v21)
    v21 = v21 or v1.Current;
    if v21 == v1.UTC then
        return v20.dateTime:ToUniversalTime();
    elseif v21 == v1.Current then
        return v20.dateTime:ToLocalTime();
    else
        error(("Invalid TimeZone \"%s\""):format((tostring(v21))), 2);
        return ;
    end;
end;
v2.GetUnixTimestamp = function(v22)
    if v22.dateTime:ToUniversalTime().Millisecond > 0 then
        return v22.dateTime.UnixTimestamp + (v22.dateTime.UnixTimestampMillis % 1000) / 1000;
    else
        return v22.dateTime.UnixTimestamp;
    end;
end;
v2.GetIsoDate = function(v23)
    return v23.dateTime:ToIsoDate();
end;
v2.GetLongRelativeTime = function(v24, _, v26, v27)
    return v24:Format("lll", v26, v27);
end;
v2.GetShortRelativeTime = function(v28, _, v30, v31)
    return v28:Format("ll", v30 or v1.Current, v31);
end;
v2.__index = v2;
return v2;


local v2 = setmetatable({}, {
    __index = function(_, v1)
        error(("Invalid TimeUnit \"%s\""):format((tostring(v1))), 2);
    end
});
v2.Seconds = "Seconds";
v2.Minutes = "Minutes";
v2.Hours = "Hours";
v2.Days = "Days";
v2.Months = "Months";
v2.Years = "Years";
v2.Weeks = "Weeks";
return v2;


local v2 = setmetatable({}, {
    __index = function(_, v1)
        error(("Invalid TimeZone \"%s\""):format((tostring(v1))), 2);
    end
});
v2.UTC = -2;
v2.Current = -1;
return v2;


return {
    DateTime = require(script.DateTime),
    DateHelper = require(script.DateHelper),
    TimeUnit = require(script.TimeUnit),
    TimeZone = require(script.TimeZone)
};


local l_AdService_0 = game:GetService("AdService");
local l_Players_0 = game:GetService("Players");
local l_script_FirstAncestor_0 = script:FindFirstAncestor("TnSAdIdentification");
local v3 = require(l_script_FirstAncestor_0.Flags.GetFFlagEnableFilterUnservedAdsFromAbuseReport);
local v4 = require(l_script_FirstAncestor_0.Flags.GetFFlagAdIdentificationFixes);
local v5 = math.max(require(l_script_FirstAncestor_0.Flags.GetFIntAdIdentificationMinimumAreaPerMyriad)() / 10000, 0);
local v6 = if not v3() then nil else "11307989327";
local v7 = {};
shouldIgnoreLocalCharacter = function(v8)
    local l_Head_0 = v8:FindFirstChild("Head");
    if not l_Head_0 or not l_Head_0:IsA("BasePart") then
        return false;
    else
        return l_Head_0.LocalTransparencyModifier >= 0.95;
    end;
end;
getLocalCharacterPosition = function(v10)
    local l_HumanoidRootPart_0 = v10:FindFirstChild("HumanoidRootPart");
    if l_HumanoidRootPart_0 then
        return l_HumanoidRootPart_0.Position;
    else
        return nil;
    end;
end;
getDistanceAlongLookVector = function(v12, v13, v14)
    return ((v12.Position - v13.CFrame.Position):Dot(v14));
end;
local v15 = Vector2.new(0, 0);
local v16 = Vector2.new(math.huge, math.huge);
getViewportCorners = function(v17, v18)
    local l_v16_0 = v16;
    local l_v15_0 = v15;
    local l_ViewportSize_0 = v18.ViewportSize;
    local v22 = 0;
    for _, v24 in ipairs(v17) do
        local v25, v26 = v18:WorldToViewportPoint(v24);
        local v27 = Vector2.new(v25.X, v25.Y) / l_ViewportSize_0;
        if not v26 then
            v27 = Vector2.new(math.clamp(v27.X, 0, 1), (math.clamp(v27.Y, 0, 1)));
        end;
        v22 = v22 + 1;
        l_v16_0 = l_v16_0:Min(v27);
        l_v15_0 = l_v15_0:Max(v27);
    end;
    if v22 <= 2 then
        return v16, v15;
    else
        return l_v16_0, l_v15_0;
    end;
end;
getBBCorners = function(v28, v29)
    local v30 = table.create(4);
    local l_XVector_0 = v28.XVector;
    local l_YVector_0 = v28.YVector;
    local v33 = 1;
    for v34 = -0.5, 0.5 do
        local v35 = (l_XVector_0 * v34) * v29.X;
        for v36 = -0.5, 0.5 do
            v30[v33] = (v28.Position + v35) + (l_YVector_0 * v36) * v29.Y;
            v33 = v33 + 1;
        end;
    end;
    return v30;
end;
dfs = function(v37, v38, v39, v40, v41)
    if not ((#v38 >= v40 and v40 >= 1) and #v38[1] >= v41) or v41 < 1 then
        return v37;
    elseif not v39[v40][v41] then
        if v38[v40][v41].x_i == -1 and v38[v40][v41].y_i == -1 then
            return v37;
        else
            v39[v40][v41] = true;
            table.insert(v37.vertices, v38[v40][v41].localPosition);
            dfs(v37, v38, v39, v40 + 1, v41);
            dfs(v37, v38, v39, v40 - 1, v41);
            dfs(v37, v38, v39, v40, v41 + 1);
            dfs(v37, v38, v39, v40, v41 - 1);
            return v37;
        end;
    else
        return v37;
    end;
end;
getRegions = function(v42, v43)
    local v44 = {};
    for v45, _ in ipairs(v42) do
        for v47, _ in ipairs(v42[v45]) do
            if not v43[v45][v47] then
                local v49 = dfs({
                    vertices = {}
                }, v42, v43, v45, v47);
                if #v49.vertices > 0 then
                    table.insert(v44, v49);
                end;
            end;
        end;
    end;
    return v44;
end;
checkVisibility = function(v50, v51, v52, v53)
    local l_Position_0 = v50.CFrame.Position;
    local l_ViewportSize_1 = v50.ViewportSize;
    local v56 = RaycastParams.new();
    v56.FilterType = Enum.RaycastFilterType.Exclude;
    v56.FilterDescendantsInstances = v53;
    v56.IgnoreWater = true;
    local v57 = 0;
    local v58 = 0;
    local v59 = v52[2] - v52[1];
    local v60 = v52[3] - v52[1];
    for v61 = 1, 4 do
        local v62 = (v59 * (v61 - 0.5)) / 4;
        for v63 = 1, 4 do
            local v64 = (v52[1] + v62) + (v60 * (v63 - 0.5)) / 4;
            local v65 = v64 - l_Position_0;
            v57 = v57 + 1;
            local v66, _ = v50:WorldToViewportPoint(v64);
            if (((v66.Z >= 0 and v66.X >= 0) and v66.Y >= 0) and l_ViewportSize_1.X >= v66.X) and l_ViewportSize_1.Y >= v66.Y then
                local v68 = workspace:Raycast(l_Position_0, v65 * 1.1, v56);
                if v68 and v68.Instance == v51 then
                    v58 = v58 + 1;
                end;
            end;
        end;
    end;
    return v58 / v57;
end;
getVisibleParts = function(v69, v70, v71, v72, v73)
    local l_Position_1 = v69.CFrame.Position;
    local v75 = RaycastParams.new();
    v75.FilterType = Enum.RaycastFilterType.Exclude;
    v75.FilterDescendantsInstances = v73;
    v75.IgnoreWater = true;
    local v76 = 0;
    local v77 = {};
    local v78 = math.sqrt((v72.X * v72.Y) / 25);
    if v78 == 0 then
        return 0, {};
    else
        if v72.X < v78 then
            v78 = v72.X;
        end;
        if v72.Y < v78 then
            v78 = v72.Y;
        end;
        local v79 = math.round(v72.X / v78);
        local v80 = math.round(v72.Y / v78);
        local v81 = v72.X / v79;
        local v82 = v72.Y / v80;
        local v83 = {};
        local v84 = {};
        for v85 = 1, v79 do
            v83[v85] = {};
            v84[v85] = {};
            local v86 = (-0.5 * v72.X + 0.5 * v81) + v81 * (v85 - 1);
            for v87 = 1, v80 do
                local v88 = (-0.5 * v72.Y + 0.5 * v82) + v82 * (v87 - 1);
                local v89 = Vector2.new(v86, v88);
                local v90 = v71:PointToWorldSpace((Vector3.new(v86, v88, 0))) - l_Position_1;
                v76 = v76 + 1;
                local v91 = workspace:Raycast(l_Position_1, v90, v75);
                if v91 and v91.Instance == v70 then
                    v83[v85][v87] = {
                        localPosition = v89,
                        x_i = v85,
                        y_i = v87
                    };
                else
                    v83[v85][v87] = {
                        localPosition = v89,
                        x_i = -1,
                        y_i = -1
                    };
                end;
                v84[v85][v87] = false;
            end;
        end;
        local v92 = getRegions(v83, v84);
        local v93 = {};
        local function v98(v94, v95, v96)
            local v97 = 10000000 * math.floor(v94) + math.floor(v95);
            if not v93[v97] then
                table.insert(v96.vertices, Vector2.new(math.clamp(v94, v72.X * -0.5, v72.X * 0.5), (math.clamp(v95, v72.Y * -0.5, v72.Y * 0.5))));
                v93[v97] = true;
                return ;
            else
                return ;
            end;
        end;
        local function v103(v99, v100)
            for v101 = -0.5, 0.5 do
                for v102 = -0.5, 0.5 do
                    v98(v100.X + v101 * v81, v100.Y + v102 * v82, v99);
                end;
            end;
        end;
        for _, v105 in ipairs(v92) do
            local v106 = {
                vertices = {}
            };
            for _, v108 in ipairs(v105.vertices) do
                v103(v106, v108);
            end;
            table.insert(v77, v106);
        end;
        return v76, v77;
    end;
end;
getConvexHull = function(v109)
    if #v109 <= 2 then
        return {};
    else
        local v110 = {};
        local v111 = v109[1];
        local v112 = {};
        for v113 = 2, #v109 do
            local v114 = v109[v113];
            if not (v114.Y >= v111.Y) or v114.Y == v111.Y and v114.X < v111.X then
                v111 = v114;
            end;
        end;
        table.insert(v110, v111);
        local function _(v115, v116, v117)
            return (v116 - v115):Cross(v117 - v116);
        end;
        local function _(v119)
            local v120 = v119 - v111;
            return (math.atan2(v120.Y, v120.X));
        end;
        for _, v123 in ipairs(v109) do
            if v123 ~= v111 then
                local l_X_0 = v123.X;
                local l_Y_0 = v123.Y;
                local v126 = v123 - v111;
                table.insert(v112, (Vector3.new(l_X_0, l_Y_0, (math.atan2(v126.Y, v126.X)))));
            end;
        end;
        table.sort(v112, function(v127, v128)
            if v127.Z ~= v128.Z then
                return v127.Z < v128.Z;
            else
                return (Vector2.new(v127.X, v127.Y) - v111).Magnitude < (Vector2.new(v128.X, v128.Y) - v111).Magnitude;
            end;
        end);
        local v129 = {};
        local v130 = v112[1];
        for v131 = 2, #v112 do
            local v132 = v112[v131];
            if v130.Z == v132.Z then
                v130 = v132;
            else
                table.insert(v129, Vector2.new(v130.X, v130.Y));
                v130 = v132;
            end;
        end;
        table.insert(v129, Vector2.new(v130.X, v130.Y));
        if #v129 == 1 then
            return {};
        else
            table.insert(v110, v129[1]);
            table.insert(v110, v129[2]);
            for v133 = 3, #v129 do
                local v134 = v129[v133];
                while #v110 > 1 do
                    local v135 = v110[#v110 - 1];
                    local v136 = v110[#v110];
                    if (v136 - v135):Cross(v134 - v136) <= 0 then
                        table.remove(v110);
                    else
                        break;
                    end;
                end;
                table.insert(v110, v134);
            end;
            return v110;
        end;
    end;
end;
getCoveringPolygon = function(v137, v138, v139)
    local l_ViewportSize_2 = v139.ViewportSize;
    local v141 = table.create(#v137);
    v141 = getConvexHull(v137);
    for v142, v143 in ipairs(v141) do
        local v144, _ = v139:WorldToViewportPoint((v138:PointToWorldSpace((Vector3.new(v143.X, v143.Y, 0)))));
        v141[v142] = Vector2.new(v144.X, v144.Y) / l_ViewportSize_2;
    end;
    return v141;
end;
createSingleVisibleRegionFromWorldSpaceCorners = function(v146, v147)
    local l_ViewportSize_3 = v147.ViewportSize;
    local v149 = table.create(#v146);
    for v150, v151 in ipairs(v146) do
        local v152, _ = v147:WorldToViewportPoint(v151);
        v149[v150] = Vector2.new(v152.X, v152.Y) / l_ViewportSize_3;
    end;
    return {
        convexHull = {
            v149[1],
            v149[2],
            v149[4],
            v149[3]
        },
        id = 1
    };
end;
getAdCenterAndScreenArea = function(v154, v155)
    local l_ViewportSize_4 = v155.ViewportSize;
    local v157 = Vector3.new(0, 0, 0);
    local v158 = 0;
    local v159 = {};
    for _, v161 in ipairs(v154) do
        v157 = v157 + v161;
        local v162, _ = v155:WorldToViewportPoint(v161);
        table.insert(v159, Vector2.new(v162.X, v162.Y) / l_ViewportSize_4);
    end;
    return v157 / 4, ((v158 + math.abs(((v159[2] - v159[1]):Cross(v159[3] - v159[1])))) + math.abs(((v159[2] - v159[4]):Cross(v159[3] - v159[4])))) / 2;
end;
v7.getAdsForPoint = function(v164, v165)
    local v166 = {};
    for v167, v168 in pairs(v164) do
        local l_boundingBox_0 = v168.boundingBox;
        if ((v165.X >= l_boundingBox_0.min.X and v165.Y >= l_boundingBox_0.min.Y) and l_boundingBox_0.max.X >= v165.X) and l_boundingBox_0.max.Y >= v165.Y then
            for _, v171 in ipairs(v168.visibleRegions) do
                local l_convexHull_0 = v171.convexHull;
                if #l_convexHull_0 >= 3 then
                    local v173 = l_convexHull_0[#l_convexHull_0];
                    local v174 = true;
                    local v175 = true;
                    for _, v177 in ipairs(l_convexHull_0) do
                        local v178 = (v177 - v173):Cross(v165 - v173);
                        v175 = v175 and v178 <= 0;
                        v174 = v174 and v178 >= 0;
                        v173 = v177;
                    end;
                    if not (not v174 and not v175) then
                        v166[v167] = v168;
                        break;
                    end;
                end;
            end;
        end;
    end;
    return v166;
end;
v7.getVisibleAds = function()
    local v179 = {};
    local v180 = {
        totalAds = 0,
        checkedAds = 0,
        duration = 0
    };
    if game:GetEngineFeature("GetReportAdInfo") then
        local l_l_AdService_0_ReportAdInfo_0 = l_AdService_0:GetReportAdInfo();
        local l_CurrentCamera_0 = workspace.CurrentCamera;
        if l_CurrentCamera_0 then
            local l_LocalPlayer_0 = l_Players_0.LocalPlayer;
            if l_LocalPlayer_0 then
                local l_Character_0 = l_LocalPlayer_0.Character;
                local v185 = nil;
                local v186 = nil;
                local v187 = {};
                if not l_Character_0 then
                    v185 = l_CurrentCamera_0.CFrame.Position;
                    v186 = false;
                else
                    v185 = getLocalCharacterPosition(l_Character_0) or l_CurrentCamera_0.CFrame.Position;
                    if shouldIgnoreLocalCharacter(l_Character_0) then
                        v187[#v187 + 1] = l_Character_0;
                    end;
                end;
                local v188 = os.clock();
                v180.totalAds = #l_l_AdService_0_ReportAdInfo_0;
                local function _()
                    v180.duration = os.clock() - v188;
                    return v180;
                end;
                local function _()
                    return os.clock() - v188 > 0.2;
                end;
                local v191 = 1;
                for _, v193 in ipairs(l_l_AdService_0_ReportAdInfo_0) do
                    if not (os.clock() - v188 > 0.2) then
                        local l_basePart_0 = v193.basePart;
                        local l_assetCFrame_0 = v193.assetCFrame;
                        local l_adUnitName_0 = v193.adUnitName;
                        local l_assetId_0 = v193.assetId;
                        local l_encryptedAdTrackingData_0 = v193.encryptedAdTrackingData;
                        local l_encryptionMetadata_0 = v193.encryptionMetadata;
                        if not (not v3() or not v6) and (not (l_encryptedAdTrackingData_0 ~= "" and l_encryptionMetadata_0 ~= "") or l_assetId_0 == v6) then
                            v180.checkedAds = v180.checkedAds + 1;
                        elseif not v4() then
                            local v200 = Vector2.new(l_basePart_0.Size.X, l_basePart_0.Size.Y);
                            local l_Magnitude_0 = (l_assetCFrame_0.Position - v185).Magnitude;
                            if getDistanceAlongLookVector(l_assetCFrame_0, l_CurrentCamera_0, l_CurrentCamera_0.CFrame.LookVector) < 0 then
                                v180.checkedAds = v180.checkedAds + 1;
                            elseif getDistanceAlongLookVector(l_assetCFrame_0, l_CurrentCamera_0, l_assetCFrame_0.LookVector) > 0 then
                                v180.checkedAds = v180.checkedAds + 1;
                            else
                                local v202, v203 = getViewportCorners(getBBCorners(l_assetCFrame_0, v200), l_CurrentCamera_0);
                                if v203.X ~= 0 and v203.Y ~= 0 then
                                    local v204, v205 = getVisibleParts(l_CurrentCamera_0, l_basePart_0, l_assetCFrame_0, v200, v187);
                                    local v206 = {};
                                    for v207, v208 in ipairs(v205) do
                                        table.insert(v206, {
                                            convexHull = getCoveringPolygon(v208.vertices, l_assetCFrame_0, l_CurrentCamera_0),
                                            id = v207
                                        });
                                    end;
                                    if not (os.clock() - v188 > 0.2) then
                                        v179[v191] = {
                                            distance = l_Magnitude_0,
                                            boundingBox = {
                                                min = v202,
                                                max = v203
                                            },
                                            hitRate = #v205 / v204,
                                            visibleRegions = v206,
                                            adUnitName = l_adUnitName_0,
                                            assetId = l_assetId_0,
                                            encryptedAdTrackingData = l_encryptedAdTrackingData_0,
                                            encryptionMetadata = l_encryptionMetadata_0
                                        };
                                        v180.checkedAds = v180.checkedAds + 1;
                                        v191 = v191 + 1;
                                    else
                                        local l_v179_0 = v179;
                                        v180.duration = os.clock() - v188;
                                        return l_v179_0, v180;
                                    end;
                                end;
                            end;
                        else
                            local l_assetCorners_0 = v193.assetCorners;
                            if not l_assetCorners_0 or #l_assetCorners_0 < 4 then
                                v180.checkedAds = v180.checkedAds + 1;
                            else
                                local v211, v212 = getAdCenterAndScreenArea(l_assetCorners_0, l_CurrentCamera_0);
                                local l_Magnitude_1 = (v211 - v185).Magnitude;
                                if (v211 - l_CurrentCamera_0.CFrame.Position):Dot(l_CurrentCamera_0.CFrame.LookVector) < 0 then
                                    v180.checkedAds = v180.checkedAds + 1;
                                else
                                    local l_Unit_0 = (l_assetCorners_0[1] - l_assetCorners_0[2]):Cross(l_assetCorners_0[1] - l_assetCorners_0[3]).Unit;
                                    if l_Unit_0:Dot(v211 - l_basePart_0.Position) < 0 then
                                        l_Unit_0 = -l_Unit_0;
                                    end;
                                    if (l_CurrentCamera_0.CFrame.Position - v211):Dot(l_Unit_0) < 0 then
                                        v180.checkedAds = v180.checkedAds + 1;
                                    else
                                        local v215, v216 = getViewportCorners(l_assetCorners_0, l_CurrentCamera_0);
                                        if v215 == v16 then
                                            v180.checkedAds = v180.checkedAds + 1;
                                        elseif v212 < v5 then
                                            v180.checkedAds = v180.checkedAds + 1;
                                        else
                                            local v217 = checkVisibility(l_CurrentCamera_0, l_basePart_0, l_assetCorners_0, v187);
                                            if v217 < 0.3 then
                                                v180.checkedAds = v180.checkedAds + 1;
                                            elseif not (os.clock() - v188 > 0.2) then
                                                v179[v191] = {
                                                    distance = l_Magnitude_1,
                                                    boundingBox = {
                                                        min = v215,
                                                        max = v216
                                                    },
                                                    hitRate = v217,
                                                    visibleRegions = {
                                                        createSingleVisibleRegionFromWorldSpaceCorners(l_assetCorners_0, l_CurrentCamera_0)
                                                    },
                                                    adUnitName = l_adUnitName_0,
                                                    assetId = l_assetId_0,
                                                    encryptedAdTrackingData = l_encryptedAdTrackingData_0,
                                                    encryptionMetadata = l_encryptionMetadata_0
                                                };
                                                v180.checkedAds = v180.checkedAds + 1;
                                                v191 = v191 + 1;
                                            else
                                                local l_v179_1 = v179;
                                                v180.duration = os.clock() - v188;
                                                return l_v179_1, v180;
                                            end;
                                        end;
                                    end;
                                end;
                            end;
                        end;
                    else
                        local l_v179_2 = v179;
                        v180.duration = os.clock() - v188;
                        return l_v179_2, v180;
                    end;
                end;
                local l_v179_3 = v179;
                v180.duration = os.clock() - v188;
                return l_v179_3, v180;
            else
                return v179, v180;
            end;
        else
            return v179, v180;
        end;
    else
        return v179, v180;
    end;
end;
return v7;


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


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


game:DefineFastInt("AdIdentificationMinimumAreaPerMyriad", 100);
return function()
    return game:GetFastInt("AdIdentificationMinimumAreaPerMyriad");
end;