From 95763c6f9876305b41ca0d1701fcd53afa5435cd Mon Sep 17 00:00:00 2001 From: Metabase Docs bot Date: Tue, 5 Aug 2025 11:41:05 +0000 Subject: [PATCH] [auto] adding content to sdk-backward-compatibility-poc->master --- _docs/master/developers-guide/devenv.md | 2 +- .../sdk/api/BaseSdkQuestionProps.html | 43 - .../embedding/sdk/api/CollectionBrowser.html | 6 +- .../sdk/api/CollectionBrowserProps.html | 4 +- .../sdk/api/CreateDashboardModal.html | 4 +- .../embedding/sdk/api/CreateQuestion.html | 4 +- .../embedding/sdk/api/EditableDashboard.html | 4 +- _docs/master/embedding/sdk/api/IconName.html | 2 +- .../sdk/api/InteractiveDashboard.html | 4 +- .../sdk/api/InteractiveQuestion.html | 11 +- .../api/InteractiveQuestionComponents.html | 103 + .../embedding/sdk/api/MetabaseProvider.html | 3 +- .../sdk/api/MetabaseProviderProps.html | 9 +- .../embedding/sdk/api/MetabotQuestion.html | 13 + .../embedding/sdk/api/SdkErrorComponent.html | 2 +- .../sdk/api/SdkErrorComponentProps.html | 6 +- .../embedding/sdk/api/StaticDashboard.html | 4 +- .../embedding/sdk/api/StaticQuestion.html | 6 +- .../sdk/api/StaticQuestionComponents.html | 60 + .../embedding/sdk/api/assets/navigation.js | 2 +- .../master/embedding/sdk/api/assets/search.js | 2 +- _docs/master/embedding/sdk/api/index.html | 2 +- .../sdk/api/snippets/BaseSdkQuestionProps.md | 32 - .../sdk/api/snippets/CollectionBrowser.md | 4 +- .../api/snippets/CollectionBrowserProps.md | 2 +- .../sdk/api/snippets/CreateDashboardModal.md | 4 +- .../sdk/api/snippets/CreateQuestion.md | 10 +- .../sdk/api/snippets/EditableDashboard.md | 2 +- .../embedding/sdk/api/snippets/IconName.md | 6 +- .../sdk/api/snippets/InteractiveDashboard.md | 2 +- .../sdk/api/snippets/InteractiveQuestion.md | 10 +- .../snippets/InteractiveQuestionComponents.md | 863 +++ .../sdk/api/snippets/MetabaseProviderProps.md | 13 +- .../sdk/api/snippets/MetabotQuestion.md | 34 + .../sdk/api/snippets/SdkErrorComponent.md | 13 +- .../api/snippets/SdkErrorComponentProps.md | 10 +- .../sdk/api/snippets/StaticDashboard.md | 2 +- .../sdk/api/snippets/StaticQuestion.md | 13 +- .../api/snippets/StaticQuestionComponents.md | 549 ++ .../embedding/sdk/api/snippets/index.md | 98 +- .../sdk/api/snippets/useApplicationName.md | 25 + .../sdk/api/snippets/useAvailableFonts.md | 30 + .../sdk/api/snippets/useCreateDashboardApi.md | 19 +- .../sdk/api/snippets/useCurrentUser.md | 25 + .../sdk/api/snippets/useMetabaseAuthStatus.md | 25 + .../embedding/sdk/api/useApplicationName.html | 14 + .../embedding/sdk/api/useAvailableFonts.html | 14 + .../sdk/api/useCreateDashboardApi.html | 5 +- .../embedding/sdk/api/useCurrentUser.html | 14 + .../sdk/api/useMetabaseAuthStatus.html | 14 + _docs/master/embedding/sdk/dashboards.md | 2 + _docs/master/embedding/sdk/next-js.md | 34 +- .../customizing-loader-and-components.tsx | 14 +- .../authentication/get-auth-status.tsx | 4 +- .../snippets/dashboards/create-dashboard.tsx | 9 +- .../snippets/next-js/EmbeddingSdkProvider.tsx | 2 - .../next-js/authentication-auth-config.tsx | 2 +- .../sdk/snippets/next-js/declarations.d.ts | 2 +- .../manual-wrapping-embedded-sdk-provider.tsx | 31 - .../next-js/manual-wrapping-entrypoint.tsx | 52 - .../next-js/manual-wrapping-usage.tsx | 5 - _docs/master/embedding/sdk/upgrade.md | 83 + .../advanced-example-1-sandbox-modal.png | Bin 136708 -> 0 bytes .../query-builder/expressions-list.md | 22 +- .../docs/master/developers-guide/devenv.html | 2 +- .../sdk/api/BaseSdkQuestionProps.html | 59 - .../embedding/sdk/api/CollectionBrowser.html | 6 +- .../sdk/api/CollectionBrowserProps.html | 4 +- .../sdk/api/CreateDashboardModal.html | 4 +- .../embedding/sdk/api/CreateQuestion.html | 4 +- .../embedding/sdk/api/EditableDashboard.html | 4 +- .../master/embedding/sdk/api/IconName.html | 2 +- .../sdk/api/InteractiveDashboard.html | 4 +- .../sdk/api/InteractiveQuestion.html | 11 +- .../api/InteractiveQuestionComponents.html | 119 + .../embedding/sdk/api/MetabaseProvider.html | 3 +- .../sdk/api/MetabaseProviderProps.html | 9 +- .../embedding/sdk/api/MetabotQuestion.html | 29 + .../embedding/sdk/api/SdkErrorComponent.html | 2 +- .../sdk/api/SdkErrorComponentProps.html | 6 +- .../embedding/sdk/api/StaticDashboard.html | 4 +- .../embedding/sdk/api/StaticQuestion.html | 6 +- .../sdk/api/StaticQuestionComponents.html | 76 + .../embedding/sdk/api/assets/navigation.js | 2 +- .../master/embedding/sdk/api/assets/search.js | 2 +- .../docs/master/embedding/sdk/api/index.html | 2 +- .../embedding/sdk/api/useApplicationName.html | 30 + .../embedding/sdk/api/useAvailableFonts.html | 30 + .../sdk/api/useCreateDashboardApi.html | 5 +- .../embedding/sdk/api/useCurrentUser.html | 30 + .../sdk/api/useMetabaseAuthStatus.html | 30 + .../docs/master/embedding/sdk/appearance.html | 14 +- .../master/embedding/sdk/authentication.html | 4 +- .../master/embedding/sdk/collections.html | 2 +- _site/docs/master/embedding/sdk/config.html | 4 +- .../docs/master/embedding/sdk/dashboards.html | 11 +- _site/docs/master/embedding/sdk/next-js.html | 107 +- .../customizing-loader-and-components.tsx | 14 +- .../authentication/get-auth-status.tsx | 4 +- .../snippets/dashboards/create-dashboard.tsx | 9 +- .../snippets/next-js/EmbeddingSdkProvider.tsx | 2 - .../next-js/authentication-auth-config.tsx | 2 +- .../sdk/snippets/next-js/declarations.d.ts | 2 +- .../manual-wrapping-embedded-sdk-provider.tsx | 31 - .../next-js/manual-wrapping-entrypoint.tsx | 52 - .../next-js/manual-wrapping-usage.tsx | 5 - _site/docs/master/embedding/sdk/upgrade.html | 5313 +++++++++++++++++ .../advanced-example-1-sandbox-modal.png | Bin 136708 -> 0 bytes .../query-builder/expressions-list.html | 24 +- 109 files changed, 7857 insertions(+), 638 deletions(-) delete mode 100644 _docs/master/embedding/sdk/api/BaseSdkQuestionProps.html create mode 100644 _docs/master/embedding/sdk/api/InteractiveQuestionComponents.html create mode 100644 _docs/master/embedding/sdk/api/MetabotQuestion.html create mode 100644 _docs/master/embedding/sdk/api/StaticQuestionComponents.html delete mode 100644 _docs/master/embedding/sdk/api/snippets/BaseSdkQuestionProps.md create mode 100644 _docs/master/embedding/sdk/api/snippets/InteractiveQuestionComponents.md create mode 100644 _docs/master/embedding/sdk/api/snippets/MetabotQuestion.md create mode 100644 _docs/master/embedding/sdk/api/snippets/StaticQuestionComponents.md create mode 100644 _docs/master/embedding/sdk/api/snippets/useApplicationName.md create mode 100644 _docs/master/embedding/sdk/api/snippets/useAvailableFonts.md create mode 100644 _docs/master/embedding/sdk/api/snippets/useCurrentUser.md create mode 100644 _docs/master/embedding/sdk/api/snippets/useMetabaseAuthStatus.md create mode 100644 _docs/master/embedding/sdk/api/useApplicationName.html create mode 100644 _docs/master/embedding/sdk/api/useAvailableFonts.html create mode 100644 _docs/master/embedding/sdk/api/useCurrentUser.html create mode 100644 _docs/master/embedding/sdk/api/useMetabaseAuthStatus.html delete mode 100644 _docs/master/embedding/sdk/snippets/next-js/EmbeddingSdkProvider.tsx delete mode 100644 _docs/master/embedding/sdk/snippets/next-js/manual-wrapping-embedded-sdk-provider.tsx delete mode 100644 _docs/master/embedding/sdk/snippets/next-js/manual-wrapping-entrypoint.tsx delete mode 100644 _docs/master/embedding/sdk/snippets/next-js/manual-wrapping-usage.tsx create mode 100644 _docs/master/embedding/sdk/upgrade.md delete mode 100644 _docs/master/permissions/images/advanced-example-1-sandbox-modal.png delete mode 100644 _site/docs/master/embedding/sdk/api/BaseSdkQuestionProps.html create mode 100644 _site/docs/master/embedding/sdk/api/InteractiveQuestionComponents.html create mode 100644 _site/docs/master/embedding/sdk/api/MetabotQuestion.html create mode 100644 _site/docs/master/embedding/sdk/api/StaticQuestionComponents.html create mode 100644 _site/docs/master/embedding/sdk/api/useApplicationName.html create mode 100644 _site/docs/master/embedding/sdk/api/useAvailableFonts.html create mode 100644 _site/docs/master/embedding/sdk/api/useCurrentUser.html create mode 100644 _site/docs/master/embedding/sdk/api/useMetabaseAuthStatus.html delete mode 100644 _site/docs/master/embedding/sdk/snippets/next-js/EmbeddingSdkProvider.tsx delete mode 100644 _site/docs/master/embedding/sdk/snippets/next-js/manual-wrapping-embedded-sdk-provider.tsx delete mode 100644 _site/docs/master/embedding/sdk/snippets/next-js/manual-wrapping-entrypoint.tsx delete mode 100644 _site/docs/master/embedding/sdk/snippets/next-js/manual-wrapping-usage.tsx create mode 100644 _site/docs/master/embedding/sdk/upgrade.html delete mode 100644 _site/docs/master/permissions/images/advanced-example-1-sandbox-modal.png diff --git a/_docs/master/developers-guide/devenv.md b/_docs/master/developers-guide/devenv.md index 14d6002437..5c1689b7b8 100644 --- a/_docs/master/developers-guide/devenv.md +++ b/_docs/master/developers-guide/devenv.md @@ -88,7 +88,7 @@ There is also an option to reload changes on save without hot reloading if you p $ yarn build-watch ``` -Some systems may have trouble detecting changes to frontend files. You can enable filesystem polling by uncommenting the `watchOptions` clause in `webpack.config.js`. If you do this it may be worth making git ignore changes to webpack config, using `git update-index --assume-unchanged webpack.config.js` +Some systems may have trouble detecting changes to frontend files. You can enable filesystem polling by uncommenting the `watchOptions` clause in `rspack.config.js`. If you do this it may be worth making git ignore changes to webpack config, using `git update-index --assume-unchanged rspack.config.js` We exclude ESLint loader in dev mode for seven times quicker initial builds by default. You can enable it by exporting an environment variable: diff --git a/_docs/master/embedding/sdk/api/BaseSdkQuestionProps.html b/_docs/master/embedding/sdk/api/BaseSdkQuestionProps.html deleted file mode 100644 index eb917617bd..0000000000 --- a/_docs/master/embedding/sdk/api/BaseSdkQuestionProps.html +++ /dev/null @@ -1,43 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Embedding -title: BaseSdkQuestionProps -source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/BaseSdkQuestionProps.html' -layout: docs-api ---- - -BaseSdkQuestionProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Interface BaseSdkQuestionProps

interface BaseSdkQuestionProps {
    children?: ReactNode;
    entityTypes?: EmbeddingEntityType[];
    initialSqlParameters?: SqlParameterValues;
    isSaveEnabled?: boolean;
    onBeforeSave?: (
        question: undefined | MetabaseQuestion,
        context: { isNewQuestion: boolean },
    ) => Promise<void>;
    onRun?: (question: undefined | MetabaseQuestion) => void;
    onSave?: (
        question: MetabaseQuestion,
        context: { dashboardTabId?: number; isNewQuestion: boolean },
    ) => void;
    plugins?: MetabasePluginsConfig;
    questionId: null | SdkQuestionId;
    targetCollection?: SdkCollectionId;
    withDownloads?: boolean;
}
Index

Properties

children?: ReactNode

The children of the MetabaseProvider component.s

-
entityTypes?: EmbeddingEntityType[]

An array that specifies which entity types are available in the data picker

-
initialSqlParameters?: SqlParameterValues

Initial values for the SQL parameters.

-
isSaveEnabled?: boolean

Whether to show the save button.

-
onBeforeSave?: (
    question: undefined | MetabaseQuestion,
    context: { isNewQuestion: boolean },
) => Promise<void>

A callback function that triggers before saving. Only relevant when isSaveEnabled = true

-
onRun?: (question: undefined | MetabaseQuestion) => void

A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

-
onSave?: (
    question: MetabaseQuestion,
    context: { dashboardTabId?: number; isNewQuestion: boolean },
) => void

A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

-
questionId: null | SdkQuestionId

The ID of the question. -
-This is either: -

-
    -
  • The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1 -
  • -
  • The entity_id key of the question object. You can find a question's Entity ID in the info panel when viewing a question -
  • -
  • new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
  • -
-
targetCollection?: SdkCollectionId

The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

-
withDownloads?: boolean

Enables the ability to download results in the interactive question.

-
diff --git a/_docs/master/embedding/sdk/api/CollectionBrowser.html b/_docs/master/embedding/sdk/api/CollectionBrowser.html index 14aa299dba..f2a767ff5c 100644 --- a/_docs/master/embedding/sdk/api/CollectionBrowser.html +++ b/_docs/master/embedding/sdk/api/CollectionBrowser.html @@ -9,7 +9,7 @@ layout: docs-api --- -CollectionBrowser | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Function CollectionBrowser

  • A component that allows you to browse collections and their items.

    +CollectionBrowser | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Function CollectionBrowser

    • A component that allows you to browse collections and their items.

      Parameters

      • props: CollectionBrowserProps
        • OptionalclassName?: string

          A custom class name to be added to the root element.

        • OptionalcollectionId?: SdkCollectionId

          The numerical ID of the collection, "personal" for the user's personal collection, or "root" for the root collection. You can find this ID in the URL when accessing a collection in your Metabase instance. For example, the collection ID in http://localhost:3000/collection/1-my-collection would be 1. Defaults to "personal"

        • OptionalEmptyContentComponent?: null | ComponentType

          A component to display when there are no items in the collection.

          @@ -17,5 +17,5 @@
        • OptionalpageSize?: number

          The number of items to display per page. The default is 25.

        • Optionalstyle?: CSSProperties

          A custom style object to be added to the root element.

        • OptionalvisibleColumns?: CollectionBrowserListColumns[]

          The columns to display in the collection items table. If not provided, all columns will be shown.

          -
        • OptionalvisibleEntityTypes?: ("model" | "question" | "collection" | "dashboard")[]

          The types of entities that should be visible. If not provided, all entities will be shown.

          -

      Returns ReactNode

    +
  • OptionalvisibleEntityTypes?: ("collection" | "dashboard" | "question" | "model")[]

    The types of entities that should be visible. If not provided, all entities will be shown.

    +

Returns Element

diff --git a/_docs/master/embedding/sdk/api/CollectionBrowserProps.html b/_docs/master/embedding/sdk/api/CollectionBrowserProps.html index 9d11564ebf..a0250a669e 100644 --- a/_docs/master/embedding/sdk/api/CollectionBrowserProps.html +++ b/_docs/master/embedding/sdk/api/CollectionBrowserProps.html @@ -9,7 +9,7 @@ layout: docs-api --- -CollectionBrowserProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Interface CollectionBrowserProps

interface CollectionBrowserProps {
    className?: string;
    collectionId?: SdkCollectionId;
    EmptyContentComponent?: null | ComponentType;
    onClick?: (item: MetabaseCollectionItem) => void;
    pageSize?: number;
    style?: CSSProperties;
    visibleColumns?: CollectionBrowserListColumns[];
    visibleEntityTypes?: ("model" | "question" | "collection" | "dashboard")[];
}
Index

Properties

className? +CollectionBrowserProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Interface CollectionBrowserProps

interface CollectionBrowserProps {
    className?: string;
    collectionId?: SdkCollectionId;
    EmptyContentComponent?: null | ComponentType;
    onClick?: (item: MetabaseCollectionItem) => void;
    pageSize?: number;
    style?: CSSProperties;
    visibleColumns?: CollectionBrowserListColumns[];
    visibleEntityTypes?: ("collection" | "dashboard" | "question" | "model")[];
}
Index

Properties

pageSize?: number

The number of items to display per page. The default is 25.

A custom style object to be added to the root element.

visibleColumns?: CollectionBrowserListColumns[]

The columns to display in the collection items table. If not provided, all columns will be shown.

-
visibleEntityTypes?: ("model" | "question" | "collection" | "dashboard")[]

The types of entities that should be visible. If not provided, all entities will be shown.

+
visibleEntityTypes?: ("collection" | "dashboard" | "question" | "model")[]

The types of entities that should be visible. If not provided, all entities will be shown.

diff --git a/_docs/master/embedding/sdk/api/CreateDashboardModal.html b/_docs/master/embedding/sdk/api/CreateDashboardModal.html index be458f1df9..ba02d2c8f1 100644 --- a/_docs/master/embedding/sdk/api/CreateDashboardModal.html +++ b/_docs/master/embedding/sdk/api/CreateDashboardModal.html @@ -9,9 +9,9 @@ layout: docs-api --- -CreateDashboardModal | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Function CreateDashboardModal

Returns Element

diff --git a/_docs/master/embedding/sdk/api/CreateQuestion.html b/_docs/master/embedding/sdk/api/CreateQuestion.html index e79feca847..559e5c69cc 100644 --- a/_docs/master/embedding/sdk/api/CreateQuestion.html +++ b/_docs/master/embedding/sdk/api/CreateQuestion.html @@ -9,7 +9,7 @@ layout: docs-api --- -CreateQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Function CreateQuestion

  • Parameters

    • Optionalprops: CreateQuestionProps
      • OptionalclassName?: string

        A custom class name to be added to the root element.

        +CreateQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Function CreateQuestion

        • Parameters

          • props: undefined | CreateQuestionProps
            • undefined
            • CreateQuestionProps
              • OptionalclassName?: string

                A custom class name to be added to the root element.

              • OptionalcomponentPlugins?: MetabasePluginsConfig

                Additional mapper function to override or add drill-down menu

              • OptionalentityTypes?: EmbeddingEntityType[]

                An array that specifies which entity types are available in the data picker

              • Optionalheight?: Height<string | number>

                A number or string specifying a CSS size value that specifies the height of the component

                @@ -26,5 +26,5 @@
              • OptionalwithChartTypeSelector?: boolean

                Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

              • OptionalwithDownloads?: boolean

                Enables the ability to download results in the interactive question.

              • OptionalwithResetButton?: boolean

                Determines whether a reset button is displayed. Only relevant when using the default layout.

                -

          Returns Element

          Use <InteractiveQuestion questionId="new" /> instead.

          +

    Returns Element

    Use <InteractiveQuestion questionId="new" /> instead.

diff --git a/_docs/master/embedding/sdk/api/EditableDashboard.html b/_docs/master/embedding/sdk/api/EditableDashboard.html index bd76c55d96..2c3cd63e66 100644 --- a/_docs/master/embedding/sdk/api/EditableDashboard.html +++ b/_docs/master/embedding/sdk/api/EditableDashboard.html @@ -9,7 +9,7 @@ layout: docs-api --- -EditableDashboard | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Function EditableDashboard

  • A dashboard component with the features available in the InteractiveDashboard component, as well as the ability to add and update questions, layout, and content within your dashboard.

    +EditableDashboard | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Function EditableDashboard

    • A dashboard component with the features available in the InteractiveDashboard component, as well as the ability to add and update questions, layout, and content within your dashboard.

      Parameters

      • props: EditableDashboardProps
        • OptionalclassName?: string

          A custom class name to be added to the root element.

        • dashboardId: SdkDashboardId

          The ID of the dashboard.
          @@ -46,4 +46,4 @@

        • OptionalwithCardTitle?: boolean

          Whether the dashboard cards should display a title.

        • OptionalwithDownloads?: boolean

          Whether to hide the download button.

        • OptionalwithTitle?: boolean

          Whether the dashboard should display a title.

          -

      Returns Element

    +

Returns Element

diff --git a/_docs/master/embedding/sdk/api/IconName.html b/_docs/master/embedding/sdk/api/IconName.html index dc5d728476..f1a02469ce 100644 --- a/_docs/master/embedding/sdk/api/IconName.html +++ b/_docs/master/embedding/sdk/api/IconName.html @@ -9,4 +9,4 @@ layout: docs-api --- -IconName | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Type Alias IconName

IconName:
    | "string"
    | "number"
    | "function"
    | "model"
    | "table"
    | "question"
    | "collection"
    | "dashboard"
    | "revert"
    | "add"
    | "add_column"
    | "add_data"
    | "add_folder"
    | "add_row"
    | "add_to_dash"
    | "ai"
    | "alert"
    | "alert_filled"
    | "alert_confirm"
    | "archive"
    | "area"
    | "attachment"
    | "arrow_up"
    | "arrow_down"
    | "arrow_left"
    | "arrow_left_to_line"
    | "arrow_right"
    | "arrow_split"
    | "audit"
    | "badge"
    | "bar"
    | "bell"
    | "birthday"
    | "bookmark"
    | "bookmark_filled"
    | "bolt"
    | "bolt_filled"
    | "breakout"
    | "bubble"
    | "burger"
    | "calendar"
    | "check"
    | "check_filled"
    | "chevrondown"
    | "chevronleft"
    | "chevronright"
    | "chevronup"
    | "click"
    | "clipboard"
    | "clock"
    | "clone"
    | "close"
    | "cloud"
    | "cloud_filled"
    | "compare"
    | "combine"
    | "connections"
    | "contract"
    | "copy"
    | "curved"
    | "database"
    | "dash"
    | "curve"
    | "document"
    | "download"
    | "dyno"
    | "edit_document"
    | "ellipsis"
    | "embed"
    | "empty"
    | "enter_or_return"
    | "expand"
    | "expand_arrow"
    | "extract"
    | "eye"
    | "eye_crossed_out"
    | "eye_outline"
    | "field"
    | "fields"
    | "filter"
    | "filter_plus"
    | "bug"
    | "format_code"
    | "formula"
    | "funnel"
    | "funnel_outline"
    | "folder"
    | "folder_filled"
    | "gauge"
    | "gear"
    | "gear_settings_filled"
    | "gem"
    | "globe"
    | "grabber"
    | "grid"
    | "group"
    | "google"
    | "google_drive"
    | "google_sheet"
    | "history"
    | "home"
    | "horizontal_bar"
    | "hourglass"
    | "info"
    | "info_filled"
    | "info_outline"
    | "insight"
    | "int"
    | "io"
    | "join_full_outer"
    | "join_inner"
    | "join_left_outer"
    | "join_right_outer"
    | "index"
    | "key"
    | "label"
    | "ldap"
    | "learn"
    | "lightbulb"
    | "link"
    | "line"
    | "lines"
    | "lineandbar"
    | "line_style_dashed"
    | "line_style_dotted"
    | "line_style_solid"
    | "list"
    | "location"
    | "lock"
    | "lock_filled"
    | "mail"
    | "mail_filled"
    | "metabot"
    | "metabot_sad"
    | "metric"
    | "model_with_badge"
    | "moon"
    | "move"
    | "move_card"
    | "new_folder"
    | "notebook"
    | "palette"
    | "pause"
    | "pencil"
    | "pencil_lines"
    | "permissions_limited"
    | "person"
    | "pie"
    | "pin"
    | "pinmap"
    | "pivot_table"
    | "play"
    | "play_outlined"
    | "popover"
    | "popular"
    | "progress"
    | "pulse"
    | "recents"
    | "sankey"
    | "share"
    | "split"
    | "sql"
    | "subscription"
    | "straight"
    | "stepped"
    | "sort"
    | "sort_arrows"
    | "sum"
    | "sync"
    | "redo"
    | "return"
    | "reference"
    | "refresh"
    | "refresh_downstream"
    | "rocket"
    | "ruler"
    | "schema"
    | "search"
    | "section"
    | "segment"
    | "shield"
    | "sidebar_closed"
    | "sidebar_open"
    | "slack"
    | "slack_colorized"
    | "smartscalar"
    | "snail"
    | "snippet"
    | "sparkles"
    | "star_filled"
    | "star"
    | "stop"
    | "store"
    | "sun"
    | "t-shirt"
    | "tab"
    | "table2"
    | "time_history"
    | "trash"
    | "trash_filled"
    | "triangle_left"
    | "triangle_right"
    | "unarchive"
    | "undo"
    | "unknown"
    | "unpin"
    | "unsubscribe"
    | "upload"
    | "variable"
    | "verified"
    | "official_collection"
    | "verified_filled"
    | "view_archive"
    | "warning"
    | "warning_round_filled"
    | "warning_triangle_filled"
    | "waterfall"
    | "webhook"
    | "10k"
    | "1m"
    | "zoom_in"
    | "zoom_out"
    | "scalar"
    | "cake"
    | "external"
    | "table_spaced"
    | "beaker"
    | "eye_filled"
+IconName | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Type Alias IconName

IconName:
    | "string"
    | "number"
    | "function"
    | "collection"
    | "dashboard"
    | "question"
    | "model"
    | "table"
    | "revert"
    | "add"
    | "add_column"
    | "add_data"
    | "add_folder"
    | "add_row"
    | "add_to_dash"
    | "ai"
    | "alert"
    | "alert_filled"
    | "alert_confirm"
    | "archive"
    | "area"
    | "attachment"
    | "arrow_up"
    | "arrow_down"
    | "arrow_left"
    | "arrow_left_to_line"
    | "arrow_right"
    | "arrow_split"
    | "audit"
    | "badge"
    | "bar"
    | "bell"
    | "birthday"
    | "bookmark"
    | "bookmark_filled"
    | "bolt"
    | "bolt_filled"
    | "breakout"
    | "bubble"
    | "burger"
    | "calendar"
    | "check"
    | "check_filled"
    | "chevrondown"
    | "chevronleft"
    | "chevronright"
    | "chevronup"
    | "click"
    | "clipboard"
    | "clock"
    | "clone"
    | "close"
    | "cloud"
    | "cloud_filled"
    | "compare"
    | "combine"
    | "connections"
    | "contract"
    | "copy"
    | "curved"
    | "database"
    | "dash"
    | "curve"
    | "document"
    | "download"
    | "dyno"
    | "edit_document"
    | "ellipsis"
    | "embed"
    | "empty"
    | "enter_or_return"
    | "expand"
    | "expand_arrow"
    | "extract"
    | "eye"
    | "eye_crossed_out"
    | "eye_outline"
    | "field"
    | "fields"
    | "filter"
    | "filter_plus"
    | "bug"
    | "format_code"
    | "formula"
    | "funnel"
    | "funnel_outline"
    | "folder"
    | "folder_filled"
    | "gauge"
    | "gear"
    | "gear_settings_filled"
    | "gem"
    | "globe"
    | "grabber"
    | "grid"
    | "group"
    | "google"
    | "google_drive"
    | "google_sheet"
    | "history"
    | "home"
    | "horizontal_bar"
    | "hourglass"
    | "info"
    | "info_filled"
    | "info_outline"
    | "insight"
    | "int"
    | "io"
    | "join_full_outer"
    | "join_inner"
    | "join_left_outer"
    | "join_right_outer"
    | "index"
    | "key"
    | "label"
    | "ldap"
    | "learn"
    | "lightbulb"
    | "link"
    | "line"
    | "lines"
    | "lineandbar"
    | "line_style_dashed"
    | "line_style_dotted"
    | "line_style_solid"
    | "list"
    | "location"
    | "lock"
    | "lock_filled"
    | "mail"
    | "mail_filled"
    | "metabot"
    | "metabot_sad"
    | "metric"
    | "model_with_badge"
    | "moon"
    | "move"
    | "move_card"
    | "new_folder"
    | "notebook"
    | "palette"
    | "pause"
    | "pencil"
    | "pencil_lines"
    | "permissions_limited"
    | "person"
    | "pie"
    | "pin"
    | "pinmap"
    | "pivot_table"
    | "play"
    | "play_outlined"
    | "popover"
    | "popular"
    | "progress"
    | "pulse"
    | "recents"
    | "sankey"
    | "share"
    | "split"
    | "sql"
    | "subscription"
    | "straight"
    | "stepped"
    | "sort"
    | "sort_arrows"
    | "sum"
    | "sync"
    | "redo"
    | "return"
    | "reference"
    | "refresh"
    | "refresh_downstream"
    | "rocket"
    | "ruler"
    | "schema"
    | "search"
    | "section"
    | "segment"
    | "shield"
    | "sidebar_closed"
    | "sidebar_open"
    | "slack"
    | "slack_colorized"
    | "smartscalar"
    | "snail"
    | "snippet"
    | "sparkles"
    | "star_filled"
    | "star"
    | "stop"
    | "store"
    | "sun"
    | "t-shirt"
    | "tab"
    | "table2"
    | "time_history"
    | "trash"
    | "trash_filled"
    | "triangle_left"
    | "triangle_right"
    | "unarchive"
    | "undo"
    | "unknown"
    | "unpin"
    | "unsubscribe"
    | "upload"
    | "variable"
    | "verified"
    | "official_collection"
    | "verified_filled"
    | "view_archive"
    | "warning"
    | "warning_round_filled"
    | "warning_triangle_filled"
    | "waterfall"
    | "webhook"
    | "10k"
    | "1m"
    | "zoom_in"
    | "zoom_out"
    | "scalar"
    | "cake"
    | "external"
    | "table_spaced"
    | "beaker"
    | "eye_filled"
diff --git a/_docs/master/embedding/sdk/api/InteractiveDashboard.html b/_docs/master/embedding/sdk/api/InteractiveDashboard.html index fe6812fef0..0b74a9cbab 100644 --- a/_docs/master/embedding/sdk/api/InteractiveDashboard.html +++ b/_docs/master/embedding/sdk/api/InteractiveDashboard.html @@ -9,7 +9,7 @@ layout: docs-api --- -InteractiveDashboard | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

Function InteractiveDashboard

  • A dashboard component with drill downs, click behaviors, and the ability to view and click into questions.

    +InteractiveDashboard | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

    Function InteractiveDashboard

    • A dashboard component with drill downs, click behaviors, and the ability to view and click into questions.

      Parameters

      • props: {
            drillThroughQuestionHeight?: Height<string | number>;
            drillThroughQuestionProps?: DrillThroughQuestionProps;
            plugins?: MetabasePluginsConfig;
            renderDrillThroughQuestion?: () => ReactNode;
        } & {
            dashboardId: SdkDashboardId;
            hiddenParameters?: string[];
            initialParameters?: ParameterValues;
            withCardTitle?: boolean;
            withDownloads?: boolean;
            withTitle?: boolean;
        } & { className?: string; style?: CSSProperties } & {
            onLoad?: (dashboard: null | MetabaseDashboard) => void;
            onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
        } & { dataPickerProps?: Pick<SdkQuestionProps, "entityTypes"> } & {}
        • OptionaldrillThroughQuestionHeight?: Height<string | number>

          Height of a question component when drilled from the dashboard to a question level.

        • OptionaldrillThroughQuestionProps?: DrillThroughQuestionProps

          Props of a question component when drilled from the dashboard to a question level.

        • Optionalplugins?: MetabasePluginsConfig

          Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details.

          @@ -46,4 +46,4 @@
        • OptionalonLoad?: (dashboard: null | MetabaseDashboard) => void

          Callback that is called when the dashboard is loaded.

        • OptionalonLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void

          Callback that is called when the dashboard is loaded without cards.

        • OptionaldataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

          Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

          -

        Returns Element

      +

      Returns Element

      diff --git a/_docs/master/embedding/sdk/api/InteractiveQuestion.html b/_docs/master/embedding/sdk/api/InteractiveQuestion.html index ab2a372d39..770927427f 100644 --- a/_docs/master/embedding/sdk/api/InteractiveQuestion.html +++ b/_docs/master/embedding/sdk/api/InteractiveQuestion.html @@ -9,8 +9,8 @@ layout: docs-api --- -InteractiveQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Function InteractiveQuestion

      • A question component with drill-downs enabled.

        -

        Parameters

        • props: InteractiveQuestionProps
          • OptionalclassName?: string

            A custom class name to be added to the root element.

            +InteractiveQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

            Function InteractiveQuestion

            • A component that renders an interactive question.

              +

              Parameters

              • props: InteractiveQuestionProps
                • OptionalclassName?: string

                  A custom class name to be added to the root element.

                • OptionalcomponentPlugins?: MetabasePluginsConfig

                  Additional mapper function to override or add drill-down menu

                • OptionalentityTypes?: EmbeddingEntityType[]

                  An array that specifies which entity types are available in the data picker

                • Optionalheight?: Height<string | number>

                  A number or string specifying a CSS size value that specifies the height of the component

                  @@ -27,7 +27,7 @@
                • OptionalwithChartTypeSelector?: boolean

                  Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

                • OptionalwithDownloads?: boolean

                  Enables the ability to download results in the interactive question.

                • OptionalwithResetButton?: boolean

                  Determines whether a reset button is displayed. Only relevant when using the default layout.

                  -

              Returns Element

            Index

            InteractiveQuestion

        Returns Element

      Index

      InteractiveQuestion

      BackButton: (props: InteractiveQuestionBackButtonProps) => null | Element

      Type declaration

      Breakout: () => null | Element

      Type declaration

        • (): null | Element
        • Function

          A set of badges for managing data groupings (breakouts). @@ -117,4 +117,5 @@

      Parameters

      • props: { className?: string; style?: CSSProperties }
        • OptionalclassName?: string

          A custom class name to be added to the root element.

        • Optionalstyle?: CSSProperties

          A custom style object to be added to the root element.

          -

      Returns undefined | Element

      other

      VisualizationButton: () => null | Element
      +

      Returns undefined | Element

      VisualizationButton: () => null | Element

      Type declaration

        • (): null | Element
        • Function

          A button that triggers the visualization of the current question.

          +

          Returns null | Element

      diff --git a/_docs/master/embedding/sdk/api/InteractiveQuestionComponents.html b/_docs/master/embedding/sdk/api/InteractiveQuestionComponents.html new file mode 100644 index 0000000000..7dda05a538 --- /dev/null +++ b/_docs/master/embedding/sdk/api/InteractiveQuestionComponents.html @@ -0,0 +1,103 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: InteractiveQuestionComponents +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/InteractiveQuestionComponents.html' +layout: docs-api +--- + +InteractiveQuestionComponents | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

      Interface InteractiveQuestionComponents

      interface InteractiveQuestionComponents {
          BackButton: (
              props: InteractiveQuestionBackButtonProps,
          ) => null | Element;
          Breakout: () => null | Element;
          BreakoutDropdown: (
              props: InteractiveQuestionBreakoutDropdownProps,
          ) => null | Element;
          ChartTypeDropdown: (props: MenuProps) => Element;
          ChartTypeSelector: (props: StackProps) => Element;
          DownloadWidget: (props: StackProps) => null | Element;
          DownloadWidgetDropdown: (props: PopoverProps) => Element;
          Editor: (props: InteractiveQuestionEditorProps) => undefined | Element;
          EditorButton: (
              props: InteractiveQuestionEditorButtonProps,
          ) => undefined | false | Element;
          Filter: (props: InteractiveQuestionFilterProps) => Element;
          FilterDropdown: (
              props: InteractiveQuestionFilterDropdownProps,
          ) => null | Element;
          Notebook: (props: InteractiveQuestionEditorProps) => undefined | Element;
          NotebookButton: (
              props: InteractiveQuestionEditorButtonProps,
          ) => undefined | false | Element;
          QuestionSettings: (props: StackProps) => null | Element;
          QuestionSettingsDropdown: (
              props?: InteractiveQuestionQuestionSettingsDropdownProps,
          ) => Element;
          QuestionVisualization: (
              props: { className?: string; style?: CSSProperties } & {
                  height?: Height<string | number>;
                  width?: Width<string | number>;
              } & {},
          ) => Element;
          ResetButton: (props?: ButtonProps) => null | Element;
          SaveButton: (props?: InteractiveQuestionSaveButtonProps) => Element;
          SaveQuestionForm: (
              props: InteractiveQuestionSaveQuestionFormProps,
          ) => null | Element;
          Summarize: () => Element;
          SummarizeDropdown: (
              props: InteractiveQuestionSummarizeDropdownProps,
          ) => Element;
          Title: (
              props: { className?: string; style?: CSSProperties },
          ) => undefined | Element;
          VisualizationButton: () => null | Element;
      }
      Index

      InteractiveQuestion

      BackButton: (props: InteractiveQuestionBackButtonProps) => null | Element

      Type declaration

      Breakout: () => null | Element

      Type declaration

        • (): null | Element
        • Function

          A set of badges for managing data groupings (breakouts). +Uses question context for breakout functionality.

          +

          Returns null | Element

      BreakoutDropdown: (
          props: InteractiveQuestionBreakoutDropdownProps,
      ) => null | Element

      Type declaration

      ChartTypeDropdown: (props: MenuProps) => Element

      Type declaration

        • (props: MenuProps): Element
        • Function

          Dropdown for selecting the visualization type (bar chart, line chart, table, etc.). +Automatically updates to show recommended visualization types for the current data.

          +

          Parameters

          Returns Element

      ChartTypeSelector: (props: StackProps) => Element

      Type declaration

      DownloadWidget: (props: StackProps) => null | Element

      Type declaration

        • (props: StackProps): null | Element
        • Function

          Provides a UI widget for downloading data in different formats (CSV, XLSX, JSON, and PNG depending on the visualization).

          +

          Parameters

          Returns null | Element

      DownloadWidgetDropdown: (props: PopoverProps) => Element

      Type declaration

      Editor: (props: InteractiveQuestionEditorProps) => undefined | Element

      Type declaration

        • (props: InteractiveQuestionEditorProps): undefined | Element
        • Function

          Advanced query editor that provides full access to question configuration. +Includes filtering, aggregation, custom expressions, and joins.

          +

          Parameters

          • props: InteractiveQuestionEditorProps
            • OptionalhasVisualizeButton?: boolean
            • OptionalonApply?: () => void

              Callback function executed when changes are applied

              +

          Returns undefined | Element

      EditorButton: (
          props: InteractiveQuestionEditorButtonProps,
      ) => undefined | false | Element

      Type declaration

      Type declaration

      FilterDropdown: (
          props: InteractiveQuestionFilterDropdownProps,
      ) => null | Element

      Type declaration

      Notebook: (props: InteractiveQuestionEditorProps) => undefined | Element

      Type declaration

        • (props: InteractiveQuestionEditorProps): undefined | Element
        • Function

          Advanced query editor that provides full access to question configuration. +Includes filtering, aggregation, custom expressions, and joins.

          +

          Parameters

          • props: InteractiveQuestionEditorProps
            • OptionalhasVisualizeButton?: boolean
            • OptionalonApply?: () => void

              Callback function executed when changes are applied

              +

          Returns undefined | Element

      Use InteractiveQuestion.Editor instead

      +
      NotebookButton: (
          props: InteractiveQuestionEditorButtonProps,
      ) => undefined | false | Element

      Type declaration

      Use InteractiveQuestion.EditorButton instead

      +
      QuestionSettings: (props: StackProps) => null | Element

      Type declaration

        • (props: StackProps): null | Element
        • Function

          Settings panel for configuring visualization options like axes, colors, and formatting. +Uses question context for settings.

          +

          Parameters

          Returns null | Element

      QuestionSettingsDropdown: (
          props?: InteractiveQuestionQuestionSettingsDropdownProps,
      ) => Element

      Type declaration

      QuestionVisualization: (
          props: { className?: string; style?: CSSProperties } & {
              height?: Height<string | number>;
              width?: Width<string | number>;
          } & {},
      ) => Element

      Type declaration

        • (
              props: { className?: string; style?: CSSProperties } & {
                  height?: Height<string | number>;
                  width?: Width<string | number>;
              } & {},
          ): Element
        • Function

          The main visualization component that renders the question results as a chart, table, or other visualization type.

          +

          Parameters

          • props: { className?: string; style?: CSSProperties } & {
                height?: Height<string | number>;
                width?: Width<string | number>;
            } & {}
            • OptionalclassName?: string

              A custom class name to be added to the root element.

              +
            • Optionalstyle?: CSSProperties

              A custom style object to be added to the root element.

              +
            • Optionalheight?: Height<string | number>

              A number or string specifying a CSS size value that specifies the height of the component

              +
            • Optionalwidth?: Width<string | number>

              A number or string specifying a CSS size value that specifies the width of the component

              +

            Returns Element

        ResetButton: (props?: ButtonProps) => null | Element

        Type declaration

          • (props?: ButtonProps): null | Element
          • Function

            Button to reset question modifications. Only appears when there are unsaved changes to the question.

            +

            Parameters

            Returns null | Element

        Type declaration

        SaveQuestionForm: (
            props: InteractiveQuestionSaveQuestionFormProps,
        ) => null | Element

        Type declaration

        Summarize: () => Element

        Type declaration

          • (): Element
          • Function

            Interface for adding and managing data summaries (like counts, sums, averages). Displays as a set of badges. +Uses question context for summarization functionality.

            +

            Returns Element

        SummarizeDropdown: (props: InteractiveQuestionSummarizeDropdownProps) => Element

        Type declaration

        Title: (
            props: { className?: string; style?: CSSProperties },
        ) => undefined | Element

        Type declaration

          • (props: { className?: string; style?: CSSProperties }): undefined | Element
          • Function

            Displays a title based on the question's state. Shows:

            +
              +
            • The question's display name if it's saved
            • +
            • An auto-generated description for ad-hoc questions (non-native queries)
            • +
            +

            Parameters

            • props: { className?: string; style?: CSSProperties }
              • OptionalclassName?: string

                A custom class name to be added to the root element.

                +
              • Optionalstyle?: CSSProperties

                A custom style object to be added to the root element.

                +

            Returns undefined | Element

        VisualizationButton: () => null | Element

        Type declaration

          • (): null | Element
          • Function

            A button that triggers the visualization of the current question.

            +

            Returns null | Element

        diff --git a/_docs/master/embedding/sdk/api/MetabaseProvider.html b/_docs/master/embedding/sdk/api/MetabaseProvider.html index 6635bf8699..481cfedd57 100644 --- a/_docs/master/embedding/sdk/api/MetabaseProvider.html +++ b/_docs/master/embedding/sdk/api/MetabaseProvider.html @@ -14,7 +14,8 @@
      • authConfig: MetabaseAuthConfig

        Defines how to authenticate with Metabase.

      • children: ReactNode

        The children of the MetabaseProvider component.

      • OptionalclassName?: string

        A custom class name to be added to the root element.

        -
      • OptionalerrorComponent?: SdkErrorComponent

        A custom error component to display when the SDK encounters an error.

        +

        This prop is not used anymore.

        +
      • OptionalerrorComponent?: SdkErrorComponent

        A custom error component to display when the SDK encounters an error.

      • OptionaleventHandlers?: SdkEventHandlersConfig
      • OptionalloaderComponent?: () => Element

        A custom loader component to display while the SDK is loading.

      • Optionallocale?: string

        Defines the display language. Accepts an ISO language code such as en or de. diff --git a/_docs/master/embedding/sdk/api/MetabaseProviderProps.html b/_docs/master/embedding/sdk/api/MetabaseProviderProps.html index c06935f30b..1624bbab66 100644 --- a/_docs/master/embedding/sdk/api/MetabaseProviderProps.html +++ b/_docs/master/embedding/sdk/api/MetabaseProviderProps.html @@ -9,10 +9,10 @@ layout: docs-api --- -MetabaseProviderProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Interface MetabaseProviderProps

        interface MetabaseProviderProps {
            allowConsoleLog?: boolean;
            authConfig: MetabaseAuthConfig;
            children: ReactNode;
            className?: string;
            errorComponent?: SdkErrorComponent;
            eventHandlers?: SdkEventHandlersConfig;
            loaderComponent?: () => Element;
            locale?: string;
            pluginsConfig?: MetabasePluginsConfig;
            theme?: MetabaseTheme;
        }

        Hierarchy

        Index

        Properties

        allowConsoleLog? +MetabaseProviderProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Interface MetabaseProviderProps

        interface MetabaseProviderProps {
            allowConsoleLog?: boolean;
            authConfig: MetabaseAuthConfig;
            children: ReactNode;
            className?: string;
            errorComponent?: SdkErrorComponent;
            eventHandlers?: SdkEventHandlersConfig;
            loaderComponent?: () => Element;
            locale?: string;
            pluginsConfig?: MetabasePluginsConfig;
            theme?: MetabaseTheme;
        }
        Index

        Properties

        allowConsoleLog?: boolean

        Whether to allow logging to the DevTools console. Defaults to true.

        authConfig: MetabaseAuthConfig

        Defines how to authenticate with Metabase.

        children: ReactNode

        The children of the MetabaseProvider component.

        -
        className?: string

        A custom class name to be added to the root element.

        -
        errorComponent?: SdkErrorComponent

        A custom error component to display when the SDK encounters an error.

        +
        className?: string

        A custom class name to be added to the root element.

        +

        This prop is not used anymore.

        +
        errorComponent?: SdkErrorComponent

        A custom error component to display when the SDK encounters an error.

        eventHandlers?: SdkEventHandlersConfig
        loaderComponent?: () => Element

        A custom loader component to display while the SDK is loading.

        locale?: string

        Defines the display language. Accepts an ISO language code such as en or de. diff --git a/_docs/master/embedding/sdk/api/MetabotQuestion.html b/_docs/master/embedding/sdk/api/MetabotQuestion.html new file mode 100644 index 0000000000..eec53a55b2 --- /dev/null +++ b/_docs/master/embedding/sdk/api/MetabotQuestion.html @@ -0,0 +1,13 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: MetabotQuestion +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/MetabotQuestion.html' +layout: docs-api +--- + +MetabotQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Function MetabotQuestion

        • A component that renders a metabot question.

          +

          Parameters

          • props: object

          Returns Element

        diff --git a/_docs/master/embedding/sdk/api/SdkErrorComponent.html b/_docs/master/embedding/sdk/api/SdkErrorComponent.html index bc360c5cbf..f121a09bcf 100644 --- a/_docs/master/embedding/sdk/api/SdkErrorComponent.html +++ b/_docs/master/embedding/sdk/api/SdkErrorComponent.html @@ -9,4 +9,4 @@ layout: docs-api --- -SdkErrorComponent | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Type Alias SdkErrorComponent

        SdkErrorComponent: ({ message, }: SdkErrorComponentProps) => JSX_2.Element

        Type declaration

        +SdkErrorComponent | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Type Alias SdkErrorComponent

        SdkErrorComponent: ({ type, message, }: SdkErrorComponentProps) => JSX_3.Element

        Type declaration

        diff --git a/_docs/master/embedding/sdk/api/SdkErrorComponentProps.html b/_docs/master/embedding/sdk/api/SdkErrorComponentProps.html index 932377ce08..6b0264de90 100644 --- a/_docs/master/embedding/sdk/api/SdkErrorComponentProps.html +++ b/_docs/master/embedding/sdk/api/SdkErrorComponentProps.html @@ -9,5 +9,7 @@ layout: docs-api --- -SdkErrorComponentProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Type Alias SdkErrorComponentProps

        type SdkErrorComponentProps = {
            message: ReactNode;
        }
        Index

        Properties

        Properties

        message: ReactNode

        +SdkErrorComponentProps | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Type Alias SdkErrorComponentProps

        type SdkErrorComponentProps = {
            message: ReactNode;
            onClose?: () => void;
            type?: "default" | "floating";
        }
        Index

        Properties

        Properties

        message: ReactNode
        onClose?: () => void
        type?: "default" | "floating"

        diff --git a/_docs/master/embedding/sdk/api/StaticDashboard.html b/_docs/master/embedding/sdk/api/StaticDashboard.html index 2345fa0fb4..0f2ca5e986 100644 --- a/_docs/master/embedding/sdk/api/StaticDashboard.html +++ b/_docs/master/embedding/sdk/api/StaticDashboard.html @@ -9,7 +9,7 @@ layout: docs-api --- -StaticDashboard | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

        Function StaticDashboard

        • A lightweight dashboard component.

          +StaticDashboard | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

          Function StaticDashboard

          • A lightweight dashboard component.

            Parameters

            • props: {
                  drillThroughQuestionHeight?: Height<string | number>;
                  drillThroughQuestionProps?: DrillThroughQuestionProps;
                  plugins?: MetabasePluginsConfig;
                  renderDrillThroughQuestion?: () => ReactNode;
              } & {
                  dashboardId: SdkDashboardId;
                  hiddenParameters?: string[];
                  initialParameters?: ParameterValues;
                  withCardTitle?: boolean;
                  withDownloads?: boolean;
                  withTitle?: boolean;
              } & { className?: string; style?: CSSProperties } & {
                  onLoad?: (dashboard: null | MetabaseDashboard) => void;
                  onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
              } & { dataPickerProps?: Pick<SdkQuestionProps, "entityTypes"> } & {}
              • OptionaldrillThroughQuestionHeight?: Height<string | number>

                Height of a question component when drilled from the dashboard to a question level.

              • OptionaldrillThroughQuestionProps?: DrillThroughQuestionProps

                Props of a question component when drilled from the dashboard to a question level.

              • Optionalplugins?: MetabasePluginsConfig

                Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details.

                @@ -46,4 +46,4 @@
              • OptionalonLoad?: (dashboard: null | MetabaseDashboard) => void

                Callback that is called when the dashboard is loaded.

              • OptionalonLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void

                Callback that is called when the dashboard is loaded without cards.

              • OptionaldataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

                Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

                -

              Returns Element

            +
          • Returns Element

            diff --git a/_docs/master/embedding/sdk/api/StaticQuestion.html b/_docs/master/embedding/sdk/api/StaticQuestion.html index f4273c357c..ae1bfcf816 100644 --- a/_docs/master/embedding/sdk/api/StaticQuestion.html +++ b/_docs/master/embedding/sdk/api/StaticQuestion.html @@ -9,8 +9,8 @@ layout: docs-api --- -StaticQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

            Function StaticQuestion

            • A question component without drill-downs.

              -

              Parameters

              • __namedParameters: StaticQuestionProps
                • OptionalclassName?: string

                  A custom class name to be added to the root element.

                  +StaticQuestion | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

                  Function StaticQuestion

                  • A component that renders a static question.

                    +

                    Parameters

                    • props: StaticQuestionProps
                      • OptionalclassName?: string

                        A custom class name to be added to the root element.

                      • Optionalheight?: Height<string | number>

                        A number or string specifying a CSS size value that specifies the height of the component

                      • OptionalinitialSqlParameters?: SqlParameterValues

                        Initial values for the SQL parameters.

                      • questionId: null | SdkQuestionId
                      • Optionalstyle?: CSSProperties

                        A custom style object to be added to the root element.

                        @@ -18,7 +18,7 @@
                      • Optionalwidth?: Width<string | number>

                        A number or string specifying a CSS size value that specifies the width of the component

                      • OptionalwithChartTypeSelector?: boolean

                        Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

                      • OptionalwithDownloads?: boolean

                        Enables the ability to download results in the interactive question.

                        -

                    Returns null | Element

                  Index

                  InteractiveQuestion

              Returns Element

            Index

            InteractiveQuestion

            Breakout BreakoutDropdown ChartTypeDropdown ChartTypeSelector diff --git a/_docs/master/embedding/sdk/api/StaticQuestionComponents.html b/_docs/master/embedding/sdk/api/StaticQuestionComponents.html new file mode 100644 index 0000000000..5466ed5965 --- /dev/null +++ b/_docs/master/embedding/sdk/api/StaticQuestionComponents.html @@ -0,0 +1,60 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: StaticQuestionComponents +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/StaticQuestionComponents.html' +layout: docs-api +--- + +StaticQuestionComponents | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

            Interface StaticQuestionComponents

            interface StaticQuestionComponents {
                Breakout: () => null | Element;
                BreakoutDropdown: (
                    props: InteractiveQuestionBreakoutDropdownProps,
                ) => null | Element;
                ChartTypeDropdown: (props: MenuProps) => Element;
                ChartTypeSelector: (props: StackProps) => Element;
                DownloadWidget: (props: StackProps) => null | Element;
                DownloadWidgetDropdown: (props: PopoverProps) => Element;
                Filter: (props: InteractiveQuestionFilterProps) => Element;
                FilterDropdown: (
                    props: InteractiveQuestionFilterDropdownProps,
                ) => null | Element;
                QuestionSettings: (props: StackProps) => null | Element;
                QuestionSettingsDropdown: (
                    props?: InteractiveQuestionQuestionSettingsDropdownProps,
                ) => Element;
                QuestionVisualization: (
                    props: { className?: string; style?: CSSProperties } & {
                        height?: Height<string | number>;
                        width?: Width<string | number>;
                    } & {},
                ) => Element;
                ResetButton: (props?: ButtonProps) => null | Element;
                Summarize: () => Element;
                SummarizeDropdown: (
                    props: InteractiveQuestionSummarizeDropdownProps,
                ) => Element;
                Title: (
                    props: { className?: string; style?: CSSProperties },
                ) => undefined | Element;
            }
            Index

            InteractiveQuestion

            Breakout: () => null | Element

            Type declaration

              • (): null | Element
              • Function

                A set of badges for managing data groupings (breakouts). +Uses question context for breakout functionality.

                +

                Returns null | Element

            BreakoutDropdown: (
                props: InteractiveQuestionBreakoutDropdownProps,
            ) => null | Element

            Type declaration

            ChartTypeDropdown: (props: MenuProps) => Element

            Type declaration

              • (props: MenuProps): Element
              • Function

                Dropdown for selecting the visualization type (bar chart, line chart, table, etc.). +Automatically updates to show recommended visualization types for the current data.

                +

                Parameters

                Returns Element

            ChartTypeSelector: (props: StackProps) => Element

            Type declaration

            DownloadWidget: (props: StackProps) => null | Element

            Type declaration

              • (props: StackProps): null | Element
              • Function

                Provides a UI widget for downloading data in different formats (CSV, XLSX, JSON, and PNG depending on the visualization).

                +

                Parameters

                Returns null | Element

            DownloadWidgetDropdown: (props: PopoverProps) => Element

            Type declaration

            Type declaration

            FilterDropdown: (
                props: InteractiveQuestionFilterDropdownProps,
            ) => null | Element

            Type declaration

            QuestionSettings: (props: StackProps) => null | Element

            Type declaration

              • (props: StackProps): null | Element
              • Function

                Settings panel for configuring visualization options like axes, colors, and formatting. +Uses question context for settings.

                +

                Parameters

                Returns null | Element

            QuestionSettingsDropdown: (
                props?: InteractiveQuestionQuestionSettingsDropdownProps,
            ) => Element

            Type declaration

            QuestionVisualization: (
                props: { className?: string; style?: CSSProperties } & {
                    height?: Height<string | number>;
                    width?: Width<string | number>;
                } & {},
            ) => Element

            Type declaration

              • (
                    props: { className?: string; style?: CSSProperties } & {
                        height?: Height<string | number>;
                        width?: Width<string | number>;
                    } & {},
                ): Element
              • Function

                The main visualization component that renders the question results as a chart, table, or other visualization type.

                +

                Parameters

                • props: { className?: string; style?: CSSProperties } & {
                      height?: Height<string | number>;
                      width?: Width<string | number>;
                  } & {}
                  • OptionalclassName?: string

                    A custom class name to be added to the root element.

                    +
                  • Optionalstyle?: CSSProperties

                    A custom style object to be added to the root element.

                    +
                  • Optionalheight?: Height<string | number>

                    A number or string specifying a CSS size value that specifies the height of the component

                    +
                  • Optionalwidth?: Width<string | number>

                    A number or string specifying a CSS size value that specifies the width of the component

                    +

                  Returns Element

              ResetButton: (props?: ButtonProps) => null | Element

              Type declaration

                • (props?: ButtonProps): null | Element
                • Function

                  Button to reset question modifications. Only appears when there are unsaved changes to the question.

                  +

                  Parameters

                  Returns null | Element

              Summarize: () => Element

              Type declaration

                • (): Element
                • Function

                  Interface for adding and managing data summaries (like counts, sums, averages). Displays as a set of badges. +Uses question context for summarization functionality.

                  +

                  Returns Element

              SummarizeDropdown: (props: InteractiveQuestionSummarizeDropdownProps) => Element

              Type declaration

              Title: (
                  props: { className?: string; style?: CSSProperties },
              ) => undefined | Element

              Type declaration

                • (props: { className?: string; style?: CSSProperties }): undefined | Element
                • Function

                  Displays a title based on the question's state. Shows:

                  +
                    +
                  • The question's display name if it's saved
                  • +
                  • An auto-generated description for ad-hoc questions (non-native queries)
                  • +
                  +

                  Parameters

                  • props: { className?: string; style?: CSSProperties }
                    • OptionalclassName?: string

                      A custom class name to be added to the root element.

                      +
                    • Optionalstyle?: CSSProperties

                      A custom style object to be added to the root element.

                      +

                  Returns undefined | Element

              diff --git a/_docs/master/embedding/sdk/api/assets/navigation.js b/_docs/master/embedding/sdk/api/assets/navigation.js index f695acbc75..6aea3d90bb 100644 --- a/_docs/master/embedding/sdk/api/assets/navigation.js +++ b/_docs/master/embedding/sdk/api/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "eJylWV1z0zgU/S9+7uywzAKzfWvTZKCU3W5T4IHhQbEusTayZKTrhsLw3xknTSLLVx82T+3onHuOdHWtr3z6USB8w+K8mGkpoUSh1aXRWwumOCvKSkhuQBXnn6K8hmFFQX9UWMvirNgIxYvzl3/9PAvL3Brd2IjWDu8LPn/x8udnV9MAQ7hitlppZvg7zZkMjYKmHswJNDKW1oIXcdGIkxoJx1JDuPvZCVGGCQrqfmCyhbDmHs5J+H8t2G6ioql2SD2/Q7ufj7OilMza4rzg0BgoGQIvgtZkenpgfCDHUQfGMOcC2UqCy3vyGkCRmX2jEAwrUTxQShQaEVsiQ1ESOh4QkRj03csjjcdqjBqDJxqkxHS9MXmSFBqfcKcTifKlmcOxhArZrTIjpLyvjG7XVaByg5TMpB9iupnT5rJFHFjksCe55fpMcUhrT1E9/F0ColBre2V0w/U2wy0aObEXH4RtmRTfWd6Aw2Ej/e/AAuaWik8e6bVkp/8X2tRpQzJipOu9QAlpqxMtuhTxTaAqfWRkLy9ZucmdBo/rOT37+9WfL54n3AywjW4xv+bJiAnOs4oZvH9sIN+aDvkd7yV0x8ucRYsOmeB9pbdKasY/Cr6GEXmPxP12L8a6T3VdCIlg8sdM8Ce75rpNdfH3gvG7x1Tnbm3MXTE87hS3tq6ZEd9HfLd0CO3tHs/eAbIVs91i/CB48C7K4YtQcCBftFjNtPoi1qc+hRiRUxrh/STmIyNEvFSRcGy7iI0xNbrh5A4jPgqsLhrxFh5juifWNIfrLabkr7c4TXvJapkS7zjp4tvfJhLXggGpdxXJuAz0ieSFZsQFVmMV/EoumYXwoYVCcypxpqU2REnv23MUhsnzkRyV+wpqGErsmmPx5Lo5YoHcHQt2g3XeHY5tyWj/eetG2C6yrVXsEcxhJR1ai7o+3oln3TMRqPYNQu0YhEkp/V7QXmeoHyGN0u+CAqodNFpr35W5hBoURoR7vBwXOs0+klKa1yvgXKj1XKHAx+7w6TzKDMGk3pG5P+m8hUf3lYdAk8eDUqt/mPvhHVpSkTd6LVS3vrVOF5zG3NV/JkW5uSjpBcQBJ+jdynYtlA3tsyFmttPxqyZXzydsvFq/5mg8X7VutAKFgeW1j+eqEo+VA2i0VmK2aF6+C7JbLRT+u/ofSuL04hFydY8f8RKs7Z4e9AaIciBpuR4LwLK6g6/dZroLXBAOBClbXytcsFpI4sx4wnLVEtM4afbeW+r4/n7wy9RQ4ZYZVgOC8X8l8YCUzpJvnA/QfaTvAxk6x0L2ZJz2MSo3mvH5Q2/7I+EMzf0G4nXr0JgTb4w2xxWlr9KDRmsNH+gIPEe1y8RrprgEMyhRGs9QPRxzvcydmkdoUE+cJJyh2X0gXp/2TcnYrzL44QyxlFrn2b1zguLXW7wD22hlnb2IxkP3u8+/ALqey/Q=" \ No newline at end of file +window.navigationData = "eJylWsty3DYQ/BeeVanEFTtl3VYrqWJZThStZB9cOmDJ8RJeEKDBoTZyyv+ewj5BYPAgfZIK3dONwRvgfv6vQPgXi/NiroSAErmSF1ptOtDFWVHWXFQaZHH+OcprGdYU9EuNjSjOijWXVXH+5vcfZ2GZO63aLqK1xYeCr16/+fFka2pgCJesq5eK6eqDqpgIZUFTD+YEGsuFoLvphCg5Gf3TQ2daIpqLRRp4Hsrd+p8VpWBdV5wXFbQaSoZQFUFrMp0BGE/kmHkgh6uKI1sKsHl7Lw+K9MQ7iaBZifyZUqLQiNgCGfKS0HGAiIRXd6cdadxvyniGjmiQEtN1cnIkKTTe4VYlEsOXZvq5hAayPco0F+Kh1qpf1YGRG6RkNvohxvSc0hc9omeRw57kluszxSGtPUX18HcBiFyuukut2kptMtyikRNr8ZF3PRP8O8tLOBw20v8eOsDcoeKSR3ot2On/a6WbtCEZMdL1gaOAtNWJFl2KqnVgVLrIyFpesHKd2w0O13H69e0fv71+lXDTwNaqx/wxT0ZMcJ7XTOPDSwv51nTIz3gvwJzfchYtOmSC96XaSKFY9YlXKxjR7pG4n67FWPeprtdcIOj8nAn+ZNdct6ku7l4wfveY6mzWxtwVw+FOceubhmn+fcS8pUNob/t49gGQLVlnFuNnXgUvexV84RIO5FmP9VzJL3x1qlOIETmlEd57MRcZIeI0FQnHtotYjqns/M71Iz5xrGctfw8vMd0Ta5rDzQZT8jcbnKa9YI1IiRtO5uBTmLgX+Czb+gR4g+TJu9YknDzS4NaTce8YEsm704i7ssI6OCGp7VM1rZIgMbHLHmk502CuhNLEfNqV5ygE+s1CclQeamjAl9gWp6+zsSYKMWKq5FYwYs3fnnS2TWg9pRzLktHuk9gt70xk38jYw5nFSjr0HarmeM2fm5cqkP07hMYyCJNS+oOgnY6vHyGN0jdBAVUDjdbaVeVKQAMSI8IDXo4L3cwuklK6apZQVVyuriRyfDHnaeudyQeTekfm7vD2Hl7shysCTZ54SiX/YvZ0PpSkIm/VikszYXurClZh7oY2F7xcz0p6WbLACXp3ol9x2YWODiFmttNxVpNr8h4brzYcczSer7pfQwOL9hDPVSXeXz1otFait2hevguyO8Ul/r38CiVxIHMIubrHSbyArjOvKWoNxHAgabke14BlfQ/fzLa4DbwmHAhStr6SeM0aLohj8AnLVUt046Tee+yoG8mj9zXLV7hjmjWAoD8y0YO1UjlASmdRra0JaH93GAIZOseB7MhY5WNUbhWrrp4H2x8JZ2juNhCnWofCnHitlT6uKEOVATRay39zJPAcVdMSfzJZCdDeEKXxDNXDgdVpuVPxCA3q1ZaEMzTNBHHqtCtKxn4TwYnjYyk142mebkFWNxu8h65VsrP2IhpPX1n7DmZtK3i5/QiwP8VQFzSSuDf3sejd1dCfGRfmA6FZG7uIpcuzHAdQytD5Tj1rediU5J6MfTj/E7o7EEg4fos2Nei1BomP4R8zeCSr+qfyVKPZbyHHU2rAjuSeXH2YMH/6H2c5yi8=" \ No newline at end of file diff --git a/_docs/master/embedding/sdk/api/assets/search.js b/_docs/master/embedding/sdk/api/assets/search.js index 57a2948c77..b49995e08f 100644 --- a/_docs/master/embedding/sdk/api/assets/search.js +++ b/_docs/master/embedding/sdk/api/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "eJy9nd+X47aR7/+XntfOXKFA/aDfHMc+8W6y8c1ksw9zcnzYLU43PRKpSFRPJj7+3+8BKEhA4QuyIGnvk8ctoKpIFsBCfQrgrw/77svh4ZuPvz58btr1wzeL4vGhrbb1wzcP33WbTf3cN137e9Oo3j88Phz3G/TL+9d+u3l4fHjeVIdDfXj45uHht0ckcl9Xff2H6vD61FX79Z+7dbW5SAU/5gn+v8f6YKxiIt2fpcLW9aemrf9c99VTdai/Pfav33Xtp+blLDbVQKrg+3XTV0+by7WeJUe/SEX+2Pb1vnrumzcgFf14heDo9oLfRsWqGV0E/756/vz7Y98L5L17qp4/P7m2nujHh121r9s+YWdK876uPnfHXqD30vJuWv+w73br7ovkqk891pceN1vx3Wu17//2dVfLzXg2Xfqvu/p/xY4PtZlKun2GHYdLl5vt+EP3pd101fp/mvVLLfCI9an9F9f+zhbIH0toyT2fjZmEJA+kdu3upFE6Gwx67zcf/NBs+lpwvZ9cuztplD/rQfM9n/F/dX391HWfp3W3l5Z30yp90k73/Z61+/1D3fdN+3KYtuGfp/87XHrc3Qq5J3Br7ukT7ve/N4djtWn+XYle9meT3li3m+35a32oe6mr7E3j+/nJh+qtlqo+VG/1fTW7Nj90+61Mv3sIn4Yet1tx3G6rffPvWqDea3o/vfIhcdZ/z7Hwt6bfCK69PzW7WV8w5qSOF4y4mzzQC/jdsuanfffWrL33Iv9BuoKw/bo+Wj2wv0vFfeirvnmOFzns73niIuPCP2esavjaAgiaXlYwo3JXFGM6JweJTHd6HYGUy5cQmdqj1cOo9smFg0x7Ys2AVAuXC9foFd34zEWCzA4WLyO9E6Fyjh7RdQoDZJneZIyINIvDw+t0i64+OyjMswXHg2OGyEJBmRUoCkS6JQGgTGMc+yB902FPpjbRo5YHOzLtYZyDNI6HOEkt3iv2eKi/3e02zbN1h/8yf3QK45+k723T861qNiZb+kPX9odAZvBLhkiWg/521/hi419zRB/35p79t59ID/+cIczPPZtHcAwuP/51VDTNF+mk/0/7bncRjn+Wh0e2ReABIxLf2dbt0Bq7X8LclPZz6x/XMgPOvzXrO9nw/XbXf/2ua/u67b/rtruuNVIkxtSm5/PQ89nreQ+ruva7TfP8WWRH1z6f2t5D8656qT/4c+2YatP4MDbl5uk+9F83MsWu5T20vjWH5mlTf9dtjttWNLTenbo8n7vc0Y7v277pv5pgOsuW2nbrT92utCeYeQD+Y5NPqoV8/mnapm+qzXdwIhgV/+7UVTYlJK8lZdfhL7uac8u0KYduaH0n7Wb0d4daqt5MAEPz++m3XTIMcO2vt2DE9/5ebY510u+GXzPeeQJn82QKXzrQ4oQF6/rwvG92Qfg+YkDY/A762+CFn1Y8/qqf0Bg/TxeVolkk+O2m+CUhThK8ACuTPnR63/+0Ob407fTVvDv32J173GxFjV4VKQNELwi57te6eXntp9We292s8TThf/jn5qdqX23rvt4LLvvU6/DPzc7vdbs1BwMGvm/NqoZPI8iMg6EC9bn5zfq79vf1p25fGyum1Xftk219GFrfQft/VW/NS9XXpmxEor89tX+qxkLVHAv+ekwVFgWK98epWVOoT3qn73WPd9Kp5Y4zCovAUxonwm+5vr7av9T9JfybVj30ePZ73G5FkHRJqx7NvGTo+9Ks+9dpfa7ZHfT1r+kU/Yj+/lWeq8+0xyXPBf5tmq+95nfRj9KYoxZI8pnjNvgR0R/2zWbzt9d9d3x5xXFRskVGdPTabNZ7bx0zLvOd1x5fX9pqcXw2ZcJklJZtA4qSJqyQxErZdrCIacKEibgpW/to9DRhS1YMlW8ZjKSmTBLFU9m2wKhqwhRRbHWFJX58M2nCWJRzhe6867/vlfO4Z0L9VPSTrT+MgSa0j0dC2bqT8dCEGeKoKN+iIDaaMmM0QsrWHcZJE7rHo6UrdI/FTJO25EROV9kWx08Cm6ajqKtsQbGUwBpJRCWxx4+rog0bYVCFf74l3zQiURDMJMxN5Q1dqx9Hdqh4+s/tRxKXuRb01U/N82fOIcet6Kud7bM79bmLJcAx/hhGWKNGme790N1VSUyEXLfbl3HPgHn3vHuvzXpdtyASHDNq6CQIAfNsOUWXmcacet3dmq79U1fJhldn59K76v2fpn/tjv131X4tuw3dqZzMdns+dbuHPTwKGzNiKgTL07yv27UpM4vHj8iYoTsaQHeyL4wPx0wZDw7ztNp4pNqvwwKhMe02CKn26/GgLN+KOPKYsmI67Mi3Iu8+3HgP/AgDbd4MJ/Zki1vijHGhglAjbXdGtDFhhSTguMIOHHNM2iILO/LtmY48pkzLDz7uYmXe/csOQbJtTEYhE6aJA5Fsi9KxyIRJ8nAk2yYWkUwYMhGUXKkdxiUiS0ShSbZVPDqZMGUqQMnWL4hRJky6IkzJtjKMVCYMGg9WsnXjeGXCBlnIcpUtcdQisGU6cLnKlux7cvv9SEQwzmvPla+jG3AvrTI2YImOlWCSrzxgwrsK6XYwiS1XHDoht0SyrzJl0TUbLKctyzqSgpt20+EUGbZJjqlI2nbNgRXTtsmPruCGXX+IRa5V1zzS2w+2mLZy+ogLblX+YRdSK/Jnq2sPwJi2aPooDG5L/qEYUiuu8Z3rD8qYtkpyZAa355rDM+SW5HvO9QdqTFuV3DYpsOuWQzbyLbvGs+5x8IbcUvERHCkzrz6MY9pG4bEc3LIrD+iYtkd2VAc357pDO2TWuNZTx3cgm649yENgmeRIj8ikaw73yLDlmqF404Ef07ZNHv3B7ck+BGTahszjQLhFNx4MAu2bWNH5sUwy75dsnLGDK9wpJRY+tWlKdEnC3ZNyo6b2UmZaJXpGwqeT+Vxeq4NzWsFszFW8e60OzmmvmJb9C0s+I7PR/GuWUV1bnfrcaMnEc5l8IvekOVcVwSaNzt2vNGGIdNNSrj2oJnfcFElJbq4Vr0lqk1+Qm6t7tB533JKsctxsu2A17oRBomLcXEtgLe64IaJS3Hw74F6nKUtEG57ybfGrgqdMGCsKztec9Rzu+gRGaM8VBcG52t0KAGNwYIDrIIPgV9Qkj6sXg5zbKpLHjRAXJGfbM7UaEJcj52oOq5HHNY8XI+drHqtFnrIkpxT5GstGydrVhcjXWCLMhFxRhiywZiKmTOW8JmPN0Y4Z64HJWGda0RUx0PhlZ9+9YB0uvnVxrzvH7hOKrgvoR6755mecMvT6Byy3cvJdNmVk9gsu38bJuX7KxuwXgMjGiVHizX+TY4O3lY+Iqm22/uEwUuHvLh3FdyW6omQl2cvrxrjuX9o/dm/jxAwbd5bQta8nCXe30ryC8y079bqHNRP+w3Plk04EO8g9qWu/q9rnenOdCpOsc93FNwdfovgO2Vz05G25tLrze4YJvu694l3DtTM0tyN7RoY2+PfeHZn4XbfpvMRI+Gf53TWL8Jd9d2zXY6LeBc3wxTDDJvX9bt0cwlzKuGK//Z0seA1mxAn145Nftu5D/dy162r/Varf73CTDd0eHZYeaHVNbtKzr6ac6tTiZi2SBxm0u5PG322CsHJC77n1LdrtinV02L87N7lFz6ewvgbpmSiokelp65fKzH+jmrxGt+jadYdmUpfX6BZdh9dq3X0Z1XRucpOeiJVDVZNwXKatr//V/263b7ZT8xZreLNO2WwZNb1Zb1/v+0ak1muZqRW93d2nK8KICv6asT7ZbLov33XtodvUf+peBGLf2S7PQ5eN7TJ+caHdKTviDxWOmXDsX59d6ztoj87+GdE9ee5PnuYokh1TPRnBZumu9/tuHx/jPGKA7TF9fHOeFW912/+xatebGsSuyAjT4fXS4Q42mOxqnXcrhi53vheb7rnaiFzh3PIOWk8MSD78Th3uOQL711o2BlzD63SiedUtsyLt7gf5bIrOqoXSRMfURgaO1gf8GAfWocqh2Qhnk+prpjTdQ4cl62vZszkx9fXkpjCp9hZNyKFK0TQM9CAP/Bt0fvvXjJwIXvxfpLw7txg3erBmqjZmQpPX6gZtn7q2/6HaNps42PK0mVafXKsbtX1AYTPTNXqIv0jTpmlrtgsa6DKtJhhDSpvvZR/Wn3GtFv/hlvwblCUIWCLjcmuyEoqltVhS/agGC6uW1F5JtTJGhRVOuIhU12iNFdacVVsltgPWVCUMENVSSTXDGiqsWFQ7JdcLa6ZSmkW1UnLdfo1USuVYbZRck+i+3uWO8hoorOxecwOoecIKBbVOUp0hdcDqxkGDVFOypgkrFdcyifWHH/nCSsc/8yXUFHJsrGkcVcs1jdUopTTn1CblWBLXJKUtmK5FytEMP4+X1C36SF5aexAThd9bZXER+PGm2CglTxIfIUNTq09wBlFat+T4oTzt+OShMQtkhw5lWTF93tCIQflHDd1qm/heZR8wlGNZ8myhtEHiY4Vy7EifKJQ2RH6YUI4l7ByhtPqJI4TydcLTg6b0iw4OyrEliqCSBkxGURlaBScFpQ254pCgHNtYxJU0YyLqytCITwVKa5YdCJRrAYgORi0QRAiZFuRc/03XHkcIzv3AkT+pBvJIYeJz69lH6yRNntA/8e3eqw/UybVH+ln264/RudqiiU+1X394Tq5Fos+3X3lkzm22ZD60mz7unn0WzLgtWR98v/oEGIkNd78PfEuB0JorPwx/h9NM8uz6X7tfks/G33Z8Sa5l05+Sv+bQklwrpj4vn38Ex9UWZLrOtR+fzz1zY9yKnA/ST55kETZHS8n78Z2EOHEK4yrekVIqWpTfgXqk9OeBD7k1KJOcskGSTJZrRqub/JSyXF8/MmbkiV25PpbbTembSO/m6BvN8Kb1ZyV58+xJreSuT/WO6qdZuVRzuiw3wF4r6Z4qLsveWls1eRZ1+VOeJP6Z9z81h37y8/Zeozxtx0Pfbc8LULO6/3PdHn/s68tZWyNtsnQFEgahka6RNhlvC9vP9DmIBb8bOjWnTti/xq4gy88nrRF+7+k6e8yxOn9q2s955phzMjdDr1usGfUK0x5bZX653ttM78Gi7zf11q+oHG+WrREOIP5DhidH3wBFogSf/uSmJeOs7lCbRn9hh3Al9Jrm27o9Tp28JdYfzKAJpac2t2mKNnZhZZP7uaT6mmdTVeF/ShXqM81Gg1epvk315G3NxMpcmxs11Z/6D/yDh1hf/ak/TH3iUKiVnxKHNd7LL/cmvJddpG16w1XyWeX77VO9Xjfty/fniq+zBeC3rBnr0m1IEf1n/dX7LhD4MUv6j9zl3R/ypMT7Ty+n0k9u5mVNb9bMMtTT+lGHW62I8tKTZuAed7PDrSfkdgQ9brUD530njRnpdl+LMi25iwVhznfSAtBcHqXYtaVdfJi5zIzya1QNa00rxkThzXPeiT7ogq+4Y8I79f/hDt35zlxxR3hufPLewA63evLlROpJ/azpzZp5ZnfaANgjy44/dS9NaxIZx4sm729Zslw1/rfpzYyXn26UbMpEvt01/1nHWyNQozto+48v8W6FqMUd9HyotpsJRabJVZpsEPttGFeC326V/dPojrpUw+u0xoW58U/32cHG5GXtYfPMHN1h8TPYXMb1+i1v1SpQdxc9cEcZ1yTaUzat67A5Aqdjuk6NrtA17YlBNgb/fG+P9FIIV3nl2GpU4pkX/dd452gmQ6b2bvo21aH/nUk+/q5pP3Ui3VGXe9ix7dZ1/B5A6l3Le2idGKcXpZljdUxncNLZmM7Rw80mdabH7Qkz422o4c8ZudRq39eHpkKjNpL4zm89dX2BuenMZkhsZFacez2de93DmnOtvcgKv/U9tLfH7ZPwBpyb3kPvrnnr+r+ZfK5It23en5rfRX+3S5wBBZSf295Ds1d4PK1avGtdprsX3/B73uu+6zZ9s5PpPbe9UnNqJvtDcpidf8mYv9KBdSjtnWCzW2xhSuu+rvp6/XMVr7W4Vr/ljVrHYiymNie8mtSbjqyYVnlQNalzWtk9tExEUUxjZgA1qR1GMUynKICZ1HTcrYX+GrTM1zo55sfX3LhZxiokic0FGi5vdLM9Yzv0Ft6C8LIk96Ovfuqatv/L0y/1M3oqwe9Z8+Fxi6aHWN67c9upiwxtHdlZKNN7ankXrfaYKZla1/Quet+qzRENXqDXNb1Wb8qHzpzzQ304mANou8/gbDTYSu5P9b/iaCEt8t3QfPxKsd3y98CIesE7YUp76m7/UPfPr38dvp1o+/wQ32vQ5qps4Q/pA3UuP10leXz6vXXWFQjMWDal5tQw/1Dtzhj1krAFJ9TFlmyrnQvqbT1Ede56nV2pe/7faF1r/pgzq2+3XfszDBjOkt6FrcYvwhqVnsnrn3/pmhac8HzRFra6Xlu9rZo4g3TR436/XsOnZn/of94YXDSiJ2x1q7aJRxU0ul4XmB0vOgST4ZhsE+1O3rSg0Y26Jm6Z3+YGTfjsRk+N7MhGpoOP/fM2hb+bl/9lOmJ/z5rDP6w/e1nD4BQb/++5Ms8xbCjS+/PVEs1G+e+DAA3+miv/e36Sove3bFn4dNXol9vkRie6gZ/lb4NtfThUL7VE3rtL28TmAGzqSH1hd5BpNm/Voe09NAfZ9zG1o9n3SZ3oSfon37LACf8sf5JdG4wGidx35ojsU5/xMy2w6TJL8PEWcqtkJ11MWQiehgv28Cle+ePf9QRfQYG/5so374nQ1uEveXK8fW/shRL/lCXZGGOqQet2/R9f+r/Wh53ZtXuWjn+W+/cvXjHKiKx3QzvsJQkTf/vH40PTrut/PXzz68NbvTdruYdvHui9fl8+PD58aurN+vDwzUeXZTPB8TDDr7vno/3nP07N/m6LLk3jofX/mT08fpw9zum9ouIf/3j86DrbH+wfnIzLX2xH9fD4UT3Ol++pDDuqqKMKOtLD40dCHSnqSEFH/fD4UaOOOuqog47Fw+PHAnUsoo5F0HH+8PhxjjrOo47zoOPi4fHjAnVcRB0XQcflw+PHJXocy6jjMui4enj8uHosFu/Vch50XEUdV0HH8uHxY4k6llHHMnQA4w9qhrqq2HkU8x7rPgp2Bg4UepAyfqEIdo6dSIVepIxvKA07x46kQk9Sxj9UgR6Qip1Jhd6kjI+oOewcO5QKPUoZP1GLx6J4rwrWOXYqFXqVMr6ilvCaY8dSoWcp4y9qBc2OnUuF3qWMz6gSdo4dTIUeRsZnCHoYxR5GoYeR8RmCHkaxhxGbo+wkBT2MwDQVehgZnyHoYRR7GIUeRsZnCHoYxR5GoYeR8RmCHkaxh1HoYWR8hqCHUexhFHoYGZ8h6GEUexiFHkbGZ2j1qFfvF4rCzrGHUehhZHyGoIdR7GEUepg2PqNn8KUSe5gOPUwbn9HwHahjD9Ohh2njMxq+B3XsYZq9Ce2rEL8Lwcsw9DBdpF4VOnYwHTqYnqfeFjr2Lx36l14k3xc69i8d+pdeJt8XOvYvHfqXXiXfFzr2Lx36ly6T7wsd+5cO/auYJWftIvavIvSvQiVn7SL2ryL0r4KSc2cR+1cR+lehk3NnEftXwaKtIjl3FiDgCh2smCfnziL2sCL0sCI9gxWxhxWhhxXpGayIPawIPaxIz2BF7GFF6GGF8RmNA9TYw4rQw+Z2BsNBauxh89DD5nYGg4HqPPaweehhczuDLWHn2MPmoYfN7Qy2gp1jD5uHHjY3PqNL2Dn2sDmL6Y3PFLNHPX+/0qwzCOtDD5sbnykUetnMYw+bhx42Nz5TwCl/HnvYPPSwufGZQj8Wq/dLtQo7xx42Dz1sbnymgB42jz1sHnrYwvhMMX/Ui/eLZah5EXvYIvSwhfGZAi+FYg9bhB62MD5TQA9bxB62CD1sYXymgB62iD1sEXrYwi4ZoYctYg9bhB62sMtGuKhexB62YCtH4zNz6GELsHgMPWxhfGYOPWwRe9gi9LCF8Zk5DCoWsYctQg9blMmBsYg9bBF62NL4zLxA8/Yy9rBl6GFL4zPzOewce9gy9LCl8Zk5dM9l7GHL0MOWOjmTLGMPW4YetjQ+M1+i8byMPWwZetjSehiM4Zaxhy1DD1taDysfC/V+NmNmxx62ZPkJ4zOLGbzbIEURetjS+MwChhXL2MOWoYctjc8sYFixjD1sGXrYyvjMAs6eq9jDVqGHrYzPLAqYXIk9bBV62Mr4zGIOO8cetgo9bGV8ZrFAj2oVe9gq9LBVkZy3V7GHrUIPWxmfWcBoaBV72Cr0sNUiGQ2tYg9bhR62sh62eizofTHXYefYw1YsC2Y9rETuuQKJsNDDVsZnljNoduxhq9DDSuMzS+jbZexhZehhpfGZJfTtMvawMvSw0vjMEvp2GXtYGXpYmZ7DytjDytDDyiI5DZWxh5Whh5Xz5DRUxh5Whh5WLpLTUBl7WBl6WLlMTkNl7GFl6GHlKjkNlbGHlSzXWiZnkhKkW3m+dZacSobfwu7e3079VXI2GX7j/VnWdUbJCWX4jfdnideZTs4pw2+8P8u9zorktDL8xvuz9OtsnpxZht94f5aBnS2Sk8vwG+/PkrCzZXJ+GX7j/VkedrZKTjHDb7w/S8XO7PwGVwHDb7w/8z+bwsdzhUIZ/yjlb2e5OZqoFEz6M/+zifzlAvcH/scT/zaXv4Qhl0Kpf577t+l8PEsrlP3n6X+b0V+usH7gf5wA2KT+ssT9gf9xCGDz+qsZ7g/8j3MAm9pfKdwf+B9HATa7n5h/EAxgNEDZBP+KoH7AAxQDAsrm+BPzF0ACijEBZdP8K/iiVYAKKIYFlM30J8Y/AAOKkQFlk/2rAusH/sfggLL5/hVMFSmABxTjA8qm/BPjHxACxRCBsln/xPgHkEAxSqBs4j8x/gEnUAwUKJv7T4x/gAoUYwXKpv8T4x/QAsVwgbIEIDH+ATBQjBgoCwES4x8wA8WggbIcIDH+ATZQjBuoARzg8Q/QgWLsQFkekBj/AB8oxg+URQKJ8Q8IgmIIQVkqkBj/ACIoRhGUBQOJ8Q84gmIgQen0+kIBlKAYS1AWDyTGP6AJiuEEZQnBCiY7FAAKihEFZSEBLE5QACkoxhSUxQRwsaAAVFCMKigLCiB6UgArKMYVlEUFiWoFQBYUQwvK0oJEwQKAC4rRBWWBQaJmAfAFxQCDsswgUbYAEINijEFZbJCqXADOxzCDsuQgVbwAnI+RBmXhQaJ+AbAGxWCDsvwgUcIAcINivEFZhJCoYgDEQTHkoCxFSBQyAOigGHVQFiRgHqcAd1AMPCjLEjCSUwA9KMYelMUJmMopQB8Uww/KEgUM5hQAEIoRCGWhAq5rUIBBKAYhlOUKuLRBAQyhGIdQFi1gNqgAiVAMRShLFzAeVABGKEYjlAUMicUr4BGKAQllGQMuc1AASSjGJJTFDCvIUhSgEophCTVwCQg1FAATipEJZWED5lcKsAnF4ISyvGEFcY4CeEIxPqEsclhBoqMAoVAMUShLHUpYKaIApFCMUigLHkpcMAk4hWKgQln2kAi+AapQjFUoix8wb1CAViiGK9QynetTAFgoRizUMp3uU4BZKAYt1DKd8VMAWyjGLdQynfRTgFwohi7UMp33UwBeKEYv1IAvsP8DfqEYwFADwYCpQwUQhmIMQw0QAycPAcVQDGOogWPg4B2ADMVIhrJwosTBO2AZisEMNUIzFMAZivEMNQI0FCAaiiENNcI0FIAailENNYI1FOAaioENNUI2FEAbirENNQI3FKAbiuENNcI3FAAcihEOZaFFCemyAoxDMcihLLdIzB8AcyjGOZRFFyVOfgLSoRjqUJZeJOZfADsUox1qBHcowDsUAx7KMoyE/wPkoRjzUOWI/wHqoRj2UJZklDh5BMCHYuRDWZhR4sUnYB+KwQ+yMKOE8QsB+EEMfpCFGSVMvhCAH8TgB1mYUcL4gQD8IAY/yMIMNYMBBAH6QYx+kKUZagYjCAL4gxj+oFm68IkA/iCGP2iW9kAC+IMY/iCLM9QMb/0A/IMY/yDLM9QMF1YDAEIMgJAFGkaApvelXj6qWfGol+/VSjFZoG6YwRA67X7wZM0fdfF+OWeyABghBkZo2Azhy1pAuwAkIQZJaNgbMcMDBVASYpSEhv0RMzxSACYhhklo2CNxvh2PRha8M8BnGTKhYcvEbP5Iy/ez2crKOv+zfNTq/XKhmVjgyoyk0LCZQuHBCFAKMZRCw4YKXCsPUAoxlELDngqFBzNgKcRYCg37KhQeTACmEN9aYeGIUvCFTGh3Bd9eQekFNaENFtEOC+uoqji7iZo/FrP3q0XJZKH9FsxnafBZN2oeL2KZLOC+fP+FpSaBXQtsF3Bfvh3DEhSl8GBEOzL4lgwaHBUuewntyuDbMmiom8fvLbQzg2/NGKALXLcQ2pzBd2dYiJJ466D9GQy6kIUoivBQBdSFGHUhS1EU4aEGsAsx7EJ62G2GhxrgLsS4C1mOokjDLSoAvBADL2RBiiIYvBIgL8TIC1mSoghGbwTQCzH0QsPeDYLhGwH2Qoy9kGUpuMSTAHshxl7otIUDjyQAX4jBFxq2cRAMgAnQF2L0hYatHIRHEsAvxPALFelCVQL4hRh+IctTFN6sRADAEAMwVAw7H/FIAAiGGIIhy1QU3rREAMIQgzA0QBi8cYkAhSFGYWigMHivBAEMQwzD0IBh8H4JAhyGGIehE4fBIwGAGGIghoqRCRGAGGIghixYwYk8AiCGGIghC1ZwIo8AiCEGYmieXogTADHEQAxZsIITeQRADDEQQxas4EQeARBDDMSQBSs4kUcAxBADMWTBCk7kEQAxxEAMWbCCE3kEQAwxEEMWrOBEHgEQQwzE0DxdhUMAxBADMWTBCk7kEQAxxEAMLdJVOARADDEQQxas4EQeARBDDMTQCIghAGKIgRiyYAUnUgiAGGIghixYwYk8AiCGGIghC1ZwIo8AiCEGYsiCFZzIIwBiiIEYWgwTIH4TAxJDjMTQYmQCBCSGGIkhS1ZwGREBEkOMxJAlK7iMiACJIUZiyJIVXEZEgMQQIzFkyQouIyJAYoiRGLJkBZcRESAxxEgMWbKCy4gIkBhiJIYsWcFlRARIDDESQ5as4DIiAiSGGImhgcTgCQyQGGIkhixZwWVEBEgMMRJDq/R+OAIkhhiJIUtWcBkRARJDjMSQJSuJCQCQGGIkhixZwWVEBEgMMRJDqyEKxGtSgGKIoRiyaAUHIIDEECMxZMkKLAQiAGKIgRhaLZOFQARADDEQQ6tVshCIAIghBmJoVSYLgQiAGGIghixYwYVABEAMMRBDZboQhwCIIQZiqEwX4hAAMcRADFmwkjjUA4AYYiCGLFhJnOsBQAwxEEMWrCSO9gAghhiIIQtWEqd7ABBDDMSQBSuJvBkAMcRADFmwkjhpA4AYYiCGLFhJxD8AxBADMXo2+B9cB2tAYjQjMdqSFfz+14DEaEZi9Cy9ANGAxGhGYvQsvQDRAMRoBmK05So4ANaAw2jGYfTAYeD7QwMOoxmH0bM0idaAw2jGYfQsTQI1wDCaYRg9S5NoDSiMZhRGz9IkWgPyohl50QN5KfChLQC3aIZb9IBbisTBLejkFuaBA2PBO/k1YCyaMRY9MJYCH+ACGItmjEWfzqGCeRANwIpmYEUPYKWAeRANEIpmCEWr9DJEA4KiGUHRA0HBJwNogFA0Qyh6QCgFrEfWAKFohlD0gFDwCQEaIBTNEIoeEAo+JUADhKIZQtEWieDcugYIRTOEogeEMscjAXATzbiJHrjJHI8EAEs0gyV6gCUzWNapASHRjJDogZCYIwuQAOCHjJDogZDgYws0ICSaERI9EJI5HkqAkGhGSDSlT+bQgJBoRki0JR5qjociQCSan2E1IBJ8ioFGx1jxc6wGRDKHS3qNjrLiZ1kNiCTxFNFxVtF5VoMj4rEIj7Rijjggkjkei+hcK36w1YBIFngsocOt+OlWAyJZ4LGEDrjiJ1wNR1wt8FsFHXLFT7kaGMkicSwY8ER+0tXASBZ4KKDDrhgj0afjrmCVtgaMRDNGoocjrxbYlQEk0QyS6AGSpCwAnsggiR4gyQKPBQBJNIMkeoAkC+zKAJJoBkn0AEkW2JUBJNEMkugBkiyxKwNIohkk0QMkWWJXBpBEM0iiB0iyxK4MIIlmkEQPu1WW2JUBJdGMkuhhuwre7KwBJtEMk+hhv8oSz8qAk2jGSfRpwwp2ZQBKNAMletixssSeCEiJZqREW/KBmasGpEQzUqIt+VA406gBKtEMlej5Is1cNWAlmrESbdkHRqYasBLNWImeD36IhxKAJZrBEm3hh1rhoQRoiWa0RC/SRxtpQEs0oyV6oUaeAcAlmuESvaCRZwB4iWa8RC+GjVPqkVbvV+XiUa3o8k99+icTC5yTYRRtsYha4QEKOIpmHEUPp2xh3wAcRTOOoi0XwQWhGnAUzTiKtlxE4e3UGoAUzUCKHkAK3o+pAUjRDKRoC0bgjhwNOIpmHEVbLqJWeAEFQIpmIEVbMKLwnhwNSIpmJEVbMqLwphwNUIpmKEVbNKLwrhwNWIpmLEUvh119+E0HYIpmMEVbOKJK/KYDNEUzmqItHVG4MF4DnKIZTtEWjyhc2a4BT9GMp2jLRxQu7dYAqGgGVPRyOOMZOzIgKpoRFb0amSQBUdGMqOjV2CQJkIpmSEWvxiZJwFQ0Yyp6lT9JAtSiGWrRlpwk5jhAWjQjLXo1eCcOIQBr0Yy16NXgnXiIA9qiGW3RA21JZGkAbtEMt+gBt+DCew14i2a8RVt+QrjwXgPgohlw0eVwCjmeIwBx0Yy4aEtQCBe+a4BcNEMuuhzO8sVzBGAumjEXfWIueI4A0EUz6KIH6DLDcwSgLppRF13OR0YYwC6aYRc9YJcZnmQAd9GMu+iBu+DCeA3Ai2bgRQ/gZYbHAiAvmpEXXZYjL1yAXjRDL8Vs8EQ4FgqAXgqGXorZcCY+HAsFYC8FYy+FZSmE69YLAF8KBl+K2XCyNBwLBaAvBaMvxXAIGK5bLwB+KRh+KSxOIYWPWwb8pWD8pRj4i4JjoQAApmAAphg2wuCxUAACUzACU1iiQgqOhQIgmIIhmMIiFcJ16QVgMAVjMMXAYHBJcwEYTMEYTKEGT4SDqQAMpmAMplCDJ+KxABhMwRhMYZEK4cLyAjCYgjGYQg3nnOOxABhMwRhMoQYSjccCYDAFYzCFZSpEeCwACFMwCFOo4VAIPBYAhCkYhCksUyFcWF4ACFMwCFNYpoKPOy4AgykYgyksUsGruAIgmIIhmGLYxYIL2wvAYArGYIrTl0LwUAIMpmAMphi+FkJ4JAAGUzAGUwxfDMGF6QVgMAVjMMXw1RBcWF4ABlMwBlMMXw7BheUFYDAFYzDF8PUQXFheAAZTMAZTDF8QwYXlBYAwBYMwxfAVkcQh/ADCuL/ZL3O91fu+Xv84fKHr48eHarPpvjx37aHb1Jvu5eHx14efT9/vMnt5rErzKS+zW+ebX3/77fLFrm9+/c37aJf5zWit2mZb9bUvp1xcxJi9siIxx/71+fRRP9+i0rdoKRL1VD1/fjr2fdf6opYXQcuhozkESirvZd8d23Vg2kx7ps1WQ2ezFXP4h5q5fyiZlm6/Nt8n9jV4NputkCIx+4rb6T9UpZ1VhfvHXCi3rj53x94X7Qk+Xb4u3K11elZ54tf7brfuvgRPznOB083Vc6fGXcVK5qyDW+yGzwt696iYXXTo4clNynqu9n19aKrAVpMyu0harGSSXqt9/9xtuvDxF8o3SuZFVlR4bWrmP3/ZfbJizBc80fPwBTov1wv3RObuicgG61nTod7Yz/+Ftnua1EnTefQunCbpXW42630dTgreGC7pJI+cM5PwnpvPJVopnmTfo+ane7I8DYry9F/l7p4id/uWJyPMEQ2nCcXdUHIzS+H+sXDDYSY1tDvU27o9nj60HtzquT8ESDbZPJ8/dxyIKueeqKXw6ZxFPe27L4dwJvRMO/ub7LUSid00BzPUjtuWzQDkD7bcyz8JjyYW7c1d8yJTaBPM4/5sMD+5i/wmsHE196cW0nIp4U3TnhgqxGKO28BfTP7rYs1Kek3bbdf+zIcd+VOGWeALZQ1fId5tji9N6BhzP25wbzc3kM3+tSwF7PaRf/uE7rGvq75e/1z14ZDzXztL4S0cRLnPBW+7dbUJhHqT79UCoyFReFHDQugyody305d3vYfkTePSd66V+c/Td4UDF/IeyhWioguee49mKZR4PPTd9nzB5uvNZtpu+nobTlran7SEN9PKNqLYBOhP2sKg8GxhGAItfV90E7ZwHRBc9GArvvTCN1c2dqIbGkr0zVYuBhCGMZHowfR6U9tmgZ6VryfzroTvhOXcj4+UCyZOERItZbOTEZ52sdJ/U0gF9lU4wfuvm1IuZNc8fwZv1aW/vlQuYnJhm9kTJ1RQ//xL17T1OnyDkP8GkQ2qdf2paett3VdP1aHGa1l/rAqFHp73zY7PT3PP893oIhcV63nhAiQ38FbC+90cqqdNzdaOnq7z0tbUyYokdl/a4Rv065c6HAPeLXbPT58enzlc+BTXC8dGoAYuWLxb7xbAunTqnNtI/XLfbDb96747vry6Of+1bl5egytcLn0XdfH+OYQXvgeQrng0eDezdHOAW96bc95PKmVOV6+b8FGt/MB44e7eSi7NehV6UXi+JXOoSFp8LzyZaibzHyOVr7w9KeeMRo60OP2k/KnapS+E4WO9rZpNOEdpf44S3r3tU71eN+1L3fZN/9WsuUMD/RBSSy3b9V+fu7av2/4c5AbP2POeuexVOpj3c/imMwUUF+vcgtoUlJ38UTbnD7KZaPLTbFoWPl7u4adm09f7z/XXMJzy1w2mJD1PaBhAepe+PF15eV6KuDzBXKhjv+/28FGZc4y8+yB0gDcmxZQSeO96oVFGymvVrjc1W2GSv8KU3sZ/7UKL/Mi2lA2W4akGpvhBx2n9Xbj8zfzkh+YstdPbRGbroAe+tPw3yElq4ab3uctVlbIXyadmf+h/3nQvTbjU8We6YiYL+gdZ8cJ77ouSpRk/dW3/qdo2m6/h69rPrBdCq7q2PzT/Dqc07Ycvhcym1+rw1hyO1ab5dx1P46vS9wLZKyGODuaelOXJl0r3UnBDXJXnXKBLAbrHroWJjddmva7bXbWvtnXPhpY/oarzG0k7R17Kxslr8/K6MZfXta/dWzhiSn9encnmk0iI8kevB1Uy8UXz3LXcZc2eIG9t494pWnZv+UvEpyz6zCkW7kV1jnLdP9xDNQUUIn3tpy4MzPQNgVnTNn1TbZLJRs9BFzJPOElMOJs/bNzsqbSbxZbChzioOPwzoWXhvcCWpymzPGfWHS6Yu1slXNs1bV/vq+e+ecNhrOef0suIBUaR7MqPFylbMEpseS8w2VQI5F3YagzR/DjF7IG7VgVDgUCRn5PQUveMFEWQK9bke5TWVz+FCHIBTX6KRF/9fHCm2YeSqpBFJkA4XmmDa/HnVS2d3ibUATX+BCiM24Eaf8UWD0M/Cltc7QCDjli6/w4WJq6B9DCIBDfKz5VqWdCSVAPE+wvH670rElz6AEKY1ANy3X8Pdd837csheZ9KP00kjN8F+sAN89eGQmw2osiFqxW+i34yo7xa2b4+1H1ikPi815ytf6WKQ/VWp94tC//dIkRlCRVnd+722/hS/HojYZSN9By322rf/Hvs1eK/xISLHKCpb/pNHUv3M+4kTBA1h24Xlkf4NQELt0RYCF9OB3Oz1ygQMQfVeusy2cpgkFe3UZLaf3MuT8nc0hWJuDCQhPT9ly9hNsNfQRYkmzo31VMdglSfT2phXd2mOrBErLoh3jfS0Prfm7qLmWzkWlHx8n/pSxLeqPpTfwD1Iz7h0MKivw1fY5sj+L2Fo2yAbZq2jpfr5khez1+FBnXVuk5l2nzGLFxvbrrnahOuX8nPk+iTRxTC8jXrDIe+6o/hzLH0Q15hzmRb7c4BqCksquwzDeSS/zgKYTZgWx8O1UvoaOTnmZTMZcfBnDlMwLtk2eONRX5p+tdq13yuw2SWj2d0ca29Rjibm5RfvKaFeAJLPlTbcMLyOYoWUgon2vOAUKafhhVmq4HMU40Oeox+HDqXjaqzAlzJ5mM8PZdNtbHICKqv/DE2z3tyoAzLT7mTMJ10EXeaoPrXmqXH/BSE2SCeIxZXhvixqF5eKTHtAKUfJAorgi/i+2rXNW3fPf1SP7PiKj9UE1abOrln6naoDwcTr3Wfa1b95t8UYYDupH+q++fX/RAMWsmfmGx/SJR5dwQn58kvStdl3jNMPjryi9S1cAlxlrrv3hpWO6/9EZY3fzlxcVDtxzgkzMk5qTgOXvgv8LzHE49X/5pJuLfBSTuyilvyi7wLYX2xFdb16FJ1UMsuk9atWRi98keKMC3NA9W5N6ktHexwXE3PXRmNW+2YXesiNfVLZZZlob/4izBhqNJ2ff3UdWFttp8mcmUywreRkwcqEvycvKuGES6T2uP2iXEaP5elhdmarq12u3B+Kf3NBcICtq59qj91+9osEIOVofdeXJ6usHT3zy0VaS4byF37XLXPzCP9ymUS8gRQfO/Xcc6dgQvniyTzHCO3O4TO7jngwjFrYclh1w51rYE874YKA4KuPb+4zYooDOX9NaNwywGTZ6LX7tib8sVwueHzuEJY4d613EQ/UFOOwiu31KKlbMru2jFTV8EmF/f03U4qEoZJBm++NS9VXxtEE4wCz7lWrmDBDQeaSy9hfwxhkjcXr07TZ+lmEaeGhCU/Q2IuEO9N0w6Zqpmz3imkuWxo7KqXmhcH+AXEwhD8TB3fogp08ufoQrhZa9e8db2taAtnUj/cFFYKgp0Lflp+5SoQZ+cCQfesznvp3G2m+blKUXh3kwE5+fUXQlC363ZRDYD/UtDCQsZdd2jiN7K/UhJOhLt9s6324aLeL3Yh4cwFI0CfcWhhzYUTFCL70q+pdc+bzlXAwhwwhxdhkO6/7E5vEzc2XUkeCVcwKSoTDir/aZ0UOk92pRUkrOiCtCR8ZfjP9KTNldnNz3VdsmhhX7drg+Ti+t1g6g/qoN3s5vZSknAfj4dmwty1P/hO13OuPD1XPcvm/73JicJcrZ8kECbIL6AnsDco1nJ2yiX6XCeQ64/VM8SQRZaH9edUiQz58XMh3DF4WH9ObOUgf3QVwr08vjibb46qMf0hVAi3yRzWn1GdLPkDpBAm1I2sZMUp+S5aCLcmRxKjdTr5nlQoWQhixPpVqCBH4a/WC+He4MP6M56uyWdghXBHhSctzk5oP5kgTDR7AjFIJD+pUAhzHof1Z5NPYBfspwAKIQQz+cl2zd++flaL3LYnEgb5h9dq3X0J3+b+TCnc43TYHFn22Y/ahHGpX8kGYkp/f2gh5GCG6DTPMP2qg3LHa6QBp/NTYsIKlkEozBIFFT1XCEtttPWLM4UZnVAwuHL/eQt51qH/Gsb6/qZLF6qt3Ltvdt7Z5oL289kH5zauvJFm7h9uSwStzqGfcNS6moXAB/2h5jIIrqTyrMoZSMJ8cFQeEaj0XcoVvrsLX5wL32W+Fq+u/DhZCwtP+2r/UveYEfnFPCsXXsxclOr+QgvZgOvrfd9Eqw3/IQhfFX39rxBi+KX+5OJbcoGhWGyUdQ7CK2GJpH3XBM88GKCnZ37678q528w5/eJ8d89O7y6jPB+JIXvB9F236Ztd6CH+LCRM8fDdVD6KIrfo1uccnPAlc9yt4WZ/H8EID9g5HmqTa22e7bqHZ8WDMhdZyG0EvlXNxgwwu/kikOcXRQuv9VCzff7VrglkeqNAiI+NzON+X7c95xv+e0uIio+HYINvXDrhv2WE2XljlsnX1e36ly/9vj7szIo4DAL8GFmYCraxRLh0931auGnorTk0T5sanJZS+KXkskdxEpbY4ubvvRfOlME6Hqwm/eofl+sSMqMvzbp/DeZ4/6Qr9yqanRNn7i+u6owWbhO2EMab1LDJC0fzor/HQ7lJW7mt0iTc9WjFj52z5NcirlwG2kUUyv2FzlBMWClm9VrvMRUQZgtOWAHppw7cVjotBJdGtisQD7eaeAuWlXvwM/eI3PtOnfd/uzbkJmc6b9E5b3gXLk2NTabSe9O0Ib/zx4sWLkiNsERmx69XKl3WyJ1Ap9xfSEhojKLY8fyq4XM2xj0kklQd/uPxYdfsalNS9/DNx3/89tv/AzCCDE4="; \ No newline at end of file diff --git a/_docs/master/embedding/sdk/api/index.html b/_docs/master/embedding/sdk/api/index.html index 8aa00975b8..7cf85d9285 100644 --- a/_docs/master/embedding/sdk/api/index.html +++ b/_docs/master/embedding/sdk/api/index.html @@ -9,4 +9,4 @@ layout: docs-api --- -Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

              Embedded analytics SDK API

              CollectionBrowser

              CollectionBrowser
              CollectionBrowserProps

              CreateDashboardModal

              CreateDashboardModal
              useCreateDashboardApi
              CreateDashboardModalProps
              CreateDashboardValues

              CreateQuestion

              CreateQuestion
              CreateQuestionProps

              Dashboard

              EditableDashboard
              InteractiveDashboard
              StaticDashboard
              EditableDashboardProps
              InteractiveDashboardProps
              StaticDashboardProps

              InteractiveQuestion

              InteractiveQuestion
              DrillThroughQuestionProps
              InteractiveQuestionEditorButtonProps
              InteractiveQuestionEditorProps
              InteractiveQuestionProps
              InteractiveQuestionQuestionSettingsDropdownProps
              InteractiveQuestionQuestionVisualizationProps
              InteractiveQuestionResetButtonProps
              InteractiveQuestionSaveQuestionFormProps
              InteractiveQuestionTitleProps
              SdkQuestionProps
              InteractiveQuestionBackButtonProps
              InteractiveQuestionBreakoutDropdownProps
              InteractiveQuestionChartTypeDropdownProps
              InteractiveQuestionChartTypeSelectorProps
              InteractiveQuestionDownloadWidgetDropdownProps
              InteractiveQuestionDownloadWidgetProps
              InteractiveQuestionFilterDropdownProps
              InteractiveQuestionFilterProps
              InteractiveQuestionQuestionSettingsProps
              InteractiveQuestionSaveButtonProps
              InteractiveQuestionSummarizeDropdownProps

              MetabaseProvider

              defineMetabaseAuthConfig
              MetabaseProvider
              MetabaseProviderProps
              MetabaseAuthConfig
              MetabaseAuthConfigWithApiKey
              MetabaseAuthConfigWithJwt
              MetabaseAuthConfigWithSaml

              StaticQuestion

              StaticQuestion
              StaticQuestionProps

              other

              BaseSdkQuestionProps
              MetabaseColors
              MetabaseQuestion
              MetabaseTheme
              ButtonProps
              ChartColor
              CollectionBrowserListColumns
              CustomDashboardCardMenuItem
              DashboardCardCustomMenuItem
              DashboardCardMenu
              DashboardCardMenuCustomElement
              DashCardMenuItem
              EmbeddingEntityType
              EntityTypeFilterKeys
              IconName
              LoginStatus
              MetabaseClickAction
              MetabaseClickActionPluginsConfig
              MetabaseCollection
              MetabaseCollectionItem
              MetabaseComponentTheme
              MetabaseDashboard
              MetabaseDashboardPluginsConfig
              MetabaseDataPointObject
              MetabaseEmbeddingSessionToken
              MetabaseFetchRequestTokenFn
              MetabaseFontFamily
              MetabasePluginsConfig
              MetabaseUser
              ParameterValues
              SdkCollectionId
              SdkDashboardId
              SdkDashboardLoadEvent
              SdkEntityId
              SdkErrorComponent
              SdkErrorComponentProps
              SdkEventHandlersConfig
              SdkQuestionId
              SdkQuestionTitleProps
              SdkUserId
              SqlParameterValues
              UserBackendJwtResponse

              +Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

              Embedded analytics SDK API

              CollectionBrowser

              CollectionBrowser
              CollectionBrowserProps

              CreateDashboardModal

              CreateDashboardModal
              CreateDashboardModalProps

              CreateQuestion

              CreateQuestion
              CreateQuestionProps

              Dashboard

              EditableDashboard
              InteractiveDashboard
              StaticDashboard
              EditableDashboardProps
              InteractiveDashboardProps
              StaticDashboardProps

              InteractiveQuestion

              InteractiveQuestion
              DrillThroughQuestionProps
              InteractiveQuestionEditorButtonProps
              InteractiveQuestionEditorProps
              InteractiveQuestionProps
              InteractiveQuestionQuestionSettingsDropdownProps
              InteractiveQuestionQuestionVisualizationProps
              InteractiveQuestionResetButtonProps
              InteractiveQuestionSaveQuestionFormProps
              InteractiveQuestionTitleProps
              SdkQuestionProps
              InteractiveQuestionBackButtonProps
              InteractiveQuestionBreakoutDropdownProps
              InteractiveQuestionChartTypeDropdownProps
              InteractiveQuestionChartTypeSelectorProps
              InteractiveQuestionDownloadWidgetDropdownProps
              InteractiveQuestionDownloadWidgetProps
              InteractiveQuestionFilterDropdownProps
              InteractiveQuestionFilterProps
              InteractiveQuestionQuestionSettingsProps
              InteractiveQuestionSaveButtonProps
              InteractiveQuestionSummarizeDropdownProps

              MetabaseProvider

              defineMetabaseAuthConfig
              MetabaseProvider
              MetabaseProviderProps
              MetabaseAuthConfig
              MetabaseAuthConfigWithApiKey
              MetabaseAuthConfigWithJwt
              MetabaseAuthConfigWithSaml

              MetabotQuestion

              MetabotQuestion

              StaticQuestion

              StaticQuestion
              StaticQuestionProps

              other

              InteractiveQuestionComponents
              MetabaseColors
              MetabaseQuestion
              MetabaseTheme
              StaticQuestionComponents
              ButtonProps
              ChartColor
              CollectionBrowserListColumns
              CustomDashboardCardMenuItem
              DashboardCardCustomMenuItem
              DashboardCardMenu
              DashboardCardMenuCustomElement
              DashCardMenuItem
              EmbeddingEntityType
              EntityTypeFilterKeys
              IconName
              LoginStatus
              MetabaseClickAction
              MetabaseClickActionPluginsConfig
              MetabaseCollection
              MetabaseCollectionItem
              MetabaseComponentTheme
              MetabaseDashboard
              MetabaseDashboardPluginsConfig
              MetabaseDataPointObject
              MetabaseEmbeddingSessionToken
              MetabaseFetchRequestTokenFn
              MetabaseFontFamily
              MetabasePluginsConfig
              MetabaseUser
              ParameterValues
              SdkCollectionId
              SdkDashboardId
              SdkDashboardLoadEvent
              SdkEntityId
              SdkErrorComponent
              SdkErrorComponentProps
              SdkEventHandlersConfig
              SdkQuestionId
              SdkQuestionTitleProps
              SdkUserId
              SqlParameterValues
              UserBackendJwtResponse

              useApplicationName

              useApplicationName

              useAvailableFonts

              useAvailableFonts

              useCreateDashboardApi

              useCreateDashboardApi
              CreateDashboardValues

              useCurrentUser

              useCurrentUser

              useMetabaseAuthStatus

              useMetabaseAuthStatus

              diff --git a/_docs/master/embedding/sdk/api/snippets/BaseSdkQuestionProps.md b/_docs/master/embedding/sdk/api/snippets/BaseSdkQuestionProps.md deleted file mode 100644 index 1550e682b6..0000000000 --- a/_docs/master/embedding/sdk/api/snippets/BaseSdkQuestionProps.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -version: master -has_magic_breadcrumbs: true -show_category_breadcrumb: true -show_title_breadcrumb: true -category: Embedding -title: BaseSdkQuestionProps -source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/BaseSdkQuestionProps.md' -layout: new-docs ---- - -**`Expand`** - -## Properties - - - -| Property | Type | Description | -| :-------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `children?` | [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | The children of the MetabaseProvider component.s | -| `entityTypes?` | [`EmbeddingEntityType`](./api/EmbeddingEntityType)[] | An array that specifies which entity types are available in the data picker | -| `initialSqlParameters?` | [`SqlParameterValues`](./api/SqlParameterValues) | Initial values for the SQL parameters. | -| `isSaveEnabled?` | `boolean` | Whether to show the save button. | -| `onBeforeSave?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `isNewQuestion`: `boolean`; \}) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<`void`\> | A callback function that triggers before saving. Only relevant when `isSaveEnabled = true` | -| `onRun?` | (`question`: `undefined` \| [`MetabaseQuestion`](./api/MetabaseQuestion)) => `void` | A callback function that triggers when a question is updated, including when a user clicks the `Visualize` button in the question editor | -| `onSave?` | (`question`: [`MetabaseQuestion`](./api/MetabaseQuestion), `context`: \{ `dashboardTabId?`: `number`; `isNewQuestion`: `boolean`; \}) => `void` | A callback function that triggers when a user saves the question. Only relevant when `isSaveEnabled = true` | -| `plugins?` | [`MetabasePluginsConfig`](./api/MetabasePluginsConfig) | - | -| `questionId` | `null` \| [`SdkQuestionId`](./api/SdkQuestionId) | The ID of the question.
              This is either:
              - The numerical ID when accessing a question link, e.g., `http://localhost:3000/question/1-my-question` where the ID is `1`
              - The `entity_id` key of the question object. You can find a question's Entity ID in the info panel when viewing a question
              - `new` to show the notebook editor for creating new questions. `isSaveEnabled` must be `true` to allow saving the question | -| `targetCollection?` | [`SdkCollectionId`](./api/SdkCollectionId) | The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions. | -| `withDownloads?` | `boolean` | Enables the ability to download results in the interactive question. | - - diff --git a/_docs/master/embedding/sdk/api/snippets/CollectionBrowser.md b/_docs/master/embedding/sdk/api/snippets/CollectionBrowser.md index f42336d5b3..8c4a58e3c0 100644 --- a/_docs/master/embedding/sdk/api/snippets/CollectionBrowser.md +++ b/_docs/master/embedding/sdk/api/snippets/CollectionBrowser.md @@ -10,7 +10,7 @@ layout: new-docs --- ```ts -function CollectionBrowser(props: CollectionBrowserProps): ReactNode; +function CollectionBrowser(props: CollectionBrowserProps): Element; ``` A component that allows you to browse collections and their items. @@ -29,6 +29,6 @@ A component that allows you to browse collections and their items. -[`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4313) diff --git a/_docs/master/embedding/sdk/api/snippets/CollectionBrowserProps.md b/_docs/master/embedding/sdk/api/snippets/CollectionBrowserProps.md index 440e4e9f1b..c1122aa5d8 100644 --- a/_docs/master/embedding/sdk/api/snippets/CollectionBrowserProps.md +++ b/_docs/master/embedding/sdk/api/snippets/CollectionBrowserProps.md @@ -24,6 +24,6 @@ layout: new-docs | `pageSize?` | `number` | The number of items to display per page. The default is 25. | | `style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | | `visibleColumns?` | [`CollectionBrowserListColumns`](./api/CollectionBrowserListColumns)[] | The columns to display in the collection items table. If not provided, all columns will be shown. | -| `visibleEntityTypes?` | (`"model"` \| `"question"` \| `"collection"` \| `"dashboard"`)[] | The types of entities that should be visible. If not provided, all entities will be shown. | +| `visibleEntityTypes?` | (`"collection"` \| `"dashboard"` \| `"question"` \| `"model"`)[] | The types of entities that should be visible. If not provided, all entities will be shown. | diff --git a/_docs/master/embedding/sdk/api/snippets/CreateDashboardModal.md b/_docs/master/embedding/sdk/api/snippets/CreateDashboardModal.md index d379140d40..62be38123b 100644 --- a/_docs/master/embedding/sdk/api/snippets/CreateDashboardModal.md +++ b/_docs/master/embedding/sdk/api/snippets/CreateDashboardModal.md @@ -10,7 +10,7 @@ layout: new-docs --- ```ts -function CreateDashboardModal(props: CreateDashboardModalProps): ReactNode; +function CreateDashboardModal(props: CreateDashboardModalProps): Element; ``` Creates a dashboard @@ -29,6 +29,6 @@ Creates a dashboard -[`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4313) diff --git a/_docs/master/embedding/sdk/api/snippets/CreateQuestion.md b/_docs/master/embedding/sdk/api/snippets/CreateQuestion.md index a69689c146..91fbeaf956 100644 --- a/_docs/master/embedding/sdk/api/snippets/CreateQuestion.md +++ b/_docs/master/embedding/sdk/api/snippets/CreateQuestion.md @@ -10,16 +10,16 @@ layout: new-docs --- ```ts -function CreateQuestion(props?: CreateQuestionProps): Element; +function CreateQuestion(props: undefined | CreateQuestionProps): Element; ``` ## Parameters -| Parameter | Type | -| :-------- | :---------------------------------------------------- | -| `props?` | [`CreateQuestionProps`](./api/CreateQuestionProps) | +| Parameter | Type | +| :-------- | :------------------------------------------------------------------- | +| `props` | `undefined` \| [`CreateQuestionProps`](./api/CreateQuestionProps) | @@ -27,7 +27,7 @@ function CreateQuestion(props?: CreateQuestionProps): Element; -[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4313) diff --git a/_docs/master/embedding/sdk/api/snippets/EditableDashboard.md b/_docs/master/embedding/sdk/api/snippets/EditableDashboard.md index ac04f5dd59..9c29db2238 100644 --- a/_docs/master/embedding/sdk/api/snippets/EditableDashboard.md +++ b/_docs/master/embedding/sdk/api/snippets/EditableDashboard.md @@ -29,6 +29,6 @@ A dashboard component with the features available in the `InteractiveDashboard` -[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4313) diff --git a/_docs/master/embedding/sdk/api/snippets/IconName.md b/_docs/master/embedding/sdk/api/snippets/IconName.md index 61158e48be..2340a0ba3d 100644 --- a/_docs/master/embedding/sdk/api/snippets/IconName.md +++ b/_docs/master/embedding/sdk/api/snippets/IconName.md @@ -14,11 +14,11 @@ type IconName = | "string" | "number" | "function" - | "model" - | "table" - | "question" | "collection" | "dashboard" + | "question" + | "model" + | "table" | "revert" | "add" | "add_column" diff --git a/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md b/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md index 6cde9d0c98..9ee00ca286 100644 --- a/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md +++ b/_docs/master/embedding/sdk/api/snippets/InteractiveDashboard.md @@ -51,6 +51,6 @@ A dashboard component with drill downs, click behaviors, and the ability to view -[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4313) diff --git a/_docs/master/embedding/sdk/api/snippets/InteractiveQuestion.md b/_docs/master/embedding/sdk/api/snippets/InteractiveQuestion.md index fccb77cd50..4f781edfe0 100644 --- a/_docs/master/embedding/sdk/api/snippets/InteractiveQuestion.md +++ b/_docs/master/embedding/sdk/api/snippets/InteractiveQuestion.md @@ -13,15 +13,15 @@ layout: new-docs function InteractiveQuestion(props: InteractiveQuestionProps): Element; ``` -A question component with drill-downs enabled. +A component that renders an interactive question. ## Parameters -| Parameter | Type | -| :-------- | :-------------------------------------------------------------- | -| `props` | [`InteractiveQuestionProps`](./api/InteractiveQuestionProps) | +| Parameter | Type | Description | +| :-------- | :-------------------------------------------------------------- | :---------- | +| `props` | [`InteractiveQuestionProps`](./api/InteractiveQuestionProps) | | @@ -29,6 +29,6 @@ A question component with drill-downs enabled. -[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4313) diff --git a/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionComponents.md b/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionComponents.md new file mode 100644 index 0000000000..966993143c --- /dev/null +++ b/_docs/master/embedding/sdk/api/snippets/InteractiveQuestionComponents.md @@ -0,0 +1,863 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: InteractiveQuestionComponents +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/InteractiveQuestionComponents.md' +layout: new-docs +--- + +## InteractiveQuestion + + + + + +### BackButton() + + + +```ts +BackButton: (props: InteractiveQuestionBackButtonProps) => + | null + | Element; +``` + +**`Function`** + +A navigation button that returns to the previous view. +Only visible when rendered within the [InteractiveDashboardProps.renderDrillThroughQuestion](./api/StaticDashboardProps#renderdrillthroughquestion) prop. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :---------------------------------------------------------------------------------- | :---------- | +| `props` | [`InteractiveQuestionBackButtonProps`](./api/InteractiveQuestionBackButtonProps) | | + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### Breakout() + + + +```ts +Breakout: () => + | null + | Element; +``` + +**`Function`** + +A set of badges for managing data groupings (breakouts). +Uses question context for breakout functionality. + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### BreakoutDropdown() + + + +```ts +BreakoutDropdown: (props: InteractiveQuestionBreakoutDropdownProps) => + | null + | Element; +``` + +**`Function`** + +Dropdown button for the Breakout component. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :---------------------------------------------------------------------------------------------- | :---------- | +| `props` | [`InteractiveQuestionBreakoutDropdownProps`](./api/InteractiveQuestionBreakoutDropdownProps) | | + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### ChartTypeDropdown() + + + +```ts +ChartTypeDropdown: (props: MenuProps) => Element; +``` + +**`Function`** + +Dropdown for selecting the visualization type (bar chart, line chart, table, etc.). +Automatically updates to show recommended visualization types for the current data. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :------------------------------------------------------- | :---------- | +| `props` | [`MenuProps`](https://v7.mantine.dev/core/menu/?t=props) | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### ChartTypeSelector() + + + +```ts +ChartTypeSelector: (props: StackProps) => Element; +``` + +**`Function`** + +Detailed chart type selection interface with recommended visualization options. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :--------------------------------------------------------- | :---------- | +| `props` | [`StackProps`](https://v7.mantine.dev/core/stack/?t=props) | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### DownloadWidget() + + + +```ts +DownloadWidget: (props: StackProps) => + | null + | Element; +``` + +**`Function`** + +Provides a UI widget for downloading data in different formats (`CSV`, `XLSX`, `JSON`, and `PNG` depending on the visualization). + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :--------------------------------------------------------- | :---------- | +| `props` | [`StackProps`](https://v7.mantine.dev/core/stack/?t=props) | | + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### DownloadWidgetDropdown() + + + +```ts +DownloadWidgetDropdown: (props: PopoverProps) => Element; +``` + +**`Function`** + +Provides a button that contains a dropdown that shows the `DownloadWidget`. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :------------------------------------------------------------- | :---------- | +| `props` | [`PopoverProps`](https://v7.mantine.dev/core/popover/?t=props) | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### Editor() + + + +```ts +Editor: (props: InteractiveQuestionEditorProps) => + | undefined + | Element; +``` + +**`Function`** + +Advanced query editor that provides full access to question configuration. +Includes filtering, aggregation, custom expressions, and joins. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :-------------------------------------------------------------------------- | :---------- | +| `props` | [`InteractiveQuestionEditorProps`](./api/InteractiveQuestionEditorProps) | | + + + +#### Returns + + + +\| `undefined` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### EditorButton() + + + +```ts +EditorButton: (props: InteractiveQuestionEditorButtonProps) => + | undefined + | false + | Element; +``` + +**`Function`** + +Toggle button for showing/hiding the Editor interface. +In custom layouts, the `EditorButton` _must_ have an [InteractiveQuestionEditorButtonProps.onClick](./api/InteractiveQuestionEditorButtonProps#onclick)` handler or the button won't do anything when clicked. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :-------------------------------------------------------------------------------------- | :---------- | +| `props` | [`InteractiveQuestionEditorButtonProps`](./api/InteractiveQuestionEditorButtonProps) | | + + + +#### Returns + + + +\| `undefined` +\| `false` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### Filter() + + + +```ts +Filter: (props: InteractiveQuestionFilterProps) => Element; +``` + +**`Function`** + +A set of interactive filter badges that allow adding, editing, and removing filters. +Displays current filters as badges with an "Add another filter" option. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :-------------------------------------------------------------------------- | :---------- | +| `props` | [`InteractiveQuestionFilterProps`](./api/InteractiveQuestionFilterProps) | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### FilterDropdown() + + + +```ts +FilterDropdown: (props: InteractiveQuestionFilterDropdownProps) => + | null + | Element; +``` + +**`Function`** + +A dropdown button for the Filter component. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :------------------------------------------------------------------------------------------ | :---------- | +| `props` | [`InteractiveQuestionFilterDropdownProps`](./api/InteractiveQuestionFilterDropdownProps) | | + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### ~~Notebook()~~ + + + +```ts +Notebook: (props: InteractiveQuestionEditorProps) => + | undefined + | Element; +``` + +**`Function`** + +Advanced query editor that provides full access to question configuration. +Includes filtering, aggregation, custom expressions, and joins. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :-------------------------------------------------------------------------- | :---------- | +| `props` | [`InteractiveQuestionEditorProps`](./api/InteractiveQuestionEditorProps) | | + + + +#### Returns + + + +\| `undefined` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + + + +#### Deprecated + + + +Use `InteractiveQuestion.Editor` instead + +--- + + + +### ~~NotebookButton()~~ + + + +```ts +NotebookButton: (props: InteractiveQuestionEditorButtonProps) => + | undefined + | false + | Element; +``` + +**`Function`** + +Toggle button for showing/hiding the Editor interface. +In custom layouts, the `EditorButton` _must_ have an [InteractiveQuestionEditorButtonProps.onClick](./api/InteractiveQuestionEditorButtonProps#onclick)` handler or the button won't do anything when clicked. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :-------------------------------------------------------------------------------------- | :---------- | +| `props` | [`InteractiveQuestionEditorButtonProps`](./api/InteractiveQuestionEditorButtonProps) | | + + + +#### Returns + + + +\| `undefined` +\| `false` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + + + +#### Deprecated + + + +Use `InteractiveQuestion.EditorButton` instead + +--- + + + +### QuestionSettings() + + + +```ts +QuestionSettings: (props: StackProps) => + | null + | Element; +``` + +**`Function`** + +Settings panel for configuring visualization options like axes, colors, and formatting. +Uses question context for settings. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :--------------------------------------------------------- | :---------- | +| `props` | [`StackProps`](https://v7.mantine.dev/core/stack/?t=props) | | + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### QuestionSettingsDropdown() + + + +```ts +QuestionSettingsDropdown: ( + props?: InteractiveQuestionQuestionSettingsDropdownProps, +) => Element; +``` + +**`Function`** + +Dropdown button that contains the QuestionSettings component. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :-------------------------------------------------------------------------------------------------------------- | :---------- | +| `props?` | [`InteractiveQuestionQuestionSettingsDropdownProps`](./api/InteractiveQuestionQuestionSettingsDropdownProps) | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### QuestionVisualization() + + + +```ts +QuestionVisualization: ( + props: { + className?: string; + style?: CSSProperties; + } & { + height?: Height; + width?: Width; + } & {}, +) => Element; +``` + +**`Function`** + +The main visualization component that renders the question results as a chart, table, or other visualization type. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------- | +| `props` | \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `height?`: `Height`\<`string` \| `number`\>; `width?`: `Width`\<`string` \| `number`\>; \} & \{ \} | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### ResetButton() + + + +```ts +ResetButton: (props?: ButtonProps) => + | null + | Element; +``` + +**`Function`** + +Button to reset question modifications. Only appears when there are unsaved changes to the question. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :------------------------------------ | :---------- | +| `props?` | [`ButtonProps`](./api/ButtonProps) | | + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### SaveButton() + + + +```ts +SaveButton: (props?: InteractiveQuestionSaveButtonProps) => Element; +``` + +**`Function`** + +Button for saving question changes. Only enabled when there are unsaved modifications to the question. + +_Note_: Currently, in custom layouts, the `SaveButton` must have an `onClick` handler or the button will not do anything when clicked. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :---------------------------------------------------------------------------------- | :---------- | +| `props?` | [`InteractiveQuestionSaveButtonProps`](./api/InteractiveQuestionSaveButtonProps) | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### SaveQuestionForm() + + + +```ts +SaveQuestionForm: (props: InteractiveQuestionSaveQuestionFormProps) => + | null + | Element; +``` + +**`Function`** + +Form for saving a question, including title and description. When saved: + +- For existing questions: Calls [SdkQuestionProps.onSave](./api/SdkQuestionProps#onsave) +- Both callbacks receive the updated question object +- Form can be cancelled via the [InteractiveQuestionSaveQuestionFormProps.onCancel](./api/InteractiveQuestionSaveQuestionFormProps#oncancel) + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :---------------------------------------------------------------------------------------------- | :---------- | +| `props` | [`InteractiveQuestionSaveQuestionFormProps`](./api/InteractiveQuestionSaveQuestionFormProps) | | + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### Summarize() + + + +```ts +Summarize: () => Element; +``` + +**`Function`** + +Interface for adding and managing data summaries (like counts, sums, averages). Displays as a set of badges. +Uses question context for summarization functionality. + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### SummarizeDropdown() + + + +```ts +SummarizeDropdown: (props: InteractiveQuestionSummarizeDropdownProps) => + Element; +``` + +**`Function`** + +Dropdown button for the Summarize component. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :------------------------------------------------------------------------------------------------ | :---------- | +| `props` | [`InteractiveQuestionSummarizeDropdownProps`](./api/InteractiveQuestionSummarizeDropdownProps) | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### Title() + + + +```ts +Title: (props: { + className?: string; + style?: CSSProperties; +}) => + | undefined + | Element; +``` + +**`Function`** + +Displays a title based on the question's state. Shows: + +- The question's display name if it's saved +- An auto-generated description for ad-hoc questions (non-native queries) + + + +#### Parameters + + + +| Parameter | Type | Description | +| :----------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------- | +| `props` | \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} | | +| `props.className?` | `string` | A custom class name to be added to the root element. | +| `props.style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | + + + +#### Returns + + + +\| `undefined` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### VisualizationButton() + + + +```ts +VisualizationButton: () => + | null + | Element; +``` + +**`Function`** + +A button that triggers the visualization of the current question. + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + + diff --git a/_docs/master/embedding/sdk/api/snippets/MetabaseProviderProps.md b/_docs/master/embedding/sdk/api/snippets/MetabaseProviderProps.md index 0aca6501f6..078e72d276 100644 --- a/_docs/master/embedding/sdk/api/snippets/MetabaseProviderProps.md +++ b/_docs/master/embedding/sdk/api/snippets/MetabaseProviderProps.md @@ -11,17 +11,6 @@ layout: new-docs **`Expand`** -## Extends - - - -- [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys)\<\{ - `className?`: `string`; - `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); - \}, `"style"`\> - - - ## Properties @@ -31,7 +20,7 @@ layout: new-docs | `allowConsoleLog?` | `boolean` | Whether to allow logging to the DevTools console. Defaults to true. | | `authConfig` | [`MetabaseAuthConfig`](./api/MetabaseAuthConfig) | Defines how to authenticate with Metabase. | | `children` | [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | The children of the MetabaseProvider component. | -| `className?` | `string` | A custom class name to be added to the root element. | +| ~~`className?`~~ | `string` | A custom class name to be added to the root element. **Deprecated** This prop is not used anymore. | | `errorComponent?` | [`SdkErrorComponent`](./api/SdkErrorComponent) | A custom error component to display when the SDK encounters an error. | | `eventHandlers?` | [`SdkEventHandlersConfig`](./api/SdkEventHandlersConfig) | See [Global event handlers](/docs/master/embedding/sdk/config#global-event-handlers). | | `loaderComponent?` | () => [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4240) | A custom loader component to display while the SDK is loading. | diff --git a/_docs/master/embedding/sdk/api/snippets/MetabotQuestion.md b/_docs/master/embedding/sdk/api/snippets/MetabotQuestion.md new file mode 100644 index 0000000000..e9165a11da --- /dev/null +++ b/_docs/master/embedding/sdk/api/snippets/MetabotQuestion.md @@ -0,0 +1,34 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: MetabotQuestion +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/MetabotQuestion.md' +layout: new-docs +--- + +```ts +function MetabotQuestion(props: object): Element; +``` + +A component that renders a metabot question. + +## Parameters + + + +| Parameter | Type | +| :-------- | :------- | +| `props` | `object` | + + + +## Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4313) + + diff --git a/_docs/master/embedding/sdk/api/snippets/SdkErrorComponent.md b/_docs/master/embedding/sdk/api/snippets/SdkErrorComponent.md index bf761482fe..c608838904 100644 --- a/_docs/master/embedding/sdk/api/snippets/SdkErrorComponent.md +++ b/_docs/master/embedding/sdk/api/snippets/SdkErrorComponent.md @@ -10,16 +10,19 @@ layout: new-docs --- ```ts -type SdkErrorComponent = ({ message }: SdkErrorComponentProps) => JSX_2.Element; +type SdkErrorComponent = ({ + type, + message, +}: SdkErrorComponentProps) => JSX_3.Element; ``` ## Parameters -| Parameter | Type | -| :------------- | :---------------------------------------------------------- | -| `{ message, }` | [`SdkErrorComponentProps`](./api/SdkErrorComponentProps) | +| Parameter | Type | +| :------------------- | :---------------------------------------------------------- | +| `{ type, message, }` | [`SdkErrorComponentProps`](./api/SdkErrorComponentProps) | @@ -27,6 +30,6 @@ type SdkErrorComponent = ({ message }: SdkErrorComponentProps) => JSX_2.Element; -[`JSX_2.Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4240) +[`JSX_3.Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4240) diff --git a/_docs/master/embedding/sdk/api/snippets/SdkErrorComponentProps.md b/_docs/master/embedding/sdk/api/snippets/SdkErrorComponentProps.md index 5634b5a115..42bd5c2a70 100644 --- a/_docs/master/embedding/sdk/api/snippets/SdkErrorComponentProps.md +++ b/_docs/master/embedding/sdk/api/snippets/SdkErrorComponentProps.md @@ -12,6 +12,8 @@ layout: new-docs ```ts type SdkErrorComponentProps = { message: ReactNode; + onClose?: () => void; + type?: "default" | "floating"; }; ``` @@ -19,8 +21,10 @@ type SdkErrorComponentProps = { -| Property | Type | -| :----------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------ | -| `message` | [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | +| Property | Type | +| :------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------ | +| `message` | [`ReactNode`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L478) | +| `onClose?` | () => `void` | +| `type?` | `"default"` \| `"floating"` | diff --git a/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md b/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md index a2e705acfe..7ac0fa7d60 100644 --- a/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md +++ b/_docs/master/embedding/sdk/api/snippets/StaticDashboard.md @@ -51,6 +51,6 @@ A lightweight dashboard component. -[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4313) diff --git a/_docs/master/embedding/sdk/api/snippets/StaticQuestion.md b/_docs/master/embedding/sdk/api/snippets/StaticQuestion.md index 43d5fd95fc..dc7706dbbe 100644 --- a/_docs/master/embedding/sdk/api/snippets/StaticQuestion.md +++ b/_docs/master/embedding/sdk/api/snippets/StaticQuestion.md @@ -10,18 +10,18 @@ layout: new-docs --- ```ts -function StaticQuestion(__namedParameters: StaticQuestionProps): null | Element; +function StaticQuestion(props: StaticQuestionProps): Element; ``` -A question component without drill-downs. +A component that renders a static question. ## Parameters -| Parameter | Type | -| :------------------ | :---------------------------------------------------- | -| `__namedParameters` | [`StaticQuestionProps`](./api/StaticQuestionProps) | +| Parameter | Type | +| :-------- | :---------------------------------------------------- | +| `props` | [`StaticQuestionProps`](./api/StaticQuestionProps) | @@ -29,7 +29,6 @@ A question component without drill-downs. -\| `null` -\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4313) +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L4313) diff --git a/_docs/master/embedding/sdk/api/snippets/StaticQuestionComponents.md b/_docs/master/embedding/sdk/api/snippets/StaticQuestionComponents.md new file mode 100644 index 0000000000..75f21b6c3a --- /dev/null +++ b/_docs/master/embedding/sdk/api/snippets/StaticQuestionComponents.md @@ -0,0 +1,549 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: StaticQuestionComponents +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/StaticQuestionComponents.md' +layout: new-docs +--- + +## InteractiveQuestion + + + + + +### Breakout() + + + +```ts +Breakout: () => + | null + | Element; +``` + +**`Function`** + +A set of badges for managing data groupings (breakouts). +Uses question context for breakout functionality. + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### BreakoutDropdown() + + + +```ts +BreakoutDropdown: (props: InteractiveQuestionBreakoutDropdownProps) => + | null + | Element; +``` + +**`Function`** + +Dropdown button for the Breakout component. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :---------------------------------------------------------------------------------------------- | :---------- | +| `props` | [`InteractiveQuestionBreakoutDropdownProps`](./api/InteractiveQuestionBreakoutDropdownProps) | | + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### ChartTypeDropdown() + + + +```ts +ChartTypeDropdown: (props: MenuProps) => Element; +``` + +**`Function`** + +Dropdown for selecting the visualization type (bar chart, line chart, table, etc.). +Automatically updates to show recommended visualization types for the current data. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :------------------------------------------------------- | :---------- | +| `props` | [`MenuProps`](https://v7.mantine.dev/core/menu/?t=props) | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### ChartTypeSelector() + + + +```ts +ChartTypeSelector: (props: StackProps) => Element; +``` + +**`Function`** + +Detailed chart type selection interface with recommended visualization options. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :--------------------------------------------------------- | :---------- | +| `props` | [`StackProps`](https://v7.mantine.dev/core/stack/?t=props) | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### DownloadWidget() + + + +```ts +DownloadWidget: (props: StackProps) => + | null + | Element; +``` + +**`Function`** + +Provides a UI widget for downloading data in different formats (`CSV`, `XLSX`, `JSON`, and `PNG` depending on the visualization). + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :--------------------------------------------------------- | :---------- | +| `props` | [`StackProps`](https://v7.mantine.dev/core/stack/?t=props) | | + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### DownloadWidgetDropdown() + + + +```ts +DownloadWidgetDropdown: (props: PopoverProps) => Element; +``` + +**`Function`** + +Provides a button that contains a dropdown that shows the `DownloadWidget`. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :------------------------------------------------------------- | :---------- | +| `props` | [`PopoverProps`](https://v7.mantine.dev/core/popover/?t=props) | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### Filter() + + + +```ts +Filter: (props: InteractiveQuestionFilterProps) => Element; +``` + +**`Function`** + +A set of interactive filter badges that allow adding, editing, and removing filters. +Displays current filters as badges with an "Add another filter" option. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :-------------------------------------------------------------------------- | :---------- | +| `props` | [`InteractiveQuestionFilterProps`](./api/InteractiveQuestionFilterProps) | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### FilterDropdown() + + + +```ts +FilterDropdown: (props: InteractiveQuestionFilterDropdownProps) => + | null + | Element; +``` + +**`Function`** + +A dropdown button for the Filter component. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :------------------------------------------------------------------------------------------ | :---------- | +| `props` | [`InteractiveQuestionFilterDropdownProps`](./api/InteractiveQuestionFilterDropdownProps) | | + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### QuestionSettings() + + + +```ts +QuestionSettings: (props: StackProps) => + | null + | Element; +``` + +**`Function`** + +Settings panel for configuring visualization options like axes, colors, and formatting. +Uses question context for settings. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :--------------------------------------------------------- | :---------- | +| `props` | [`StackProps`](https://v7.mantine.dev/core/stack/?t=props) | | + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### QuestionSettingsDropdown() + + + +```ts +QuestionSettingsDropdown: ( + props?: InteractiveQuestionQuestionSettingsDropdownProps, +) => Element; +``` + +**`Function`** + +Dropdown button that contains the QuestionSettings component. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :-------------------------------------------------------------------------------------------------------------- | :---------- | +| `props?` | [`InteractiveQuestionQuestionSettingsDropdownProps`](./api/InteractiveQuestionQuestionSettingsDropdownProps) | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### QuestionVisualization() + + + +```ts +QuestionVisualization: ( + props: { + className?: string; + style?: CSSProperties; + } & { + height?: Height; + width?: Width; + } & {}, +) => Element; +``` + +**`Function`** + +The main visualization component that renders the question results as a chart, table, or other visualization type. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------- | +| `props` | \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} & \{ `height?`: `Height`\<`string` \| `number`\>; `width?`: `Width`\<`string` \| `number`\>; \} & \{ \} | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### ResetButton() + + + +```ts +ResetButton: (props?: ButtonProps) => + | null + | Element; +``` + +**`Function`** + +Button to reset question modifications. Only appears when there are unsaved changes to the question. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :------------------------------------ | :---------- | +| `props?` | [`ButtonProps`](./api/ButtonProps) | | + + + +#### Returns + + + +\| `null` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### Summarize() + + + +```ts +Summarize: () => Element; +``` + +**`Function`** + +Interface for adding and managing data summaries (like counts, sums, averages). Displays as a set of badges. +Uses question context for summarization functionality. + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### SummarizeDropdown() + + + +```ts +SummarizeDropdown: (props: InteractiveQuestionSummarizeDropdownProps) => + Element; +``` + +**`Function`** + +Dropdown button for the Summarize component. + + + +#### Parameters + + + +| Parameter | Type | Description | +| :-------- | :------------------------------------------------------------------------------------------------ | :---------- | +| `props` | [`InteractiveQuestionSummarizeDropdownProps`](./api/InteractiveQuestionSummarizeDropdownProps) | | + + + +#### Returns + + + +[`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + +--- + + + +### Title() + + + +```ts +Title: (props: { + className?: string; + style?: CSSProperties; +}) => + | undefined + | Element; +``` + +**`Function`** + +Displays a title based on the question's state. Shows: + +- The question's display name if it's saved +- An auto-generated description for ad-hoc questions (non-native queries) + + + +#### Parameters + + + +| Parameter | Type | Description | +| :----------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------- | +| `props` | \{ `className?`: `string`; `style?`: [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579); \} | | +| `props.className?` | `string` | A custom class name to be added to the root element. | +| `props.style?` | [`CSSProperties`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/index.d.ts#L2579) | A custom style object to be added to the root element. | + + + +#### Returns + + + +\| `undefined` +\| [`Element`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/0b728411cd1dfb4bd26992bb35a73cf8edaa22e7/types/react/jsx-runtime.d.ts#L6) + + diff --git a/_docs/master/embedding/sdk/api/snippets/index.md b/_docs/master/embedding/sdk/api/snippets/index.md index 4982932825..ec10fcd6db 100644 --- a/_docs/master/embedding/sdk/api/snippets/index.md +++ b/_docs/master/embedding/sdk/api/snippets/index.md @@ -21,9 +21,7 @@ layout: new-docs | Name | Description | | :-------------------------------------------------------------- | :------------------ | | [CreateDashboardModal](./api/CreateDashboardModal) | Creates a dashboard | -| [useCreateDashboardApi](./api/useCreateDashboardApi) | Creates a dashboard | | [CreateDashboardModalProps](./api/CreateDashboardModalProps) | - | -| [CreateDashboardValues](./api/CreateDashboardValues) | - | ## CreateQuestion @@ -45,30 +43,30 @@ layout: new-docs ## InteractiveQuestion -| Name | Description | -| :------------------------------------------------------------------------------------------------------------ | :--------------------------------------------- | -| [InteractiveQuestion](./api/InteractiveQuestion) | A question component with drill-downs enabled. | -| [DrillThroughQuestionProps](./api/DrillThroughQuestionProps) | Props for the drill-through question | -| [InteractiveQuestionEditorButtonProps](./api/InteractiveQuestionEditorButtonProps) | - | -| [InteractiveQuestionEditorProps](./api/InteractiveQuestionEditorProps) | - | -| [InteractiveQuestionProps](./api/InteractiveQuestionProps) | - | -| [InteractiveQuestionQuestionSettingsDropdownProps](./api/InteractiveQuestionQuestionSettingsDropdownProps) | - | -| [InteractiveQuestionQuestionVisualizationProps](./api/InteractiveQuestionQuestionVisualizationProps) | - | -| [InteractiveQuestionResetButtonProps](./api/InteractiveQuestionResetButtonProps) | - | -| [InteractiveQuestionSaveQuestionFormProps](./api/InteractiveQuestionSaveQuestionFormProps) | - | -| [InteractiveQuestionTitleProps](./api/InteractiveQuestionTitleProps) | - | -| [SdkQuestionProps](./api/SdkQuestionProps) | - | -| [InteractiveQuestionBackButtonProps](./api/InteractiveQuestionBackButtonProps) | - | -| [InteractiveQuestionBreakoutDropdownProps](./api/InteractiveQuestionBreakoutDropdownProps) | - | -| [InteractiveQuestionChartTypeDropdownProps](./api/InteractiveQuestionChartTypeDropdownProps) | - | -| [InteractiveQuestionChartTypeSelectorProps](./api/InteractiveQuestionChartTypeSelectorProps) | - | -| [InteractiveQuestionDownloadWidgetDropdownProps](./api/InteractiveQuestionDownloadWidgetDropdownProps) | - | -| [InteractiveQuestionDownloadWidgetProps](./api/InteractiveQuestionDownloadWidgetProps) | - | -| [InteractiveQuestionFilterDropdownProps](./api/InteractiveQuestionFilterDropdownProps) | - | -| [InteractiveQuestionFilterProps](./api/InteractiveQuestionFilterProps) | - | -| [InteractiveQuestionQuestionSettingsProps](./api/InteractiveQuestionQuestionSettingsProps) | - | -| [InteractiveQuestionSaveButtonProps](./api/InteractiveQuestionSaveButtonProps) | - | -| [InteractiveQuestionSummarizeDropdownProps](./api/InteractiveQuestionSummarizeDropdownProps) | - | +| Name | Description | +| :------------------------------------------------------------------------------------------------------------ | :------------------------------------------------ | +| [InteractiveQuestion](./api/InteractiveQuestion) | A component that renders an interactive question. | +| [DrillThroughQuestionProps](./api/DrillThroughQuestionProps) | Props for the drill-through question | +| [InteractiveQuestionEditorButtonProps](./api/InteractiveQuestionEditorButtonProps) | - | +| [InteractiveQuestionEditorProps](./api/InteractiveQuestionEditorProps) | - | +| [InteractiveQuestionProps](./api/InteractiveQuestionProps) | - | +| [InteractiveQuestionQuestionSettingsDropdownProps](./api/InteractiveQuestionQuestionSettingsDropdownProps) | - | +| [InteractiveQuestionQuestionVisualizationProps](./api/InteractiveQuestionQuestionVisualizationProps) | - | +| [InteractiveQuestionResetButtonProps](./api/InteractiveQuestionResetButtonProps) | - | +| [InteractiveQuestionSaveQuestionFormProps](./api/InteractiveQuestionSaveQuestionFormProps) | - | +| [InteractiveQuestionTitleProps](./api/InteractiveQuestionTitleProps) | - | +| [SdkQuestionProps](./api/SdkQuestionProps) | - | +| [InteractiveQuestionBackButtonProps](./api/InteractiveQuestionBackButtonProps) | - | +| [InteractiveQuestionBreakoutDropdownProps](./api/InteractiveQuestionBreakoutDropdownProps) | - | +| [InteractiveQuestionChartTypeDropdownProps](./api/InteractiveQuestionChartTypeDropdownProps) | - | +| [InteractiveQuestionChartTypeSelectorProps](./api/InteractiveQuestionChartTypeSelectorProps) | - | +| [InteractiveQuestionDownloadWidgetDropdownProps](./api/InteractiveQuestionDownloadWidgetDropdownProps) | - | +| [InteractiveQuestionDownloadWidgetProps](./api/InteractiveQuestionDownloadWidgetProps) | - | +| [InteractiveQuestionFilterDropdownProps](./api/InteractiveQuestionFilterDropdownProps) | - | +| [InteractiveQuestionFilterProps](./api/InteractiveQuestionFilterProps) | - | +| [InteractiveQuestionQuestionSettingsProps](./api/InteractiveQuestionQuestionSettingsProps) | - | +| [InteractiveQuestionSaveButtonProps](./api/InteractiveQuestionSaveButtonProps) | - | +| [InteractiveQuestionSummarizeDropdownProps](./api/InteractiveQuestionSummarizeDropdownProps) | - | ## MetabaseProvider @@ -82,21 +80,28 @@ layout: new-docs | [MetabaseAuthConfigWithJwt](./api/MetabaseAuthConfigWithJwt) | - | | [MetabaseAuthConfigWithSaml](./api/MetabaseAuthConfigWithSaml) | - | +## MetabotQuestion + +| Function | Description | +| :------------------------------------------ | :------------------------------------------- | +| [MetabotQuestion](./api/MetabotQuestion) | A component that renders a metabot question. | + ## StaticQuestion -| Name | Description | -| :-------------------------------------------------- | :---------------------------------------- | -| [StaticQuestion](./api/StaticQuestion) | A question component without drill-downs. | -| [StaticQuestionProps](./api/StaticQuestionProps) | - | +| Name | Description | +| :-------------------------------------------------- | :------------------------------------------ | +| [StaticQuestion](./api/StaticQuestion) | A component that renders a static question. | +| [StaticQuestionProps](./api/StaticQuestionProps) | - | ## other | Name | Description | | :---------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [BaseSdkQuestionProps](./api/BaseSdkQuestionProps) | - | +| [InteractiveQuestionComponents](./api/InteractiveQuestionComponents) | - | | [MetabaseColors](./api/MetabaseColors) | - | | [MetabaseQuestion](./api/MetabaseQuestion) | - | | [MetabaseTheme](./api/MetabaseTheme) | Theme configuration for embedded Metabase components. | +| [StaticQuestionComponents](./api/StaticQuestionComponents) | - | | [ButtonProps](./api/ButtonProps) | - | | [ChartColor](./api/ChartColor) | - | | [CollectionBrowserListColumns](./api/CollectionBrowserListColumns) | - | @@ -135,3 +140,34 @@ layout: new-docs | [SdkUserId](./api/SdkUserId) | - | | [SqlParameterValues](./api/SqlParameterValues) | - | | [UserBackendJwtResponse](./api/UserBackendJwtResponse) | - | + +## useApplicationName + +| Function | Description | +| :------------------------------------------------ | :-------------------------------------------------------------------------------------- | +| [useApplicationName](./api/useApplicationName) | Returns application name. Returns `null` until the SDK is fully loaded and initialized. | + +## useAvailableFonts + +| Function | Description | +| :---------------------------------------------- | :------------------------------------------------------------------------------------- | +| [useAvailableFonts](./api/useAvailableFonts) | Returns available fonts. Returns `null` until the SDK is fully loaded and initialized. | + +## useCreateDashboardApi + +| Name | Description | +| :------------------------------------------------------ | :--------------------------------------------------------------------------------- | +| [useCreateDashboardApi](./api/useCreateDashboardApi) | Creates a dashboard. Returns `null` until the SDK is fully loaded and initialized. | +| [CreateDashboardValues](./api/CreateDashboardValues) | - | + +## useCurrentUser + +| Function | Description | +| :---------------------------------------- | :-------------------------------------------------------------------------------------- | +| [useCurrentUser](./api/useCurrentUser) | Returns the current user. Returns `null` until the SDK is fully loaded and initialized. | + +## useMetabaseAuthStatus + +| Function | Description | +| :------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------- | +| [useMetabaseAuthStatus](./api/useMetabaseAuthStatus) | Returns the authentication status of the current user in the Metabase embedding SDK. Returns `null` until the SDK is fully loaded and initialized. | diff --git a/_docs/master/embedding/sdk/api/snippets/useApplicationName.md b/_docs/master/embedding/sdk/api/snippets/useApplicationName.md new file mode 100644 index 0000000000..30ab855a9e --- /dev/null +++ b/_docs/master/embedding/sdk/api/snippets/useApplicationName.md @@ -0,0 +1,25 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: useApplicationName +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/useApplicationName.md' +layout: new-docs +--- + +```ts +function useApplicationName(): null | string; +``` + +Returns application name. +Returns `null` until the SDK is fully loaded and initialized. + +## Returns + + + +`null` \| `string` + + diff --git a/_docs/master/embedding/sdk/api/snippets/useAvailableFonts.md b/_docs/master/embedding/sdk/api/snippets/useAvailableFonts.md new file mode 100644 index 0000000000..9899c639da --- /dev/null +++ b/_docs/master/embedding/sdk/api/snippets/useAvailableFonts.md @@ -0,0 +1,30 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: useAvailableFonts +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/useAvailableFonts.md' +layout: new-docs +--- + +```ts +function useAvailableFonts(): null | { + availableFonts: string[]; +}; +``` + +Returns available fonts. +Returns `null` until the SDK is fully loaded and initialized. + +## Returns + + + +\| `null` +\| \{ +`availableFonts`: `string`[]; +\} + + diff --git a/_docs/master/embedding/sdk/api/snippets/useCreateDashboardApi.md b/_docs/master/embedding/sdk/api/snippets/useCreateDashboardApi.md index f243f28e24..7ccd60dd21 100644 --- a/_docs/master/embedding/sdk/api/snippets/useCreateDashboardApi.md +++ b/_docs/master/embedding/sdk/api/snippets/useCreateDashboardApi.md @@ -10,28 +10,23 @@ layout: new-docs --- ```ts -function useCreateDashboardApi(): { +function useCreateDashboardApi(): null | { createDashboard: ( options: CreateDashboardValues, ) => Promise; }; ``` -Creates a dashboard +Creates a dashboard. +Returns `null` until the SDK is fully loaded and initialized. ## Returns -```ts -{ - createDashboard: (options: CreateDashboardValues) => - Promise; -} -``` - -| Name | Type | Description | -| :------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------- | -| `createDashboard()` | (`options`: [`CreateDashboardValues`](./api/CreateDashboardValues)) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`MetabaseDashboard`](./api/MetabaseDashboard)\> | | +\| `null` +\| \{ +`createDashboard`: (`options`: [`CreateDashboardValues`](./api/CreateDashboardValues)) => [`Promise`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)\<[`MetabaseDashboard`](./api/MetabaseDashboard)\>; +\} diff --git a/_docs/master/embedding/sdk/api/snippets/useCurrentUser.md b/_docs/master/embedding/sdk/api/snippets/useCurrentUser.md new file mode 100644 index 0000000000..7948e8bf6a --- /dev/null +++ b/_docs/master/embedding/sdk/api/snippets/useCurrentUser.md @@ -0,0 +1,25 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: useCurrentUser +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/useCurrentUser.md' +layout: new-docs +--- + +```ts +function useCurrentUser(): null | MetabaseUser; +``` + +Returns the current user. +Returns `null` until the SDK is fully loaded and initialized. + +## Returns + + + +`null` \| [`MetabaseUser`](./api/MetabaseUser) + + diff --git a/_docs/master/embedding/sdk/api/snippets/useMetabaseAuthStatus.md b/_docs/master/embedding/sdk/api/snippets/useMetabaseAuthStatus.md new file mode 100644 index 0000000000..adbeb70308 --- /dev/null +++ b/_docs/master/embedding/sdk/api/snippets/useMetabaseAuthStatus.md @@ -0,0 +1,25 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: useMetabaseAuthStatus +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/snippets/useMetabaseAuthStatus.md' +layout: new-docs +--- + +```ts +function useMetabaseAuthStatus(): null | LoginStatus; +``` + +Returns the authentication status of the current user in the Metabase embedding SDK. +Returns `null` until the SDK is fully loaded and initialized. + +## Returns + + + +`null` \| [`LoginStatus`](./api/LoginStatus) + + diff --git a/_docs/master/embedding/sdk/api/useApplicationName.html b/_docs/master/embedding/sdk/api/useApplicationName.html new file mode 100644 index 0000000000..66f56cd47d --- /dev/null +++ b/_docs/master/embedding/sdk/api/useApplicationName.html @@ -0,0 +1,14 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: useApplicationName +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/useApplicationName.html' +layout: docs-api +--- + +useApplicationName | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

              Function useApplicationName

              • Returns application name. +Returns null until the SDK is fully loaded and initialized.

                +

                Returns null | string

              diff --git a/_docs/master/embedding/sdk/api/useAvailableFonts.html b/_docs/master/embedding/sdk/api/useAvailableFonts.html new file mode 100644 index 0000000000..8c55266436 --- /dev/null +++ b/_docs/master/embedding/sdk/api/useAvailableFonts.html @@ -0,0 +1,14 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: useAvailableFonts +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/useAvailableFonts.html' +layout: docs-api +--- + +useAvailableFonts | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

              Function useAvailableFonts

              • Returns available fonts. +Returns null until the SDK is fully loaded and initialized.

                +

                Returns null | { availableFonts: string[] }

              diff --git a/_docs/master/embedding/sdk/api/useCreateDashboardApi.html b/_docs/master/embedding/sdk/api/useCreateDashboardApi.html index 1e3c5bb7f6..b921fe8b2b 100644 --- a/_docs/master/embedding/sdk/api/useCreateDashboardApi.html +++ b/_docs/master/embedding/sdk/api/useCreateDashboardApi.html @@ -9,5 +9,6 @@ layout: docs-api --- -useCreateDashboardApi | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

              Function useCreateDashboardApi

              +useCreateDashboardApi | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

              Function useCreateDashboardApi

              diff --git a/_docs/master/embedding/sdk/api/useCurrentUser.html b/_docs/master/embedding/sdk/api/useCurrentUser.html new file mode 100644 index 0000000000..0e17765d45 --- /dev/null +++ b/_docs/master/embedding/sdk/api/useCurrentUser.html @@ -0,0 +1,14 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: useCurrentUser +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/useCurrentUser.html' +layout: docs-api +--- + +useCurrentUser | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

              Function useCurrentUser

              • Returns the current user. +Returns null until the SDK is fully loaded and initialized.

                +

                Returns null | MetabaseUser

              diff --git a/_docs/master/embedding/sdk/api/useMetabaseAuthStatus.html b/_docs/master/embedding/sdk/api/useMetabaseAuthStatus.html new file mode 100644 index 0000000000..435ad60d3f --- /dev/null +++ b/_docs/master/embedding/sdk/api/useMetabaseAuthStatus.html @@ -0,0 +1,14 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: useMetabaseAuthStatus +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/api/useMetabaseAuthStatus.html' +layout: docs-api +--- + +useMetabaseAuthStatus | Embedded analytics SDK API{% include docs/embedded-analytics-sdk-metadata.html %}

              Function useMetabaseAuthStatus

              • Returns the authentication status of the current user in the Metabase embedding SDK. +Returns null until the SDK is fully loaded and initialized.

                +

                Returns null | LoginStatus

              diff --git a/_docs/master/embedding/sdk/dashboards.md b/_docs/master/embedding/sdk/dashboards.md index b604d723a4..8e9845b5a2 100644 --- a/_docs/master/embedding/sdk/dashboards.md +++ b/_docs/master/embedding/sdk/dashboards.md @@ -144,6 +144,8 @@ Creating a dashboard could be done with `useCreateDashboardApi` hook or `CreateD Use this hook if you'd like to have total control over the UI and settings. +_Note_: until the Embedding SDK is fully loaded and initialized, the hook returns `null`. + #### API Reference - [Hook](./api/useCreateDashboardApi) diff --git a/_docs/master/embedding/sdk/next-js.md b/_docs/master/embedding/sdk/next-js.md index 98041a14a9..13f8627103 100644 --- a/_docs/master/embedding/sdk/next-js.md +++ b/_docs/master/embedding/sdk/next-js.md @@ -17,39 +17,15 @@ layout: new-docs Some notes on using the Embedded analytics SDK with [Next.js](https://nextjs.org/). The SDK is tested to work with Next.js 14, although it may work with other versions. -## SDK components with Server Side Rendering (SSR) or React Server Components - -For now, the SDK components are only supported for client-side rendering. To use the SDK components with server-side rendering, or with React Server components, you can either use a compatibility layer or manually wrap the components. - -### Compatibility layer for server-side rendering (SSR) (EXPERIMENTAL) - -To use SDK components with Next.js, the SDK provides an experimental compatibility layer that [wraps all the components with dynamic imports and disables SSR](https://nextjs.org/docs/pages/building-your-application/optimizing/lazy-loading#with-no-ssr). To work with the app router, this compatibility layer uses `use client`. - -To use the compatibility layer, change your imports from `@metabase/embedding-sdk-react` to `@metabase/embedding-sdk-react/nextjs`. - -See a [sample Next.js app that uses this compatibility layer](https://github.com/metabase/metabase-nextjs-sdk-embedding-sample). - -## Manual wrapping of the components +See a [sample Next.js app that uses the SDK](https://github.com/metabase/metabase-nextjs-sdk-embedding-sample). -If you want to customize the loading of the components, you can create your own wrapper. - -In your app, create a `metabase` directory, and add a `EmbeddingSdkProvider.tsx` file to that directory. This file will contain the provider with the appropriate configuration. - -```tsx -{% include_file "{{ dirname }}/snippets/next-js/manual-wrapping-embedded-sdk-provider.tsx" snippet="example" %} -``` - -Next, add an `index.tsx` file to that `metabase` directory. This file will include the `use client` directive, and it'll export a lazy-loaded version of the `EmbeddingSdkProvider` with SSR disabled. +## SDK components with Server Side Rendering (SSR) or React Server Components -```tsx -{% include_file "{{ dirname }}/snippets/next-js/manual-wrapping-entrypoint.tsx" snippet="example" %} -``` +The SDK components render only on the client side and not on the server side. -You can now import components like so: +### Compatibility layer for server-side rendering (SSR) (DEPRECATED) -```tsx -{% include_file "{{ dirname }}/snippets/next-js/manual-wrapping-usage.tsx" %} -``` +_Note_: Compatibility layer for server-side rendering (SSR) is no more needed and was deprecated. If you use it, change your imports from `@metabase/embedding-sdk-react/next` to `@metabase/embedding-sdk-react`. ## Handling authentication diff --git a/_docs/master/embedding/sdk/snippets/appearance/customizing-loader-and-components.tsx b/_docs/master/embedding/sdk/snippets/appearance/customizing-loader-and-components.tsx index 37abcf1022..61da5d98f6 100644 --- a/_docs/master/embedding/sdk/snippets/appearance/customizing-loader-and-components.tsx +++ b/_docs/master/embedding/sdk/snippets/appearance/customizing-loader-and-components.tsx @@ -16,7 +16,19 @@ const Example = () => { authConfig={authConfig} // [] loaderComponent={() =>
              Analytics is loading...
              } - errorComponent={({ message }) =>
              There was an error: {message}
              } + errorComponent={({ type, message, onClose }) => { + switch (type) { + case "floating": + return ( +
              + There was an error: {message}. X +
              + ); + case "default": + default: + return
              There was an error: {message}
              ; + } + }} > diff --git a/_docs/master/embedding/sdk/snippets/authentication/get-auth-status.tsx b/_docs/master/embedding/sdk/snippets/authentication/get-auth-status.tsx index 0c8db4349a..a4eb94a5c6 100644 --- a/_docs/master/embedding/sdk/snippets/authentication/get-auth-status.tsx +++ b/_docs/master/embedding/sdk/snippets/authentication/get-auth-status.tsx @@ -7,11 +7,11 @@ const Example = () => { // [] const auth = useMetabaseAuthStatus(); - if (auth.status === "error") { + if (auth?.status === "error") { return
              Failed to authenticate: {auth.error.message}
              ; } - if (auth.status === "success") { + if (auth?.status === "success") { return ; } // [] diff --git a/_docs/master/embedding/sdk/snippets/dashboards/create-dashboard.tsx b/_docs/master/embedding/sdk/snippets/dashboards/create-dashboard.tsx index 980ff44245..ee458e3f0c 100644 --- a/_docs/master/embedding/sdk/snippets/dashboards/create-dashboard.tsx +++ b/_docs/master/embedding/sdk/snippets/dashboards/create-dashboard.tsx @@ -14,10 +14,15 @@ const ExampleHook = () => { }; // [] - const { createDashboard } = useCreateDashboardApi(); + const hookResult = useCreateDashboardApi(); const handleDashboardCreate = async () => { - const dashboard = await createDashboard(options); + // hookResult is `null` until the SDK is fully loaded and initialized + if (!hookResult) { + return; + } + + const dashboard = await hookResult.createDashboard(options); // do something with created empty dashboard, e.g., use the dashboard in EditableDashboard component }; diff --git a/_docs/master/embedding/sdk/snippets/next-js/EmbeddingSdkProvider.tsx b/_docs/master/embedding/sdk/snippets/next-js/EmbeddingSdkProvider.tsx deleted file mode 100644 index 02cc7ba8bb..0000000000 --- a/_docs/master/embedding/sdk/snippets/next-js/EmbeddingSdkProvider.tsx +++ /dev/null @@ -1,2 +0,0 @@ -// Required to properly resolve import in `manual-wrapping-entrypoint.tsx` snippet -export { EmbeddingSdkProvider } from "./manual-wrapping-embedded-sdk-provider"; diff --git a/_docs/master/embedding/sdk/snippets/next-js/authentication-auth-config.tsx b/_docs/master/embedding/sdk/snippets/next-js/authentication-auth-config.tsx index bf16d6d69f..d2e3c7723e 100644 --- a/_docs/master/embedding/sdk/snippets/next-js/authentication-auth-config.tsx +++ b/_docs/master/embedding/sdk/snippets/next-js/authentication-auth-config.tsx @@ -1,4 +1,4 @@ -import { defineMetabaseAuthConfig } from "@metabase/embedding-sdk-react/nextjs"; +import { defineMetabaseAuthConfig } from "@metabase/embedding-sdk-react"; const authConfig = defineMetabaseAuthConfig({ metabaseInstanceUrl: "https://metabase.example.com", // Required: Your Metabase instance URL diff --git a/_docs/master/embedding/sdk/snippets/next-js/declarations.d.ts b/_docs/master/embedding/sdk/snippets/next-js/declarations.d.ts index 4b7134cbac..e06a851157 100644 --- a/_docs/master/embedding/sdk/snippets/next-js/declarations.d.ts +++ b/_docs/master/embedding/sdk/snippets/next-js/declarations.d.ts @@ -1,4 +1,4 @@ // Required to properly resolve the `import { StaticQuestion } from "@/metabase";` in `manual-wrapping-usage.tsx` snippet declare module "@/metabase" { - export { StaticQuestion } from "@metabase/embedding-sdk-react/nextjs"; + export { StaticQuestion } from "@metabase/embedding-sdk-react"; } diff --git a/_docs/master/embedding/sdk/snippets/next-js/manual-wrapping-embedded-sdk-provider.tsx b/_docs/master/embedding/sdk/snippets/next-js/manual-wrapping-embedded-sdk-provider.tsx deleted file mode 100644 index 3a635b9c79..0000000000 --- a/_docs/master/embedding/sdk/snippets/next-js/manual-wrapping-embedded-sdk-provider.tsx +++ /dev/null @@ -1,31 +0,0 @@ -// [] -"use client"; - -import { - MetabaseProvider, - defineMetabaseAuthConfig, -} from "@metabase/embedding-sdk-react"; - -const authConfig = defineMetabaseAuthConfig({ - metabaseInstanceUrl: process.env.NEXT_PUBLIC_METABASE_INSTANCE_URL, -}); - -export const EmbeddingSdkProvider = ({ - children, -}: { - children: React.ReactNode; -}) => { - return ( - {children} - ); -}; -// [] - -declare global { - // eslint-disable-next-line @typescript-eslint/no-namespace - namespace NodeJS { - interface ProcessEnv { - readonly NEXT_PUBLIC_METABASE_INSTANCE_URL: string; - } - } -} diff --git a/_docs/master/embedding/sdk/snippets/next-js/manual-wrapping-entrypoint.tsx b/_docs/master/embedding/sdk/snippets/next-js/manual-wrapping-entrypoint.tsx deleted file mode 100644 index 67a66ba53b..0000000000 --- a/_docs/master/embedding/sdk/snippets/next-js/manual-wrapping-entrypoint.tsx +++ /dev/null @@ -1,52 +0,0 @@ -// [] -"use client"; - -import dynamic from "next/dynamic"; - -import type React from "react"; - -// Lazy load the EmbeddingSdkProvider so and let it render children while it's being loaded -export const EmbeddingSdkProviderLazy = ({ - children, -}: { - children: React.ReactNode; -}) => { - const EmbeddingSdkProvider = dynamic( - () => - import("./EmbeddingSdkProvider").then(m => { - return { default: m.EmbeddingSdkProvider }; - }), - { - ssr: false, - loading: () => { - // render children while loading - return
              {children}
              ; - }, - }, - ); - - return {children}; -}; - -// Wrap all components that you need like this: - -export const StaticQuestion = dynamic( - () => import("@metabase/embedding-sdk-react").then(m => m.StaticQuestion), - { - ssr: false, - loading: () => { - return
              Loading...
              ; - }, - }, -); - -export const StaticDashboard = dynamic( - () => import("@metabase/embedding-sdk-react").then(m => m.StaticDashboard), - { - ssr: false, - loading: () => { - return
              Loading...
              ; - }, - }, -); -// [] diff --git a/_docs/master/embedding/sdk/snippets/next-js/manual-wrapping-usage.tsx b/_docs/master/embedding/sdk/snippets/next-js/manual-wrapping-usage.tsx deleted file mode 100644 index 9e92b8417b..0000000000 --- a/_docs/master/embedding/sdk/snippets/next-js/manual-wrapping-usage.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { StaticQuestion } from "@/metabase"; // path to the folder created earlier - -export default function Home() { - return ; -} diff --git a/_docs/master/embedding/sdk/upgrade.md b/_docs/master/embedding/sdk/upgrade.md new file mode 100644 index 0000000000..d906724b61 --- /dev/null +++ b/_docs/master/embedding/sdk/upgrade.md @@ -0,0 +1,83 @@ +--- +version: master +has_magic_breadcrumbs: true +show_category_breadcrumb: true +show_title_breadcrumb: true +category: Embedding +title: 'Upgrading Metabase and the Embedded analytics SDK' +source_url: 'https://github.com/metabase/metabase/blob/master/docs/embedding/sdk/upgrade.md' +layout: new-docs +summary: 'How to upgrade your Metabase and Embedded analytics SDK versions, test the changes, and check for breaking changes that might affect your app.' +--- + +# Upgrading Metabase and the Embedded analytics SDK + +Here's a basic overview of the steps you'll want to take when upgrading your SDK. + +## 1. Read the release post and changelog for both Metabase and the Embedded analytics SDK + +- [Release posts](/releases) give a good overview of what's in each release, and call out breaking changes (which are rare). +- [Metabase changelogs](/changelog) list Metabase changes. +- [Embedded analytics SDK changelogs](/changelog/55) list changes specific to the SDK package. + +Check for any relevant changes, especially breaking changes that require you to update your application's code. If there are breaking changes, we'll have docs that'll walk you through what changes you'll need to make and why. + +## 2. Test the upgrade + +When upgrading to a new major version, you'll want to upgrade both Metabase and the SDK version in parallel, as having Metabase and the SDK major versions out of sync can cause errors. + +### Spin up the new version of Metabase for testing + +You can do this locally or in a dev instance. If your testing setup involves a lot of test user accounts, getting a [development instance](../../installation-and-operation/development-instance) could be more cost-effective. + +See [upgrading Metabase](../../installation-and-operation/upgrading-metabase). + +### Upgrade the SDK with npm or yarn + +You'll want to test the changes locally first, as there may be breaking changes that require you to upgrade your application code. + +Check out a new branch in your application and install the next stable version, either with npm or yarn: + +Via npm: + +```bash +npm install @metabase/embedding-sdk-react@{next-major-version-number}-stable +``` + +For example, if you were upgrading to version 55 of the SDK: + +```bash +npm install @metabase/embedding-sdk-react@55-stable +``` + +If you're using yarn: + +```bash +yarn add @metabase/embedding-sdk-react@{next-major-version-number}-stable +``` + +See more on [SDK versions](./version). + +### If there are breaking changes, make the necessary changes to your application code + +Breaking changes are rare, but if you do need to make changes, we'll mention it in the release notes for the new major version and have docs that walk you through the changes. + +Update or add tests for any application code changes that you make. + +### Deploy to your staging environment + +Before deploying your app to your staging environment, make sure you've tested your app locally (manually, as well as running any automated tests). + +If all goes well with your local tests, deploy to your staging environment. Check that the Metabase embeds in your staging app are still working as expected, and perform any other testing you normally do with your application with respect to your embedded analytics. + +## 3. Deploy to production + +If everything is working in staging, you're ready to deploy to production. + +Be sure to deploy your application changes and upgrade your Metabase in parallel so that the SDK version and the Metabase version stay in sync. + +### If your instance is on Metabase Cloud, you'll need to request an upgrade + +If you're on Metabase Cloud, your instance version is pinned, so you'll need to request an upgrade by [contacting support](/help-premium). + +We'll coordinate with you so that your instance is upgraded when you deploy the changes to your application. diff --git a/_docs/master/permissions/images/advanced-example-1-sandbox-modal.png b/_docs/master/permissions/images/advanced-example-1-sandbox-modal.png deleted file mode 100644 index e84c8f1aef3374b76aad82c24dadc68828668510..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136708 zcmbrmXH=8h7B*_xiVaXvk*?B2nsn(Z3WO@5NtZ66NeM`eih?4cgx*9T1OfyU2)(E% zNG}P!i8K?M^bX(3cDs*y&bZ&b61K^#LpOhc$J8-rMa_ff9!~U77Afqz|!zFuLHN$=%wr1qEX67o| zTCcTUo8-F^tlTP@;C55Zvh@`EWYWol7Pn5F(mHb+a;$m&I92FvT~9dtg5;W?pMc;@ zUY;DBOeAGjXr^rLbr#y5x_RW{)002{_@VZ~u3Y%f_0yA2&|Loymp8+Szkd4X&*YSe0l+U^p|!0d3lmU?AK5KFPHyc zZ7^bnA{2f|qti*FgKoXyV6Q*4w^M%#b&;K$fsGa!!Y1mz-QE#N2Nl^Y&a;T@^k)zv zWt!7nvWUE9^Xrn7$@{F9Ka%#Q+T^phdqxnDrpDPE)V8SmlPh(5TXs?YR|R->Ms|gj zWp_1e$NW$=yKZq;8W7uUU(iK-G)%u557nQKww~DCV5@;a_~XSzFlG=KPnf_!%C2x0 zeXx-43=u)YDr*CMPFeupwY>f8Hur)e1M z)Ji;ZSPY%_Ey%+h$HFTfy=y*p~Uzz%uejsqb{$Ca*cnQ0p0T<`r5^jXmlt< zE&23mN!W*?w>Ly?ez2s23Rm|yveJtx9PLBwO@E0BNgB1x%--9b*xMnyZuEXE;t{!& z+4@{Xt%Ycr6o66se4JbTc&xVwKij$F%T1bz4CzuT8xk^HcH2>R4CJmY52(nfkiWFw zHwfbp7U(m);&qu%%KR(wO~hEHI*pxKoplYLvjn@a({@yRZJk<#aC3;OP`bOXN}Xn{ zRMYo-v%1ePU3aE%eJrZ^`Exh@+XYo%T_N#jgk|}-#Ccjw#16NGba!29aRAN%^~Vm( zmsXjl{p;=9Vi!LKpfxnw7=>L?38>zOh1C&bPkhYNUJSP(_S~}i>&z6@P+<=U_HFefMjPYZsZqKv?MQ`7mZzb6n{DQG6MIX}HF0yY-!!0m zQzQO*VPVYjEjs8I@6GpiN95x%UAqIcwdp6MjCL92JhJUdvinMqig#%_N)(-ATkg)U zN1f1qmbESF@B~sn4P%z_cD?1$X|`8lgx{_=qoN8@bi4i)^Y02A#4aLkL2%sn^|VE% zu~+-WtRM7x7QYusKfT=jOtCJ9YHu@N!+ev_epDQ_*|vAy0-7Tg`J@(y+GLXt-43gv zDHhmvMle_vH4LkeZ`6dkWky@KxUdiul|E%|_s9p98qKf;C?2{64Z6);I(Qv7hO~SK z7i;t|pss-VXyw&~&<%?IM29Chu5q6j;;7I_-6_pDVG$mF)zIGOz37YV0sf3qyIa!U z_#3-R@`2x|>OIu=EoRo7DA1@+oy}&|WI4^s6d5kXbIrI(&%g*~lSkt3w>`5lpQ5Ol z#Ck6I!{XoW(L)BkVl8*w}tg~b5QNNX9ZN_65`XNcM#j~ z2kk}Af&0dN)ET=xU$b}ZgSFT$sVyKd^py;|u*UF2PeAZv_ zQ4tC(R5-A6m|9ak{**O}xVPK$9uqISti9;5z@qS~3PtQZH2t`3k6EUXn1iwLNKCxl zEzf?bwWxV-XF$*p&&0Mj5XSD{l=Q9OY5$BWfB^=))LvYH{WJS z9D~Y)HuyVdxwW_d#FoRsA3V5o%gEel1cb~Zk`{7!bxTf#TP+zYAug3VKux>XH38Y% ztf_V2fV+AZFJPlWm;+X5#N+ReU9*U8|Ge(JWENEK#fwD>(vs%9l4&^Dgc_vAf}ByC zDFI4liCN`-hokdubOYlLb4c9@;XzsG?zAy<&obQW`dcJgqouhchf&Ntp#){v2HTn6+lh=+kLlD% zIJa9PAGWb1@4utHW-^nB)&S6$Q=k!ki9u4}uI3WX+m~bIohVUqZnN{|qaLC7smky;aNd;Bt z?j^(RUN}LX3F7EpF;;;o@esf&X`blNHuRZM;8u&b8%o{lSb3g;k`fb9YWpf{WAS{2 z6F_UnnvNC6%04loz)Der5;q1@!u{;0bCak@r7B|a_7d5Qn(E4Xk;Hx(4ceC*J%W}+ zLd?R#-?n;N$Cn)<-{RXoV$Eqd@usuSU9@FY$e(*TrqP|PobU(ti~PMDpb3$EC40-U zH^9%uGn`F{>dqTdQja^AMUvayN>S(vs0mG&A#;wYN1Cx?sj^aw$##*^p_&@(KmB$S zqSo4i3E_)knWT&R4;&8K`An63JNB)nD(;A;;8|O9N&M_`; zJd~@YJBB?<>Oo2INnMo7NMvA^tk$;PmGWL(dz-v>UbMh%^~D}TQbPQg)7w*H7?=^` zsYEM$PX8@cRA=Gtg5?x!ZysbX4WES|oJ0zI4LCEnrGy{dI?rvyL zo$1}%C@~9(e5-687?v#MXcOZ4vHTqf?%oVMqw-W?9z56;7|vqIYP(VvFM-r>ME++kW-Mp^StShDg`|5(exPXC^ha+uR|?6E5zFsY8Tb(^;Q?G~?=YtVh-3sCT-FuD@3^Ivk_|ltdt#E$J#8 zWBMY7m~DYzkc4C}_h^k^ws#3BRJR$o3-nP^R|E`34ruB1RxdWB7R>L0czKy8cd*=C zdHwsB_>M)78wB=U5K8BqlCD{emmIA?tXt23+-a*x9ueKzU;T7(Zc}%W_<7+yd)=YE zD*HRdw_ptokK8#{9$h6)2^fFfKKx@zhcCH8US@Kk%~WCOT4L7U)`UY0M?PwvK9_v2 z=KF~M`Mmk{Og>yk-mX#X1##V|xAX*Evg;^fYd(dGDbUh~7dy}-B6}0@@?K+&KSTQV zeCcb3Zri=(sT;NR8gL#gyG7(O@+5qjZ(vU4GRx){bGku%3dmeZ9TUpr{lXnep{fd1 zR(*}J(fQXh_y0YmM~`0`_ZHJ)JtnXduIIsN8qr)6vQ`|YNUKn{TfgVal)yhP#>vsy8yOmZ#)7$G2Otwo7{npv zfp70$8~G5ZDyH@MW({KNwkF|XMzH$wRr}&b-~x-KubvvJthBvP$60=lARe?n5Bw+J zw6Hog^>HD?4^yB2_IUzlJZ>l}76ANTNkT(Sqb*cJ`2|E7A78K$#*ky8-qMVOxEpD8 zGjTWOSZ%!eHVN{1tJwIY{0{j#F3jyunG_Izd(-SCV{8&@N|HtZLsp;^L8c>!Q309y zV@Ds&H)u~U5Qn&SK7Rx#AkQJ@B7mK>j3z!kQEEGk6+I z%yBDFIf24V*{pfRoIx=;LN*77Lu#MPG94C)ZtZ(RHPmDD5a*{+{}Bi z&|o(xcIwA1)js22^#vZ6d0zT^CGwF(o>^3a$k`vCuCuobV6{PAOQ|50VL#s7_hZ$c z*^Hq%0}SlgA6EH7dl|b@MHlho-YQsD1o6l1kI)|6*oA-I7Q~8#|MUL$`bZ)JupXsq z<`Da5XiyY`(f@)V(f^!q%HIBX>mL+*^us1Mpa*|^<;To!Du+SHXMPTI0b9WVKlXq9 zV#ksHwXP#5#(yRQ_Kae(pA+8qKPF45hA;eMfqnnOPL%EYb*g`kM_~b;{9NmGDBYjq z{l8gyIPvGsT!(@}@6Vt3Vc(yNqTKwyP5vMI{{Obh*A%pdG6?J2si#w-vgs1zE&-ST znS5}lW=N>|^N<%)qKAIic=yO>&Ns$KO3Y~Lxf?RxmMe;zijAE-LP`ePdIPNHhi~lz z{=kKv=MW2MI7-UN3J533{j)`ze_^&RJeBJxszqa9n%gOE$t1Hj;T6jUd)EMXzED zdrD^IVoIFal5W>bw3^k(Af_f~m1x*%*3+K6v|X=Ter~Y0DW*0x^DGf_NKsuySm42Q ztHPBQcKZA?OuUXN_r)nwaGgA6xisMRCCYhvV{u}-QLKV0ECdy;thDf@V`)A=&xZf5 zb8ZgO=(w*@+d^b4a{6dkqNem;`zVX0_$q2Mj2A2KyUo$l%QbtyW&KN0w7o}Fo_{^V zdCE+|S#Ib@ZXu@`q1ZQ8OnwYEpE8gZnjVbg@nHCA=I5fz4r?$znuUVl!khz)Me8e+1u>i6KGQ_u39Q$Dn>=A8eW`77Xt z#;uE|;@`X}AR{aE@x{farN%O1d`kRDLehI%()m&@^z~l_q!Lc^;DTF z1?Y3tz8l_!rOV4@OjVL)HB0=rDM#e*-K03EUt7Y+s=?f|^Kao(9l&~F`HpsWlJGh2 z_ivBmaJZ2XFWupC*?$Z)+1WL)qXI>2>NxXh=0nK-)fs;u!5>HK2&z2H%gktPDeHbD zdKkaQ!L57Km<;`~X1PMI`UtS#`9Ys;stBT~BhTN6MR7?ALe5!sJ4)RXCPpe0R{K*o z@6bv($dx*c?QeL`J|%~6Y7ZOX_ev6R9*T%uA76@JL{R6D@q#1jR}QZd`_my<1=M1CFUd_ zWY2hIG({KT@wzo$p6TCq+uynbc1%RrwvJrIERTvz>2`E>dhd4PkORkDr}9%yiE&HW zbu4ZtD}|axMSmXXt0^YK)!)Be>T~M}{M5=MA?Em@XgS0n$66OEFP<-@_t2oLHYQog zOuvQ@)+9ZN8=y-mR)dLM^y>pwhunrZ`V9WXlUX_TVZ!L9L3n6JwTR@4b`p$x;W&CoEb`S1qSbg}w znNzHa@6GLddPdhUedgtBhWIfI24j_vQVF-@xPvOsn=70Nz1>uz-1p?Bu=Pm8uvwM= zJixPLHc~;N$Bg7fYQanXkD1FzWjPW~{NY?X*<{DC>ebtyrjvb+PjI@9tGsN9OBT$J zZrS+0pxwseF36j+MxSI*>>Z>NC8{d9Ts$Y^z0se%hG$FGuZa5Y)DW5V@mZbhYc0iRW9wpM?o`vHy3aBxJC^%2Z0vW81? z4%odNoHT@A+I}Qe#IDS%)3G%qo|peSv20r0r`-rL+qNI{9DYF@%u}00jum_&=VQZ- z*P{{Mc8pz^lKlh1FxxpaI8 z#qH?mNEMbOLbe&p<&s`~b(NH@J(aijmCTCjZZ<1#FqbtJywb5o?IyXlwzQ}(V75MP zcYAWiH&J-J)okzWTwzlW;~{O|eqpb1-L3)jTsMSU)VsB*5tgW)mG7+9W-_~o2b*&C zZ0zO*Y>mI8kVck8NN&sJZWAbUli2T#l=fU&W#>A|yCubASw`x9t($M6iK>84X%S*2 z^x*!5rS8q+XFRPx$0eIB<#qe>3Yb-hSgGYU#e(B9TWYT7&c?A)vBs7Wh+t)y$a^Z1 zHYvlKUu4#h*+yMR@ASs*sp?X3#ggA{WpQhI0?M{MqJc#1x5h#y%$ zk%Q*)oa2wuXs)iiVphctAyi^SeeOYMG7TzH=R~J~5o7?UA zxv1~2e2$d}y4Vk6lLNVTVmu|zm%V*!H<2);afO@1bv2!PqOPafYioEJ`AjEjg&zbk zf5rvJmmn~iCuF6TZM=+nZ@GWGN+Y>q&XsrkL2vm|){b5rtcw@o2f)RwzRsI3)nW1z zZ^;mD+^J#AMVla#X9ZQR1CF)d*AYS@yda3kREzVtJyW&&HgIEYbS%?FTU%BlJF8Fd zis=Bc(%ph)>tqgkHPdn6s;_V59?G!1@hG9w@0)^5aL@IwA6B+U5p#OxP2RW{IxfAu ze9hy%Eo64;_md!~HYUp1wCJ%Mj;2AzS6I#;jiv7dVN<`Ur*i9y>tKA-_EpjC(Xpvj zRR0V2@G}hl^?nPDv-?!YTeOXo<>D>7-}g^Tu!&Z;51q7(g*3Gk#u90AE=k!%z-0@x zXJ(6=0Fk57$S!DCaKhBd-agV*O7I17Z!A+V#QvJO-6{ootDf1#1ga0vCRX2ku6*~4 zYe)_J2ySL>G5Cu8r@VoO?*B6?ShK3btq<~mSEqj(pkToAI(LUd}#@-L7 zGX^4Wce>r&SLA-lZ&sO^6XRvu3Ga2zOES;crmTNoh{W&H;K1)W4zTQJfXs3TY@PI3 zV0@Rb=B2tb@2rmMHye$;(Z@0iYOlzB20a}i+-u@ zsFcWwn&Oy=DZwFk^59BmP}`jRL9-7r3!KT@VxzWD059#R3iv~ zTufW*q~n$sGoRYb4abT)^slNJ&!FrK z-$_B{3c94#nmEvck)L40ehs5b5^Y3{PS*Am$L!_%FB# z`?--yKS3sIVNc8fofxVBy}v}oN4P`>?fF0820v9TUU zsRsZ`a}5$aL7suRVz@LQx5Su`fD169&mY80qWldE{8s8@?b=|n>|9(bK1Yc5AhC(Z zOom(HGBQ@yLif)={k5fe$Z`g6oT*GYW~neo8LR~LD;?NMaxg)r2_=3H>Ob<-Ynm+F z-GjDe$6kedcjlbmI!Q2R3NM~Tm5AZVEDGsUaVIcXqr&*e{wcYSrj>__C;bMXds{}4 z=x&y#vp)_!0oflF>Z^^VmU#=>Xs-;>5+8ws}ie7yWNq%K(5I7tJD>dLstDS!0EosWPvKi zG*~4ogT5$ax7$A}@swD-D3N$=EsyVN?pE7|t>9q$;P$6wQ+fgV#K3VjO8W3_t3M25 zw?8I#5OcQB1$Ey*^Y&W2$4E~%Lk(ZVVUnvMYUj{Ue=nu#XcI7e+eK8tSzgKDz%Xc4 zCd{R;x7MDbqf?^dbRN{Zm%L_h<)bL9tLPmlfz&Pymuo(w3VW4rTGO-q3@M*)QnT@T z0gvs=$wk(HJm}i|M|Aj!A!T2=Z^g56HohYt2>Q4~F|nl;1KHAQbWakwkV0a+kBS_9 z&~nK9A$)$j&FG`$i>#mQX}c=*De=WVnwZ+*rZ!fcF(umajlU|0WP6U46Q4qL1nl5X z8excy6A!Pp3G>YHSuU*v*`KEn&)FQbDZtA}7ld9uy5Uttw_;!d$BHKVC6is5%8U$a z_d6v_BEy%<*&aZ4Dz~Fkmiz{Y3Vll|K7Mwm)pEM$Jjz%JukUGJR3~JsWcY0?c1?I! zR=IoyWt&Oy(;SJp`2OaMoDmx}(*oDT+QrLk4#VU26s248VCfb=~a7MZt7OU-<5v-8f}4aO1kfs+i>w-KYJaU=w0sNzJjH! zT8Wh@eCOVIX{4EA{dp<_CLS5Lmi2S}_cndoCz_3HM=q`h0xtbs@sI+lzeMh1`or1O zgf%_rR^Lbh2VCdt%~tc0 z4QSA<)?%6uD=`4L2h`3vpop&2^G>oDGgBiI^d4%HGS;Rff~5C))kIbGrOTa-u-Z#% zDoq@5A)c9{uJgNeV-~gb^#gGevlU?#ykRA%&FF^8IL8PdTqERv~9fti|~|I`@MKLkyEY_Fj?Up?ZNhj&wNM?K%fu_ASp# zB(Grg)~p0ICA_HLzJ%->h3$CFV%>U>`7Lik^t*`uS#Ev9z{Aw!c_SLJ$3L=6C8?6% z70Kr4lKxWACzQ+3W70Kt-*BSf7*t9G3f{kf@4LuN#>Q@z06f`&O~X zh9#r7m*~J(3o;nbIoWEXuTtR1pU3IB#dZm|+)XA8i>_p$#qGq#o^oI|q#TUn<|h z6B_RU`0|AF3WX{UmEzvD1!yD$k#y4oP#`ps7wS3pM-cZr4^;7B9XC&Mf5ivEer|_b-Q!+PCfno|JC;qBXAPGGKrBCdxUuOaz`0=g z2Ec`EaABwTN#eo2Lv^eXM5dB+rMX$=V`CtaawLvfEz(8m`vI66-r?4F9u#T0w^gu3 zY@j(5sgsL!K$<*(Tp3)BY610l~oQkI1$>&XJhk+TzcY6 z{LL+KbW6t;J-gMNa-)udIz&33rOdu<8`_9OT zXLhg4^q7|?ZO?9d&3+^?RChTVYP{N`8UiVW1KGCy`w>!TlBUVmX!KlavFrs7IDphP zfET;nW$0?7#g9eV{j_kJ=_?n0htm1`PP-Q6pZdnz`NAxHjKIrK%F^5GI>!nyXV>&v zLbuFyPJH$_NK_opgjjV1;{?onKnWNx*L#q9s&%^F6Q5U^po245}5>Z&Eh%yGQsQC)Vt9puS| zGI%g^lNLfQuoWzv%zf+ZBfz-=qRAG+fa8%b_8=ZfV+TOR`^+})(D>_$z1PhTD^%^# zU46|r=L*qtFN$R!alkc+l|PPt8CqO@lwXMEY)O93b(RYN5C0SX+4<|Ymqvkky;JWU z;Kw=-mODcqN`VT4O^nB`c|7VdC-$svml%^c8?%I1SMuW3vdX$T%;3iK5I;sk%VM zkGd=&^JV?!6rEY!gJWXOVOOJaqcLOC0~)jqx%ti~a{pfU8xHt8`{5k^m6{q#ww*qS zU}2iB%sb%o2rT!0xwYFTRu9_QeX5%ZI&&7h0$aH9}**zBb z_!9OkD3J^L!G^2X=?S|Smb<)N9_$*zSy-ubHwGxR$_gSfxO2pYE(m-e9^#9(9)8i7Em3!vZ^aJg&#hr1RD}jq4ungp z#3mu6Z=)`n&!~$13(C-=#LIi6*UQL*HTocWRUvs3|CCvJjss6DTfhP);o684!ZcCV z6Ssf|G}21{4ciGq<|fE5GR_*9)GWDRX*l8U23D^}5g+5cri>WFDSj_LbnGUL+7!Ht z?sumb44-zJrcH{??H}ewNr_v(b=f$(A&sj&N>zmJ7Da57!)Bd4OE~$ew?410mtwI3 zLwbO*EH7`vWP)m8+72?*-w$Kl^!|9Y2w}CxlxtE>_K=zf8$^gI=y4hp!TW0aP-+Uu z8yX-Usa{Pd>0%;w3koZTwlF5nBB^hjQRP^y*PHjq#*unW(_#S|c5GNmxkbXqKAV$O zM-iqKHD7WU@C5p!`&U2zYnXX^igX@=2f-`Ok z4lhZ?Vi-y?11Esd`g?n=pyLK^-M!M7QewvN+*%ctCR5M%u{X~_<}MJ+2kKZVh@({6 z#9fcFI3!w}Md@^(VC$!}wtPRWh5qIKfi>2Z)*H5AcEN!lVjnh!QoV6RNPtM5;8~rq zpXAJb|}GG)|gUy=P!o8Ag~zLksoG zj2!?6P{odIdR4VdrdpS~N4#7UitH-M6(wZ{g_%6(=V=B}7#LtmV7PbIKhf zAW!uRCt{>E%ae|$Z8Yf3L7z3p{a(=6w*BXVztzY=VKp=^Gr z3wRY<19BXpp@iJYA*%G-NKGSH!ri*{b38-!_d<`UWKYYfZq?xqVO%MN&o!5)m7jpC z0B*k<*(a(eWjicIU|f`#(XKJMZ)X?LUEoC6KmD|lhI0iZpz4GdaeQ6VWX}%BOEq2z z6&NR#`k^@H1Wvg9VBJ!z6EZOYv-+fX+rL^byF)ZJn9pOjPIipzv#|8qIWmu+xP#oc zy&K%qQIp)$gCOm1c-v@{Xqdb-nq%&=q_!lImG3n-gs{l|4(g*YN`bMyc#7^cQQ|U) zMHQ=O#o;60ha-rxI!mo3q8D~>Ktgbd?i^#7w^#j!sziKD-`lCDq$(K|*xv73Xhr}z zW;stJ?Sh*I*?cI!3eXWvT`S16El{tZZ4MUD@u~Fe>~FTuT$}^{ME$=Op-wC)UV}EW@9*(itxr5@A z6H_65MWWniuffQZ^_3*Taug(O2HwUhu$)SQ$f`|iYZzt!&w07uDR6mm0b$CE9NaYI zal1QHxn5*VhsiKX3|>C%&+1;sMty>fP4GB9vovDVbpf=j)JBqTeH6SS;R1hxP0@1H zE!N-ho7fzBSL_%T$DGyJ%fpkc0-77Mevlyrv3XzBgPkLWoOr3U02?ct76Up!z%1Kk zRad|q92P;P_B%srx3edjhQm27g|f@jy!?Jcla_&{5G(>TbwC{g3T>Hcty>=si0vz+ z=U91lFw;Q=CE}dCGZ|O6uipyLQFZiy2ynx?tCO!-diaC%1Efsq2iJ1rPl?(3t$CTu za;|_@nLv%})jkGKgy-AL7^hXG zAl=ja;7si5f=oydVD+~O78Tg^9T!jPUQ;L{cZ)A5F_JneEn(99`xG9!JFy|1>?y}k zs5h-RJ#a%`%V74qZhdutgPJDEy zbRVi5Sl_BNoQB7D?FGyMh-Iz0c9f>6%x(T{i7Xl9YC{Q)0AhK{{G0|_BaV6M%gZC5 z>rkinaKOX5K|%mhKrsjz%rh=*azD{%dN-m*dt|2|t5j!C;C%*KZxC^Z%dyMqBf2#`^4zT8HOr*CGH>#u zF{NHx5dcrv%iG*93dZKyO}D0F%0BGKe4{jUx5usfSTI|gy`#SB0U6 z?N~c4*krr~w)&e6cVF?@SglfW&E1$88}yq_PjFfoQgR*Nl*B9&rVeARcruB_EhXCf z5x7m53gfHX_c^g!9_R&bLiOut^E4L=(OPsz}a zF!VFhp8n2T@(RNZ1Emo4Ljy|o-Pep|w>*BUhCq@-d4Zyk($%IkzJI*& zZ~x#Q(bF&5kbiFYSx5e&lLAtqUvyIcp0a-wGk}PrXor3XH2xmsCy)7y&ZiebW*CJa z-Zh7)(Y(}n5u%QSC~GQ5$XyP?T>p;{<{wqjT1GLD@TjV_q^X0EGkJc@>=8v)2m14> zMl6xxt-Y{c#Y`0WKs>PGxVw(nuOcX*wyRck_mwg^{pY($`#3H>E6YCmt6^?H*CxWr zq6x?UxLHp1q5Clj9gd$OpC1yIp;&DMM}{@Q=?@v#n!)J>;$IXc3FQTPyFjqAbu}cD z>(8$*`Cpa)uh~|HU7~*etIq2r2RwySN)9Q0>sNIcP&l-q!cn(HF8wj8ZKO8A_S8># z8ii5@CaZfIVlO?hZ(xRP3r42G)zm~CD}g;7Dy35LadzH^MD-a=k7GE%xRTF(6W zt|d23K7=AwX2nXtGbcBH|KX2VbTO+l4}&DvhJ6&#T#KjME;fCPfD@M#;2~`KzrY%B znep)gKDtHO_5{?ba25BTQ+pXfeEWi7w1Wp# ziasH$BPl0I$Ur+u*z*`fytM;U?O3q$-XJy`r)TM+q&V4?Vj?)%EuhG;eCuZ>B@E5q z3Tz6Otu92o#e!8puhgC=i{{*a#SotxbZ@#dkjZA?IYe21(U3LjkX3S($QTta_%~0_ zMD>eq6|x3WH0@9*)6iQI&)8oqBJ7dumMtQ8rboN_dF{JS{#VMOS|F<;qeQi#4y58Xl2ECT_;`u)AYl>|;Ar4BOUIxx-?jODk|`GI=9I z-kG-?ySkc?w*ew4LFs;j%FmA?h^eO#^Kd@DM{ISQFEhgpDr*^GGDv( z;Y6ebfWcqzTSgg{Q?=;D0f!nEyQ~+w+$t;=OEWFgf=)|w8s08W5Htz{&y+Z%oc?J2 zA-w__P4f~~qn(D|SM>#JZS=Q0^A3v6HAhvg!)xP}IZHopX#g$r0ZXu;r6M*9mijYP9k zs?9TTnElT4;3~BE-FXd7{-#75FL7ME`7$*V(z43u@@Ca<64r~aIPrE5T#TWC;0v&? z?a!To?ARqIP_n7Ud-QX!Xl$WA6DNKpFAzNLSQkN5T;iR#NGMR)1qeZbK#+{0dGCxxwbd;g{=yepq z%?e-O>UDhVgCR60@lxaBqN`X%QFU0_88!OryH{6_11D!W^qDASB*^ESiAjmEWw#ud z%8n76Zop1Nu!<4uZj1oz|0PW3J1513qcUs<-l&klDT-x(rp_K^d0N=GI-V7SVZL67(1Mb)U&08#0Eq&gG{dhfGK@bdD{XOWB1`C502H`k-2?{ z5NLSmS?cfD3}6r(TV~c|3T0<`lO6RT4Vt8excCxVmMtql(iO78uO81iEycs(=J!i> z@weo6Qw_S7P`fin2O#&q;()~4c(X+CjUT7spYZhln_UHvbpA&QrWhO1O<)}P_| zcG_4xGT}Fya=^{3Y^;R+&iye!HRPtsxt9M5rE1IXcTWG;upiR3?_d8jlGt3K*qQMp zNDB^t4$aC6vc;^rU$7gz+S|un9D&}WpcvG&8(TImB+!`W04=4Yq?H3~a{f|YlZMt^ ziKaeE&Yo}iJmxI4Aa)GWIoy}?v!vjwn}BsYnDGvz{^50QqpojjCtl9WR6d;W0A#y7 z55i=~wrdx#Yf=W)lO{OBU694jM?FBiH}I-(tO#2%=WoywWIMKa!_xObSN{<74X76w z*#P@!$~ss%cBI~QMEJEdOtKL)@Jr!Sqo7yrhlh7L4`bPPyf$)7hkYeA2~+nTrva9l zIotJKo@tFI5T^-f($^#gc(%RQF1QHzoPIvHZQ@x2ijc|Ah{)<_Q-zQ_stg-E^!M`% z=pqM0T3{BMgJ^AJVfl7mX0&qk_zm%*+3|~x*c}h#R-uQf!H3zv;uXUvhk(gNX zz_ptIiY{Ru4h7g&Y==;n^T=BNM3R2RLm-WTc}o`|`Rf>P-{mHX?i-7>HH706gof+UdHu37ck>_e&lA zT8G=JGCoR|S(0+txWeFcI9|6Z4+w_{y4hbBecI<^dF==M9jS?Qxw_0O?27XHc3D?edJv%8W3e!r~WkcNnCXu*{o4dwh<& zYhYt|E6@2b-GQ%72lC$K8P_m@nSWb7xW|bv_m2U6?plHAqi3@gvGUZI);PQrC^x}J ziw95)TKm6W$j=%1#34A0&;KqRPE7PEm#|&_o|0wzfk67+ z1rH)14OPY>EJhG_CI`CvJoQXhF3MiP&NeYzhv4e&gvG_(T`8{{`!Gjinz%&80Y^C5 z$huRUm{P2e_j_dCnxrgB?xLGVwG;s^SqKA4?C%Q;Fi~X7qv=Yx4^f3xmPZM?mWn;G zu0zXXz^qxCY5n9Ty zBYX$*(!uui+XT~c1EGU~S69$-mTZxr?Q4z|P-GIhnE5Nmt-L&`@>@0zqRQnZ3R$I6 z{sK7&sM%H?LEL>ATb_aHAsF<5y5jRxjod+pc=IT(vmKE8aIXPovByK8eY1%^2iftv z$|)-S2*tR2N4fCmYc$OTpp!(fp*Deb9+teL2Q@4AHflVXQhWkJExRK*(YDR8`nOMn z^($<-2Ht9kp%C8-OD1!JKDpwlUnlGl9Qc1GCGt06PL^Lj!*-O%py({9C=}$n{dQgM zK6R0@V?Q3_7?U~vu?hf+)WvG|m14ViAdp)j25%>eA6~My#vA8EMaA^d207T-`RNV& zOKendhM9z(h(6nRpe|F+ciSEGTN6KJ0BxC!(>%bd#l|9MTF|j7?)6;^?(`31k zioJ0lnuYGR6}#=Kn1i+iXxeb}qZT4?~3*0i{gJ)&;81lE~ z^eE2;m4ki_K$!_3izvv*%lTyBIBoIym^B?bT!89yqX$;~0cj#7wg#1n)~Tzz5OzMN zoD4@gU@BGp6w+HTSVaLG(MD!0F;q5hpwa=ey#_X7m{qT{e}c!3TOdfi3Ya*^%jcwUlK9a5$PIaw*7elNLf{l zyq8M{8%CYAPusmKphxSL`rve;q)rmecfT*V@zhpwCLXwqOSF8j1~4g6f!u;J zo^P|#3i_)LRp{l z%35j4h)@-Yu^btyQyHF#se`qY`AN)9gFc8l!9LAn^I780r4rn`mu-C_x=?5 z<&OrDB~%3t$?mDoGV@iKw5guZq722ghn0)9H1a}rvN!KVx3&-AjEVI*e$MT5Eov(_ z7hQN-noTt47JZ>KFiV2>_itrIbdp&^$(^)Ok&ZuDj=KFsk~=7zhuEI0nq+Hus8>T; zaY3Q>HEykMKQwvYX`Xq;q$W6m-$Q$sEv#Ns4B+W$0NOzE3mk&=EKcvftfL9w*mk^4 zYytNu=TXBQCnd%vB6&NHdi(<%L;#l!&~_LwK7C|boF)8IV8{!+9DMIa=0cg@d_;%p zq;oG|0nrO41ygx=Q_>K>*QMCdx=)H!oK4Y>RNac!zK~WwILLgjZGV7&@L;_}@aVBn zldIivd>+f44PHDy zl!IwuYWz+1&YeuX3|PbXx=x}&asQ{=uI(YK($Nr{VG7D3sIFO;(af`G*xm;=Vx!Q%RjnrDkELe$b3_^_$M?L)+womY9|g86*|u_b}8^iUPEZ z`n+3t6n8@z3It}*i-{|Hu@hMM969jDBHY$|65WqPYd|tZ%CYBl6}`W-W% z@LqUDQ818G=BQsU>7G&+=wahw#CvJ6c%|&mTMR2WwW;qb5PGk;n<+`BtlG;u_O?ZoB8ej)qH9iB#jq@Y`U z-X2@EWY#r%@H0dbAdG;?V^WTKz6LjX7`;k-VOIY_uOJUfBL=%t#XAHM&t0k5>4*RwKdZa)r@XV` zv30LC_}u|1Z(y6^*~gSq%*`#|$=*PUF%58e*!W1g@9^I&VdoE?&gM0Uy}KWFpNNo& z>Ukp}VP;h>nk_4-0)ar&cBkht=DipY%XNLqUg%V2QiC6i0lmU;V{L)j<&6cBn?yNv zdrqE~=e|gh{%1`kGrc|*AQgr^xh*Lu5vtLZISC%SiX<46xyKSFz^0MyT|G_PN|tPR zipx>4CB4O4aZxH|l4YIZNN1?+JD`vqceoo9h13mGmc&i9xbi&A{a&!Z;nV$O1@`!0 zP+PW=RRwVGONT-=4ABB<4uK>6K(Gn{(!>pg?EAwgbyo&Vp0C5L2GDDrxam$ra{#^e zsDKAaj#)1sa^hKii#|QMfZvBE2^D>wI@Gv>bkjQ*93_mOPEW8aK0YRqdsfLKEj#UX zcyn+gOr8^OESo)K-{oiUz3# zOq~ZynLMsk1)nk6{0j)ZX)f#Lu+k#9IU~f=VGrNtIIU8$l!-c?JGtq_elbLvEyet7 zqF0aOPTJ*bGWudC`c_U)!URMgu_?AB^_dPVI+E>G5> zrgD~{RR!ah!Ky*0PCpF89mdr7Jqx6$=6RSvRg$*M4JO3L(n_*CaW z)9~`cU{?^P`;Qmcf!xqKlhRIARncC~*2c3s4ZqSzs(Rq2NMzRS%AV?RMyH7nF5_O2 zzQA2~Pxcma<#%&cnCd>cQdlH_b?b`jlJEl005~*lXCxBe%h`4~yB_%_n6rFqxbqWs z_x*%m)pAhj%H3}-Y`CZu{BCegM_C%sY)~7~+~(rb;l2mD9a2%m#f^;W7etb+_jy12C*?H`zvFbOHp4$hP1Vq)Fk0@ zUXux{|A)2r3~Ms)+Py~|yMSdZfPjL4fPhMqt|BE=N$6FihY|@r5YVw8O0NO}BB6w; zbV3_NKtMntp%;}NdhhVA=*)dP&-?8CY5S4m5R&WqmsQU5w{}Ap3}j*2j3)+(rRy=& zf~Q7<40BA(aYzZ)=;ym8Qc5H?$Z~%{=O;EQJS}HHwF%b{NsSKYum8{FlgU`r$8+cl&5`kV)(@08s29YK~kiKtg zzTkBpY2wgqx$C_G>^)kt`&`z~FY-7ek|FhN40U3EioEK=%Ld9TTP7SIO)Yz^&o9Gl z(EcR4iR;UF>ug5i&Bn;mw=odGEnVBEQ>YPLl@zt-GAvYVbXmA(`(=$7V(JZMF+;h6O3GGDFEAU|Cdgi)pF=@Yb)%&0bhG|q z-1?OeSG^VJK1Pt+I9I-fU*UC1S~PAwR*~+(ZydP4rrSr4HSuh$5euv_|dbmVNAWK4dReCF7dby z#KHZe*Q5#d(#)@I1HYGSh*U6y;k@s4Lw={)n29)EtERSKij?fC5tzDPO%(~1^sQ)Y z{0PBSjPUEa?o$z$qU=;AY`CO@^mgudSR)*^q-XNy8*<)}H+mD=()dx)dZ~4kCiUTx z%O-aEHHiz=R0p+egVt-Gvcb-^-c$(zSmbM_KWu%|u5yFSFa$wC7;5V#DeM|;o#jPg zVwK-(ydz(+A=jK~k>0OP6l7k^H$b)+mw)LlAO+=Ojt>lTff~n@-zvTx)py?Edw~nw zKh@O(o`}VBxbWPFSk03YPUt%We@8n@853@uTCLcHtd(cN*y17oM#mem&zQ!u82AQc z7&%j&LZ4-c+mTCDFd{jNLg-K1e_9Gul8qn?rdt+9yW|Ero&Z;t*3DjtVr)|x13DA* z3lykrETI0dlUrXel&8z>@9q=y(pFE@;KtoR?w`%7&n!e7)(UL1G!N1+q~1oVJScA*5$eIse;A_Xsh{MNmkQWeJ~jzLTn<>%4a``z_ZB% zNdk9vdSc?w<8g^i1>q;3cB?kE_5y*MU~$C}DvSFc5&Fxwo{m>Oo%eIfVW`0vG7#UM z!F`QnvRi9=suX_gO}}=_wV@zv-t%%@5P?PEW4^Bg?H*Ok&_Drp(bVJ^0026w*FQbK#Mau9f$j z^voXe!(I3d3zv>J(e9l?ps7#c!KFB*_!c?EV{f@UD;+$Imn0ca-*CTby!Drz%WdpV zG`TYVwGElTmO7B``Ew~4AonlRmcqE#O`5XaxYLiBJGRpPO#7DAad#C~_x11L(b)w`0 z6l*+KQR!>o-QD_Ls3S{4HEwTddeJG9t&4`uVN2KOnVl`lRgtG(m#riglYXe(z+JvX_v^PCn^`@p*`QJEMd0NU1wHi?MPs(AILW4B#fNyKE#;+yJV5)&= zCJr9FrodMtolOI8X22;)uc)$ijtGV2*viXqqRGm0DvK@D?6`B;Hv@SC)eVNQY(#5^ z=@-;|kgjg`N8Q52yDp#PZo{ujaTnG>qC+=VG~xC%HvNXlm}cbmwXC?$x*~U8nqIu0 z7*OS|y6}2rWZm}GMpiC31&y}V2f8&gdo-1HMy5S<>++oZaIP-yJr7MQGw>EnH|(dh z0;4=%DWSR3E;6}dB-+Fn`=i>5+x!!v$Pc9L=Ftw+4RP_KMxs`57G35*t8WOBj#xJ% z`BNLdpbXRNzk4Oc5E<18$BmXRBwcYmI%#eO;qy*FO$P^@$elqv+3LW3Md4 ztL@NeozdjlQW*(Fao67ZTYb5kpyEg!5M8&rOqu#JJcNay-CewE3H6~rf~-7{xy#Nt z{IFufc-frQ*xtJ43Bx0$DoR84e%)GhD{aM&D1X`m8~S)XnhYEDnUPiSn9XIVhI<;K zGST)Re9Jh<$eppQ*F#c*Vr^G|^roj)0crAJ7D2~d8|z+}b-T)V)zv;L!Ot2J7pl$! z)*m~zzawML7i#1#MlZL|KR$bVo(x(}w3)~YylubRhG%qj8PVck7p zN==#Ha{R~R^C!wDV{i8Pv`}bcKnv5I(~h4Xcoi3#u_BqwB#X z!akl0EJ|qcROm|RE%a1EW~`DKwQyxA@Xtgras2Y)vD4_}7f=I6ANL%j=aq8Kw!_V( z)yhE?^k@k5A<$vM;#GM>_QA5nO2TybKZP2a#-flA^_-%9c%j6oDT}+~Q~SWajAM+l z!OtA+?ZXc9E}ej8_gurB2HTWPch7Bg?%_#GMBkNHg-hU8g%--^;_~QBMQM#W&}mT~ z(qn4B&z7%!37^-tbI(-y1CMz*qk;6wGKr4R)f&GcrhJh2ph7oiU@4=>mGcY+Z*>bK z8UX~8JapOd&!UC~TO;vIy6Ife5liW&CuRh%O=!|~?)dpT=%C37dCuC*vF}0W zN5MJDr@2cFcZ28m&`XQ8yORt_B zl#C{~`lVZ^aP>L-nSg&UoK)q!o0EvY=wIneWIFPq$}D%G{)%@LnH4fA(GNX2Jq;A* z6_;w}D_1l{W%6E!^R@i4{t{J&GU|pFrMNYH?B|nZf5_pAqX!bJ4?3D_-YlG@!DVu!!Gk3O5W97j2>?Ja-9Ua;J92iV6bGK?O504f@T?<8U&};2_`mH z)0I8TRPVerPFK_Tzf%}s#q??LRQA|vi_Tno&BdO_{oG$VC^@yK^t z=7#pu!W7^oa`a%olTTV61nWEs`)%zxFZaU2x?BGxj1wSiq)8uAm|4ccx+`(U?5Fv$ zbm3PdeZg#2`T`bX}}41xi}56Fx7T_mJ%KW0g*;+PPPHkXq5(WdGSNtlKXP-T`m$ zxw<me%HJG%b-rRBuy|>t zzaL{ZKjMPOmM|n<87~Z|8bA2ah3(f@*f{V;Bk-?#o_~I;B0y=NPa=F3((AI3iJe!K zL5E^P$1PZsu8ZW$DYj(3trwVC>h`_h%JxqpN_&elA>q2NVr!6IQ^}uQ(xNfdsS*Nd zLS;U38KWN-yY4u4`;=^{y4b%A=kec)Ad~L28xlRFFrtAY9{T#(PwLZeMAOfBOjmm@ z&^jlEdTH8g2^R_*sfFy(bJ%Q7$?kfQ1iXVvO~y+1cV$~>9!z-3t2)e-@ClAb5*$rE z{W64%n+!_b1`}BGG8An2ul82;E6{f2mg5WF8)%buF16-s4ELEb; zHij7_IVy=jMqX*WX5FOU=9n%N6=x6)OU*wmQQ;Okat3?iF6vazfK)y>@fbKYlhgbH z{H1$E6xUAo?3#p2e0p7Bl=-_uhr>J`&9~^yGEh0`#6^7krqdJcoxzvUCQD<+ptY$5`F=l+8rrgl6l613IW&qPMki< zXndn!+oOZ?0(N54?%4h;g}>@YI>dxC6m?ua8C|lTg(8B>xWtweCMu7Pu}#KiuDdA= z?p18fuw(NaxT)HyB2L5W#)bDMZU(Zai3E|K*IwfGnoVgJ%mFG(S^E{$JX zcB+c{HLU^qQbjSGuRsUQQ#`u~2(uoa+vZfKumPg>l2D-{+{>`FPoxpv@ zrB=mTTw@di>x{LEK`!j_z=uB)D$xspLArib44k1l*-V6Wfx1#E-77-Ta-fOBQ(fcY zW77MJ6Rg_{)FHdT*PR>Ib*?m=k)>_HV)pUtb$FY>kuDc9l7Sj^5^6-*cDH3s&xr64 zD=V*@3o|(V3as62D9aW;Nd{5{_ijGolq6s7`q5l<&7pj4IwuhpQ-1zz>V{}IVY%of z?8V=2A$t;Ke}^b|tsBT5TDgVb<7&GL<(~|^0OPaBc2N)l(OZ{Dn1+@;zH_4B`r0lG=l&3+`X=kze_~LyiHIY{Z zLG6!0&H$!+jprZZukml0M_*Y%0dJ}IRjvPizfqm4@v}ubaLg&(j%|*En35}1u*&kq z;qPFoqQ)9&?D|sKtg%GxmTT}V9(r53FCAyhar!29i>L4#T&v)~h7J}3Tb0eGcIx~A zteH8fS{oc_xu%9>u~WzkUBTFR=j~R0>7Lvj0AMV|u6#|yi42*JrX34~5cmD}5t@>p z%qwM*VnZj)fezXx$@5ly?cCetG`|WxtboS46anph)aHuj8;_9>;)>b640ORVGUrOO z$-mSz_;KzzdRT{lI1CKlnfuP|0F-CKXj5D^>kn}Kj@eeGgrwG9h8PT+iwv{cZ*G;s zOD;Rz=kvLr*QA1nhyQQ{Aqs8u#(n`-A){q@mTBZ{>XdgE`Z}qAU8K+wWWTLP$fzsz zQ-k-0O$Q^rzs1;5McoBB3n$m{e$8WhiYB{MmJCnW>elXRo|f{uxqg-MI_PByL6^Oc z-2X5wMYkSW#~QOSEWAn14xQ8DR*@}rm1 znQz0fSMh7zEGbM&p7~73j3Xm|ro;_X4e0FGEL{S|i(i8$z1^LYNkUZMl3PN=t!%Xn zvIq0^jfD|tBB$#@2P;a_ck6p(j}H(xZ|q9Ya?l-N|KM zeYJZ;!whit`2Ct|a*?-N>c38Xn~_6IN4Y#>2+nU`75vdDc6hpw)AQlIfNo@11+Qzr<@*+&h3o06ifmVBPiU&D}>PSR`IKqPY&D$M3= z)9QnuxYwd2W!;b{`10ymr@P7V$~xNgrb?O za;jXpgnVdhbofz9C&6l{T7}-wwg3oElvNxYni(%;68||gp^DT~h?rD*%2n-5F=sIt7h5m+@vbzgLf2yz*l%5UawvU0{^`_ z|G&lAZtW@xE3@4_kkNB?41DE<-{GzsBgmumVwmE&bq@o;MA)QaLy-6wI9zt|!e}HC zyk+S2azemxs_D4|Xax$$FUD-OB)_%>WMZti*7?&F^OZNw$E-6Un+Z@IOYsZ2CWY}q z>V$?>p!GUx9vVGX;JQ?xuGb|AZ(ozrX-454ibXN79D)Sqk?8fw<^7D^X zAX0`Mwpb;aR~%I9~>)zyqA zYpnk+a>ztPDx47IzN5FYhST&HHrE!SMUc^BW5942{%+*Eb6(OQ$R-%| zE`68HiLwjNwQRSa;Bn>I41QI`oSqBI6&VWdY`^b{Ae$`FF6ru=o^`qh>pnMiw*hSj zz@d;q-1`C-zc7P=L!TsyUGK;;M$YsXZFG_aO0yJfplTGDp+e=2wtU2&QBBBEGK{Da#xzp(3WP#>#Hqo)u7cEO>^xd$R1C@)sr7Kut)E(Qo(>8uIqOI4fdtwbrU*DEhoHDd9 zOsGnqSI)paUZ85P^cld06k-GjOMftQ}X zW%yb8=FvZAcM)5yha=ndYow=dct$ps-mokNFw6pgXsTo6PO7OjEgQ5UjO!nq+g}-e z%BD9T%PD9a6W-7BhEsDzeG-58YdNjEfgdATrm0AJ>g)IQn)jLi#bD-H8qsA{v_BZo zoi>zc>5c~<-*q0QOvqVVw)uIe8262)wU{(Km>jyeoP?UHZaWCAh6fU~^3l|O@&pqe zW0)9^*%K^E=IFWrS43pD}C=T#e-dcopzhzn_Lx{z8l>V6%j>D z^!6D)nf&co+`EzA_QV7AlH5sxd*L?oZ@*37Uh#TyJeK9J+~d1`F~3|lMXt~4kH&v5 zI(5c3m;ba65ZoxA7(kvk&YdEUtakqd%^C8eJzL*8SbzI%E4;RrOJuMCL~-eK|Il=Q zP-DGi)8CQ9-f<+~WVhx{6%2lA`YP3H+stMaSUu}4N}Lx&ymP^hp1~#Bhb}n*qUIN! zruP)op3h9Z)cV!%^QvlLv8z#@uV~+6i*4c8TRArKGhqGmR1pQj0VTJ=6YyY=goOEA z-8yjnRf*F?rSK#aikFK!_x`r}FkIT*!J~JRgIhrJgK5{YR3XEJ&jn|6dWf{|{|R)1C$f2F=EoczO7RWIT3mbkU@^a1gzI_I2YG&~(XN z6N$27M;7U99k=JU#nwLlZLfBIxxK4)6>1OeWb;c>+9J?_YSl|%spN6oMMZrcg+KBijK!WX zpbOp&J3Z4q>h@bVXiwOWpCVK6%VxtT(yTA~hZj3)V3g6m4M!?!fx&4hcCyds@@KJI zVz%{ZyCmPt*?i+HJP7F0Q`wy)$F>JxOwAQ-U!w=oYFPI{Ftd&Vd$=hc4i{Pjuvl6#%b2E!rS}nVG(Z1#nJJOGJG+o@;$n2|$f>a2ik^)LRN@U)YnDDP{%dZUuS=v6`o zN62`Os3U#%6cW0dyIjcBH^OY;_s-N`Blsa>Cd4R zUw6p6{{C?E!OHGGOacEaVAjiFq{_-UAp8KMt<-RSHJ^DUBI0eY0x}x(iw6ckm1v?} zLD|7Wce}i!hOdT>PK_E0*o>A2K2E5oi2hJp&SyxjuuhytcXxM_nPf<@cMRIkX@HQ} z$;65SYQe_k*bRsf02whI6&hBR?tvetI_T%kQjH5?Ao1FngZ%=A!&UbZ&c^h4hrj%-1+p?vpfqj0C#U$6>DIW;FAJ zw;w5j43P$$cqwaLY(@0Ur3=+XZ;7Rg-|~e00G^;#Ssd0~ z9~4r3o9W@4TB1~TNOXj>*SJN84JZrN30XHK495pR@+aXPxq!=GyBE4gQS`IRqJCV? z+h~;c>M9W=)owZD`*R%C!^e2HyuXcS2D3(ICRf88sde7iBt?Vq4zIH~J}uY}n{zZr#mva(Iuu*s4SP*GTkH~7CA5Xlm++-!z3a@eNK-No zpZC}-0RzWRMeYxiV-t2A89m2bm_K;#Ro)wb3fIqJ|Z+UqwA5bE-hg(bYnl})*UHqq?1O$bq4M|iHiQ*7y`Q!qag|a*E_|nt4L%kP? z&u3&}&&H;ht^(_sE{=hz>1md}bm7WZ+tW`f%3j<)b&Yms3exN1fD**i)Spw1=G)YA|Alk5Tz z=qFaCliYXeALWQJuri83S4_K_#=V)IOEMp{Up9AMI9)gk>4uTy+`Mk9j^zUosZuyH zcGFb&21vAq+sjyA1)3hRU@n)Y1GLQUuT32RE=y09oWaz0NdiES=EcffiPAr}2r7D9~Us4rnnIWz`LS z+pJtRZ+|J0Vcwyi*HGiNrh{RXHL_UYDWvAXHDdtHdqo6j5xjz5cB?XoBPr4)`@-fTZL~I&VK2AI92b?j`UQS<)P7byG zq@vZ5G5S+NSrJH-3-2#VA?q^=8D9^@M9`N+X;-npa2g14qX*FNQL}gK_e8?9J7_}4M{xm=RQi-}rw?TLb^75t^g$6k-!*@-j z1?(2okdizL9l8ATZpuQI&CLUO3u6Gc1wKau2Y5d~u)Nw-BgLb8{QR{`)_tjapx_eP zpk*!(iGf?CBs{jEKnb-QN+Y0_9pUdHOnY)78uSEuY$C~`h3J#1&;mg}hdWQusFIV@ zD-wIL^*5%n++N;oi)8Y8inLOf#f&01KQj2D>~J<=Sq}psxU)jyme8^DN-K57B%y0L zxVch?NBH$i`2kzjEkLXV6`frQqK2N8k+ZS!iPAf*9vL5M0|*BroWko;Qf$v>p3IK~ z1Qf;T8}`v4L{{B)_P8hQ_XHkmYP$w@f03*G(BRYccI5*w35K;B_D-0+KzcP4$M(zj zk+mXwg;^K=mf9th_5AL4(qs936TGvb%jB69cRy(1-=m#~&!aG*-w_W(Q~Bsj4p;Id zb=9U$l!r=6+0*24u@8j3y5f+!$m7}v{l^>C++5}B=*~xSCFGA4!-7=g6o?4hY_}?-tap<*!!@Ae8wo0w7LluMsXvQ^*-NKz;^5<|cITh}B13&slVv!dAxh6w;HqO|< zFbR+tRuFPPhtI|%WIh7q8EqN-(Cp+Uy+`BuOhS}&iG}t?mMM7JUqtBpCUQ%23qY*+ zPsV~C&@acv89C4d96KRvP(ZX5_rx~woK9S#>+^Y>y|1t|ZhCOFzEKoqeNpI4WXbKE zPD?uI_;+-OL5el6(lPlvbh>k5hS~Ll4I};}p7)qCd6o5kKVpjTscbn>i=%D^N=ZHK^L?5&|M|rqIe!Wz+lU8d&m+mc7r>l1)3t-kBiIxGOMV_z-8)8VBHSz+~?iN z+B*?=D37p63`^=BIm6dfa9-JuXM!obT#unS@_o7$Mp&lZU~1j*Yxy`2@#wG^AfXFR zD`ZGRu~kG}zO}P6qIGVSCI;l#PoJpG|3NsZ0rn30GKF4q^}}ieQ#GIAH}zng;R76r zfg2@P(yO<@LIoFN)Em2yT>Iu)hrPzF3jqv)y@-YI90fclmx%r5vvlw$Fg@|@y^M0x zbRzNwPYMo}^Fa^Om7Q48cT5=x%%(I(%w3+XNSyb()+W)DUew7YIQtuNuF%U56qPxD za7Wn2l%1B4vXA#J`N#xkVYngyuH8G#2^QH}KfpxlT#^NTli|3_$_%s*XUEC1rl zGlVn>{K!WO>|fs+dQfe>)pZOyY2=U7dmD|?IYn+RfcZ(mfBdaZ{G{V~ez9D+2mH<} z8NeU*a}9XW2vAn5;r{8}eoIy}!j#VCS0SpI>|X|-gJ@b*JC-u=_*Rq7VOc?6OKHWP7Z@+`^mjC(II zp_r%DlAJ;U6?_X%2a?JXsHtt7teTUcc2UZ)a#M^Zcnc(};ZF+;yx!)^q)L4Re=+#SP*!vk^>=t z&x%xB)}z1#NakXR#!L7JTQl3&8Cy!x>2aA+{B3DGqdR~Ts||wKun)~29@ ztZwQ(ZYB#VrV{Jj%^V4gpr?^&9A%?QhTfmGBSu9 zUQ9m>`HhoL45s+W+zdks1!OQGwqP>GpG@zq^7g^T$z)tqM2=?nB&V8a_jA7qGvEmW zk}qwV0F$fO8}g(!*B+6(ckebr8d>9dm)?$qAlG{O~?DdJrleYc@i`IOha zBD`$8Z(!Ok=NKoXJ)S)urA4boMg%js18BOPj&$qc#|qk`SSB272tO7x4&ssw&eU+! z0rSf7U2Ig`sN*i#GTMWWb?dsQx3sG;#qN4>g0lRnqUi%7d_j{&+Q)~-e9w-M1eY!n zEAXYdVcnT@;AhOjXr4(dDge2myXg@RJ|ZQcXWB=40Wj&|h~iN4`e8DF-af;^|Jid@ zY9Z;a-5P%h&WPk4->7p${HwRbHSoEC%)jAfJliQrjMnW@ho<#Xf{wGoggXE+p_^l} zbpTIOD}B-a(%#M$mum5-a_SrOJ<6HB!eEkk6-0*So->7vD~d>2zFe>be}s$Vds~zm zeG}4|u?N6q<_d91?I4SWgKALNHQ&>CtJyL%%3Uq|wX}hT5_Le*@dS6{ri7@DMr=8B z7+sykgWuag4x_yz8aQRq(R-C7>Nw!F=vB9Q1j-x;mJI!j=xoQtIdkxT7QTrcybEHb z;JWyQLzB8;>mWRv)){^q>SgaUd{Ue0L^N~Xkf%Q+@^BVzS_cWfA1~n8Q3SsoA8G3j zY-t!A#1>y*<9#od)RPnlRs1sN`ETrdZ!=K4cEE6&E&SHeoTkX?aV3EwYci+bD?au> zjpdrOG8$t#9Z6V5%RS<@JV`D7gLgjkLgF8-MW8029*bUx+3dfv5`mN4>N`VA`+vqC zYwX6qPnN+%#LCGnWITseUGwtRM4f9x-Go?XY>$L z&6m4@&bI;GLqCOCHN6{VAc5k(F+N!sRezNzKpbIlKY1C`Hk|*rhm$6YMI5S z{{_=+FautMgh~H;tgw~b!Q;SxMSaF`=W${gPw6j@`44DM0}eDiV*`|I zxNLHolN*-pLSgsJG?#0rT#v9j-7nAC6rtXzl|Yj9eSMA?59vq+iD+O9$0xI-UYhQP_3n;RGoz zV9wjB|D4cwkV6F9Hc}folA4!^_f*U3lb>-oZq6L(yU5f#Zi6rieSlTBx?{o{S~0Gu;p2&PBn3FP|33C`HC3}-V(zTH}U zNr+O@sryLNBVdT5nrF1D@H-3XV?m5k%cM=Wcf3zh-BfQ^Uc&e-9n~3>05oX^#tEFl z)~5CtzR%F)uafISP+7dxUnJlRQ5&Fh7qRKyQJBtK8}}Ij|8x6efW1@v0-?9j`+A{&7TbX^7e zhgb0{+sSx8BNNS(eoIijj$qhkq_m{(t0@jmHOk^0Zx=eeOuTizNg-QV1r4f2PKdrT z2YSzJ&BNRy2dn3KtWPXkOn7xGA>}XB&aCWSMGR#VqC`!R1|!vUk02d@LM}8OzV~gC zm49DpX*qeJ&{@=x@AkvK0QO`kMM6Lx?TpNPmjrbG%z9y{wPpBhn8;>w`$bY3QpSPG z0mx8#5O;`GP*M(9(q^cvrsPh&>Jq=$3~ha%sXq*K>~erc*M>DNm9|>1kG29(*5j;n#!vl)#)cJVD?kPK+m0jR1}N_TF`E9dAq&djJMmL;8Pd=a0!e^XRc1k>Yc|9MtP zx`DDLa8C~ds!`_KYZ1^!Mt*H?*RlN#w`}O(VSTHKIJTab1dVoHqeEQ5ErxmZh?F&G zKf`TRJdqakZK(BHyqBTKL%;d#Zq1^C0;O;oZ4ku#B*E{+58dq^#IhzCFS)UiG96RW zGc=XIJL$OmvP#&VJeiSnQP8MDEl;LUiGovRh z)Zd?m&lFIiW79!xWeA27=1j|+FmSPFn0XE8caRXhO#wUHuKHdUyEIVLYh3{7}ZDMx*eu~yf;~% zrLUd0Rct9LsN34LI1e(zjL_cF6}^eork>#R$IymddlC^Lqo!)=)A)J8du?7DZ)W>) zb=bX{g$bmXHmB=y`<3wBY){}qLH1n47bci1GbI&VT-y7@=^O-j>%a;`8N{U{D%JV*2^Di;4~Xb8xm(6wiYFHqW+1ZJ{py#q*`N^^4L0pfex z+$S)9OjJ~qDCtN%$?KnGodZvSW}(tIC~b|J7)=_KaJ9bYkz>TltlRqeGhyUHXu!)C zXO4>)GG+pzeZGC_ZS3BStC>h1hV*^Jrhpj9a&wv6mO_nu-G1`AS~`4tBrR0!LG}s7 z9B#{;+m3gk|Bll}6XHOVENKZMz>H6MPoNeBjUKf2{0!7tRi8BWh!ZK7`lsZE@^ptW zonr2D3PfZVdx{REcIAZ`a@sF!kClSXUYkb0rA6mIDjqx*y9(92HX3HmSj(5ticPnt z6uZ=Lxhca#F^i7D%2XJmMp_R3Pz6V|RnBdSq`0sh?!zSqQSg+-kH}S@vCE@!f5Klp@ETqf^)W`cq2S|;38>8j>Elw6MzWjTKF#k>Ebtp zt}dB~vPMF48I3zyc!FD9MfW*`SmQiQlXX$JLfWB3yHIzu2Aq{n!nfkH3(r36|FXh< ziJlqkbhIl)GyMu#RBW*f@T1cvgfnJu7YLl`?$LBt`c-ZpdKDcpg_L!=o##;X01?h$g9$K+rhi%GgIR5%4j%N>LyGtF%p{KGb>G{B-j1{ zj^4gzv@j=a=a*!Rk1lPT~rnU%y-?5Bmuy}Ftu~X9X%z6f$>oT zk_z-tC$&6zLe#Roh~2!M3Y`j46m*{f-EU(wiFfFGebTVdB}Da5{WS==G?k>iH;rNn zVVO_4HvqEOB3x08>Rks0?c;6HW#!Cq#bKnkZxJyv6&2u!AbPHRgPI<|h`nAOyiwwo ze*s4HF>!KFz??*mIP>|mW_Rd7pvdK!+KwuCMRu=$gR z6(83f2XR2F*N4=W(D>s}6s@`ko(X8mj!8ygE)6r8^PloR`b z6-o~;#j^0E%*^f$oX~n11V5FXr^+gm=Cmn>(K_z0&P~0^ASv86t(Lxp(RmflLe1M{ z7)X!}>@{21s4#zheEj$Rb}}xDO~1DO(1y1nw8EpBO(m|g;p~HdTo$??H5?cFzpUh77wVk%2>jrRFYfksP|QGxk-!| za-bjgR_K>q$1%UFP1btzI#RC6aoub;ond6$-juN9NPb@qT}BZkH4GnzkHzo?Gu8K;ukjRk4eD4{s1JO z|N94q2TS|+_rv|~xBNRL`u7ijSgV9qe*6n1u{D^}6^nCo@ootCSTb&Q<=9)qTs@<$ z{>W*9#n7X=3&fA}wP{G9D(T3GgcP>m0F@}kyT?&WcfTCuX{$CLHXfQn3WLM@I$NW3^KU)F8|Aa zU0Qt8OicF+j0ua4F~{Mk0T-oTbo(M$q=dQ)e72^KPn7)+3D6qgrwL#0;rGZ*w3&T5 zXuzI%<1_dpzFk4Aa~|YjoMia-a#}M-fX(28KdL%QL$NN+8`bJhgj#*=lA^mQGpx0L zmN_hdkQq~C@Zm$+K^~hCw

              {o$3wP>$ubQ8zB{IxnkNi{>O7>06X`iTiv~+dsY_Z zX3b;0^oaOxj+6NeVG_bugJ8t>|9CBYL^(PpiTo~GgIS7dFH%_%>MiY!EeC=Z zP{`o8-qP*R!L+wR|MTx~6H!;O3IP)lA5Wxy5~jBfy8Nl;iV*J&SsCw1a?pa!JF@;#B}Bh+mE(CUmS z$KkOwg@8ET9lF?4IZcIu1Rai4%QePhPT_x6(=qJJEWHI=_dny!f4=p?3m2r^#>RLQ z8nc81Y!vRIQ|Cm0p^2L>f!0o!9O3S%Aeu>4U9lA z8T#i|hI5AI#FfAb$39W-NzYl02>4KNX`?1fOkGvIMSXsem!|3Y?feWOOGogW4~2(v;oBE~^0j|IlMs{0p99i=ezN}@xI8C+ z2!v=q{V5Xq@1OZQ*`)p8pFK=_YyZbX@So-Se?67|eaQK6@rfl3qW1smk-@hm6o<#g zvuJx3!St|Lens zleu!|qqXYJ%ZWYze8HbE>w32DQT}1uYo-69(1wtQywva3*^{@N&-@EFeghdkgL@rZ z@agxpH;AUOV$NItB7LIgjhU$ti`$$2e-f6T!SGh_1+aT=Ea-R*klq-UTIm8I|Lbh;(?@%M)J1@`8H&~n11HJ8hIV6M z-kmOcOY9n)2Y}~)*ul7H2OZWM@x-KLr#G)RF8kaMrqhgP~O8d-pZyio6G5A*mCDR;EuS3fcaODGeSjW0ys=ytO<~&!eAfh?}0=-Xnogz0>|&sUXdDqSo)km39au~(~ieL z!gL};jFz7aSmN@Az(GrInupsm(f0vafwUF@`hbBg!HbI7hE3n_Ai5w_#9axNfGKmXv^eq8~V9qC~0fU5YcgZ}r1|K9A zDu=T?bs;|vg-2o{a~{tq+02Q(_JaOsJiK~-{($TI|NC*Z^RRF)4{=-|nlBb8S5=_c ze|%)tqrDfY1zvTB1SRz=-@YC9OZt|#3B6OV*HWO7-HTaTpx2+z5RVj2Qn{ zfck{Evq^H+_#!HN7H$;ILRTC5{xe_l=x!mhpI_l;UxC2}O?#|W@m0f+DM33bzSh^x z=ZAsB*?kGfqSRKZ<-wG?=M#9=QbNEUsO*}fk>e1O>i(gGL`Xx|t7 z)!N;iVebY0gRCj2!9abv-}iQVn64y96Nj5QZ>vz~nCX z)$@OUJV-m>XV)V+6U{nF>cNMenmUoR{{rOd@LR`~3q z#^TUNnB(}B87#3nOK0QqUUdJRrkIf!Zf;)$wyZzF$JEdr<`cI(Kmj;L0;a@uEi`~c zad0ULqLVO&nN&+AsuSptp@(*I%@ zUkGl+!lI&X73z~GsbQ^oFd{Ff$K@;RHh8ikIHq^B(s#ry_QPdHU%@(D_!kUU=&$TZ z10!4EaiS`Ub1cn5D0`*{rmf&~sMLkgeQo)X+L)k35*8SR(EE%@z<~ilE314~XJuoM z;*(BmX#rdpN=n^O5R3N;&c^T>UJxt?yx%$ok54YIdD65$W!us;PV}~0U1I|kah?$! ztRxMEDs3mRdwIbBb#$!<{N22c&{%a24Xadc0riu@?U$YtLsbIiFYDS>I7Hg&Dr3e>PYTD3WRrgBu&sLm(d4%8Y735jn+!hF;{kZO8~;ust*Xv^?G*zuf%XX*wPsB+_tLzJN!iO_?G%~4S$;bdSUz}P$tFVsr? zVQqGmHv(j4TyioJ#0%@!jAIlJ3&OZUr0#mx_p;ysnsoS!hA})e%PxWrWjC^Anrs3C zlgqjSzip4 zlosxdKzVH5F&3vGe3#<#ymk;!4)bngtKKoRZDm z^@y%=G*$tD2Y32%p3@pk8BdiQ>{6maXAbH$FZ!KeF=q>ApUJHGgNPiA=CdvJY_|kW zk}S)zJbFT0On)4U4YLag*YW1bJ_ORN~jbZI2*PwjG~vJa($N z@1yJZ97>lQ21+VQFtgu0oG?L`Kf?KvR=W}pT3*%x=dTfEdA4;^0$g^WOgtHFWLDrvY4NBFj&Z0j(as; zBAakY3J`c@tzZBX&e7jUc0!?y1q6e|#C$_JVc?zvFU;|Y%D%@=#P>%cjN8cTJVX}9 zZkQ0HP_;bKsn-{Bp~s!ASotrg;+vM~-!-}fdP`TiMPUw@L!gq=eqRQD{j)j@Pz#O^h~zL1-zy$L zR;Q zyjRHB{`CLH*?UJdmA(C=GuBZ@v5crlQE37K(xs~i2na}M(p7qB(j}DWs9*y$G^L7^ z5USF96r^_uy+ou3LTI6clKVvGTi*9~*S+gr{&dCUoPGA$``OQ@#h0XVv_^q;Xp>YCNM58(5Cm~6y*GcYsweJQWF1Xu{Z~<&7#SAFHA2(?@ctJdT zg2b(5z*{f;_xGY=n|7lqxl<7gMt8yY!L<`W=PojMmTL?KbqXlc00?KZs_ubQrX=Rb z3!wV=zyYb2cfo#|UkJOI2AqNTP9hq3c!Z|elG|HD5lhTn7u>q<11_~f)6bs=;+>YH zW+Z`FaD!J6rPHxMkQv>lK}1xylQBgaP8lN8_6G%v$qs-===HF zLu$gAY$jHP&6R$Qncr9B`?+e3-S}_<=9TQ?<+`duMg?ZWmzQA|-A+0@Gh2Db=1511 z;1#cH_+Dso6DHF*wainthhZ{7!PYdAnU<;Gu~HuC0cnEy`YT=*zO&2__T;%H)CRu9 zSeb4}`>x{>?imJZE0&4;?M1RzXTv*4IRs@&Nu@L-{HB;7(KyPu-xYBP&?8D3Dd=}+ z0OhfvE;9cm2xaU$QQNu36`}db2A)F75rJGCMDh9~of!Emm!_b=1)iw2m}f@hxJ%y@ zK6!p?$7O@r=a6*x5e|IXU?FRL&jELaLy3iiO9M|o-#QRX;FQIPUShN=3V@6%M{DfA z_}qI={+_85IY_2r63}=t>7>_28B~lzz#ulelwn$Os*lF!Pb_~^-#_1&gBFrUA~3E; zQx;`REgZpMfyB29k!yHnzdhh~umtF7Yrcz|clH`k4Q(zM&S?bf z{iv}?((GBP!Iko|yLQc{-cnjCXv2eGlA4*MezFzt8O<;yrJ}=K<5>gWGp7fHRSu** zjdR^fl3lri3YF3lH`;`-uz_=fE~$ENU8Fwe3;$d@kQ>$O`tQX9oPvTWKM)89JfBmw zxJ%{ytyYWD31|1@G@?o)KFzHpi96MPHfQ)!hc=tEYr~X3Il?6T$4rC?OVr>s{`+UV>&Gyq>XhVFr!eZuIY`!(DD)ey2P$QEsDoNosVuc3=h$%igzlFW z^2|W+CN-Irmd(V-OfA~g8Bf(^SO6-d;48vX3-I4BrT(w&UKfMvTCGOyc|TKi=T0Fi zXh)&~btC&O_1zV6GC^VkWas_vz3H}8%~~Ma>x4Rv1bnj|g#cO)96-(s4?mmvt-UoL z@yNJ33I<}^nJs!)h}FzIk$kC*hznYwt-=#R-c#$%=f#=1?=8>5b%&_6;6x!1vhe)C z!I@1=i6yXMQMA1oiqU7pdh`8I^GJEk2aq5AXs!`*GE2W&oes2$t{iMnufO3Sx}AcKm%ibNLSN>f~JoD+b=N&}1(+JMdDd zbaL~Ho^`pg(zXkH$(aP`_ ziUu^?+hYHV(a8PTmHBzZVdwH}f87i;>mdgJUmxL+#mXXIS2}6=EQ+c@INYv)c5YY9 z7v>Y(9KPJ+0750M$z<@&rmkeB zE+(rOo0t&G{qc4+J*~14&unBDRcV_qz@L{LL-@Tv0^%5{Ts4+FyxPFnR%x^S$lD;H zel?~<9bA}#CF$VM*kZ#HQ$ee#1_|G--7dQ?;GCjkgOe*Cru2z_Ed_D4{0sA2ELeN* z>Hg1IMW=y-O{JVP0Evu$qJsGf^Twx~3eQ*2CZGuhu%C$l&&WB|E-RkLP6-M{CtSD- znzVQxf#X@?C<3ur*Z?*r?LoXU#-9BIh#9K2`<@j~&2S&NOD_D!UG z1!hKS59r+{-Z>@2Vl59|`se)mkMMOZJUK+&G>sx_>;Ix-zdT7fySp84Z0(Zx zTYKBlblW_jeW9L4s|_|eR4UZ8Rw~d9i6JW{X^H)-rv~A~+Zmr$&@JcJH|>zA`}^q* zsWHq)h(+yE98z%G`e4dKA>gVjO> z0c4G~_LFj+yg2ICNmAtNd9R>KX{@{2Ffh@J-e(0G1xjS}%&*c99dH@`D8rmA)vmBI zNa$mW(`PEs<``&r6bXw&t{+ByRC7~Vh71sBOu#TK-zi*y9BXo)g^nJV9u!Z~xXWFz zQz}!vT_nrsGyG>t&Ro zfm<9SO~rz#YLVdUENB28PP6z4CTeDMjXuc~3D3ss{RLkZqsoZL1>oTN$pldT@|pPR~x?j9PJ5%UTEH0ysqKmNn~@Ey(*07v=hNk2`XCf?%)o zvayH>cL8f6s%?Nn9q3V(i;_54#8l{MXu)2un>7@6)s*6u)DPe@Jj@P;yqe>xPhVJy0i!)%R8q|_edOTfqsI& z!_8F;>iKBbQ8oY@f332RBFJ%*1Z}y>jp!xA$uLa5wGj8;g>4!JPEuxMJZM+gjXpW% zvFw%Ozt}Jta3AuxXLn^nPAFp1Gxe2I(jSc4%YGwEHqF+FM#WVO0(+ zEYT~3HX!IO`&i66+d`I37idBW(VS*@>$l9=fwQX~n;v~yl}vD`4TD+}gd^f+p`Lca zxV`?mdmIcQ{NTl6@9s(ou9%nnrQ25(Q?PHL?f&mnOJ99NZ?`|Yw1|%UMZ)2j&W73D&^8hAa5VL)k+RJPb&%O_V>MpaQCJxc zj#wKHW;k}wIDIys8oapA$uE=hd%3@`e9bjDHVYm}#&rK-7gVhXd-v;ZhghL`;M6=Nxb@pNW&{x0WPn2PanFsHFWN_Q`LM3 z#h%^q!NOo1F;YMu2Zc86=z=B!n!D}P2(_myFB~(|9^GV^D?w~ZaNRm3u*A-3Udvur z(j_J~lEAP_skn18Dmx&?sQyYfM7(7QW{uzQ#;yXznGu5%YywHtDrbw~uwC(fsqUo^ z?>c1O=VlLnp?%6(W0SF5C)XF5)Too~4>-@wC&%#52K4sFnCU7_zdY=?xl$6h@+MiR za{2bDbz{}X+tUA3-#HegN9+@TrIbVTV{j~>$R`T=3=NsFLU;+yLE8RqZP{M|;5UUo z8Gl*OjNVf>7-*GwG3iAlb@o7x>R#?MXpQ7bB#S7IJpxw+Ln%daF<+KfB^8-|mONzf{&Tv6aJ8eGqxV+^Pur*zuPaO>w@`1#iE2hITSuYdHM4@O4=!%ZP zpMF-xm)ix=!SkWX&USX4EE>F^v0@P?;gciLS>6x3TB>axX4Wybko@Exe8OcLz1x_X zc^sICEtJyYnk1%k--obFVQ9-!f#9WDX0i;-?AJ<~{;U%Cf-j|$398Br<9x#K`^p?q z9+0cMW;%Zuz$%iHgSe;^Gxx=_oC%j2*}#@)yMMfUcC9qSJpw$8S=Et=U=_|&bU*@i zz2)59ii-Nexk(dE%ihMl5EX%?T!B)ld);Nw|5oUY$d8Sc7yZ|7#UsY_K@pOB9`7Wd zT%@(ikebiUZUKwTc&O=+`(##zAC>3!&qvjedh%pcEi@IvO4D>Q0D;T~-xF-{R)yuz zMJG{ec#>rCR5UaMPJ#vpib7Q5&JHT=itve>t9jZe&Z?~{_?kSc~_W!`^_(E zx@)(SkgvH1*C|KH_Jq9U|uOW6XDlC{JY*| zu=N;!|KoBQ|L|XJx&QhM^y&VKn)3hfng5aN{eM!`;9)X;1pc@r7PSMDZM5Ery07=) zmR#;5c~1V%Yh|2v*34`7wVVd}SYz>r+x)-SZ%le>!+m`oR9cp%$=Z0U5%b9yX+iO8 z7tr>Wk#ZUq6BIxHP^Dbc>UX1C z%#-2&`5$&%)a0X(f9vwEU%RYU;Y+;dE9Dei{xnbM*Ee59tc88!N)Ab2l>tK8hT*@z z9}+@97G z4q=Jrx%bUl%8WM+8+K_#=7{+qYjuB3vqx{y+j6L@8YJMk;ptbdbIb7@>tc*E9C8j z3Y|cP8bc2UFUj`q_}7(iJ_4BuZK3}vF&1K3Kzon}RSB#m6|1RH*&{ukeSHMEN9nWh z-kUA`MCH-ILopwDXvet7FIT79=DLGp@ zu9d$7&SNV}K(3iE1`j2GI)~{DhU97}K4f$1d&l|F&)doQI<5^$s@jq&>|c*Cuzr}H z;If{b=|^5ZjpR&SB#da$MkA5|K2=qG_olKLF#Dza3nKnLj*Z7d-QO_~vv~%YVKx9Ai~4%u3iV-o{__CD!1F$?u;h8gU2*@g zLCx~)XW7T(2m$?fs<#Na#zZcvaFQj6T1y$W_k=1b=iy!+2SD1jxTvL?`w6-L%QG5` z#D^9pQefmd5DCsykIhOnPmul9{FBm_kIEW6JoAgzbQ1~AP?B~k&;-G~mj+@Y-1->y z=>?zxGEz8Ukp{G@>-vd&qg8i^jxxPXJzPj_LiUkMH&J*;PUt{9$-*z+WN#hMxqFS)&JxX|8|vfla!pF*>L`t zuFZ`auH^KLnN`(P)z_>Xjup!HfbM$7qv|P6Of@7yQkqM&b6c-TVRw9Al45ix+)q76l3O!jz>b^iDc^)Gm#FJ%p&+>#=CreG+Y~ z(n444P&aNkB68Gx{&nG}q4U;Tx7}H{lhgiizjBVv)`B_$y)*QHG~^lKO;H5K1&FVK zns2x42~H^hjbgwMHO64Dvy=wbg*UQlX60BxU-WsZqM*R0<&Hq6JWuH%zSB}<#>S(&^St%D?u~5%UeTkF4Iuo z#d-oDH~)X=&odkm2g}TMh0mFb>ruaN&Sg%-4Sn zntizz_%I%)kH98N_dwhXM9KOj^1uEj{?K%l0N%L3Y-7apo@Ha7$I+OT+Hkw^CW=n6w&Nz6D{a<>2>E_1-h!qyoOg3`IP4{nqi}%UYgM2Xou-3OM437d+%lqSQgm*(?XM30X?5zVWl3C#YC16qUzU*O=>jp=VGAkIlCnh^P@8kkxrxEt* z4O>U^I|q2Kk0{p>^qICN*Q+e)R+sULf1b$@{)}dk8I5t>S^hv@PjD%u(Ra3^lJhTB zW5$9tSPZX-T)A``Bf}%o9hcaHk+~q*us%;;B`VI~>9ZV42r>6Jgn!XowDcTPy&6@b zro?iOS6nypNzfp1)(Mx2Ijbvp zW{iQQo*y8JGeOYd-e_+sOn~m6E}6=qL11%Aip&|5HLD zkL=bnOKpB0-PPVsP{J5HRZ=y@_FRQYH(uu(O_S2VPQQ)PV393EIO@$7mkVP&irB&6;zyWSOrT+U{ z9lQtiGzP?zrc?&$)^9(?*uivTE#Zmkb{jr0IN^ADcFvPj)#=|mPCTg&9|_h}-y|l~ zrPaY3LXb96y@g@^3Y_j+>P?uU=g&1+L`A2uiDOi`v%pM{c!yH4iVg4^U$-9>dBKmY zUu9CN^~xsI9Yfk2=W9#;zJT5lPxsCg!9d;=RFF)6syUTA-2c#HU+(=82n$vDE8rk# zqPsl*gy|>03UC%U<`J3_@E#dp8Q+k^I}vw(eq#1owQLO$qd%zV)r?=CN zR=ed3ca`2Q1J{A$aH`Nc(gIzWW^;r9M}@1ySAfBQ&jIw-G>$gdg9S5#qSc=fdc9-( zuZW|xunr^BJrYeS+gCEp+`)Vl25A*oX|Um_d=qY`ILF<+#>j;?i+{ReUE|FG47ad! z^P-tA(7x)~D%2L_nI#Oevqr+kUIE0rrOMJ$E?^>3V}ZD&@3DCetTusO<*>+44`I?O zdpJ>8J_epV)GNdnU1FJ%Mio{N#$gmH9+=`Ys9&KbYC8oHSN?ah!gxqzS_QI`C)v8O zkvga*p#SXcbdCxk>I|gUy7c?300k2;9n&&b{EnBEYhCD{00CWS*#zY>X!z-hzVuO! znvS)ZDtcf1VTyFw=3Kmdo8_k0h5ox?VZWUZfAjQ)_?a-VcdR#B8>}wt+&K1h7v^@W z^wLi9b>)uXt}gkcW>5dhA{UXat}Zh(vo23fP3p5I?|?08*C|QPS{`u;i82k+go9Vc ze$^0dj4`37r)OkjXUn>FT8)pi*knlQSY*_Jr}totaU}-{=Dc{r;ZX%KvP*Du|$qxZM-Y z&rIOBQ8T>RrqCvRw@kq7M>%yM)P%<(BrZ?ISE)>B%gb&&tIR%RSwdEwL{V)#=5qLsd|?s$K$Os*r~$k>CMCH@d|V~{k6cX1Z-d$DSCZS&W|ql z(7DpZbjg^yzR;0Z{g#lJ)l>13W`@tyI(f12bUoerrc_QKb|^a=o)TZEEe0IpTFcmfw))e$}8@ zryVQ`h)k*SJ*bE1JLrHOPF#|08x&RlurI{6AC!igM-nt!1W^W0EwS0gg{1lh0TOO_ ze`}xTy$>7myVQ`LV>iN9dW}#{Qj}!eep~L$T;C#3lOy)ZXRBO0!~}sW-s$={-_~U% zatOV0p&b<+W3tjdY__Ro5-%v2L3oCndNA#!=5(ZM$L_T}-MO#1u(0jA!RqxK-gdS> z*g`$)bS)aaEif|q-KZ$SwO&e*deAu>TgiiskR5jA(2_#pm5xje)N0IO6Q(lA_O?%` zGacObDC1Z^LNMn2d&ZIZ?spARgO(6=ZLw=*PZxce7woUrxPE^MUY@1|i8=z~yhQxEf#mJS@Sw`_yCgu0HvH#K%?2gixJAjU6~NWv<0GplnHWG1Vtjp;1zZsgph z^bZ*0cdQ#hD1M&~o>OXBSarI+)oW{SF4X-K{uZi?`El9`gR0LNGjrCl3yCpk3XKt6 zri(forY$Mb{ik0W<@p*Rn)2wIF{6=!Z=KFcBJYQeNaz%LHNHOG;4;Pus((cSCn+R^ zu@3_MSeS7rK1L3=NW~vUKl`;6LR^NgOYCXFZzH9f-~9I!SyvI~BM4+N8FhClm7MT0 zqoBZv@YIU>{YQkXqSwd~oo#nSGFJMqy1D>Z3d?eOZ9Eq_5Xp9c3rBUVA%?!2$hFb^ zkP#zq{6>l#EoLQwDb?mGAo8Q(u?&Y7_;(dPf%?tdNmcC#{DU&}?FaFsR1n z8uQiZxLGz~#@2NgvS5g{s%f_LS^V~8LH-euF58+6-;)8k`HO0bM>sOFVjIyr6r!?c z3v(wp#=n0oa>BMg{Zcy3LJ3Vdf9m{Z+Bc66H~Ld=F&cSrkD(h=JC@{dX!5h~9JJGI6q7{yc6LNJ0av*!bSi*}-XlSq~d97&l$Q`aEr8agV>yZ3-(zSMV4Vs#%mum<#t5!pK;6*idg)4S7EHsuN`btoXOz{^U`U_f*OB zDmwr!74O7cM#pD5=sVRpv@*+B?YNrheRb{P=k@RQ zctdmc?#o||0y+jo{*TX_rMlVnj`xP_Z;HiKxrwQ9dA`F8xJ0Z9;JPeqXByv^+jX_b+JjXR z%qv8F0CxfV4Bl(`+9`N%)($j1V$^@Xt*3)<@BT~XGE1J;KN5X+auV_0!7)2Eq9!Zo z9S(YKb9o08P$`zSWswQYCwor_-ES>dX3UBP`MLKB4uzK<@m>GfINR1hptsy=Loe^w z%`q>M&o5D+-9{X;Ol_8!>Y3J5^Ixb}t|-im^;_oi$KH^inD4=dl;Asp{yttI*|b%D zjk~}oIagnZ^3k@=Jb%d8B)+2la@|5HYv#*F(p8tB}hSLdXcFReL-YtpsNmaXg1C2xOq*wEb=8AbfvCvZ*tJ>Pma~;WTkrL|=c=}mN`_-}Wse|+hJ7nClaseHRQ??#GJ3(XIX_6+lq5;jYD z_HEeQ9N$(IZmvo0>(<3i%>->cjSiZfe+Q!;m!KVw&{TZj zfo;H=nj-JJOwwF^OgIGAx9Cqg9|>disqyrc#%_|z_W4@wN##`}rTyT#Ll|LRpFpAc>)Wg5 z|FskFkbu!gw>&q?uG4H%q(%wl-aGTY#O>Yj$t)(+*bOzP);5pCg$18EB|=}mO-o7$ z>XcPSj(#1BqAe!kYqIX-*-{eS5wj}VJNa>4mXSa#?^yd;M?!gfTtsZ1zC%AqLcDOw05rnFb+zv|Y+D>Pb1Tzla+l|sgpvC7aQkT2xPiJ)=eAT$}^z>@;b2D?D z{=-sQub-Qz^DaviP-m8<*eurDi!~Che@tF|XKrF!@8XI&YsyvdV00-C>P@#xPoMhC z&dw@oipGbTduZdmE zT@Wo`2}J;XlfGfp_GvMJUWeZqt9v_X%7IzbwcWuJgWH?xIq0htC0@-KYm3o$YGONR z`s{xBtD7+#sx2=Q#C%)J(VL-(Baqfq^_<8%qb9f0L|^Y+&^ckvAzSOfo4mEvR7_uW zQGAD@VULadn7Z7t{~ywq?Arv3(Q;JewS664KM}&AwBn+Sa|W{oJUjcMe{doD7F|m;LYER@?sU z9{o0X?^)`%uH5t)ktVCA!GX%tsr=Re|I|D;N_gckzMj0HQ8+ny%17=_92JWg(apRFuKFNp7#V@6c#7Ew=WtIHfk+aqHw?8ppO}gcg_6 zmPHO^^pFdBWfYf?8eZkPw$DSSI_!ns zmgE9wyLs?r>&t`_QPYkImM3&=YI$1Y#h8>~Z~ln^U8{c>WxYsH*T>>fCMJeC+_)_r z6T>yp?JPNKqdVq80yAx=R6MDNjifiay9=^W*%DGYmxb|ZiHV;~&r06ula3z{r39_jA5uE2bT~xr;fnq7kp$J6)mS0M(*0jR-X>e*=0%j+ zAKvPFyzftC>R?dIAxYuCU@=%&8MWLSg2h|LS0;+t(le{MLV?WZRx+CfB7o zD$E?AJEi2Il)?YwCvpF!?}j!YJQqfl3V%OKt^Y0F{)xN&f56lLrTbsD3BL;VUtrMx zAIuS?q416Ww;$IA8G-4kkV3 z!Ywz(cnw`TQz5^+=H&c#ua$_=JB@!(y+1DE#!gt;^44&-zL>pCV8a;GYF;!fACE}X zijN8xRm63D;P!lm--yBc{%~O&6iL5x;+RGR+`YS2>otl=yMEofDmca-P2D`l08Cfa z&3$wm7ya;o#>(dPZ~g&4|9$UD&N9~hLc_>{Fh)*8bd>7%$+>1*jeIQ#d$h##cMtFI&q@@H#arbm~w&a$yj5mHz| z4Cvy#iSjZ{{}Jg>Gn@UFHM108nW)F7HmDiGCmZ+Qwl;H694fC$pNw%q9vK#v-6{T| ze+|9Sf1C8gty{sR)Oc=j_uBW0T>VprC{~1(j2{t7IbP#>#?PWAtc3|nCON0v=l=@? ze{v0BG9UhM{9XxBg4O3Xd#nFn?&>is4r?QPhx6~4Z%oyA4GWFR_!fCBI7%3H6W7eM>I;sl|DSYg6i9%wI_~Ej-Ks=YG9(M?pC6b=pl@ zL86GPA-vF=g=iW+=D9=5Jl=yebE%s9)BVY=G8*7-PGcA2n({9 z0o%Ro&;8Qu6dvTv4dpeaMh1w7&;oj}=SRl8th(2f&-V4~xK_1h&VxZ@VMb2+8eNxG zn3jkw`k$l3J8$LJ)98vTnbd{n=qg1p8^hrrG)~?{QlzY}|GbdH=u?OPsFQMXX*CqW z(Y11}BbbH`%C$=`u6ITK?i%F2**H9F;rUb;=j%SmU}5~5)8ShcJ6m0DabLwX>6B8| z{Z?&3fdltyL!I9e_C~Z6jr72j4&cwaK=wCNHp>`OXNev(KP7JJr{g&t(BC2@vD7p2 zD&unr1lUw}8+PZut>ZA1Ys4*I8Olj1*lyS?U2YSAb*2o6;CaQLyJx0;EPdb1O_e<( zk?WM3ymfD0*;8qj{FA7YbmhSeZT zu$XxM0DHh*N$oSZYPU<{4;$WJ489eUwT+{|eYGMveYqkGNSy_S-8RaY2o3IVPJxIU zM_hv)*nHnwh?^*}V(Z>TQHYeOv4+;jpkjNN`BmE-K1dy3VI!gs&h+wCD;q z7YwV9Dk?4|WLF!8|Yw}M0XWg?$KTD~)JaUXlN{&QeFpAXV>yl%xT4qUE3O8Fi3R*=Mi|Ru8 zDTAqe>BvaYx0(a)*cHkOvaZbF4p%`en;T2K590i@ssWgRt1d1 z2Cl%P%GxQihKJHvxiQ&wT5aZ|_VBX(ZYwm|#bd4m>+;9PBjvqui@5`l+_s8$3$HBO9~opYE?ojIYY?bM!a=4<}%&)ddM6ddza;OIY!^exi6 z>)Ciy>`HB+gPQ7cE?&I+nSM*@*0Ml!3yDkEFz8OSw|ts~@(y1NOPW=FWq26D*>N^z zkcZq@_Fr3h~MB=Q>bnKkGGtWBPc>~Yq_=%!X z^|t&&LhpYqgKLKe{$2;#||vUWTNkT;`}?Jke!;~=Y)E2l zFQaz{V^rujEPrG>$}bG*Abb@oX=P!s2fe3wF4ouzmW|JyDnhion>Uybsvg!zfm1#4 zFUeaYCqK=+>I-uU;P`O%>0Yb?D_YN4$Y)aRS;e1H>u(8Q)W`Loo!hIn-TLnRjndSDU^YdowoA@KUP)HuiR;@LUV=Aj=juzha@7x) z3uf=gk-A(Rb8S4a`=cu77gZ;gLUO=eYify?uhurS`!nsw6DATcfl<3XS0{c zuQ;ZSI6OX*4ZoOb+>q)jn@8|qMd~H>C>`_7rPy}&h!;la6~+1++Z*fyK%^#RuI4@O z$rK5}?!#HIIkqH5jou`+^u8<*@rgGS-fzGU#c-gJS@i_y`h>0HO-8r`I$S)~1B_I3 zl3ud=Q|zuLgHhZ|?G{a63*MAC{mx>_{8Y}FRl2T?H=GY7@?<0`C+|oYYg+f!E(b_GU*|A~X))u~Ig4}#3 zl?rubp>)_lS;8`;ZPGuX*y{IY$(8lfCC%*esGhIKeBD>}P3PGsEm}sYmE~$H;@(*D z+GcN9WBk4qYan4U3MkSXxX|4$C~dNExy*naznN_VWvBn8m%%PqK#NY^syU_KdFkfo z%+mD@U%L$}k0=5Me>By$CnSa&slw8)H_W9THZeT}hs1v!i2xtw#tC~L z=qrvTi_t4))XN#^Uv_^y8#9>PX0bW(@Yb+Wyyt@dhf^wZ4XdDtz?M)WExyI@Uu!Eb zUm)yvnr(hofHd+M4O^6hjd_q;_eg*^&%XX{3H>G!%Uc$cQHswM=;g53XwesZM#iB6 zYr)=9I+dFoV6x(~9f={h$Zy`v&JoRVK_1H2I<@;_MH{S%REx-3SjLUJrVPdVxeKiC zKdrGcVT_MZOF$6uUk3pv(!iX49fBv%JKwfT^t;GXO~R|%Tjj5V4HEmLDP+?Bp)$J zuiz_^+*BVWJM|V3)#PZwt5t91I?5G>C7sPQ7wW60IL7Fm|O>gnem-1dB~Q#&I< zCbd$d{m|_DI|IRqG^X5LTIKH30q?ztkJJ69js)C$pHNQsn>6>=cXBxjV7Nz%0VQPT za4_6L%CXBa&r^H61RHzJ_}rohBZ}#MPBBQUOJR=hf*NAqDQh4%k_g59kHX*V@O<$* zwZ>CwIglaTv>KYt(`$|4{_jRl;I+%cK|7xdSuRaJjN;V|w;G(UOVJFg;n=GjN;z90 zDAvyQmuHS|>u0%FC5P1CCI+umY&utDbxi7TqH5Fl$fAqnF>YE7}J@(JQ^s zWLElk40Al~sGXD<7xgh(K`r(Glse9&>9o-;WEm$@W5Kh}L|1D_&O!QySFjEdOO_G2W3w)`%y zsaUnR&%$-NO(?zSoeS59Uz^Q$%(7eez&sgM28Y^jaqCypzW3zweKCf8!!-V%lb zyqXSh1t}3bgjyxFpH;EmcPy#4eTOME;a?bNdKSXGu3O;eBxnn}46p5FO5oaJ(~EeM z-AwxxmdBU>VnvEup33TC&K9eoU$JX9r15zzDAyWcg25 zRJ@SP;kJqrEKn{Aij4mAKYamDV&2%~l#g=gY0FoluV2JJ;i+Edro0VGunq2W&HFZH zqbKFZj;`2I|1y$f|3&+Z)V;Ee)Y^dRw5OatsF!W>-g44whYBAXGJ8_5V4Yi1s`{!+ z#vHx>KFEcGx-|dChM#sin-Og768$QBG>9gsxfiO-b48<_n1La-EUuN;8MJe-5Bv06 z`y_?NDbne3#T0w%KQP8jr%e|pxVVP7aVN@N2l~3n>^DYTS_U?;ypn(kkMiefIeDvM zRc_Be1}(2O5hG3=ta?kRB$@m%75*xDJ~FQ?v4jk#511e~*d8iQHl01c4?_rjJ@(_y z`gskKGwus5+(Rx`+g;Jc4>iRD^s4Mkmu@ld3<P1G$)iF4=GedmZ6Q-+mnI^ z{nU_Vw#{NSBR67%2D#^nYS5tj*(Zh8(eVCv?$+<}yxzqP-mOl8Z`*RMmuyXo;PyM2}rbTc6fR4}P zm2bD4Hszw$wf5UXQ=&6c)3%zJ5UdUBjPlXf^RelDI*6DtTkARv2V)iQisa;39zC*I z*xj2)h6E1f_mXUfJp;)y_I+py4E-w;RG}(Y!A?hMreb^LyRLW?AB=o~PlimBo&T#_ zy}IUrEgre&duiI|^AoLaqe3|U?xLfue5cgdcKZECeNy5DRi)TyMSCA}Q3a}_Q_5Po zk5@Teug>{`uATj@)KbPH`EdR*dhT?G!3PVwgok>#{aI#QHQh%LIVA<#I$Cj+E(q+Nnd#Z+>U|Dp z2e%>-Dmr6Ng@Ou}u8%_Bqp=j)v%)G~Ktj^g(O+JyJDD1&i_A?;lqhsicnWV08f(~u z5p*JVRxo+kdFa$1Eco`B^+;Ca>WJXsQYX~h>inD3&Gs(WK9|JFw9#e`>zL){J;vr5 zA3x+F9$s2*=koM%dbR0&nHIdF`G>C_BIuJmGxRV zgPiS-(+8c3nkN&1NVMj4_%v%CXU0;~$IG_Idwah8<%g|gEhDFqn+KIABcwLu|6Ubk z(nNUoZ3(&NwMq&HOXsh8MTvr;K3mo59c_WJ@1z;m>tV3^#1P#Zl@UQcUb7uTk!l%F z)RA3j={T-kqrb*lS9-Q&Ky&2}6j=zKSySCh!a@HaZK~?Wu2WiG@MVkLt3DeWyCe=2 z_#B)q#VT$J?T^VBQbx>DrflZg>^E|cLQild3O(quCn33#eiIpGJmoO>f3f%8QBCJx zxA2Tz5wU`TfQX26r3z9+L!eOuW132+qYif#f(c zwfW6jEL+_f(WQAj!EcWORi9MH0bXK|b;#h-*+>i7dHvB2BsatSJ1+vbO_NNU)+1$!kjiz%xdY5CadHEfwQ5#aSmRDnL8%hygV zVZS0W%2uO4os#Ec)gsoAXK_|4`T~?q%4`7IN8hA#ScG6PlVv!%Ud%g#&upowB=V`Q zKW>DC9KPWHU6ZnT)q~NZmqi81>TMYBRCM$h<#ostmVOqePoAco;k2J&JGX9=7-;EL z#P^tH$D&Iy2Q$RS?!NTwu??}n9n?ZDrNO$w`Wh+mB#rm=M3;xmxI0J1EEwO+bn~LL zB;7VT;S`s5X?|uoPsw3ry9ut$fcsU3VG~3CgrRJr#=^=OubBjjbs+E)U~NcWiY-6n zsxbu9<(7w;DIr{p98)}ezXhFkfHW~`6ESqRsXQ*Idzo9Yps3Fxd@ggxP_NbjbzfdA zseuKMc@i=3YVrK)iMTA|8|8_RdS+8&xuj4b3j6mR&lSzl7K zY`fA!p_}YlZDL@59eVpPUdXB`x;1~nDVv6|Q4-s1d%>!tmaHQ+>{vfvFA~1XOl+Z# zul=}s3?J56=MYoL!5WNFSEsSIdAO)l{mOOZ^YflR3g*=X)mC@}JTyNZi=LNH!Pzbm zvdd8x{)FvA(~p_jWC+TgeP$=a0$F94_DX$7^Ec4IlLwqizJ5%cfppwSV>IGO8k0V! z0=kK7BR(eVH;%0knOt+@Ef@#De`bH z&A^#o(#=(pS7^v1y^?AuiVSR45s&HY=$Oi>Kcw%W?E5^CH_B$ugp=?wz!CIIls{*b zYq{n-2odh6hAKQ5q%lE;A8|md^hD)NUaE4pEF6WL{RR8bkhVQbv==hxJ1R%w$k09~ zs}dN$^?d7EH_CM)&EMC4BHxvEWTIo1fs?tRBvzZpz@FlSTWomjkFiBriq+{A5TW>W z@ZAJ^k&(-6`V1ssIh)1@3{ELuOcydkyLw z5_8hlT~gnR>3%U8G-1@-1Qbs`>#~)_vKzrSK5t&At)IUYd*)9yiy-~gkc*U$^7?o+ z6V_##6JQ>wn>kx5GxuGz*nz(o-BGzkzs)=Hm=M`C0iV3r#$ zI9Mm}3Hk7yCCTpb)8Z7D!Z~=qF!JZ5s_!0{!O1hNDR>jT_^^BrG@ho|+AYjo80*!q zyjQN{}NX+*NPLvT3Y)r&+M@;uD~Z)>E9~BgoQ@A=<(*NZuy?$@JFuY z0`H@bQKtRY-=^n?Ed_l?@j~N~e&X1zdZF^g*iqI_1B`>2QM#MCqNXeniBq|A>$6+? z{piLauI;15bkww2R&$$M6k?owy`trg$3&@e3Z?&g@#`DW!|#Ai8(8Vd?gUtChjwG< z{Mndy{CQ*x-BEd@dp31vsQ*&gQs7Ja_W4%hl#n|2L|xsZIPU>SA7q>ZzCPXctvqi} zd8gRpIb-Um7P{=or<-etC7|+JMlBJPmKR6lL}&u)&MFc224utiEgifxywiz{kbe=R zum6Fh`*@R0PsjL&;pxM0)Ib$c$U1f(n1_@gU|(`7FKGDQNU!N^K3=4Almi#D`+Ys2 z1mv(sQ>u;#r@DKZi+2MaS{ob^Q`@pOOr(aHc-l2>JtyyQ0<}t9ad@pt{H*1Y%Ru{! z*~{sR$K_rK{-81I= z2rY-qEt;9|9uR|MQ{Td|&TKJ}u8zr|d*F~*8ryx~g4ePyFnLQgrH6;A3vSE)z|t5> z>ijr$Vg9S95g^MgM%^y$AKuX&Vn$zB?d_LG@-&$R#HfkKaPl}tI2D#=nZbF=*K(7^ z)qBM)N$U)H>95{}695EtDC%m5qSf0Vju#E2z~2`GY!@SkG07b}PJ75}T>6uphgn(^06D ztxm0j56Sw+=sf5aZ01tIxG%>i6g3!xBPEs>52@yQC|i9Sf-#2@%;R(e50Y-(xW2to z)K|Qh3#M##-lQu@72f$&fpUk5VP9|m=4cB&GlZ)DK@C+otIK0yCM~_66yjbeF4mQd zO3|XNUWXL~m}(&VzF4K0QD(TqYi>w|6?Om7H2_7Uy-G&h=CWoEHl_vwFXNFFX5m(b z13dMUmXoI*Cns>Lb7~Y4#7ss)UNYD>*6t}T+{yN`FZV*1m0Rdi=jkb}b{7I-K{m1< zpcdV$;(M9p#lCGdvdDDFW>d(_C`j_t$s%6SR92sSy+94jBK3P_YtKnXM=cBU5+s<^!7LImATnXh^kT9hx8XdeH`4f;)IdGfrmTN^-|iG|y5x8>g9t^5PE-t78Y z@=5tmzKqKi%QZqtttPF?%#OFI8FogV*vmskx7oL@5leno7W+#(;2->?{{hM8+1>-; z!Y&hEt1a`s$eGApuRW_LrzHt5;de8HF9Mo3-!F?wUl4S)rq3fkhGw~)O zZfIeLf5;>hztwa<)9CYY{U!hA_kl5SN8v9q0W|!(FvA#&y42|UCi=U!0vVgK!nk`~ zxAZs31#)7_iqgM)9G$X){+ExX&pZf?IlM1vHAayAX7lv9HPGPqpX+obX5aYFKipRD zc@Ub+fyuP-e!!U`W}d(`cv3;l|M4o?`3M!@{$;nZk%s;AgGVqFYraaYyP}8k$w*In*G*TRDI0;yZ`xh zuQM;!_-DVKYE8YkEE3||Zg3U+U0{N`NHBK8l!q)5NB{OB*8aqko*D=La>e;wt$Lk4 z_LtfSzvjmK{cYL(MZx>u<gaKO zVgmE}y?84FwDw`%yPO?&lV~+Ld4KNj_xvyW%c%TsJh@-94N}?UgRmBVEz$pG5Ec~l z4SI+~#(F}hSTP=xn>GxT;Ki*U*h>3+d0ccedrE9NZ}WGTI!u42;Sxr;yD#bH)_o@A z^nd;_W@Ud7dUH~|_E@KP}ejMgSF-E#vbw{o=GY znVFfJ^GBDB551K3mJ1tj_{OWcMYZdE)%0RdB1XzRQ8YOx2hHHpJa49Z;G|$y@AmD1hFVoaJYzfW z>s6usLgb^&XxImJFUxEfwi_tZYqPrU{eY~-Szc9LdA==qTR;2 zh$&OO?vG((@T-sUF^8*a>2~U~(B%b?-chZg%iUKaG8S8cbtyL4+fVt*o3%XhW|4Lt zvl2bW?|b^ysLZ6?+3FNxp`3Xw|L!FzubMP`!GvU3XfW#qpHIs6PVOyE$_6d0pt2~s z&tdgrsl_7fWZFTPm^#(v9x{@(^0)3AR-w&l0Qli-7--fFk{G>xlXV?=gvT5<0ih2-rk_+5$=n`GIu(YkTC5R>WAn-%heuB^hw2BVzUD7c}(ImU>B^cNxYa`0ug1GV^eSGl!r~ z8jN4z&HXcXTV86?y_y;1pN=`N2g`lw5q#!VQHA2U_y|2WuxOvUIr26!+}sP&kF+L&T6f{yCkwk%<>ETo zKO7JJ3{3C9n9?AntZ|gBalGE5Q2$UdLn802bm6yo8TA_q80K&G$P@KOBYhLq+v;k| z2*Gi_V_reqP$z~gl!|IL@jtz><7t#K+Y4BC(rzo4I@qTZdOVgYqZCwkDb>dRsAGOU zc%1e_==cKbRvv`5I)-sO`ds|$JlW>)+jgvmj0Q%2%spAK#4S6Hjto506gfBIb7J&4 z33(@XD6PXS!ll1V_LXv0>GE+sq}q)t`Zr0VH=tp@{+Zm#Y|?dXuYsaKY)XLc)?7TY zz4Hv;9BiftB1W(m$i=&YcEv^NENOx`Oj><|rFSof)7kK3S%DoC<7*FA_wD}4 zT_v3lB|v-7GxOEKkt1aNjwF9q^77Mb_^PM{qod-|HAi{r6_IsG1w_9(?QF=!M`D6y zR`%PJf5^D6ZU1ztJgT)KVyWuptoFd3=tbzj2(x`)*w$o{OX`V#J{*)T#?rjx_2Y+G z(!}PnK~^4#$2@|zzFkMI;D?@(_3|5`0ZDwms?qp0X)yZ?`V7}RD5*@#c=Vg9e;P`! zZwW@$iz(^lgE{dv!}lJGOEt4%=wL#gg8Is2Gi^+vam-_czRkkLR=F_MR-SPCkFjWD z^qm6KEr*YzUBfq3p6bt#Z3?D#$Tt{^ms;K3XL`VkIXpGNEM1woCtVsKg&KSJ(GI6ts%hXPht1K}T&&bp47zuGvn;Q1rb5=J53ciHCc!?4>r&p#Ir>Dx=bGou zS9upY-sr2Tr!8duw(?OMLz)oT&m@7wlG*3cZ0r1W@}y&94pV;27Cse*d!j+D=xU!< zW4EJ4!~L(_xVHFGgr6VqXh_~XU*k{G;NeRT8P*lknJJtJwd)^FeTye!Cri|~kUQeB zSiM8TMB1fj{DYdsxX9@3fyTv!bjFMZxWIr9OtHB-F+sVxGNh3Qlo8gf6>D5-pE4Jnk8h6N zu7IG-EgH1@e=Hxr-}A8LCEWpYUSww#oVQtqg<_U(FSVO9iA!VOzQ!ebdi0LgFyB+* z4-vDL;?*t7Jwn{%0xfaq90Qj&f{#64jIg&4Z=&_{i_WSGheB1t8y^k6K7^A35yf_& zJA}-n8____3N-G0&8Kbi#8H5U8-I8pzkGJ;ic%9o2B@4GdAhZYE6p53eeRpQO}yg@ zREv3_r_iqdwieoDraMP-SP#w4Hn%frfG1shyKe0_Xe~raqx9RmxW?;g&)pu5)Gv}O zA9EG#H!G$@rXQ*u@!euNHKPG_eNN$#fo{hA9O zhbA#XT!&N&%*SF&^0{emyqC0%pK&xzX^dhiQCWG`UR$Zyg57m>kx>rysW*!+JPT+2 zU?MKf+TMe7E3-=7Bx+M#I0nQxu^Al`d1FH0!lX^g8Y;v5k<>Wd>yEm)tkmA1=1%S& zH1<1*?IMS^l*O6ynraOe)jh=o9<0&K1?`d8GFPhsOk|`4HY=Bs zHo)WQ#gLZ=-OO%naisUA*S3)Z8kE_`l#$zQdP@(!t7%(pWlC9^UI>wH!jSvba@Ct{h?kLI4|NVN4j zmTiCZE$33Z#`WM4VwtlwtE6ZF(nhO2H?uX_T--KZoc0UW{3=!k3`V`@I*? zi;^PQyT0O(ZiJK~k7a~=7XGQU%b0Vs(T>UY6OT^58w{vx_b>G?o;kxo3Q7Gy$>f@K z-FnErXLKR>!{GM23+Vz*`&FOn2ZaXPc@6NU#ANS(wRcYc)cx7cPVLJs2;wb%)v|;4 zvU%!nN#9!!K#|ZKBlU@c)Xqdl$g^jj=$8-ahwUzlp@BweOwGE>O@&T0M;WDe-ssUb z3Ul$?Y*J@r=`GC_zw4$MdJl*N%!*}uM}3J5IEavhz2~}{Kb~+mH*QugG$D&exg56Yyv~5z{wZm4C1GG_FVZ+36{|_~H3eh32%~P#Pfy4|A-CgqXU@fh*#!5OJ6;|b zq1VxAzj1TKPv;4Q_pN5_dA>W4J$8MbUyLs%o~++VW^xN8z1O{_|Lvn9If%f*B(`wj z8SUlFQC1%37X$NUiry)^vGO{g_^WWye;c;2R$ncm$o0o)7h3vRa`H{50lYVD;4Wc} zAYn}-RynZ=oLY^)oPt16Asq{o0oE&ERyMZiR=V7(lTwAJiKt1j=r+`uW%{_7sfz1y zM{nEh&Hoz2hxZ`GWF1Blhz|oJ1Un^7CgfAhCm{mJ)Jsb8m~d!uwPTa=iXoKl{rZ@$PI>auXmE19Df@vLwr@){U%vaiS!xfLc!X(Z zJm(Z6Y+^6Zrme4&>R;zBWaTyLUbGRR5a|)jjY-(53*WqakE}%O`8_1b%(UTbG}OdT zFS%)Dbm`$-_F18b4;%xQuDo)LTI$g|L0am)KoWYxk-jn`SeP+5y%NM=L(KofYIB*= zQ{&ymHUZ<|{?;NGc`JWtOg+l%XN_mHVyDQFs>}QY2tfftOlk4w(ZhOX$ryE8XT^i| zo~&9(y8)*QPDb@61}-+=dQNkY!2R*uNb(EQ*b^Fk3zl=35cN%`c+@ky4nAkwvB#Y` zJvBpTmo>Cx&kwaLvX1Q;n@XL^iLzA=bktOjkcw?Sfg{{l+Fd|2uZDzYduB1nq>UY2 zIbbQx6p0B_dbU%YY^jbbc_(<4|HyXebNxLUz|=~H@+cEx?&%mH)$;v&Wv)GD z4DZCxloUSth8vVRfh{THnr*GV@33RpE7x`L*thm$qrr;&3Ve9G*`9ioq%qB+gg3=_ ztCK%w&qyo5l+6|YZuhFn_Fsqd8$}{C1Jh^sa_QxJ_!)+#+1_DXIVpA2YyBs{X^A z>jA0zmsL%PXFp(^Z!NG$>TbS7u!7e<{6R&WWE4CplemY#^u32utD-C4LkydirJau4 z%$;-~X{G39+n?^?CyydLhsd7c{Q+UpAf%W(_mO0TslRqEEwC64xYHcC^4keDjZ&QL z4BKSwmS#V-C@<}3Xg)#RsRJBV((HquVx1#58#(zDt~g~VfHz9u2^e4Ez1qc5ukn`V z`halsm%`JN(KZ54F#?FmvfDITJ2;XKp`rs?6&kOL^qWXC-ebYFjo77Wm(^6CVGU;= zMLO^bcFyRF&^=k43Yhd+sMPt`qKET35|!$&(Vb)W;Nps;U;(H((9#KyL})k|PttrV zS=qbm73T?D8LowOYNqQe(y{pK=7vd@T+I9rH=_Nyp^lCMwt~gl&7KnXov%CF9r$cj z1zw&m?wZ3%&v%aO{Xx0$eMa^Zcw%#E#5MKq&0>@KIhxRbR#7TUy0W7mLM@p#IAN-F z`LLlU*}qyrymd+8ES&6zp8eJ#*6T&t|rDaG$*^8(+fDTAQ^ zB6FTb(mNvlCJn{*O4ZA#1=cc)`Pl%}{b($vJ*hM!FF)fQl6SbNm?T^R{p1BBowpIp z!7rUxZfde_t-?C_%x}TCCwf^=ot3%{mAz~aop;<-%oUa=>aZ)*4&*sJ*Eo| zr7rrk5_<^k8d=WJmMrT&@viziv#(vzZ9_ONXT#@c()-do{O4Sp&oD${`g2AwgL&r` zVvy#3gE{^Wjk%i|^S!>7Ek06zUuOk@*8a~b{F4h@n)|STe80F|9yv_W2%bu>k4tRyzx$aiKodrMkM^yJ<7wv#ik_GiI4U%N z2t~)VsQJ*>X>nH_e#Br|*p<&Vyz3BZgb`cK9Y&EX0!#l zQKL%Dh&Ii$q;3L6_Q3RC3sqm`V?(a^<8Mp*^5&xE?_=m!x;xp9c`+VIw6g>?+_YjT z{pR_%?xyM7LFC6;-sIFVt9I)Xtq;<5#)IXFFN4iJE}nmS_`;v_JP5uUH-^)4lDMIA zc4qM8qyb?x{^|7XEh>R}Cyk^< zT5FAvz#026zNqZ7e>khnlS$8K=+YIx0Ar-5c)NK(WSRZjRvT1EM3NoWONF~^tCJJI zz{G2Y<&RtPqJ+(cue;sq3zL&wP+p*|uaWaqBxZeoz<@rF9FH~Ve@*%5UWN{So(J!V zs4;FJ?#qr19b9rUJYSVE9MOItW=;&jXOw|iWC}@nR?O`rSF6|eM;g#lk2Ns7GhQgd z=o}0WVO1=P>-m#3^KJU^a1yM$dVxskrl%Ma#AFV2BQ1W}z|koKyoOpYHh=@o!mSqAjTv$lg&t%{mDebO5a_}P#N1{R*AT6Tp&&bG#XJz3qNZ>YB zX^owl6~BM^4n-AS$jd8({XQf9x>H(WpR{ET368Yvkwv;MQ^%_nQ=KPtJ-lS%!dcFn zV8t}eu-}sdD|hP5!ljchj_O`eFnE8+O@oBoZ2XY?LPorJ#2x?HqR}j+i`aPfL+5JUzMuiK{Nx6IugJz`KZb zU*g(4ucW4CtXK_j;ketjaQV*-3beFp3Uc@lW;>EH-(dbQQzpDb(?8F#Sae=EClNVg zlsPF+F4>FT)artyQPglO!O#=_NI0*VTYQXZ8BltuOHHK$VL*Tju#fB7|MlrgyLgV9soH;}esvwji=;r_rr;ccXH&I_>$aGgDs6|h+NfXm4J~ut#Ye3BpPAA1|(btBJkd6Zfa2+d-IDQw-l;Tm& z1^U*d5o`$tjIcl0J5H4BZG6-<8PwhBd(i}PA*K49=R3`P;}NI@x=kju_Y@G5Nf9J> zzOUoUB=Fo5z3<2!1=MZ~nXi@Y}J+p{Fq|MFTzfG&=8zL;^x(IX$Tyfg7iUibU9&f z_b!vz6zFW=4np1?9x3*1wZOz#-k&EdcrB~BlhZ$ZZ46+ww*IviT6qcseZU*7 z0xwKLt_2m@g-}fWI$l4)wGUWzYh_1o`Jm$X9E8)|o0Zx5CYeeCeM#pcLBxm5>A+xj zyQsBcyx2X|^L!P#@rVpX2_@1t3aVAaSo@-kZ5CGw;&C`tC$EVheWw<)!KA?v*TS%b zpc#+^3QB>x3DE-KSct*loCx;=#F0Z~y#9y6LjnV@?9JzVqtKf)_x1{ATU|Jx zCzdd*ctjLkFtkS!1hH5bESE#7&);A{8S~Igqy$ zK)z{xy_Ii^Q*q5TT;NPc_ZPrb!D9~j4s{OV(RzCYorSgYNn>&zkdUD~ImS~Ce~SEB zy-<-zm>w^jkQ^QoYH|M)^3y5W3v>t+Ns~={3v&E|1)Ha5Oj`OqK#F??#@ihGD-tIb zPKmm(y*!ZT9<>9{u%D-6>UQj#cvexffTt=ic;-koUxs|%==$u9#5h~u^zjnA35np^ z=0}aA^?l4LPjv0(Iwb(}Ls?V6_Y-ATo1I8-)8(=2pB_Tl-J>BQ_{C8vM^}Qk2hVy9 zyg6$de!Y)?@C9m z0&$3`AQ|P&)=2@lQuVQ+FdC_(-Py;L#1J25NFL#DuL4uR(uGe&A)!R8qJ=H}PPCtb z1{3DB&>x^$@

              FEf+U;2}BmtSyU#A-JH!IJHfO2bAE2;UrrGQZ+lxr(6(;?CSw@end4toa|$ z8gyoTTy{S$_2A5BDPf;77_G~?#Ob{IV9;u$!nf9Tcj9~$Jyn=It?~#0p+p;Q9O3xc zaM;ipI7Lq*XaR+aoc}hIu7YicYLq2WXrXLg+oo6-Sy!0>`b~`s`ld5}P}-^Wk``7o zIEPZ1Y99FV^}TLl&SRxoxpdC*T|&<)oa|1-N_(f%8{~Vq%bAB8G$u2QO%qgecvbI) zSMph~S;Py8pb)m9%&AcJt^W_8AB0{|M4Q`wT5BmWFDy2#l45gZRT>qo_%r zOXmvHL6JkD4VBq9RrbqflpP=`n_4=^oL_$ zn)bqF$h;y%s%Ug*GO5|)(^^P8*vJ@$zn#QiH8gB;PWls=mPx5_y zZ8mbI=sL^1d+8i3_Z=X%j@DJZ%gGa{Y@CO#@EY?KWF=(C!-`@1&KDPE-%QnFIt_=C^^@}4*yvofKsQTkYb4%HOIe9d z3E}2uLaDP__{`ninI0RL<{9D@!q{Ur_Ea%eb>RI?K$J8S=+g^f=t?94pgbq_S#M`L zVFt+y3B;3V3H1SKi>0gssGgPbmGk1?H4X$NX>u~BfOb~9U^sq)Q&C3Yseq0_dfMZa zeO7Uwy+Aci(~f&uQ2P4Y_hU5eJvH7WQO9tM^S}j@ATn}fqPX^&4M5o3@gXtRv!6}F z2`E(rpJKSmz_fA0p;uzx9G^lf7BQ3SNXn(j8rdV=T`t;UtHOSaMbo%!R9jh)esKr+ z92-}xNYtJa^#<7iTUP?Sa(*|Wb3FhvP5hLkXCU~dx#yDA0nk@zNb7GS8Awl;Mtw& zJ4bR$%i4AGJ%4y=umwnjYF|5nOd5K6Zw)oGwLZRVtf*L*jh7F5x(sy=LJd*CN_jxk ztei388Qt9lb$Tf6^)rD0=w$kq`pV`y+_M2HlKbq|1VP*A8s=u&0cQ}hbD5IT&W5%? zsB)0JWJka6YSR@7j=9j;S$3}ZJwR#Y-Fnjb@oRpSE5sAHFA%yszs*A!6&kZueNj%0 z%99zXvu=|X+Rw%t+`5LkE?yLb>E!w@rW?sV-{zEmEn$grb6!M2uT1^5C0^d047)snkQ z-PsNAl=e{%Zn1dSrt9|QuNLbRoFM%$83e`pEzUX|q5 z2}i(gi(=U8?k6xMpEbMtPwU;?w}Qt1V~riVE@iyx>*6#alY%lyt= zhV$LJxUu;$>92v>;|rGIY)6F5rathv_{1>S->fN$Q}@Q|s>kAKQ({~N>i04taBo}r zbXhJ6@?T#8wNA{R`C?nwFyCecX8;kA7*qr`0GV_oyqDsJ9iw;7+7D&S>)bkM{w%z* zV_7oj3$982vXN1G*mnQ5dJ#W-OtXbi;*Aw@w zUq-!M+rcF&`1XR+_%ZN zbh0&$gwPx=qvn^ct2e%rWIrXz?vMb+?am*?^t&L-!S6yE7I~R4dx{*XP8jNGKiF=+ z?+djv$C607*F1PAc>(3TNR$#cZoS%#_t^s2p2_Fa>%?`C>vF%>(IHw?IxkWZ>jKvD zxen4_hZu@f?(E&sb;2!kkxA|xDBrb4gsc>0>&=%QNqDoY^9fOuShe6CH`iL)RL!c-YS|Uqc?5n+txC5?2@tHWt-yXk&(q9C5s<<$SaUNbLB_h zl^1McLCk!Yu3?u#ddnHb0(~#*4t$G`drz5|8Uc95{T>VV8y2W}B2I)BrDA%gcjxij z$XmpwMEQ+M7FdQNE8g{p))B=|YK(RAxnvY)i1zj$DO=a2o;y84Uz z2n@O3*@fqk!Cuj?F-4}F3Tjb@Sjmk0H7jcv6TbX|F}c?}LXds9@cX_Xtk88iS2qv_ zpB_xXiquCG?p-6t{Gyfa{4TNwomEipCFNxO&RkAPM9{f8WK9zEcSYAO< z^S_+FTGgdUomcFCQpT$*Vt^uGDW|Agdr( zv%Ogrc8mr8Bs;GYG5>aB|H2;pHJyr7Hu#%Vdg+?V-!GCUwBtT|dkTwR+(VsSf2WXo z29L&r?EY`G%C(EMibY6qZ2HfyQ?8%>JMDMv?$II+`-5>QYlqz5IJJrc^-KGt9M7)Z z(cd4K_iyiIjr{sgLNl;hsr1^-UzEV{1{YsmUYwSeTUuJ0AF}tt4z~MyFDS+;NLaM0 z1~*1JcKu|~5oLL>L;5KN$q)Qx*1xr5tm%1x!K!Zi+7;KHv>c)`;cVB)$VlKh{_tI& zbmzU#Q-4jU>JWmH`li-yheZ&ySn-Er*F$nyGDv34)U8ZrlhSM7b*g*$;n*u*UH*R)X| zy+){)Tc_Qg{`4%%5YMav1m6vL%gLQi_=^uT*4OIp%Y>^$FECd6?XR_TwQJf{G&K(} zIInLooA-@1BMQ|dT;OG_p~<8>A%xJOq53s{6HtA=1sXYuBY!>Kvmkv{<4SGjwLgFJ zCdqq#VvU8nMmheuF4w5ViYP<2|AJclkMB{htbAnshJGLUpJdmyNwq$p;ezX5JN*Og z-17ZVPG0br{UeGdXQdHA`v*Q}jEpIIN9=8-`TNxQozA`P-UZFLQ@`_Uf6meka_?>5 ze=dNHP4yq&qmuIZ&DQVekKY)%Ke^pM9|mTvVeQ7(VDA5YhyJ-hw;&plK&62CADke6 z-zR?ip`UvRtn{B}!L@HQ+QYNqN2Y43>)Y!<@tWPOC7I&a1f*Kx_QGk2GXPWE7%DE? zOxZO9m3)-R31IO0%y5fKn`L&t4K~kSsA%W`l9o;Xy`-K}UT;bVyJvMhYA5wpe(o{w zLbkt2st?3pTwMYM_5=IMwD>$Ghvg`rvM4DeC3^mzES4t#JI9&G8o##Joi2WEvTOM6((i5bu6ipV=1zVlB39T;v({(v*E^81;2=R5Hs|x5%c@L~ z_{60M7+W7sWb*T+pGVT!BKnM~Hg>FyNd}XLY!yO~S>DeaURrr3U2H;^M#gm++4BY* zJJ8PwJub1A)rS}kvSYUwVy3c8H^%0#D^f(1h>wKm-Sk$j>678oS$!TB(xb<*2Szd# zklq|Y#U%k7oAYn;5QIj-QsMo_Ehk92$FU{jS2pJA&q+XKYDZ%;Gx7G6awR>t&=Tl& zM0w30m+Psp5@Rh_^yYLUo$Sf&2G17=(jkZGD_?pK%Gh7EfqEHcHbe7xNEH~RT6)@v zEL^8}r975rKzJMkh&vL}Q@y^84!vb(0G~MbSv7r)+YxmvH9;kGFP|5N@nv8$7fxYK zFy^)My~RrxMU5x#O>{yu4Td-My^4MnL^m+LqibsoeEB*T@Ev@%Om%&uosCVNfb+O* zq;)+MG}~pyiA*d>NzoU~W0ywj4Cr``>n+rL=RN%Q=-gTO}#E_AD| zMPL8@(Dyc7RVzzwQ@38n=laMdr7O6FW^o5!pg1AxfS#=mtZ$hWP|}t;TrP5LO2WYe zYK{zwnE($$&0|$quyUn)`awgzaOJV3?gFU5`I8Dl)uU%b-%8)_TFPmxZ)6ph=4!q!G^kr!(!+r}m|@!Gb6BsHe}Lao@5;7rUCkq^&`z`*@KQ0)WY97L$h%D?`A%7NSnM zBPdIlkd&r@Zqq&SBz`R9q9*tTX^-VxmSJHN(dVQDbKNK@Oc zZ(x9TtI{BSx<5vPb07qfORfpw{&*UlcN6HSQai3MM)sl4=UW@Y&p~qoY>bJVNvTx= zCS@sM8R>S-3C_Sn1;kKWx09YeG>HYDAyxxIl0aEUHNDLfXdN)SIb_r2rX{md^_Us$ zHr;bF!>~{{>I;58y4E$^Knv*wCIV7lm#LFtFo6Rn5s=c@2dgL?+;#;+pb?_Y2s!Si zR?f`GWpx=@5|^qKc+nVVn{BG$D&7G^eIOZW_#_Tpt{s*FN^`9O{%b91$r+L9F_-0; z0&^=WG#KyDgrNNBl@Tog#V0x9gO%%pp0@Flr_MQjukC|$6ghAJ^0St=)RX@3!)lSz z@=Zsj(FKbkhP9D{OlqZg{Wvs%tLuFNC|BU zZ;vOET1@amd)Mth?($>(ij+``DOC)|sb-^d`okwqD$p^rkXQ$l)OZTY zOax4gPd!P>Gqdv>@JR4ICrdKuSAZ8$T)eIB9qi`>&BTu!q_F6!j1Rf1`TZ{*R3@Jf zBIo2Z%!_Ah(%b03-?|^j#W>#pa1~uiSMo?lOih@oramwP?HmjUDV}TXDQ7xiKhc?) z?{g<I&S0*vR0BKK82 zbwwhaDP$}VQ2`XcajD6K*Q!972sG2BfO?>os!LhxMO{??!d7w&M9KohY-Cy|gNkAJ z1Zy5-+ZX_oi){WrgJXU{%6lxpxQIn~@;Elzup~QNSJN1JwZTAvc)MzzkHC&qk16Xn z3M$Ub1UCM_9}XVxHwgq4rxokq>z*Ib1!bNlb{W-F%J}PxbyK5@<$Md@w!kypxqHFN z$_g4BU@$^gBk}D^U$M%y?N1N*OL%vVQZ^n=sLoGxeKS-FFWSkQjD5 zBaCcbTZb=83Wn`rp$^MhoH*CMj-No^4J*u~p?k%a{do*_%$mj;lN!izE-t9d)8rTE z+U3ePtL0|sIvpcjC{#vi-b;^ADYc6_W|m41*R%3A(VQB06NlFY%(2Nj*j-~x%wUJQ zTks7Unkut)%0Zk5oCsV!-z??ZDJe`}A|@-_ZrMX@o-liN?Oct#D4%Q7`Te|mNZr!| zYk40v4#Bt_AT>|}dx%?zE61@+j8Sth2>?*ik~?HMNb`N1ggk(fw-`mm&|I(RAlQZz zlD+XzE&(~4$Ih^oF69B)uWi=e!ffI=7UvlT{bZmhHT=gUU^08TgGw+RQIv*f)nGj) z0~=YHe@rGceR;(iqz(*`GZg?1+Iyt%c=MBW8TqyC$nzwYR&Fg{0bg2E1m6?r`I5r9 z4mEy*r}kKkVtd{-P1D;c%0X;fW&-xdD@n6{T1jC91zH%;v|D|XK=x3bF4G*l@&zgA zmKjrRAOn#aiLzNi^@m{v%;M@73QHNc)9XR=8n)TnFWbAbG19JI6THF!M1laoyabpn zwwjtkM(osa{4Mk_NyJd8&w|OX;Ruv*pMS?knE=$Vfq_0e#ID=xD^%T~0Y+0Zub}_= zcb+*(Hlk{FpU3ODCZi8VVrnh6TB@Q6;T|u-vQi$wk?*%czW^(l;;N%oUfytZCP9_W z+Q7+a5?t+MROtlmJmusPjjx0edYp;9v?Z7rmXZwU)608}_Zskul2t(P@fsItPHRBR zf`d7*dBD|0As|_~@0NH6_(+hk5JruM3yX?=Xw(}#j`e0d!fuzz+SDLG_1lwXcnlk5 zaoRMo96k6azuxmYJu7|~lK^AgSkN0}VeyPomToB+NXq@BR1ce11yN}t-g&9hHJ6fg-c80I4 zCW@Pxg5 zXb220`%4E$>wlea?@xXo2nvr-hM>Ha%uS6^&{%4>&tEpO+majC8ieQ0U--e z>gkxv@_|EWv&xZN3cvR*K#G$zICy+GyT{%F&bVCBvZ(qkYkA4f9D}-oWcjf&j0?L7 ziGRQn=OxjTeVPjqP5hp7kO}7Bq!H962-bp$A<9{+D_o`K=A$@cNwt zi)RvTTQLSYyV((@DXX6Do}L9}iG|7LhyWTu#}@&>G|USl1TYDq-n|sFbEqF;<^W~0 zmS!qRRpKc4*Eq1EC+sumSW9l0#D}ax`v!>bT%2oVEidg%XzhR?N_ar*88yx52=@9Y zCO--uVJr9X55TPxs8{I1E37mQB(-Dv^KM>Fd`+4!d#kNNARr8?C`BJfR44 zRtlINFf*y|lJDif9WyJrZ9x2poy~u{3J0t>ji|J9^f>!yPFP~845?JSUXtJKDI+Zf zBC{EFh%VUep|MWvh&b{HAsv%dn+{%LuS)HXAu^vmW{mzZ0$rx{8Zh85u~}J3cj2}rvCEYHD;#d!*QNTUulP}LTluOAzHYq?>6w|{;LBn%J*_$kb4aAR zvWM3GY)^7(T9%VZ9;NaT%tvSr{2XEoc)s;DSq<#KqbQ>QCo8KS;HkTHd{{XbOLIsY zDONu%y4>2|&%ZS&*x<5n)EcIXc3wxJK;%#N6m~nSGosJ$BgZ0B&Oy^1ah->f$t;TmB9i*o6jT|6%t#9)L%ceyekNY=>Pd@H7W&z8s zr5~0kT8Cl2i)(lRzz`d_8-zwb7`IF58r;OkNQi#Ui;rPEa?Yamr%_5@B_xf|Fs9wg zTKX-`$-TYOu+%sK!EvXZrfQxxci#j)7q|A0<{jb{nQ zPiBw(I?dN^_K!Go=z{+p=-mKjsEBrPl_nkf=P|JXeN$i5zhS-W_wp}F1EXDRSOk8S zU=p}qZTkt`{2_Jjgvi*^`@=fu>lZ^-+-sk_ki}20pOWjC+{V3GNs@F0{{c?V0oZlp zO|QbfH9XLPYaMB$-ZQ#eGv!ItQE@)*mGLgKwJG+qW1KpUKU1Eccd-F9aqXiX&KsBg zc^Fa43FkERjQPU_ZES1|+t-2I-4`)(oP82wy=*_hq0LC7?*9nSqa~5-MKldGD||O# zyYm+%99uJk8>uoJYq^-zF%Foo>5-*Rj>xQ!&$gqeEV@UIQ|quBRk)N3ieH}NjaS$2 z_RgOQ-c!wRFJnRo%0`s2Sp_-%mhhC8*6{PjJs-pz=(O|G0BX=!#YH;i0BYVR_2z_A zRj8^dd(1k{di5A1YOI;mM4h3nx<7Gd^d|%{(8%SomdpWDuZ>H3`8#$Icv&gn_6Bd9 z+;jC;`AUXy5DTny6zZMM`jE`Ait+UcXQnL89;SZDGv+U41iBMcn=3EW>|?*5xUtL= z$6oS?BsJb7_mr~!Bs0;SMr3L`$$5G@X=|Igi8FWu#!Lm8TUn1Y3y&ou%rjTVE#cQG z+-uVZ#$#hX0DiZQRjipO^ZU3rgP(S#;B4)6rW&Uq-?!UbG-mQN}BR9$zP&?Ro zzMts$&)H1{F#mU7fbpXM^(WEM2gA=Qkl%er1cm(AV=kqxK(4$0%=qswb1jo+?pIK+f~%~--~Z)r ztaq>fs*Q)?dKCy^&u-yEcpdV_N-PeWrQ;{}cOJd#4a3 z{6Ddub*ytEjG@Nj|4;1a|G@FEz7BsEefmdP?bl}ZYw1!K>Hl!|{~5Y%glWHTLH{@* z{{IyFS+GMGnG9Uf?QA9xCd{ts<(hsTrspppKh96dhJMvnC?3%jPJ&}Pm}2%he4Aik zTAp|+c?yczM42cwsQcikcF@LQCQx|e1?StgnEqE_qgu_xEP<{WoC#o}zrX>;p=HqT z=08`zqBkjKs~p-_>O31?HRP{co20Ub6<=z(^qhhnf$of>YDr#tLO%A(b0S?gyRd(D zI@=6*UMN_G+QsI=Mat#N2}BiJV>Z@HK6hUB-h<8n&=(z7NK3bBXY+c#V%t1j4yHbb z^<3k`WWxd_7fY#H5BbVH&dhXkpT8_5n&0~5D)s5dBRzecc$WI=dgk7z-i3yAx;pKK zaML*?(k?+oS&r9}2PHuQ4j#Xj07XcRu%; z6$+gAeCrD83gqkcuS>hmOgP~hl6Q|rTNEvQYztTcuPm#bisQ8$JwE$*MoH2 z4g1Tl#cKzF^D#2J*o`xjRVNe3)O7{GjU@OxcjeB$;HGD;vNc%Eh>%6-2ssJ%_=0QzwpM$fgxW5n#rf za9~x^qy8H2BsH1Sc)^IH9&^sUr^A(UM?Q5`|2PCyy1V3OL8?80yA2V2KnG)YF6yQ> zYeLQMq|^ui45DYBhB{*-Hk68BD`Q0Tjl7P10+h{QhtD8`#FnuLQd8X;9gZTK%D@Du z>*fik!vDqFdq*{yzU#ks#)4Qulp00dFwq1 zp`wCSyOph0vcpBTnYa#WE?*>`@-&Uds(Xia{0|HJ^B~Y{ zQ$)&X2UoUBzjllrM4^T2X-YADvd7x?e%PBoXbMkBW6gZNk4)SLTK@U*@Z_;j-jE%=a0qJOa?&EXe;9i2f>cZqiuDKY?9o0)2_U-C3@eC7Rgt*LIKZNZK+`nCRE zdLrbsy&<$f{J*Z3a$HzqSv94@{&<}8Jd?Hb4Y9(mB1KZ?^BFf^V@+McESWHW2}Y9( zfLu9ZJTSv$0^V(ffhjH&3{jf@}K-H9u-8{>vlin^X$JHJWkR z&8F-(*=YA()R7U?fWv^CdtRL57U0Jwxw<=D`(oVt4@cqE+68m2&J&V(%wQQsu8GbN zLTR86d4Q61b#jEx_=7noWDhywm`KypakpJ`wT;-xvD94=%zbR6 zy`iP=Ge?ldiX)b^yp_$&%*fC=;%x++24cU3!JgdlmOK`4_z6=e;Y?+j9S2;|cymz! zO|D2Ww>g8>gx*|C-ho;oEFqYbuh*X*F>ReQavTOPe)_r1{Azm;1)J8Lh{ysa+t^3S zCRE$OLyKeceiw-vLAH($9;U1m*)8@uBx z)lwz*Sis!(T};ingo)-W1~zBV^G^YJ%W^4j*|YJqc;OUMS!f3%A#VQIxWLew;`W7o zId*1UE?wQOBuKS~Pw}qIaVFuf%!R=jzLBw$4CjJPEvx3QpNGZl_XVG2A5h;bZ5CpD z-CnIhv%9f?{6;!p+t}<0kmXv6YfP2tE=dp76n1o`Kb+$0b93S`&>|Sk`2_E@<4h$% zi=s(8+xO~?iDi7!U8KtCZ>sG!lUy5W+Gcq$zgwrKgYts|cSP<93zLNyKAXR8omgu9 z;yPnGs+_ZS8Jya(on69I&wgD-qUrulqYthS0-kdpHV|r&oUeFUj(o5it!nk@7Q+tnGYms-)MI%~sq-;d+j7!8^j)NWWIqK+ zl+9B5xmHjCkyvGxuV6C_&PJCGnl3_bKI6NzzHa#849AWHHJUcFO<(Ig54D2;OSoiP z$XUD}I65bna|$>bxo2}Ss+)ukj%KLbhlXVx5vE2<KeZSwctjcDbni?h*H8 zu*7`#e7=6kdr6$P@VbEvzh!J~ca8lnKEhZ zqn^A*&T_mXgMU`ex4Ekwvj)w4U!Sl*b7VC0S?f-U)ml@>*xS~X-c|>-%akE1;Hg^J zkBwq39A&Jc(J=m#x!`= zyXe6dAHG$TA8OtgWSyQG-2&=M4Ooy+hyH@@Kt{6&+7x=Z)!zXyzF2#7^}Fpc*uzUr zjhasfQbdP}-!`#dj|Xm$%wgTwxI6AUZz6_k_u8h?n_7dhqmfiPmdPy;j#1+1a)Mf? zijrKZ=&To03&$6)p9;B8)(Ld}F09f1(rn31x=S!>&}w2ix8r-{Aiv^g zfg(7O^rY0f);;vKxXeSW`C@{vP~_9G6)G?7&5@22)!eNMn2)R)uW=q)tdQ`oVew)# zUo5KsGcf-3zjYP53(8K%rbcKwvOk?fg!O+5D%THhB@SoJxALxm(W=ss=*y`(aF}oXkJK#K}J+Bo57*+7PZ* zB|G`uh=4Lj-1}dgjQ*3!Wggs)|9IsV3m$B&1Z%W+xX5)YPrf>*cHo)P_LI%cgKDKXCTCMWzf$ zZwxAQqu##+{}CL;6D-x+SyUfByWZu;k2!SsZQG@kDb+ z75vXm+QA8QaX>GhidpPxB=D$2#OK-wnC((%D=EqLEJTN2ServnyIgmRK}N{qP^6>c zFM-)4yEPC}u@s~vv61uOc?xb-L$7SoKk|-@&-%|sCu|NS((FdymopyEQTc)qSrOV% zbrm~o`Bh0AphC)#5a7QV{1I8m!V>bWKW-02d20Ne$$|GV*5}n)pDM9$F{m1|^zDc^ zlk&)-O@{1`*QzZ%9;iQZsQ!ek{ob;Stg2k#WPOxZT)9#}onXCZ&YK#Lx%A;3rp$ zAc?Mhj&~r8Ou1r{v=w@3GW>nwpX=2!M7|Q>)zj_uD!GS!wCoS!N_04jFl#0V{j^zi zhq(G*`_Uy2Rgz+EdJrCf$i!){D~8TN{N?nV`}R(IS6Fe?i#H3IQznyuw-WRxzO<+G z94kv4EZv9ztNJE6=f=jjpYGKKoji)WY%jR`Gjcvfl8S3W`24Zz+Sl;sLmYcc3tW$A zbK9!vFTN7M=A=sT2jA;BtmhF0aEu^sEK2X~RblGA>i6}Su%8=CJY2MX0z_-;Tv(e& zuhxTQLz!;{4EXN=x+xX2_Nin9j-$ParfMoPeLH#+pjv28*-E{%(fZ|Q{PBu)(?ehZ z1ldKi!_=|fh4E~mxXFrF%|N!B{Tu33t&ue2K=NcYXGagJnaPSfIysrZksdj`S~8|} zcKT4lQbUpKWwXS~Yv_>-oAV%I%T--OSZyYbjgZVgK)8-0rV7pq*~F}5+Rz+U zcFKPAwd>vcqt(;J->XTu5X{Umb_qF3(pQ+nxhI-Zv{RYEx<&^(EqNg1gnQ{=QpeEi zBl+2*$5oJ*b5aFfSn1CJ;xJdNSP5Zqi9Wl>XMB|zZE;0%Lw3x1GMj@4?Z!;BZ{)5z zmR?oXhz=Rs)b9OlqOaZF+doHj9n=Ui(4cpZjt_gj zRe$;9&4wpTpDh}_-gFuR)^5uzMt5#Zl19n=s+T6wJ~%u@+KW)bdxJrheA$M5F=rQB znDAY(YB;kReR#O(;I?$29@lR?msv^DBZ6(E8^UMofrZ2INnU*G@er9nIU<~tTi8_g zr2Zs~7hR}z@daWm;zcGE*5#gzw!q-LAhS(+_v(17yRX-x48vEAHC^57=_Kn2T6 z%I+K)rdaQM7w-+4u*)WGgXBZD%+D;d(=in&DHoq%Hj3K;`T-0q6$Q7mAY%2|e$0hA5^QN^#HV`H)rCo&1| zn{2sjHq;tOLK)R>|23zR9?V(R)Hv2ZlSdIlz}-1YN_5y6I`eovk(ZxWUMmO{wJnbd z!2x^Qd9>!F!Q!jp26Vw_kEce0q+m?@ksb(b)U&Lwpx%NmDB83ctHsIRC$XN?`6=<51v{O>Pdw+TofM9W#MS z+p^B~tNALN*>fCdXat+YfsEU1mPq!qCe8&>G z`^v`Bw~|nFsCJvAt*O00IOm>s2LxaO=FQ7Np6M8UGvTHKHNg5s9rG)*(EcPab-6mP z^qIm#iCt$gP=~9x*Os%Y5J2AHopRY-;A{}0@&;1-b*%|BuZTMz{sI=%!qy=`J`e!|Ud#*BjP_#B^oAM_p<{ayq2;&(SP)=JLW;_SVvca+j zvAlloDfWGKUYfVn!Yw?XyV_Mn@{KsIVAEqv5D>3bq= zvBf{TER*bqdi%eswX~~;-*=(Z5#&{Zx9%BKRukN)s+v95Q58#>SbKz^#n~zi%Q5$V zMpqvI(}68|7HQ3O{^zw)l@Okj<(u^Bwcv9?1_ImF64KFS&KgW6 zRw6_-P*#FDv+!7tJR19N4cRj=tE^0~bH8A%Kx;|$Mza3I=>tS|ybVl4IvwrYrx_(@ z^k39Swv@AqyM9q+nBUn`P&g+w=iZdChqnN{q=Folo8k@{m3t+g5s z`t_FScA)XUZ$5jy*Y;66I%WF1>+{~cbI8H>X_popoa&?$)SOUh8cDwg5IN?CiXlmq zWy^7S3X6RW;PNEJ>2=Y4e0=d2jFiw=<#sH-J3GgYc<3B#_QV}ssLGU}YZ4q35Ov0& zW6Q4-N%EI4twMJ8dz-=AB`DJ8l88m*N&Lh%2@ly>k@W7O*s;B)=EbyO(uNjF|M+V6_Saa)G9k=Bln&F{nS^Wh~S>a#5-^!H#sCtqm5toC~g>?H3aWuPS$rp1ogmdZv$fN4WXf`GD zmGe8(`idvHkH zHl49%NSsTBhwX4})EMo&ka9ljHM@wLM*Sj{p+XIiU#PFX3lRAXS$cF0Rb44!ZwoIY zfabRw-*7Z?-m;zCXex3~aoc2srPZCDFVZn!rcr*;=Z~#^s%&{=@ImubLFyTr z5!m_Hrg#r|4nuXni@NT@e!oFJz@W&et4)G)Z~_Qsi;pP+c=a!G7A7v;)|dJM!tJlC z!s|o~?+w|`=7`An+#}`QYO#_!GS8;`=VSp)lW3%8mb;A1;yErV`*nw2YgrYM@np*I zqvN}QmP%Cuync8wq9hN>GL2h6-y0ptd{Z$X+xKdtqQD>9-O`8S?k;V+a3 z*d_qC814`;2k@k-^()viiT*MDstO)Lz>n!42gAX*{9>-4RrhyCM&&8UpZ3M!H;&7B zzS^7rh`C*;*E2phrV`AHZMr}AvD6Ic6Db`;(u)rfRrOh^wm&^jDP=go%H2`F`9o#79EW6SD8tH0%$5nX?>^oIV z_)7cHE4)k~UAAr75uYz-BE->dl!;oTfTNMv)2{2C{Kq@wA;EjgCIuR)$Jvw#=8qyk zoIGNp&qhVp`cQu_HzNS}X1$bARIHC~8e?g)dXnhY=NJt}&s+`SH>**eG>By#6J6`M z{o_p%Xqyjs3%BklSd-LARp<97$ez(7TNyOuq&exzowjvK`}{RGLmfjyN0atV@&5Fot^i0JjSNdkkrAZ|7FSD~UW8n8p}q8i9(TW$E@^YX(vlGX7RJ z11F4MkDCaQiu!tKXm&eD=WZOHF-Ne%lC$dMfGy-1Bwdabqiu@9oWM`Z9~g0&TKb; z*Q&PtATCQFjN=Bmhtk*SG4i?FjP;7q8njoMun}X zy|49trkvRK{y~4=V;NfOzKa#qVX`nOV2bcn)Lf>Hk~K{;(cyktktb}5n>JGh+I}w7 z&Sh9`d`>J31DuXpFnqu?O^I(V!`&Pa+kJQmNxwv~4--njp@+abt7`&TErfoG8 zk=VMp@Gq|&HSV2@A6Y+fA)%U-${RT2rWG3*Po6_Rsn)oaaGe!-SjW+hkUBO8$hUHjQqWItpc#HbtcU435K^ zf<%#lrpm(QBtjJ(7x8tO-vPC`be?ni(SF9kl_C{yd#~SA2C9%b)%)Ol?XCjX)L8gi zu5jRFDpx3h|o7-df;DPGzNydHu=_5(!ryGKYC!7P>eXhj3Gx@ZRsJ~o89FZ_>K1#Vsxk{umO!!^jsW(~ zAaTxc4Bvkh8b-5m?7&=JT(#uOdIz8ct2ptc1e@dX5%`Vtg|CC{G`;->-Nq`633g8t z_Dzz&PWRuZnHOj6~!Lu=xlzr`3Tq`W} zu+<)2``wZF+rpj{wVi$~!BApN#LOUNrOfe7!3_>w0sJmF<;YY(jWVgEJvC`Ff$>3}&O6Ttz3GY%=%# zQTQ)*O7g{->!3jQT|}pg7_?5v2ZrdB2xUt9ag5lacc0WX#*X5jD+&{Bs7<V`j^Oj-=U?$VrVzFMZ>;0=TP=5z0`y9z~1OZ0y_eH$s0^AU5wW{Tj7-Mdtgp)#VwQD?@NQ}|5#IjWBFjPLs77-ID8>gycvqbhM} zU9v@T;ix5^Y&)G;wb3&T?VgC!|dek)=Gh3^NLIV%vrya0XYS5 z@Sdkjhh&f0OE2acF+43Tg_w=rCp6NG87sOIh_llL(F8WGKu`rpS9$@4*SH`2(FAu> znH*g!Al7o2ON)60T!!cF`&Yx`r@0gz!ibmBNoPH z1H7oC*CcI5tgM8%vAP5YH|fLCOw7dnMJ=1Ps=}&>WhYypBgQmCJ+RG}4(~(>fF9Le zT!-IjC=hw=UG3Fz`pi`*!c*$I#ix@~k>t#R8zB0`99;RhW~xKtEZq~j+m6Y~39gg| z=1%R+-2hoT!Mi+OZ|dXr5{|>QV>!6P4V)V}?|Sn8^bo>0_D(=)YKV(iI1#n((wSeuG&ei}RW3h0t)r%am(2NmIBX@8l1rGA*7d zRYB1^GQ2iBrH2vCFi|^H49~B>&jFxsxKdQe2k=PP&_bQ}PI+mbwpj)*>eu|o&z>eH zo6lz%uK^|gio$3pfGwBiWoj-~@%MkG0-k6Oa=BI7FSC5r^XYdQ=IG6Kl9qmyw)wOtia#u7!_++Y%Q4Id23MHDU>a0@rL zG#l`HLxpqj@({Mr1s~cBPOGfDg8F5y-&Pk95rxk8k?-@M>|#Od(-o~10r=@%;7gV1 zB9ZTb6&@2_GeSy6Gi{58uL{wz7?C`j`!|vH`=%x|LU&@%NTPN#DLRd)#8_e;7N@h1Hg~J+ zR9fN^o*KASI_%!GP{2d+gVLaj`Z!D1V$sCa95zdT`=k!E!U23bb%h4*18Pn+6MqeX zNt@7Ka(s-1nnXY?Y|yXgt*o9AM*!#m&Cp`saFgUH;gi=6%9Zv@M-4zA| zLb>u{TwU&j8UbJLW|S$UJf)%)r+W|^p5!oMe4MhCDgYX&5KeU7f^I;KB=F0uD6WK?lx1drkII}q@| z7xcwd$x=m8fyiUykfG!H>+6^D@^Uy{_O_M+$MlHe$^Ck-YnoygD4?ju; zmQA8PuAZ66Hy{;j_-z{_FK<}P`i+71iJj=~fj)&68v$JxOV6Z?=O!F88t=ogY2nf} z)$+Sz6IZO21u6a+PuDlV1zu5_R}7~=qzwvMAmIql86Cb(s8qKj*@-+<{Mo_z<CfHhJ&2a@0)mEn*dNPl(LP3r z>3~zFEGRSvKZ^pmGQM@{Hjuc}16x_|5P#{t8Lgly?It+rvn7NB^FS9+`3)M{kVeJg z6tVb~kuUVs#Z!VVoUCE1MibxPdiWW=csz0U@7XRR-&^s7;4lJqtv=aCIz?^O({N1~ z4P1W+Xfn@3)aHZB3Ox#Uw>9exlTq*6T;Us{PO|LhZ*^t8f&MZ^A!=LHt3?XMczJ%{ z1Mx9cQuEf|`s=iP1(#rnztCHbYXF$bF63gebDk4{UUNIh_hR{(`PLvzZ)2{t zmO%?BrJ%;3sKqiFNwdGRx)%~30!BP*BY{~DR=M!v;|K{6Y{Z7GqVWw+vr_1_laKq| zfg|`1s+Um`u5*;NY(ujbm@oPVQ+uVYw@9CDe zR|8<(rq&I2Z-LH!v9|tCUurjbGB@-e57I$BZSs4_$kQs92-|9D7X0PYV#b?K&2VjgAHn>4}+HhI6qh z{%X-9@($5==JR%(M)ag>7}80C=;^_gd+Dg5%QP2m4QN>jMk^9+jfkcPS=Oy%IwKcI zhufufzG@$Ro})4H)^G3SdU3nk6YHkl&lW;6k)?Owz#PWKi$2x;h?EObgGAorlhfyO zDnC3k=RGX=KE*-3*8iez%r7zA~LAQO7?ZrgAF=#j4Mg0%03M8>V_-)5W@G$i;2Tw-O5m*5cn6Wzp}xg!&hVBC=83%HQ~ zVLUixF_AWdXkF;nY2x-5#p`fb(Wu4$<4wUG1G?3i%@oi~bax>jN#c|@+YQOR!S-Ok zlPM$Mp@kw2FcKD89f#wpK+|I6c$K*t9G%5FQTvfUw&R{^bAf(9c!<~Tk$3*p#kqMC z@6=K#S`7+O*CMZR;24Cr&P>vqR(j!p_P}5Gek5R)EL&?K4i78>k74EhKZFrqeelS| zMb>+60|Zcel&m>E=oFvGGrMv{Kn+5oTyU?`hb{s{NUF@Y>DwodL*Yp^@4YIq*!b-Q zG<+s1WMiljB)rZ>L%_n`gLn2s+M+OT zKFFAYE%%(iw*lxBqE^Vj762h1im@4P-3pC`KI@ZuxDhq9;DVO2nV~K{xKP3K9D#q{ ztXp7QVbB{7_Y7n{7xdPtKoZ>JoUJMv9e}}736G{zU{M8P-={?^<)YK?*(Ci3Hajnl zg}7;d{K#;en5ZZ%MNnNdVCkpeL671;M1qh&3INR?+ofje0d#`m+d=dDPov7M~yA}1aykL)Fy!tde~VZ4&E&3}z*+XF0|IW;;F4Kr+#x3G2aqw#ufc;eC>RS|-3cATzR%5d zn9?ieD6YS)<2!4j8^3%Zrg$|6g5b>IzOh(M0#(DtVaTZ7O|VfE+bUQizx#&easYMt#)jJ9LM3J>~PRuHS(&r z*&h(3ngD|QNz;fMcT!y;g6{FuAgW~0N7xJP*1D%DARH4dq$%Q_cZMZA{r!jRg}xCU zsxFl`|Bn*GwrB(OBDf{OqNtnbbS>6RTgkM}BnP&d!`39`R43?RIb7`&z{)bu-#j9$ z+B^pIBTHkXuY%{M;5!Al_hy1Z#fAQ+w!F0;rmRRx$n*B=DNs9MzT419kLqi^);(r1 zs4XsRdTcDCBfC*tGcu=N<$SEo0l_Y*RS!Jux^1gi)5614+F}UhRROQpB+_KX8e&S&S%^cnlPY6nIKj+U9qJTPhj;ic*t6zWN#%FZj2C7A?oskpK zOgJutlM|)3q~p*&>^#l*;V$o`9#b=Tf*)H>qy%F#{ZG(QjgD)SOYYf1;kiG{nj&BDkADs6g0g?%ZfWQ6XMU5-AW3Lzls`% z=Fe*0;DtFCehUt;kYtnVSS66k<#*$N+T;Z-VYtkNzp;3CGkC!Y7z@S=uq}ghZU^Lt zeurvT0LxWgPF?a5)c8>WihF;(&5+*dW-nXo=|N_TEJbx)zuJe3DRV`wrM}-LEIDii zBNeGxnoK9L{-0lq_$_EuI^teyKcG)Xd@~1iMchHQLTZMM;nxG&Q7{v}1N<*17-_vX zzP7hu zm>f31tTjJ`0I0av@8YCDUTK_}nd!WaIcN3;%Cb{1ql`+h5tyLaq8&cS6*_&VXoxmX zW&(UErl8bJ$|9VLpmliU2wn%XFe_End7xkARz&ppLUgAaJ0LQ6!vWu6JJ{3z?!2n4 zR~>@U+5u9Gl(qzn>uS?qFkVw#{HPyV?1Z2V3)q0uNSV{L&trgCoG)B>annItHRBLm z>vCDpjhsnwnz0De)jC8bunJIJ3?8??4^58w&`G6LKE(_65OG5!ra zkbVMpaV=>NHXl3u~Ut*~nb%K|uiZM+SR%x}OK8F>J9(C^@U`|C=ufFcY^-+5&$eo|D)r8Xnio~x_025r^Tu=x?65ySFTHazq zRt(bs#`$@$A>dV*0{wPjALHwWdSb%QX@Dq-$+J&Aek;poAju-)m%&sAgcunJxGpFd zH`7nK_>9kH6QX;I{~DE_sk?=6aW}7P@!<6b?zhR)z2OfQE#qx3Ot#Uh#l9dS#2O=9 zrx3I(S>#`Jwiyw?$=(G)ufXGpjfsT8?H#%=$geep4=W=~e5}%Dl zTKssunHVeT-z~?~K(_83ua!+mOF;#udCR%v$M^@xxqcOVN3vz>dZ!iL*`{t}*Ea(M zZ1g808~_*F^I}pKd?LR^AoFejN=o0MwOQ~(O=MC%fmd3k-+*f+V3yg{zfw1!GYd_Q z#gBS_p4ji^(#6D|H5M+~Tdy>Ewxve!!@@J<@JhAD-^Uv!lGfk$9LfutaEl!C*$muX zkrWpNA@bcx1^;m5Xn$De?%5yEr|i{%v&=hee1urzuIdb2RSQ1hn+`a=Ix}FE)mCCc z1Yl4udaNdz{uyTXyLbimIh(Yr0M#!V|G+ zN0>fNlMAWk#@YciKWkcW^kJaNh%UAJ=0#fpPm{a~jvB%M#N}A%4W?r@%%3g>ufl6& z+#O>|?V5-v7dEueOKlZC(#3C&460VR7D#AxigPdw;7+g!?of!E4YcOgh)RJ zMJbjv`1#+De@FD%KmeJBSR{!!P=NxsF6;`kDH1lrlV9z%RxCP&ejCy0q?9R;w#>XH z`$p|?jcin3!gl|s4RVJ)OJ+u3w{+v>M;3_8OJeslWkbW2w|iV~s6dm*ftmT~`eJYP z4B(_dZ<~xe^pYBecoc*a6i|P89=r`xeDc_^<=DkUd{mrx9>nQ{JLn&q11&l;Zg<6G zfn}hM{AWV#r*zCo52iv>Tp_{{lsgn7;+MbraA8}5aWLGuuN;`h@G{q2%}~$JWOnbq zRRxme-S(wLH$^#bWy+5tq8;t3Il;g5zQ#F_fPNRa#d0y@F2{ua+i02UblOaEP4DP@ z+qPgZ9wRY*VgxRP1jREDk8>Qg9J@=`?njM>#r~YcrITC zfsu0mc4t+*##|s6D33FvnGL8x70dQ<$erRQUoH7KJPZGaJE6AHZa-C^$JZoMeFbys z^#})9r!$w~_q3gWqB$P9FvP9ZLq8PAc&gMeCcCW7_=hu}O^Kj4z0)JdZ7{irqrBjg z-R9BtRz~=h{P1~HdWTsQxdD7Yb6opLV;bfUe z6NtZ7TB)u(SF6(KZ8+vm+%n}-;e^u>p9Z$ec=r5<=Jkl57G(q))*e42le9b++EH>$;v^>vf{kqp9)s znk5a@jw!XDpV7B|_*P<;+2VOK7S^%UCC>QmIrXR+p%HyjddV=W8>Cg*f1I4kxuV;s z9`6kTHluT-mo3i)ZsMWuw+`{_ENK#oRZ7te_@4)m9nG<4sUp{Qda;?7bvuJ3+Cxep6i} zvP>a(CkI=I z7^(QaxU=@d7ch)S%^7GnG>3>nlytXXlyR6@lmA7FzVTln3Qn(V%%{^b-N289kU1uj zQG9XWqDOJ$e%P76a81!@3(rnKz@hKiJCfSBAYm1K-QX-H`=F(|l=?U63QffS8j-Lm=I-F1YtfU}0Z{rz;+Izf_7@mAxqt8|y zb!ys!wXSbL2uq=_egP?eIo`t`MD$ej=F687mL{P0fN;c4WaJ2jmT&HFD~*w?0ye5uI-a%r#z=8ta6vVw-uX8_tIN!kdMi4=R-C!4JPLce0zQ z%OmWty|lUGWbxn6<^Mc|@cBtl^*1pXdl0w*?_bVyV_nm}<55+Y#4?MDl;b0BPZaa# zBJd87%3>E-J~5RX=bOP62*GqB4{iXix0NX!bcwyQb7AB}v+6>}Z<1Dq4HZpo6`q(Ug^ERu+)DbIoNX?#ISsO(n#anCvjDXk6ZQs~^`l zdE%PHvf+G1#~)BX@ALg|X6nOkSEU8IaP)X()Sv#d@_v;P)IklLp$s zzrF=we(#r{$N|hz)pB!Ni%!ryNbBOV5)w>e5XvA>x!E-H6*?<19J7s~Md2@W%T-rb z^=#7wjXpY7Z|7Il1)}e1%-h!uS7Y?WSbKEF5HM!Lf>aza3apcei7DJQ6b#9&2UAR!C`Z#0yN2?0nZi|wM|my zWuZ+g6akNkAO;ER7(`EL4Hmwj%yK_FK=4mAFSz>?0mZ!!R{Gm zP#?^Ir3rs~!8TFK$#PfLWBdzWiW>_~(sAjU`#jJ5&)ART%=;!D^Lq1vs2;dnc}A4_ z^j9n_oy}_N1Y6sw@_VVDta{izOH!0lB(IQ;8}~ggsdRB_e~lj(XSwCUKCcR)0qi2Y z+R^8*tS?t&DfGGRH7^{ZR7KC53!Y>(ny?UJNWu-jj+F4<4KG<7^yAzJfv+U}qornR z>96#rPEKa`ftGg5j;pAyUq{9JI0ZH``ekWLP{R|g&xUx8j@C%C%y*wp{5hhCl9lfK zns~2s|JWB-Rc*;H1ka%fqd)0bum?kS4O8D(R{0L4DAHpa)L&U}uCq!AF&(6(rM*SNNv~gVjH05E-RJi4UEF!;&saJ^YEYm`_5+wfdgZBs@ zhQkH+R+-$n1Jyy>R`*FBDe3^=xuH?%f1ZK_>e41Sn=TO zP+TIXES4=UQ;L?p;O^~VW(zNmZNllyLYmL(^DJX=Fs%^z)Q z{HW~Sw0Cp4XLl@UkMc7y)sOCCG$WQlV0Ufl-H_k{`a(`|fn`aY|CrK9UVBR8?2y%= zvF%GQ#?NxAQKXsNEO8a6>dpmUeiMG}u^QB_?P@e}y82*4fuo-vW@3~5arqDJybug>FrSUW6MLVCs@RhgxEK0w^^m&Yf@}=I{ zQYJ@?4af5G=U$L>Rj;m2Z5|_AZ))InQcMf3igER~!Ze;pR+nEsSKBYU*f*1yN95a6 zV)nCP(zu**VKi{|qfddi4}1O@Yy-Vt#hTrC-&lY}@{Evkz7q2iONeD&kvwkmn$yQv zco9Bihb0Gb(JsLh4BeZnu)ew?H8K54=kUQ`4IiTO*wMryzp-yLCr9>HpNRK;sHFK- zARRp66&3*B{qf_`8q|x@4>I=R(ACo z4pQPb1-3$50>Yk`G#L--Voj^Zmwnh5QBCGP*}q@u=X4}3Q|*mKIvlr!*`bEq;heIe z;*;``A6#3P3TkoccdUJ+Pnd`h-~50Vx;gwF(;@6~L=jy8b(yxS_4Apyu-iMS12-eb zhf4DwR&_E3kr}AMk1FGvNw;hQzW*^^%i%oQrk2oowmFby%16$DPg`t0Ki?>FyLzSM zry)Bmg}lQ1_C+T6KV0m`mME#c#%nlW)Vu9A*G*DZX};3Es;b&{Ka6%yo%0`yZ9Wk; z-r(=M6&jb{9omu;f-bPFP0(-6E_C_$c%>!2gyBZv0n(4p4m@@1+gUcGl(VF-S1QfD zriU|z#}4W0>j&2|HP!i?Dxi-&mxN0?vDf|D;q45a!mR@J6q(eSjE4FW8Pvud8Ohp8 z)eaE(Zx9FxkJD0cnucqCCC=CV$z$^P-PNWI`z70>^GW(z?q>^=Z`o|W=Nab`OEsvc z;jG~dI(WTgZTfP}i6E4&PuVTSZvoj&Z78~^xW(fnmE_?fp8RUs9l;X(`|Bt?-_ zo~W6Vh?V2Uxwx_yq%vD(b$ArU7;aW_GydOoZjQalsHjtFrEn0(D%)zgZ?ba#Q5{o1eD) z@#hi`umkXqU1Uq@4f$J%lVoJVIjjOAa{JxYg^d?A2~}5EpX4P;p=9bF!d6w^_e6s}^c~8Vr_=Sc;Z!CKkgi*)83x0JVkJiG5o){6<@Txw($b zGybg1Fd1{HKV9rNWt#{ELF!*pe*JgC)k{350=&%he|McvVU;5jFz}b)ANXV17;gAP ze=`{WKmH+jHZZ}c-{f~68uk=+5oLJbzbR%fe?M~S^ZWOcyrzCk>ZjUw7ZF7rkC1;q zK8E@+fB)2N3^yD;{vZ6%&F~Zy&H9qqht4N*<0X&Bo_=COxroeLz8YV<-mI8L{b1Cg zfx-bi7kD7laiRX}J{Gnh@?~0*+`s?*_i<EEvbA4q}vX@CFh|Ne#l zeYWr|{>LwcGt_Sx01U|g{VDzb@I(LmH~D8gPQml|pHsvCVJk-Q1cz|BW3_bI(;Rfwm;m}8pc{evhkHwBgBUsFb-MRJk^mtlR zZv^Uvi3e_ZDid0uj*{7a)$UV{tk}XW|8);5E2~y7*T zv_HIYf~PZM@uNLX$gJGWeRDh~JG%{ueqBx8{+W?m$zUGos*9;~TNF)=d19BcC`lKT zO4X6G%t+r|sGAj3eyy`>sbaLhy zni|96(q@uKHXkk~E%l-7ns?N!`ds++_qGhaa}bHN`5&w8I?Pf!ZzNYdZjWB0UsLWZ zj8bCWUF2bg2|UW9o%Q!fr~Xu;EPjk{=6R}X;Zrt5I%{je@4TAck7o>-NIDoq=_(H1 z)Tm~e;BK!qH%=ih0rtFETm;s$4&rUuor`uuRj4sk>ShOQ+HK>}zB;Y;EoZZi{Y>Ie z)M%Hsdr0W<&+6%7a50xb^%p$DNFBGQK34(@0P-xFw9Hx=F*k7<$jb-l7 zL@ocC&@nJb^+NN5|GG~-#bEDoKreBl(FY4YqtjTO`7vD2(D+;5Gpi~uw zQ3RxSumjRYP?Ro$M7n^XLq-u%s(^sh=orCBmEMsqQlb!giJ?V8FQEmpzuaTJpEuJx?vF3NupbRx0uP=HFKvD zqY@eyqmA={Hp^_6bKQHbK9!LWqS-;R?sdI}cgF_e{izV?FzZv+iY;|5w* znD@)y=>9WzjKMs{mPchMaqUSCjgcwN%S&%_z5cNd%igO+_T}V=jdv!jn>$K|a4W~T zk46_kaW;3$xTMU%Y z!j?XQQzHGovHXzr_lL8dG-H;(+tI250JgvP?sELD`=mO98?IorIYQg78C!Hf7()%J z!MEx%&ej|5{Cd}h3h69ziV54Td>BLxY^{8#JA&%BnafiY9rU5~nM5;NzbcX)f|psWoa3&@)$JeewcCVl~A8pnn`c(GP3X2lXmylwI;#4uI9O>jTNv( zd&?tKWn2bqjb1?8Sz7atFWt%7uV<-maQO1N2)wuh$BA)&!x(gXOIpuj-(=z@Coh+# znP1i%L?}>KV~eK9&y&q}m0Z+sTW%GpDrXnzc_gpH!l86txST0hyubAdY;6E?T}@~HMDoPC$PIy~i(3G%DK z(sxs9JeP1=z8&~rBB#_;z@`hh^+KDEEyI7Fm}&owH#)FVrG2TR0+=AXiZelLj#>p) zAE&o#_ASP}7O&h%3W{-@n^a|zRZ6T0^_pW#-@nwgG#xr^B{gQ7O-T#F?yO2KNS4!K zkA7Se7s4eU;du~lBdFAdBfO5uyIpQ`Et*e1c$ike+N$K{FIjKUMiDXKtg~t6G6NR! zb(KoKRQIbMcAJ1fAB`sp8GBg@y?`zXspUct)xpV-%u{Er{}HOBBXV^W)qSEmlwXI! z@CnO=LT8_#w@Q9AZQwy|OmkE=vF%YTSyQ|iRkdAAv@+}T1L zW;M*rTMQ;PDRRUG5LH4F9(L5gP2#O zIJyt)*dwe}#+894@w0XBnlz1-W*pB^qe`6<`%6 zH-;7iDCU(oA%5#-U1*W_tQ9Fr#O%!@*Qz}p^Lvq=TKg0{_K53mb_tt$6a4-dIKtWk zTq%0zqv_q!8mq${M`U^aTzo1T8QE45K6V3I5N2$yNs+f%?R02TyO0S^n060u>=`;# zaLw2nCoFuF2|E)$XTnDj`L(PwuP4y1*tFy}tt?Egw-lgP%j(2JrQs2se2l}jky&x& zU--j3faNnA>wB4ctl;+otFc5Vxiu*VYAH@w)BO%CTNIt-R|JaCriBsqDkv}{NtNT)JrU`cgr@2x=7Q`on~rZC<`kpR51@n-w%$T?}}F5 zOlRTlc-@+&(D!2TWqFpdV%Fxcl{H~3iszhWa4qvmoL0f5tHj*J4z(RSMQ%JV!zN1d z3S?OJt>DVLs~x-y$265A-0G`|%5AR-=qf_wy-TmpQrkUH56i7e+Mk(v`EI-K`UXhL zZ4O~o<+1TJdbbKMo_Ebq<1$)vDc5Qisi2dWjDmuRTf< z#_r=i)XL1utY2tpqbtZJqO(|;(wDwBI;nk5=H_hpFsHK$HO`fBEl+*wV*Ron`OGyc z?+`RG`rNKlte8it32iy20(AM%vCzV>Db*#}$8&l04z^!juhoe6W)S=@w>d7SFjmJZ zT(9eG!6=DN%szbK>ffxYMbJKCA|`4#PGpKsACj3X+H4aiuap1rrbd=ll0%vNtyS&v zNFx!?Y4{C|M>hQeca!zao1K~N9dF321MGKZ;)kcHk6pr@Lat=96nXU&Yy6s?$G5?$JwX3Msbx}dBNph$fVcN)~39my0(vWeIPRaoHd}G?1Zg~68OfZ z31TUoq5D#KvYj5&#lJyN=!VJJs2CQy71nw-Tw0w*K_Q5wAC8 z?yd(uN=NU;iIV8rrL;hUqCi-43iMb z(M4{tg)-+vU@(N0C%lTHCaP0ca|cg$V;$<$-AZBmj6CWhZwrbOY>aTxojPS6TjX_} zsa?tys@#Vs=z`F(7sGUx#0N1-sV3b|Mui>_$tT__1UNDFD*Pi%E_gQJ9TemexI>pJ z!xyB_)TihJNXfYp$0_~F0NJ-~V|gfVn+H{AhReJLssf2=wB~TxUX?Rv&V0xX*EC%8 zdXGN4dgQQOJzPl2wfXxtwrPBt`>mE(*sGC@-+1dwm8dPPPk?!#3P|XbceuMPsj?as zT^}SBGn*8+9htcPFbqz|w7z|J>IP+XGG@N1q*>M7z|L$A6v`3#1X9!rRKE?P`Z^UB&J#t+eDs#5)ED>ZI z%9&9!%w&x_VjCHKpybaHx6)ut@}Bb4CQUb?2@E~- zg`AJV@v#*BhFYBc4EyBz&Hu+3T zl`qB&yj_*a=0L^(S(Nuwm!cbwC7(u^FPgI>xmqGzoquH7)UL=xxWt9z|KNy(^T)w^ zZec~eK5>o}MUAR`ot^tKcJ0k@WVfNU^5AW3#^f+7Hx!zV5iBy-7U~;fC@QEu(wFMA zs(8EvMh=8j&q4=VDL`G@s$I<|F!r%~Cj4QcafIV?HCw7($m91}&qY;m%*XZ1M0<(p zXOzP@P6l@Qz(`Q+iXe8n$b%9&VR1@{sn?zES&{jM`gpU_k{_$#w9jslm?u5cdTm7g z($JC0hb*(r;e0@0qlc+S^Zg~33)@`tRd=1ljW~DW;|y~UN{1G~gO_&b;T%~7xC%PX z4&HpRV9e2Y_vPwT7Dr0>DaM#*?#sh-uLquXn)5d|ubhOU5h!pw**H^J9DX$2wL-s6 z-{%4!`YA%@KTSpPqUd*@9kg!&Mv<~~rVlQ&nmU6#r#auLYOcc_r+drhK1!Qg-oxzN zw{Rw}>)n8D!xe{mkHh!8qtV*XnSXxfg?#9pB&bDjrM|x|%x)4WvUyB;qEYS)m&PbO z2FvvtHNAl)x?Mjtf!3BvxMxVm?@it{H7-)pEd+f6uO`mtk!w_Mn8(tU zh^jPGAG&(VlzkY-AF551G+pI6KcGg>Q7NK2um_X8EiT+x|1;NB1lxIwY(HvV> zV4%)gE9EDwxc|1nI4Qe^$rV}*Bqk}per#0k+;3xW%a(c&_-o#++VM*CP~zy!A++LF zuV`~`eytd+`|{JILugG+yQQab%MT~D+Rzb4eO#fu>Cgq40^pzO;>)V?B1rMy@LJuYo43L>rQG5$H>^}rSIAs za;Nd&Dd@5^U)*Ek4c6yFFD))J`8jGtvYSlgF+MtmalG;U-EG*wi?m$?7nk2x)M%U< zZzH|ReFo(g`hZoJ^Jd&aX_e;+=o=ACol+7K$4&AMCML!&oF^R%E7G50hto!OhnB_K zI&nJge2LffrM^MY^GGiyu@}Ude$4b)kk&YY3)Z? z<-H^%7BBY=^1e(mRuZi{bKIy%DUmroz9rHKCv0~!L;^(9M^GzAo zB{w+hyUZ(KB`>Ny@F|8IqVGQ&6s=J*B|x5?<#Z@jmVqV-xU$rv6<4C9z7JBFwU|Ux8mqZ%HLSobu6f<1jB= zz_;+;o(x+p*6lDMtU9wJY})>ZL^u2GSSnKn+Z8>%o?rhlZTq{ivF@#PCrvx!b=N}2 z=Tt!43Jk8T+Vn}E@U9|n(@7Z~%golF!eSfeyr`5RuJ6S5(>7#ZPO5TSW<~-V_J35aQr?2h}G&J8{43o~Va^T8eOz03u-PaU7nr`kB_P?J{yiNB>__=%>75Z34h=6TD&-D%dnQ#oELx^T;?Z!Pf(P&V)bPn7ngW`|rx{yDOxfw(_M)iZCaXjv*y zw8YYHb|;)Irk!0D{{_#<=}^XKNLXL@^fAoEtM>iEhL#`xEO>tV@M&s{Wy;{77D-0} z)^KSm3}fWALb6nBv8&Xp*Y&#lB2iQo=cO zqPtY#R89E2=B3L$x8`-)UirQ-QizcIZWPC<%1XOKwkR`>n$v&9iUBCgeE0)-A+x#7pE#+ij~6XmMPP2gGfN0 z>>7>>QH~yHo-55Bd-$vrsVUo6*u?4oty9Hy6>0MzLKguOZW$O{YM^w z9gO||u%N^Q!@0v}5=!RgMkW0(*f@j^I=)DqY`EcC z=Jupy=7J?oOUxsqaC23((YSoZ)1vebp)fFv_{~1oa-XZK=&aQWKJ-;pn>51vbL`<2 z(v!<=)X7ec=T}TF6gNz{)*arSShSc!BL4I=LUpaCueC}!#yziSAyM>XnIT%1Kvr7V zd&%TzF>0Pd{GgB?)iGRPF4nU=;CbKQB&YZ=L6tj(cIBcjyH;wd-6w@P+YjixJdj}*c}>b_gU3$w)?TR{&qY~Gb-ME z+hY}0Jd4Q^$Xr`i5wmN`SS8qgrM+b)w5k#cb3c`Zt!P}-3<*19z=apI;m~2C=Ot+iVI+V+ z@6&xNuOZup@i`S+A47zqn{49=ZAev@n9%565(rh)A-r|Bs;iFN zn!Zue;C#=LyE1es-}(z>?l6zBhn7Jh2|>w@&quIidA6yeg$}rW_Yo}9Im-~6FceO> z>|%6Kf;Z*faL*MHFQ-Ga*|m-cK{Y6Ak!{bTUxhmwY}7rtueyquIZhOydR!FOY1e<> zXjWE69}w$lJLeq7V=IS3>K`_?&h48Vw0(DrS6(aMq9Ank)k?o>#y}@#eOZ|$dT&&F zyQDRP|q9m8~lVKGqSc_BOouCv3t7UN7G$$2}#)Mc!y zB8HM6u-@D^rXiKoE4NONuPBAP3>7fhg)?K)Hoy#j^t-TO0s{R_X}oms@B76I<&$-@|!KELx^MB@tYoI1#oTRKsbd)$?k~i<1eJ zYGWB*aug$KBSIK{2R@dsgElDHuXyW?4RN!HRbk#E4DKUA9AW-){*+{aZ?xEK08wbiQ2lje#fFi57Po& zqK6XQN810i7~zYaG+Le}RNb&rlUwR1wvLI{;>z6Vw+A1(#@W77q{ORhB{fU(qtR#J zCJ~?Nhdtn+XXNoXtO#nMO>OK>3mrP$A3cfPNX(Y27wga+0_f!*f zzN`@MgL18Y*(-|~NhxE#5jlO(nM7Z1qa-d{yBlW|x~3a0LBmo%UrMo`$70H=`dIzT zjnT{3)h3!AUlalRgnm{&uCDJ7IypzYHUC$?{TE;#ZR?Odg#Or@8%u~@b&jdiwoEk6 z%q}QOpMhK5ZFcrKSd7KbwbeiB<+f+15>F}o9GSaIJde#!sGU6N3r)pnW<{$d>xQ@J z+o6t7)ifSl;kyBy)C-e?(`qByI*zRSD=WbzZ5*4mIhO^UFHcwuL^badX@_E zHLY%VpK{ck^uA==v2O(a@Cxbur#DDJ{Lj9jFAk{x<;HuY^&0lh8F{c}MrhOXytZ$; zU&0yn{&~iaRrZ*K zb70<&AImWLD?9exIH!Fx*@x##mH4_8*lMk{_#gaF$kHh}Caf&~;C9;h6|4UVqJG0Q zBN1pNnzIx050DGGOKj{9AQOJ@teGqI;1sf)JloVW zaZLJtb3`J?C~vRoSD^i08#gyl)7QVc!DajpV{$kee@7Yo%{TdMhW&S{Wtpq<#};OT zgFv2u7w+G>k1uE$s1iQOe>vy?=Z_BMl9iD2@Q?fS z4bRQLJnrulOCZsfo4%8)d*-=4)~h>zSbZP7!7%e4kM|F*SII7g{~zi1tDDuf-TnQU zhE2gUc61ls>-tJB<*5!V(pK`KJ7hz?r1aN z){jdF$_;DZSLNnw{q2&2{AiKCl=IU-u>St#_TE@PxEc<-P${_Ikz)7Fsyz2_j7ZS_ z%dZ&Bzj7gR{i$>45GkQ(!D9ql{4bVXZ0Z~k;m&{g;Y1^qi$8vRmSSBN_eEIF`A_s! zg&W@w;^&?Ewb*U&4|co1-C+OuIe%H$|5zlx`l|n8DvRR&yKg%1ikEWsqB; zzRtW{E8(x(Z?}N%59{=8`^${}xXc^7oKV2~ABunH50u^CoWJsy@V+{4MIR*d1@5f@>KDXO{n=ADpP;}P($*%aDRe^Nc|px2{XOzbzd-4gt{|ec{iR?o zMH<6oG<@WJSOm<7;F@J&y5mHtZfKZn)WSDsEqWj_rN%KP!PBR$v(t@qnF^A6Jfrf3 zAd9)Il}5sAnP#bLoh*gyOJF*V;XJkkI$Et}tY>MC0(t~Kae*YiwqYmnXPD*?Y@7yZ z`IunJT00Ybm@hmh4e%}u8?M18X#sy;d9!hu`Qoz)dFI9^rQ@`awW?|uMd~XGlPg#u zlsjb*lF~fGW5C|TQV@TMIyOf7By-^Y2qt&b1D^@lTh8_lm=rfl+xFAw;b`z+>~P)L z>dCy64(2%Y`fy7Ay;1O_n809*vsImTVxa5J6zUZdWNp4|X>6UU_rRqJMrq41DFdyH z9yv{&hoL9LW*Mye0W>-g1XE&p*8faTFB`0@0_P!1R{SL?hvK#@(!^>Pc!HT2Pvo5I zz4_4P2M1e{9KdcmG6FUVoR)*F?RfiQ+zIcGsKM6BJ@(WO4!7Imkl+1nDfZx_(>v!e z8Mj9zr;EKTecq@do<-4y=J?_ge6hd${rxbKN;B~H(L6`pYN~Y%{M^4-K9RB+1zU2Z za=(}BNpEj&XHdKu6T@CGYB$pHkJqOD!^v8v+4i0a-tvpTA4Y!P*L|QLLS$lNEW__x zemeF*@+j+8#mii|Zei$VtkZZ069@D_x#U6FqO)s6P^I zjC_Qz%MC;Ziu6I|K<&T{P9E@!G1g)Dud2M9TUvasOqo>n2l*pG;68>Df;{khi1E;n zzLSTO;R}lys;`5R#o}j~ZW^$vkX`bO~SRO+-ou zw-2UeE~OK%Ji(YK3YG`!Ag?v9?9$cwsg5E>ie^VdG9kHXu4O`+4FrE}op1XtziR7juyYSNEe z+?gA1J~7cv9~=B9SgoiIFnOk42O~-KZug{K!gU$0_9dmKRFI*HW=chxB%3F5vu#PPIRE~!|Pri@w zQnC&({Z|gl;lum)nJ}Mmr%IrtGtW??jbYu221^yZpj#;jNaTzA>w?xn8J9U?Vtk_U zQIKeYHaJzB4uK}EtPvY0=Q!ML2j6}lA3BL!i7U&gslAsI=2eHmy}~lawoaerRLo$D zT#{t}zUDA%#q&<^Sae$VtWPw-+;h#29P7UuW{9Khw(0iME!=D?*8D@581fSxFY0$L zpQW;iP(~)^>JYDJ!Dw~;UE(O%14YU|WaAqIYE{=(LfE3=+qN46D+Y_12C%0@R?}8*QR^`aJ7ZVOY_PhC=tn@P`cV=ad|M_15uDtE;-v+8Ue@ zD-t3;E%p=c@J{7F}A0Ed@SsivcLk1J$n{Kg1iA+?G7w znbR5}KIn99Y{A=X0IW)rvLB1D#^^c#mz!@ZTYrSrd0*nlaHS2HO|Dgq7(1@pVW!wO z7=>>Pw4py7)VjbONm?aFZbDM+v^W>b(vG_|nA(y!kE4}I15Qt2r#Rk0%%^rcKdthi znWD1Yd-_kzfR_`7DX7)>yBdRk2*iM*9YoCMU!S&lvIJGX-}Q;rMhE`o)F4mLWkNA) z>dj2!sIEh3VlQg?NzUk*^Q-$*R(}&rQ7s;|zNi+LZy)R}YB?~T6BirMfK=8^XB_(T z1SXO!&rwH&1x&@;R*NHIRU3~xkmVflA%znT;-ka{}y+A{jzH1#Y*MUx&hAY(${ z80#R7@(PTwMmzK?-SDhSKNHg$2R88BcyOV_5QLu%d2|KZIoRD1!c3Gp;FysaK;~LS z?*-n^nE2ZcGLevyYBnvAYH#ZiU}hO7np@buufU>?H+y6ldougWM!b$Q-yGty>edM+ zc=4%lK4Ix|P=D7OmWMmQLpDDB;r;ZybFU*fe8j=Ja|xVNV8mcXhtnEw|K&T&ClgGT zW_wKg#}pJ2O;=&Y%4JI40|ql>Cv{9N%7R;SvDk}eYWBODuW9`IO#MS598XvkyU_s6 z!l?q7D4ITrxD?=!ZP*li=KAiy%>8GX`D@=s9dR5y-}a*6Tp>Y3>v>U85>&R>Zn^T; zNK5qX!GA>!8#)|vu)gabUpn{yu1Ur(Qwjf}qyBf8xY63J#UgSIu!Ttf{Efia=;;A~ zA^+?Do$vC4L*V}%-sJBYn!kA_-^r-|QD~uTMQm&1Rd%=UdL>lBD!>FSW~*gqA?22? z^v0h5HX190f}@$?I?jOZNzLo|;2+?6J1lP7SC)a_=;^+8IN+lfH*d}&DkM--NqW`p zFhtcw)MQbGA$J&AlRlQ>M9?!dbhXLjybQOJb{|`ri9wlV-vXE!6~?y~=@}J4JA9-; z`aa`6hF-(LavFS1_nV5Dd6aJGZtP-YPas1HYrk~mQf{>*6wh-=t|z-!Oov(w^lz%G zv;`OdMn<(_E0};_Df=0mN4#up;63WiZc5A-Q~LCJ5QR+_GP-hwp_Tm1tcgKCPpC|( zVHrFak{}~LojsF*{uI4%?sPHpTG`SF1#ELZRp*(OV3Kj>WOoiaG!53}`zfTIc~T|$>m+nIjCG|cxSSMT~EG8 zhEef^nR3&+chqO5tNRv4;Lcn<&9Hq>e*SFc7wGWH{`#xPgkAF2?;(g}B+b|p!|l*l zaKm+7`XMnUh)Yp2@ukV-%Y6ZXrFupy_7p-(_`D4_QOfk(a?a>pEi#CPVmlP!d05 zQ)yrGIznw`Cu+LWc6q7TZEPljGFv|SL4_I{+nvb)=G0!;7awxRWZ9eml{IEV)&Y#7 zfqW*0`mMxi!nWeY%8I4=}mkd2pbE( zTNxj)hOo=t67S)9@RI}FbX%qhnX&L^`}z4d(Hb(;VTzY;yj8|o4{#+5m)z@5p)_T} z)e?`sh164wk7Ql)?y6&c0-Wp8w()#*%^C@X7NY^d9Rccdy}uT2w<&-&0xkM`b@ah_8)Y6N6dK5PjDRo!7~~mtVU2cy)>c z0y+dtToN8}=Q>hEZl=>{ORCTi`U2HI8}9Co$f+TnM$gOTkp+8MzNa}%P&}( zfKgc~?$FkJ=JMu6E*}Ig#V@C{=+L@pnDXVxKZsp0T0EV&R;NRe^_ew#vW~>Ogqp~x zDve7WLa)y#H#LlRZ}+{g{lHLiEYuFFCG^(;rsCB{0dqVEOjDKR3CG^eb68aK{xp3d zT<$hn1~<5EG=@~r2>Wj0C+ngYAzIETCfgRa&26|b*{$)&3G;-+qM$iYM{M9)kk zGol#An!#d{mgKJEFxr=859b=mDdOV6vtL6T^7Z9C<j}pOl`0;Gxpw8TX^*<~8%HV2 zP^`yWGud_6J%>7Dyrjd!^BX)vDYqeVIxkxnsMTYffOC`00zT(J}QfX+>H-Z#@;(Xee#h$I2@# zTdHV-0~p5(!!eG{W_$uo@x@*+(cDK532}6XJIgVzbZbZreX>mc2-!E?wbJ9NPq(Jy z6B@wSC5>(0*$f!azO&ysO7b!bieR{(f>=g%r4`dvjjvqcRUd9FY?!K_tRo~Pc6q>e zda@0wk}&O`EeW2?<h{$_=DIlri@4eV6 zQtm&2U^a_KF$HI;!knR2PX9&<#zrPnvv+p=vys_D-)x!e+7r>V=MQ2eUqE^KMv=HCvr;-9(^_D=-3ILT#z z!yAH#Gd+)Eiyakghi+BZMl`i1 zpY}5oiBp@9I;??#nRds>O7q;}wXIvN2K)SZ^9=>UN&RoFp6_fU64w_OWT);+ZvA$7 zt@WOxzDX}t>F$%iR|974;y75%A%}^a^x^0W zvF&xGTZ8Ml_8cUr*y`bYkg1))<0?wjg>zigXZX$hz88`E8?HZyV~e<>>Ev1k6HDQA z%Vt?mt^ox(7cPr5qWy4!4KZy-lMFpSU(z$11hSg`*!+mjl~t-zN6Pf_H>T zFS)4%^3mi6BYJsu9}xsnlSkWKOP(scm#yYW8Jb=OJPu4Ggs5lV8ZB!4nP;n|eyP1@ z{OsC<2#cHxN0eMos(XIz%0BvFJPa1FX>jMr@$59aKB5h8miS77!%QyBEj!DGCdd@u zu1NxJlS|oMc*5xx^m}G2S(o*ZT2wUTp&u^>xI9UC+y$m(nj>QSTmCeG5rUS=8F+Xx zw7Wjb3fBR$=9iHynw8PD1HC`Vq2EW&js*4h^s4s3R;nMZg8Mq}xQ+noBnH~2Mmql) zEew>en6MQ{an(VE`1040^>mW8WAc96KPKx_{7BB$b)-O|K7V(8hmac1=e1qFuYYzt zJC>59I&9!*rF%+NJA8%|5%D}iwba~orA^G?l3vYEYDvvTEySM#(~Uz1>k*tc~s%l1Tzp*9zPoiQ*$(`y$a;5Sk~p)v+HMqj)pG=H)!%icKp=B)S;Esu@E5gr2#oz3MA$46(-(D|bTxMOZ!ijJVKmB%F?m#Y zL5&-kPNtuyx|w*L0GI!0{Z(?s(vf#C#TDMRp4sz2B0?M=VHOtAwgk~@`qIXUafc$; zwuVYe3OgrqDR|8`n_&jVfjWK)Ec2lIJK3oHK5PR&#cOOg91jlJBv$vjK8X1GhCgpi zBR1)pLIvi1-|iP|b=l*q!;6Z(Dh=EXQ1>%1N6bESj z9QsS|+C0&@JyCS!9DLU=3=ZKUP8f!NfvSYY5+&Jt>5*t^1w!&^0=^=7K1JVuu?~aC zqW6Y*PMaYMHkNiHB-;@JG=RW9vgs7gBt@t_pZLt**_ov3O+uDIZvW;(!Uvs~#@hpk z(hi}Kt1vO``1t-Mm5{_(Z6xb7*q3`NrgZUapQ=toMD{4mBnxmea+%i_coh=ckZ?kE z`4Lt;ln{KXF~c>U+*qi-$S_mDxPvZ$G))SZ3w0O6;M#u=Q9XL0MDoptXQF{0_K4rZ zBaJSIgoU0=h4I!z$_$%G0Y~B`NC>l7JaT3KgzU$5nG=w~$jk`oFdqNlkfZIpaRfFH zH8xt+dwwaVvGsIzcj?q8B-MsLxf(9f>V^3Ohodbt((|L#jE%ih9b|vLZf-sZQ*seZ zpAux;ZT1a_Qznh99iRbC+lO~n7yt_t6d4E137M|lvQowz^#}H;H3E;ORp2&Ch3pT3 zO*j6TVI)-MfGdj;i=BfE8kDe9h|=!R9K9eSo?99FTmq|_Ku9W}Gz1Nz2Ge?`yxC&n zWiJ0B(%6aVWPt%9e5q$-jlXDbT~l#~xfk9zH1oL#%-WF-jdwdQm4$iK&j!zEP*bDb z8*xcV3&YYL_lxiG&H=o1>>L}Ck93o$t!6le8jfOM&noQ#F6awy>LYxJ23c|85r%W3 zja=G38h4!r9%NvA-b5BU&;1eiR72cyqB^WiKELT9Y(^M=V#&0Vrt7R$9T+^_W~rB@q02{7ZEjJZ?t7IHfZ7ffNH|>1IVHvX%q&S&qFosdp-6$S0}DywH5|_ z`NelKtev=e2Z54KJ@YtT&Y28@OQ`cyWIUOfOS>r=(EwnS9HlO0B_kD{q38p(-=d)! z1F3C?^k<1N>fxhg-ukv}aC~|IoEnPiY&{>6$dR1mU98>hJ_#Myx@BXK;?WNAl8riK zkwzd-Gr1C0)ik0OMvC*(4P_wkA;&#jWUqlV{96b=H5tl;Q%L45zriW202b@#FLgr= z=Uhi6kBuD=w^IK74&cVVfRDT^W70$I?~iO{!D^J|LeA#EB5Tu%2Q2ottH&O=8Z>I# z$9xacVo43OldFphrej+}A^bz1bXPFWnOv4iY;Ql}ms90`#*$#TyqNB*5{lJ_zOZF~ z#A_Sf=Vpv&gX>odWzj=-WI`$+Fy%t*H8}J#k4|5mUH4_2tp!DnUn6nxde0=DZzqiN zxho;#m3~*!(UZ%U+r>$(NnQ|F*)$P>2iT7QrI_`8fhyz%{i(`liO}c3r^APSA}g%C z>I(Q8zDw`I;yRM^Gk1Gb@fi9B2ze4(7&wL^m-=l(JW@rkPr*zn9`>Yr!>eO}IkzrH0T9vBeV2NYqlDSP0 z^jGq&<2Mw!_314h#!2s=dy(+WR9~MvB>k4g{W#D;uNibFy3%z5W~SrBF_EEne<*{{ z2|&euExLBX%3f&>gP|X;Ya}1H>{ncKx6Df+OGd-4<10&SA-eGay@!>JuR-!lIq0BW z!`Gg39YlFM<#(nRx(1Cvu9pD2tZi$VD>PKy<t<)-Pg&4!6c34x~widPpPFSk&ce7XZR~rFPA)z3; zg0ddHjjtYy--1-rtqbGw94>mgp>!m@QXFbYQ}?e{slc~5kut>)utbV2Sv^mPw8`UF zlxv=L3>Cqwx}RElHU>IqrXhyzjV^IWQK6nx@R!?{=-Iv>hJD68`rB7Jkx0-m~EVBIC?PG*x%=QUDHm%c=S5bCfEjOd-%{6(+$ld z4^z?vs=SSaOQb*=u?Vf^r?1`XsyQkklN zFuTv@Z?t+W@lF+1ddPQ8c-?9svDSsn1G|qkJVi+UoE$-uKM11D=ZvqBk zeY^qNZ2Fr<0t(_YbP4oH<=efGGZmgNd*TqSWiRL8pRsa(fGq(!f;z?dKwi_SB|`fr zqW4hm<`hA}6!GZn5tq9xTPgL$d__31j|)#FcyDu)oe%sVx2(*lQ198)yg>Ms;do+y`L>lwa&nagdGATdE2$z#3Oam9YnfM`Ze!f>f(pMfdq7Z+2R zS#cFh%=PVc+7*74$v6Erc-;**+saHfz_NYORmwaT>m$Md;J%@516-N@=K)LDczVe} zKlk2Ujw|Lu{>J|S9qBu-{MA!-ROf#=3(^HLB>%;n1E!^~lGfi3asI_tizsIQ4gcsb z-l8uw;ooLK{@<*~eHPjN#ey35$5(gbU(K#xAc@b&Qu&o49ESiHT@=vQmq=XVd`@{E zTY&Ssa_N#%mP&6SWjcS*a?9A*81I5PH^|p-p0O4x0`C@sfnLy8MI)Zp6HruyX}1Ht z+}I;HAV~|uaTG9wLNruqpwMr$4P5IX8FE*kak&+Rbq^lVg5ajLpwWTnYm|54y}%q!icW1v z-lG*$_L~;Q;64No8EV)}*g($3Vk#_$r>LG8nCra`YxhkT<8p*VTMGSb^m_T-?oAp%uX@p)z*lAXfo1xpMn;P!?_=w-ckw7L{wgpV~gSjRFTy4+^L3e&|e4w$b@(#P6CDhRbUVA%j^98!y`F<}$^5RkW|S)~j8T^U>J>Am7ig(wz6?MQot0#ifGdt!dl{@f zAdG3!(N<5CS65+*%^#b4YudIqiymzn-Dp_AZ~Mq{moVx5tud5!Q_%z&b!>T5u*gM` z_EO#C=>_rjiS|1NSAVtNQFpn0_{!xDcmtmYB$|=W9j}YlAtwR2_1nd{VCy#DxWAI+ zG=!Fz7+1*+EzKUNYjDW=*=##L;~4n>%bfq9IM<8*@o$8rkPZqlPU34H(ph-46ZWl3 z*EOW3X3>abLdKDY9Aq^T& z9c(v*mWAiW=E}fGXxwox$Ul=kM&=ciMx1S_(Ple)=K8xmvmn5sb!7Qv54)AOxUIjN zF4qA%Kr&5B9@^SG@v#*2Lpd+}O2yG5;juwp?xRi@A!=Qhf`|-wSHf<5`HHcu~knnH2!# znZ{Nj@Wmm(#86sH-4~HTun$EAF@e@l45@ zV?S?&EbB$1`j?an`)LN9542##ekjhUi}=B9A!Doc9wd=5zaBP6H?zmlHUp-FwhHXB;Cs! zDC7^>!gkPQ!~dOz2r>%9hz&Pa?zkt(fY!CUtWQ9T0VYPz>o#T=dvA)AciGGr#5l91 z?$8!W0`(XI_>j~{!$Mh`Tn(mZV8_&hZ)fy--xb}Kl=t?q4nq9qRLOLelVkX|Y9DWA zXdbO3-@4!}4A6;U+6Fy4;qHPjTmU1luJ$j& zLMf^#{Z>uhU?c?ccp*$d%0^_JuqwcdKdN>lEBR%bgsBqdeK0UiVa&#zrG5mV?%o71k8rB?(or`^Kqfkb{?OsBY!4;^5JrgZ z*Q^v^C00Ss1l3;PpcPbCbH)nT9*Oe85SlfD1BvR0nkZxf4Z0i%yff0_N%%?m)~B=7 zZH0il0~m2Z0l&1GUA<=Z?hQBG52Cl&qgTbJYY^|qXv$>M11rQpxPRZlx%R_w$aBFd zg1c%gDC|A9cFJr;KH+}S`RP+t0{0&Bx^RZc{j3HylQ%uB2)_+pR-kjM$83YCjdHgi!JEe0RDEfq%-@V@}c$BCn&e=P7w zjPx~Qp#eMA%$jIbf(N3yit4BNtCX?K&hWYRs#*!RAQ$smgxjJ zLX%0ip7H?24YE!|lCWwLW~PZyzbe>aufE4wro>zfJh+eJDRd;dx)BhcM$5EFxv;Eb z)`3)$t1&}d6hyi%GKG=NMf0mZOYYmpB8=)!(Bhs!fKj%KiosaPR2g$M&kATbl?~0v z>mbJ704EXQ%qUk^i&w*iD0*~fs8^}i!3Cexd^KJ}d+m8ZYM9(A9~WmmJ15{P|A%JT z{=ALRCJYH5f5&xDQR&iL$}?r;rxzyZW+I14UO6&4q?f54;PqJ&x@5hr>~`TNOnzwF zkop7Y-3s!oFdv=9m%4^BLxWa)JVMAyfUs9heIN&M)hV6-hCIu<*Y#Cd4};nS08n3b zi8@v8cwiG74b{`5bFDCAMwLi83%_dC`G!AfJlol zFbL8GWauEhy=xDGnm6~ueV+eY{B(rFIs5Fh&)$2j^(zI{{}uf4rAEWi>+jE|13xc;2R57|($bq{|Oifp&H{BeKJG?Od^gZZb<@1KUU%-0VOwa>2Sf6-| zv5LY&HWrdTip%*kTxvwcEK`i1%wX3ZN#o2t^%p;ZbaQ5)Z1|ZRg^pK~{^Bcq2V8eu zbszdJ$h36pE^1_rH1HM5E=!<3+={UXi_NX0k@)CzPvX1Nu z64%5tM8yWZ>0tjLt3*Ist^(YJjisy8x z2hp;t#$uVTMpc_6vVI6nmx6qpSdr4<29TQGObn4(bmr8T<`i<6LYYr#Cu!U6dn_!j zCeosQw1iKKhlk0aTF$T9oH6)UO{;kUpO#p$>Rz$#3YP`|N|dhnBrewFwLLi#>pB$V z6q+F|#*1Vn6YV4QRl|JK^4#m~E|Kg;MlK&G)xLQnVHg%37pE0>z3Y|sRv1BYZ-8>) z$m!*9_O4;SQBYiXb}%UiDWo@Loe8`FD!o?iSgYlvO;DgK2}YvZwVWmm-4DCX^c@QY zmq$VAEOy`VCzha^DpFi|x;10rTuZf?PEVAXemWJTCq8$3{f2nnz!e);g?Wz#IC%RCpOmPtG(>o6wnO*sH#M=Ci7y3QZC*>>qAamq$$wBP>RXtyn@NW#k z2J((WfuLv^DuHLY{9k}hPTn5%0{h(e06!WL&wWH4iQniBmQ0j|*B-lFCZ@|ahb2=F zD(N0M&4_8qvtTJ+bW8r12AF>(;0!_1o{_f&=D@z5k!IYXXablZfLO7LePLGBG`IC( zO({J7xu7QOfwhe#{vLpSXg`@Z!OLYk0eq7d~ao32e`;~ zc5RH|c3{eQLcV~gL`cSKDLw@?d_9m7tM3gP)eik7TRf<`?=+*YXc0kw*AesyHOgG# z9kHWZZ5bmDKQroz76qck9NsMQv0l*D28H1T*vphXiE={yH(8kTV&13rQqaYfEZe|Ezbg1uINsQD$+FR`M zX-MS97_@|#<7?HIax0=Lt5dltVZZDPeIOpnHIH~bsjW9oV7guQjMHXY`xk<0Jl@k{ z;_h;SSSIGtds1xzNZIAf8vINFvn_6sg=lQHOKZMW2u${nWDJ|Lsxf>^>!O3?=Oz~x z_4w?kltit+UU{>H{lL##oO6++uD-EOv;@yzp&my(>T1H+c$Pzm1Uv`$G!g!GExu+% zj(xbR(xy!UHq9x{?|vD)-53xMFm6;u5x}FpiV^jp4ZTNtBPHsA{{{s?!xt}}ryN+W zTmsDsiP1k!;wOoO-;+3bypV%n#m zGRnbaA8@1)pmNRZS~m>}b~c0hFhJON7ayHyAXLT&$3?jn`8gdbAY0;fPboyybG( z&g{*h#wtzWlhF|t-wo2XH?GV{i@Ml~IXa7h3afe=&n#3W8nzBRSCqKiG;-OF6v!eW z4UQ3%hFA_t*sq*tH!>>SW<3|E=?-UngM2P6b3(in%^Iz{rDi*jj|#>5>E>hnCcdJ9urcLk;|}p=Gn@#pc&|`>yPMWt#$b0eGdUW z>$E2i)W~N@e6L;99j?$-3oo~WJC`QUN0@G5S%L6Q0W8bnFNNyoPc8A|e!nwzA24v6 z7Y+(aJ`3=I{c7d~KtY8jGkV!6tq|@^-CBZKjBn3xoO0a>#~-8ee074`zlLgBt=I`r z4QswIPC$Me(mgq+dD*8==;+|YtXy_i<_W#@!Z7xh8PU8%Er3?JSCFE6aH(H8EwyUgmrF`( zqxd^0r;3e(wSeR1ju50{IdKFuYrbeAN%BtBgg={uL1kca-WBtUjt&8zqnT>-Ok!AA zRHVpxLF28s#vJG3+^eJV%Ma$kdqLA43r0AQC%oRFcH;(U#x`Hfo8cn%=z}gkg38r- z4=Fkufrjdd6I7^T+l*X)4#>9>6oB~k5MrV>51cbK<&hlqZ9DA@n=@vV@gQ;rPf-G%FsVe(+lGoPylx!4tor zq=rjKxiX-0V{_av{cgS+>_H{E>;6v_CXVcdfXMBxPF`6&qVEFY#-({`2}>27+u6eW zy8KAxfAMK<0=(o=&W#WP->JBMtUB0D&=REcTezY>w9}CmZ#|KkhJc;6tuA*QV3|#~ zLugEhBDuvKrjrFW=p~j9!fG_u6V1fELE4lE1_gQsnY@m7|DAblfM}*u8W{LMvOxH1 zhr@n3iiJ@)Eu1rw6H^P>EmtnX90#S?X*~B43C&Fa-Q!5d=fP+9;oj!-8;Fw$YXP#{ z6JCTd=;AjE=A#zzfHe4tBk(y*gb(aOBHdi8p=b!Gp~FgOCy>7CUAD@0nU4;j-7xJJ z4q_RCb*l(+rJIZug0>u5!~+gH+G=MLU5d}|>SXpOi)@(2NN*mu;o%)r-YWz9it$E# z!!m%*oBe*OHT8NGf;|f5tS~Hl#S^vbN&plCXn|s>Z zBOrIMvXC_r%{m7;CTk2YI5?&`$SF!C1JWBa?Q>#gy6)6WiWBgmkmnLb6_UM85v~yN zRs<&0$dSa;1!Go5UY`l{1Vu+vsYpz3`LAH1g0Efv5Tca z8WT<-*1%>6WwpKp;-GAsdT%Rgp){K*dE?fE;J78?{7+i?`b49~qk=Dh4ehWz_V1o% zG4L!LyW)^Zp_;IYoZ(XBj`Uy;F8H+c!VCzBo0Vz-MY3$Sn4&QfA6CR~$qC}WD~I?f z{aq14w!=@Osz$tIBP75KuvZt1)IRflfwS=(@cw~w=BP}{Gf_NUTm)TNyR*%uWbLUZX4g6Jdpa-D8`io^VVa^32VGeaT-TR@Lf2w|tyxjYT zicJ;9!C*eyA zl|h}p+p3sy7V7nV;GiVw)g(&U0REUhfpI%?T2trTgYIk~4ZXu3lY0qD@;~~=elG)aLV+B=Rfz9FJPb&vLq#7!7_iD9C%s`vf%4e^&98RlZ!fyw zoROx1bLs~(#WNs}56cB$m0oP}@;nAr6IoyuT++7@?NWg<#7~kl7ag`m0Hy|twXcak zK*fu-)>MJ;;3#fq-=;1!9sISxecr4mK`1vI>-d|3g^6@VW+pbpV9gdvHH3Jb+Go|Zoz37c;_&FUo#)neJa zPhMBCVc^zA>F@`!>9FDJX`PPGBn2k%Ao9v$1a7&u;BFxPpB-FOX%KTCb2GK$&*L{_~hqJ!i2Oa-+fAo##;Z-&e zX<2ng{12Qp<_-RXiU#v{>pRKMXEN1Q|DQ@7{f8&{zrnuyV-u+$uj^xPQcXow~a>IXAR7O9% z(yyjSb4sS}1~rv0rGB9YMMXtPnVBiiKe;(LIGo?k6J@sGTln+zsb=2PeE%SmwE7U9 z8)mW~$FnZ3@<(6qz?}(4+$_tnp{S-ajaGM(dV7@m*xVJEqF-w$0u9c_#zuYY7W=#-i?A7*)kRMmF1mfqGvgTZ(O&0Yw8=9<%3L^@w z#V;}eEz&d%Rx^#PSqnz*Li%7?P}$SoZyK|^duj*q^pf*-4YJ+KT|4&-3%~W}@i(jb zrrQL=BO-V2*#+4C=A9bb%?RFwyQhtvMi1>)JpJv(()R4(80?|&2F`AuCNe+&^-m$* zuKQzoHq|M!C;TE3u33AI{hB901?TI_pm{?Je)gqj(Zqu066VF2QgiolzmdrBv(Ji4 z@U&p+3YTU6)vD|2W#Z2iCP{d0FrB;t-!StpS4`pngW}vRqg8o z5+|>GGgd=d0@FX?;5ifPb2X4ucYiAKzaP_0m(?$ZjGP(Gi6x%+os;8q3`wE zrufqknBtqJpsTKuK+)?>og6>O0Ha0N9on{M_XkD9ZsS&P1-`fVQ&ACV8ew+*+t_eb8k-Nt0G9tmo7ZXP})QBPm9>hK5lLh zt3C;;|2$a7GbAs`15+7QFVurYQd3MbR`Qsy?u&{J{MmNO%#dsg@KrxOOH|~nf7J1D zdUVU8ZfqLJVz?nunnRk3!y#@};}ahoIQH3_2qeqnQ~R#y8+%fTe!Ci{>KZFS8|llK z>C8CAfYlXA>a*km!mk(X0AL5P7>Ef9fpZX(e+#IiCzRBM46`hux2!Y0{W{p|j_>8)N9pXTN* ze!a63*vwQlsJXf3BDMeK{$;p>g405!%nvFn!*;^0bx*xWcZNY1;1Tfrv7B1)6MD31jx|BBQSDFL@ ztQT*lQSzPKrr$k`sXoa0!nq$C5FxR}?1yfoh-)g8tZH~kuQpA5*B9nOSYGDeLP=BRURWnpRx?T22c z7qua{0yw?NxXv#^xeF4NyuxEZ$`j+ojY0CdPgu_rN>WhY;QkI#d$?QF!Gyik~aU&Q>SYI`?D< z_T+`@(s_#XUU;lbJ&&gI2>4IUUeO<(*4kyWHDW~CIK;>;r4O}KA~{?O_vkY8c?hL+w=A!O`2%uR$wAX z&5Y>iG@|is;>C;W?tesn^}}^$X$WNX{TXy zBoGBPs@_GV(J#g4a@ij~oQ@WvFN=yxBrmR$sE!wwnT3?x%x0GN9;IynY(k}er{F=( z5I3j^b*pj7Zt>TOOl!U;2>ks_im$BeyoZ=!F3R$dT9ylMjFZ8>cspej&s7!*n(FGt zscD5XuNcp@619vA5-p})*4Mw0?ZL$fFSR`yD-4l_OsNP zqC|FZZ6uM?&VRFrcd`f3Kp^_1s&|c7ijR*^@paC<;EjlvB}^yeKRU1YJ4yX?xYxjx zhLaqk2F2!OUQ7a5#SRL9)7wK;=_@ZhdS9~680B4q(WNA;6Y>5@a;@|v78tKux+6vk zW-Sy1aJYM2RBnUApdFeyUl*p_CTq6v1TSxIeW= z@ghbAq5WJ?!(D= z!=!5~vebREjgX61=GqGtXHq+e+WG_9SgfByp+MQ79YluswGc<5-4Y!2H2XckkIx_s zOq3$bYr?+If=nx)se%H8YJwv26G%T#)ef;ALJbX z3!U}EVk!X$SCwNfgHS&$b4R3yI59wl(;lluXMg-2_;me$jCQ}GV?W8_<~TzNO zz`u3tjf)4*mem&?bhsbXW@R6))5dQ4 zIJ-#nEK9=*RzE(a>(0{3U3v!NcWd0$6HUrQBL$fBE^!v;<&7k$^7B9XlaD^I8E+a_ zPocJLGkGHCnS~t|{@a3c3CUuEO1?UAGYbf@hisN9{1_zrZU!pper%@J9X0^;!l>^; zq9Q9#dAJu#{iH^@ZhZi{lb87Qa(h<#UEuV?Q{@-#YYXC1jnf^||xLJR^=DG<9BP#aL7ZIr9Dd^|ohB8u}OXl!CV_l5q@e$f}Nk&3ok{ zpjpmf9g`510t7susIdVAAUxqSewL=PVy38lq22m^6l*#Xf23io<<+=kK2chk#4Q;Ytz>vHtBg9R?b z3;Wht07oG@0+3=<>QNynEK#TcHf55NFp0=|Nb^Mx1Is8~Kc^6KUqIPkX-KQsaGLQe zEP@++H7-wH82wN^0-kN&zLzgw&Xr1%1RV^8l*wY#{AabO_75$F8Q#FuG@+VbGx5co z%iLUd42|t!vJHo@X}TJR3-0AxE;{!k@15lF_`e)@#C^nrz9jK zB+Il;Hk+EIdwYJ{nSUh4CcSyn{qP~=AY!`(4h*F~rI!}jjBr8Jz5O4eZYU>JybTDL z9e@6F#r%&xp7i$%!W{%-5ida>A(5|NNhX^{6;5nw@@cUok4VG+ex)HkjFzsh&bxgY z(q=qav&R@EZ>x0N#?3`-UBCXs|8kyBNo%4cJp7GoTDL0loJrgLJ&L=jk>KR@CGYa$ zw(hyRJ<59%=2duyLZsg)Ri#DUdlT5OD|DP!(smLvc7MlLk$a~fuS^1#3>r22vgR{# z2A=K-m0Q~1e-0C_D<#-se1KC?jN0V&FAb(BGsKZ-@W?%Y2T$ZbuOQ>IRG;baL|jHo zJC%!hq8Oq1n@!I{Eu4;}rM~sRRQE;PtmwXMLNlwG>GKQm>eqfK>z{V>`)VY2`gNW? zpXH#)%{auPF(mW#An)|MUy%0_x09znVn;%?15;V}a|)m&>|PS&l3F|pZ0D8-Yg6sU zT^q~>y|3=g{t%Xs$ZX6%`eglwbm1z=zC@|xRrtfqGlOtmQk-sQ_2wN7P4!vZoqLZ-p!g??7P{|D`{sS^P->Z(ms z$>bi2FLGIf>`qWBs41gMfZeSPX}7R4O5pHVlLA5Zo|&eV1Gj50;jdFp2p$06|D2o> z<9N;ioVod<4sGTY>Lk0Uqp9od^ePB(({m$@NL^F5w0vxOVf`HY*&pM$zqCM76S!rQ zH)f1v9WJ~0DiFFJes%8XaE5{pzpfgm%iu9a-RcNuC~;C&*vENIYNZQKtQ49@eRaM) zXE1DgDdwKcE`aCzMH53;kDF}uC{AHEApUBpZwIHY8tQxWsQp=NzFSvHv)Gtv^tz*6 z=JvB=gGqkO-qAQos@)sea+?SJ=^s{c)foz#QLlj%4qw2m=;hZl<`oMOKcL@^rR-3c z?voDqypVW(;Pu+f5$`HC<)db}*aXy#@4j=H{*lK;T;tJJo`7A<_=JHOv|x<+crKTo zD$Yk|d>4PPRH<$32HhIHory|+ngB*CaqIkfefh#$iCQZ^B$=Spme^9vb00SnCMbV*|2u?3;< z26bqS@8@nst*KTY#@<0U`Xe#QTKH4T0M<87!_z+q3mS z&Yx3-H8Ds`zOth4{$8>#*~?9>s^KRj1n1$%i@TJ_z4)$QUki6SwJ6aj44pXlW6kp1 zu_^JPLf3gGZ+P=63NJ#ihKbywmz&4Pnz$IXC>wN7KAuP!g(u{`fw6JPN%3?nlR_sy z%VLyKJu_6T?b-3W8nbEUqQj4Dv|J4ypzl`0j#L|x)bri`w>QuwR1`w^d5pz3%>*Z+ zH=xA^sC$~gOSfi4`$g;dh})~}5p&L?#%%uF==lRUFUsl@C7uvMGlN1zh(Rhpy4sZn zW}f~+GWt&_jSSZ$DW{q;A1mTAxEsJzGj9ur@VnJR=J;Megj6l_kD0G>{Sdxl=1-ZI zUq3`wK{w(<3DvI-vxa|V{+M}tW+$vl`L7?sWmZpM#@_3PU$yS5!~b&)g(qKY=RY4p zC#;@;KIHYo|4&+v_K$1L|EhIg9sU;$t&3dQ_N;POTYwMaC-hOPoKioT_S^4&{xAG4 BYh(Zb diff --git a/_docs/master/questions/query-builder/expressions-list.md b/_docs/master/questions/query-builder/expressions-list.md index 216578ca00..f39b1b0a1e 100644 --- a/_docs/master/questions/query-builder/expressions-list.md +++ b/_docs/master/questions/query-builder/expressions-list.md @@ -64,6 +64,7 @@ For an introduction to expressions, check out the [overview of custom expression - [concat](./expressions/concat) - [contains](#contains) - [date](#date) + - [datetime](#datetime) - [doesNotContain](#doesnotcontain) - [domain](#domain) - [endsWith](#endswith) @@ -107,6 +108,8 @@ For an introduction to expressions, check out the [overview of custom expression - [quarterName](#quartername) - [relativeDateTime](#relativedatetime) - [second](#second) + - [timeSpan](#timespan) + - [today](#today) - [week](#week) - [weekday](#weekday) - [year](#year) @@ -434,7 +437,7 @@ Example: `sqrt([Hypotenuse])`. Databases that don't support `sqrt`: SQLite. -Related: [Power](#power). +Related: [power](#power). ## String functions @@ -501,9 +504,12 @@ Related: [datetime](#datetime) > Available on PostgreSQL, MySQL/MariaDB, BigQuery, Redshift, ClickHouse, and Snowflake -Converts a datetime string to a datetime. +Converts a datetime string or bytes to a datetime. -Syntax: `datetime(column)` +Syntax: `datetime(value, mode)` + +- `value`: The string, bytes, or number to convert to a datetime. +- `mode`: Optional. The mode indicating the format. One of: `"simple"`, `"iso"`, `"simpleBytes"`, `"isoBytes"`, `"unixSeconds"`, `"unixMilliseconds"`, `"unixMicroseconds"`, `"unixNanoseconds"`. Default is `"iso"`. Example: `datetime("2025-03-20 12:45:04")` @@ -938,6 +944,16 @@ Syntax: `timeSpan(number, text)` Example: `[Orders → Created At] + timeSpan(7, "day")` will return the date 7 days after the `Created At` date. +### today + +Returns the current date (without time). + +Syntax: `today()` + +Example: `today()` would return the current date, such as `2025-05-04`. + +Related: [now](#now). + ### [week](./expressions/week) Takes a datetime and returns the week as an integer. diff --git a/_site/docs/master/developers-guide/devenv.html b/_site/docs/master/developers-guide/devenv.html index 9e07858f95..35453591ee 100644 --- a/_site/docs/master/developers-guide/devenv.html +++ b/_site/docs/master/developers-guide/devenv.html @@ -4917,7 +4917,7 @@

              Frontend development

              $ yarn build-watch
               
              -

              Some systems may have trouble detecting changes to frontend files. You can enable filesystem polling by uncommenting the watchOptions clause in webpack.config.js. If you do this it may be worth making git ignore changes to webpack config, using git update-index --assume-unchanged webpack.config.js

              +

              Some systems may have trouble detecting changes to frontend files. You can enable filesystem polling by uncommenting the watchOptions clause in rspack.config.js. If you do this it may be worth making git ignore changes to webpack config, using git update-index --assume-unchanged rspack.config.js

              We exclude ESLint loader in dev mode for seven times quicker initial builds by default. You can enable it by exporting an environment variable:

              diff --git a/_site/docs/master/embedding/sdk/api/BaseSdkQuestionProps.html b/_site/docs/master/embedding/sdk/api/BaseSdkQuestionProps.html deleted file mode 100644 index fad77816ca..0000000000 --- a/_site/docs/master/embedding/sdk/api/BaseSdkQuestionProps.html +++ /dev/null @@ -1,59 +0,0 @@ -BaseSdkQuestionProps | Embedded analytics SDK API - - - - - - - - - - - - - - - - - - - - - - - - -

              Interface BaseSdkQuestionProps

              interface BaseSdkQuestionProps {
                  children?: ReactNode;
                  entityTypes?: EmbeddingEntityType[];
                  initialSqlParameters?: SqlParameterValues;
                  isSaveEnabled?: boolean;
                  onBeforeSave?: (
                      question: undefined | MetabaseQuestion,
                      context: { isNewQuestion: boolean },
                  ) => Promise<void>;
                  onRun?: (question: undefined | MetabaseQuestion) => void;
                  onSave?: (
                      question: MetabaseQuestion,
                      context: { dashboardTabId?: number; isNewQuestion: boolean },
                  ) => void;
                  plugins?: MetabasePluginsConfig;
                  questionId: null | SdkQuestionId;
                  targetCollection?: SdkCollectionId;
                  withDownloads?: boolean;
              }
              Index

              Properties

              children?: ReactNode

              The children of the MetabaseProvider component.s

              -
              entityTypes?: EmbeddingEntityType[]

              An array that specifies which entity types are available in the data picker

              -
              initialSqlParameters?: SqlParameterValues

              Initial values for the SQL parameters.

              -
              isSaveEnabled?: boolean

              Whether to show the save button.

              -
              onBeforeSave?: (
                  question: undefined | MetabaseQuestion,
                  context: { isNewQuestion: boolean },
              ) => Promise<void>

              A callback function that triggers before saving. Only relevant when isSaveEnabled = true

              -
              onRun?: (question: undefined | MetabaseQuestion) => void

              A callback function that triggers when a question is updated, including when a user clicks the Visualize button in the question editor

              -
              onSave?: (
                  question: MetabaseQuestion,
                  context: { dashboardTabId?: number; isNewQuestion: boolean },
              ) => void

              A callback function that triggers when a user saves the question. Only relevant when isSaveEnabled = true

              -
              questionId: null | SdkQuestionId

              The ID of the question. -
              -This is either: -

              -
                -
              • The numerical ID when accessing a question link, e.g., http://localhost:3000/question/1-my-question where the ID is 1 -
              • -
              • The entity_id key of the question object. You can find a question's Entity ID in the info panel when viewing a question -
              • -
              • new to show the notebook editor for creating new questions. isSaveEnabled must be true to allow saving the question
              • -
              -
              targetCollection?: SdkCollectionId

              The collection to save the question to. This will hide the collection picker from the save modal. Only applicable to interactive questions.

              -
              withDownloads?: boolean

              Enables the ability to download results in the interactive question.

              -

              - - \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/CollectionBrowser.html b/_site/docs/master/embedding/sdk/api/CollectionBrowser.html index 057b3b24c8..ae9032614f 100644 --- a/_site/docs/master/embedding/sdk/api/CollectionBrowser.html +++ b/_site/docs/master/embedding/sdk/api/CollectionBrowser.html @@ -23,7 +23,7 @@ -

              Function CollectionBrowser

              • A component that allows you to browse collections and their items.

                +

                Function CollectionBrowser

                • A component that allows you to browse collections and their items.

                  Parameters

                  • props: CollectionBrowserProps
                    • OptionalclassName?: string

                      A custom class name to be added to the root element.

                    • OptionalcollectionId?: SdkCollectionId

                      The numerical ID of the collection, "personal" for the user's personal collection, or "root" for the root collection. You can find this ID in the URL when accessing a collection in your Metabase instance. For example, the collection ID in http://localhost:3000/collection/1-my-collection would be 1. Defaults to "personal"

                    • OptionalEmptyContentComponent?: null | ComponentType

                      A component to display when there are no items in the collection.

                      @@ -31,7 +31,7 @@
                    • OptionalpageSize?: number

                      The number of items to display per page. The default is 25.

                    • Optionalstyle?: CSSProperties

                      A custom style object to be added to the root element.

                    • OptionalvisibleColumns?: CollectionBrowserListColumns[]

                      The columns to display in the collection items table. If not provided, all columns will be shown.

                      -
                    • OptionalvisibleEntityTypes?: ("model" | "question" | "collection" | "dashboard")[]

                      The types of entities that should be visible. If not provided, all entities will be shown.

                      -

                  Returns ReactNode

                +
              • OptionalvisibleEntityTypes?: ("collection" | "dashboard" | "question" | "model")[]

                The types of entities that should be visible. If not provided, all entities will be shown.

                +

              Returns Element

              \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/CollectionBrowserProps.html b/_site/docs/master/embedding/sdk/api/CollectionBrowserProps.html index 31929e1ef6..23f6bd0e22 100644 --- a/_site/docs/master/embedding/sdk/api/CollectionBrowserProps.html +++ b/_site/docs/master/embedding/sdk/api/CollectionBrowserProps.html @@ -23,7 +23,7 @@ -

              Interface CollectionBrowserProps

              interface CollectionBrowserProps {
                  className?: string;
                  collectionId?: SdkCollectionId;
                  EmptyContentComponent?: null | ComponentType;
                  onClick?: (item: MetabaseCollectionItem) => void;
                  pageSize?: number;
                  style?: CSSProperties;
                  visibleColumns?: CollectionBrowserListColumns[];
                  visibleEntityTypes?: ("model" | "question" | "collection" | "dashboard")[];
              }
              Index

              Properties

              className? +

              Interface CollectionBrowserProps

              interface CollectionBrowserProps {
                  className?: string;
                  collectionId?: SdkCollectionId;
                  EmptyContentComponent?: null | ComponentType;
                  onClick?: (item: MetabaseCollectionItem) => void;
                  pageSize?: number;
                  style?: CSSProperties;
                  visibleColumns?: CollectionBrowserListColumns[];
                  visibleEntityTypes?: ("collection" | "dashboard" | "question" | "model")[];
              }
              Index

              Properties

              pageSize?: number

              The number of items to display per page. The default is 25.

              A custom style object to be added to the root element.

              visibleColumns?: CollectionBrowserListColumns[]

              The columns to display in the collection items table. If not provided, all columns will be shown.

              -
              visibleEntityTypes?: ("model" | "question" | "collection" | "dashboard")[]

              The types of entities that should be visible. If not provided, all entities will be shown.

              +
              visibleEntityTypes?: ("collection" | "dashboard" | "question" | "model")[]

              The types of entities that should be visible. If not provided, all entities will be shown.

              \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/CreateDashboardModal.html b/_site/docs/master/embedding/sdk/api/CreateDashboardModal.html index bbf58dc46f..075a9d918d 100644 --- a/_site/docs/master/embedding/sdk/api/CreateDashboardModal.html +++ b/_site/docs/master/embedding/sdk/api/CreateDashboardModal.html @@ -23,11 +23,11 @@ -

              Function CreateDashboardModal

              Returns Element

              \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/CreateQuestion.html b/_site/docs/master/embedding/sdk/api/CreateQuestion.html index f6978f4af2..97795194ed 100644 --- a/_site/docs/master/embedding/sdk/api/CreateQuestion.html +++ b/_site/docs/master/embedding/sdk/api/CreateQuestion.html @@ -23,7 +23,7 @@ -

              Function CreateQuestion

              • Parameters

                • Optionalprops: CreateQuestionProps
                  • OptionalclassName?: string

                    A custom class name to be added to the root element.

                    +

                    Function CreateQuestion

                    • Parameters

                      • props: undefined | CreateQuestionProps
                        • undefined
                        • CreateQuestionProps
                          • OptionalclassName?: string

                            A custom class name to be added to the root element.

                          • OptionalcomponentPlugins?: MetabasePluginsConfig

                            Additional mapper function to override or add drill-down menu

                          • OptionalentityTypes?: EmbeddingEntityType[]

                            An array that specifies which entity types are available in the data picker

                          • Optionalheight?: Height<string | number>

                            A number or string specifying a CSS size value that specifies the height of the component

                            @@ -40,7 +40,7 @@
                          • OptionalwithChartTypeSelector?: boolean

                            Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

                          • OptionalwithDownloads?: boolean

                            Enables the ability to download results in the interactive question.

                          • OptionalwithResetButton?: boolean

                            Determines whether a reset button is displayed. Only relevant when using the default layout.

                            -

                      Returns Element

                      Use <InteractiveQuestion questionId="new" /> instead.

                      +

                Returns Element

                Use <InteractiveQuestion questionId="new" /> instead.

              \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/EditableDashboard.html b/_site/docs/master/embedding/sdk/api/EditableDashboard.html index 32e64a876f..fa119f9aff 100644 --- a/_site/docs/master/embedding/sdk/api/EditableDashboard.html +++ b/_site/docs/master/embedding/sdk/api/EditableDashboard.html @@ -23,7 +23,7 @@ -

              Function EditableDashboard

              • A dashboard component with the features available in the InteractiveDashboard component, as well as the ability to add and update questions, layout, and content within your dashboard.

                +

                Function EditableDashboard

                • A dashboard component with the features available in the InteractiveDashboard component, as well as the ability to add and update questions, layout, and content within your dashboard.

                  Parameters

                  • props: EditableDashboardProps
                    • OptionalclassName?: string

                      A custom class name to be added to the root element.

                    • dashboardId: SdkDashboardId

                      The ID of the dashboard.
                      @@ -60,6 +60,6 @@

                    • OptionalwithCardTitle?: boolean

                      Whether the dashboard cards should display a title.

                    • OptionalwithDownloads?: boolean

                      Whether to hide the download button.

                    • OptionalwithTitle?: boolean

                      Whether the dashboard should display a title.

                      -

                  Returns Element

                +

              Returns Element

              \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/IconName.html b/_site/docs/master/embedding/sdk/api/IconName.html index b60ab90ca4..32789b3116 100644 --- a/_site/docs/master/embedding/sdk/api/IconName.html +++ b/_site/docs/master/embedding/sdk/api/IconName.html @@ -23,6 +23,6 @@ -

              Type Alias IconName

              IconName:
                  | "string"
                  | "number"
                  | "function"
                  | "model"
                  | "table"
                  | "question"
                  | "collection"
                  | "dashboard"
                  | "revert"
                  | "add"
                  | "add_column"
                  | "add_data"
                  | "add_folder"
                  | "add_row"
                  | "add_to_dash"
                  | "ai"
                  | "alert"
                  | "alert_filled"
                  | "alert_confirm"
                  | "archive"
                  | "area"
                  | "attachment"
                  | "arrow_up"
                  | "arrow_down"
                  | "arrow_left"
                  | "arrow_left_to_line"
                  | "arrow_right"
                  | "arrow_split"
                  | "audit"
                  | "badge"
                  | "bar"
                  | "bell"
                  | "birthday"
                  | "bookmark"
                  | "bookmark_filled"
                  | "bolt"
                  | "bolt_filled"
                  | "breakout"
                  | "bubble"
                  | "burger"
                  | "calendar"
                  | "check"
                  | "check_filled"
                  | "chevrondown"
                  | "chevronleft"
                  | "chevronright"
                  | "chevronup"
                  | "click"
                  | "clipboard"
                  | "clock"
                  | "clone"
                  | "close"
                  | "cloud"
                  | "cloud_filled"
                  | "compare"
                  | "combine"
                  | "connections"
                  | "contract"
                  | "copy"
                  | "curved"
                  | "database"
                  | "dash"
                  | "curve"
                  | "document"
                  | "download"
                  | "dyno"
                  | "edit_document"
                  | "ellipsis"
                  | "embed"
                  | "empty"
                  | "enter_or_return"
                  | "expand"
                  | "expand_arrow"
                  | "extract"
                  | "eye"
                  | "eye_crossed_out"
                  | "eye_outline"
                  | "field"
                  | "fields"
                  | "filter"
                  | "filter_plus"
                  | "bug"
                  | "format_code"
                  | "formula"
                  | "funnel"
                  | "funnel_outline"
                  | "folder"
                  | "folder_filled"
                  | "gauge"
                  | "gear"
                  | "gear_settings_filled"
                  | "gem"
                  | "globe"
                  | "grabber"
                  | "grid"
                  | "group"
                  | "google"
                  | "google_drive"
                  | "google_sheet"
                  | "history"
                  | "home"
                  | "horizontal_bar"
                  | "hourglass"
                  | "info"
                  | "info_filled"
                  | "info_outline"
                  | "insight"
                  | "int"
                  | "io"
                  | "join_full_outer"
                  | "join_inner"
                  | "join_left_outer"
                  | "join_right_outer"
                  | "index"
                  | "key"
                  | "label"
                  | "ldap"
                  | "learn"
                  | "lightbulb"
                  | "link"
                  | "line"
                  | "lines"
                  | "lineandbar"
                  | "line_style_dashed"
                  | "line_style_dotted"
                  | "line_style_solid"
                  | "list"
                  | "location"
                  | "lock"
                  | "lock_filled"
                  | "mail"
                  | "mail_filled"
                  | "metabot"
                  | "metabot_sad"
                  | "metric"
                  | "model_with_badge"
                  | "moon"
                  | "move"
                  | "move_card"
                  | "new_folder"
                  | "notebook"
                  | "palette"
                  | "pause"
                  | "pencil"
                  | "pencil_lines"
                  | "permissions_limited"
                  | "person"
                  | "pie"
                  | "pin"
                  | "pinmap"
                  | "pivot_table"
                  | "play"
                  | "play_outlined"
                  | "popover"
                  | "popular"
                  | "progress"
                  | "pulse"
                  | "recents"
                  | "sankey"
                  | "share"
                  | "split"
                  | "sql"
                  | "subscription"
                  | "straight"
                  | "stepped"
                  | "sort"
                  | "sort_arrows"
                  | "sum"
                  | "sync"
                  | "redo"
                  | "return"
                  | "reference"
                  | "refresh"
                  | "refresh_downstream"
                  | "rocket"
                  | "ruler"
                  | "schema"
                  | "search"
                  | "section"
                  | "segment"
                  | "shield"
                  | "sidebar_closed"
                  | "sidebar_open"
                  | "slack"
                  | "slack_colorized"
                  | "smartscalar"
                  | "snail"
                  | "snippet"
                  | "sparkles"
                  | "star_filled"
                  | "star"
                  | "stop"
                  | "store"
                  | "sun"
                  | "t-shirt"
                  | "tab"
                  | "table2"
                  | "time_history"
                  | "trash"
                  | "trash_filled"
                  | "triangle_left"
                  | "triangle_right"
                  | "unarchive"
                  | "undo"
                  | "unknown"
                  | "unpin"
                  | "unsubscribe"
                  | "upload"
                  | "variable"
                  | "verified"
                  | "official_collection"
                  | "verified_filled"
                  | "view_archive"
                  | "warning"
                  | "warning_round_filled"
                  | "warning_triangle_filled"
                  | "waterfall"
                  | "webhook"
                  | "10k"
                  | "1m"
                  | "zoom_in"
                  | "zoom_out"
                  | "scalar"
                  | "cake"
                  | "external"
                  | "table_spaced"
                  | "beaker"
                  | "eye_filled"

              +

              Type Alias IconName

              IconName:
                  | "string"
                  | "number"
                  | "function"
                  | "collection"
                  | "dashboard"
                  | "question"
                  | "model"
                  | "table"
                  | "revert"
                  | "add"
                  | "add_column"
                  | "add_data"
                  | "add_folder"
                  | "add_row"
                  | "add_to_dash"
                  | "ai"
                  | "alert"
                  | "alert_filled"
                  | "alert_confirm"
                  | "archive"
                  | "area"
                  | "attachment"
                  | "arrow_up"
                  | "arrow_down"
                  | "arrow_left"
                  | "arrow_left_to_line"
                  | "arrow_right"
                  | "arrow_split"
                  | "audit"
                  | "badge"
                  | "bar"
                  | "bell"
                  | "birthday"
                  | "bookmark"
                  | "bookmark_filled"
                  | "bolt"
                  | "bolt_filled"
                  | "breakout"
                  | "bubble"
                  | "burger"
                  | "calendar"
                  | "check"
                  | "check_filled"
                  | "chevrondown"
                  | "chevronleft"
                  | "chevronright"
                  | "chevronup"
                  | "click"
                  | "clipboard"
                  | "clock"
                  | "clone"
                  | "close"
                  | "cloud"
                  | "cloud_filled"
                  | "compare"
                  | "combine"
                  | "connections"
                  | "contract"
                  | "copy"
                  | "curved"
                  | "database"
                  | "dash"
                  | "curve"
                  | "document"
                  | "download"
                  | "dyno"
                  | "edit_document"
                  | "ellipsis"
                  | "embed"
                  | "empty"
                  | "enter_or_return"
                  | "expand"
                  | "expand_arrow"
                  | "extract"
                  | "eye"
                  | "eye_crossed_out"
                  | "eye_outline"
                  | "field"
                  | "fields"
                  | "filter"
                  | "filter_plus"
                  | "bug"
                  | "format_code"
                  | "formula"
                  | "funnel"
                  | "funnel_outline"
                  | "folder"
                  | "folder_filled"
                  | "gauge"
                  | "gear"
                  | "gear_settings_filled"
                  | "gem"
                  | "globe"
                  | "grabber"
                  | "grid"
                  | "group"
                  | "google"
                  | "google_drive"
                  | "google_sheet"
                  | "history"
                  | "home"
                  | "horizontal_bar"
                  | "hourglass"
                  | "info"
                  | "info_filled"
                  | "info_outline"
                  | "insight"
                  | "int"
                  | "io"
                  | "join_full_outer"
                  | "join_inner"
                  | "join_left_outer"
                  | "join_right_outer"
                  | "index"
                  | "key"
                  | "label"
                  | "ldap"
                  | "learn"
                  | "lightbulb"
                  | "link"
                  | "line"
                  | "lines"
                  | "lineandbar"
                  | "line_style_dashed"
                  | "line_style_dotted"
                  | "line_style_solid"
                  | "list"
                  | "location"
                  | "lock"
                  | "lock_filled"
                  | "mail"
                  | "mail_filled"
                  | "metabot"
                  | "metabot_sad"
                  | "metric"
                  | "model_with_badge"
                  | "moon"
                  | "move"
                  | "move_card"
                  | "new_folder"
                  | "notebook"
                  | "palette"
                  | "pause"
                  | "pencil"
                  | "pencil_lines"
                  | "permissions_limited"
                  | "person"
                  | "pie"
                  | "pin"
                  | "pinmap"
                  | "pivot_table"
                  | "play"
                  | "play_outlined"
                  | "popover"
                  | "popular"
                  | "progress"
                  | "pulse"
                  | "recents"
                  | "sankey"
                  | "share"
                  | "split"
                  | "sql"
                  | "subscription"
                  | "straight"
                  | "stepped"
                  | "sort"
                  | "sort_arrows"
                  | "sum"
                  | "sync"
                  | "redo"
                  | "return"
                  | "reference"
                  | "refresh"
                  | "refresh_downstream"
                  | "rocket"
                  | "ruler"
                  | "schema"
                  | "search"
                  | "section"
                  | "segment"
                  | "shield"
                  | "sidebar_closed"
                  | "sidebar_open"
                  | "slack"
                  | "slack_colorized"
                  | "smartscalar"
                  | "snail"
                  | "snippet"
                  | "sparkles"
                  | "star_filled"
                  | "star"
                  | "stop"
                  | "store"
                  | "sun"
                  | "t-shirt"
                  | "tab"
                  | "table2"
                  | "time_history"
                  | "trash"
                  | "trash_filled"
                  | "triangle_left"
                  | "triangle_right"
                  | "unarchive"
                  | "undo"
                  | "unknown"
                  | "unpin"
                  | "unsubscribe"
                  | "upload"
                  | "variable"
                  | "verified"
                  | "official_collection"
                  | "verified_filled"
                  | "view_archive"
                  | "warning"
                  | "warning_round_filled"
                  | "warning_triangle_filled"
                  | "waterfall"
                  | "webhook"
                  | "10k"
                  | "1m"
                  | "zoom_in"
                  | "zoom_out"
                  | "scalar"
                  | "cake"
                  | "external"
                  | "table_spaced"
                  | "beaker"
                  | "eye_filled"

              \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html b/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html index a9fe0e6fca..425f8404c8 100644 --- a/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html +++ b/_site/docs/master/embedding/sdk/api/InteractiveDashboard.html @@ -23,7 +23,7 @@ -

              Function InteractiveDashboard

              • A dashboard component with drill downs, click behaviors, and the ability to view and click into questions.

                +

                Function InteractiveDashboard

                • A dashboard component with drill downs, click behaviors, and the ability to view and click into questions.

                  Parameters

                  • props: {
                        drillThroughQuestionHeight?: Height<string | number>;
                        drillThroughQuestionProps?: DrillThroughQuestionProps;
                        plugins?: MetabasePluginsConfig;
                        renderDrillThroughQuestion?: () => ReactNode;
                    } & {
                        dashboardId: SdkDashboardId;
                        hiddenParameters?: string[];
                        initialParameters?: ParameterValues;
                        withCardTitle?: boolean;
                        withDownloads?: boolean;
                        withTitle?: boolean;
                    } & { className?: string; style?: CSSProperties } & {
                        onLoad?: (dashboard: null | MetabaseDashboard) => void;
                        onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
                    } & { dataPickerProps?: Pick<SdkQuestionProps, "entityTypes"> } & {}
                    • OptionaldrillThroughQuestionHeight?: Height<string | number>

                      Height of a question component when drilled from the dashboard to a question level.

                    • OptionaldrillThroughQuestionProps?: DrillThroughQuestionProps

                      Props of a question component when drilled from the dashboard to a question level.

                    • Optionalplugins?: MetabasePluginsConfig

                      Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details.

                      @@ -60,6 +60,6 @@
                    • OptionalonLoad?: (dashboard: null | MetabaseDashboard) => void

                      Callback that is called when the dashboard is loaded.

                    • OptionalonLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void

                      Callback that is called when the dashboard is loaded without cards.

                    • OptionaldataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

                      Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

                      -

                    Returns Element

                  +

                  Returns Element

                  \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html b/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html index 25a9b05f7a..1273e95fd0 100644 --- a/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html +++ b/_site/docs/master/embedding/sdk/api/InteractiveQuestion.html @@ -23,8 +23,8 @@ -

                  Function InteractiveQuestion

                  • A question component with drill-downs enabled.

                    -

                    Parameters

                    • props: InteractiveQuestionProps
                      • OptionalclassName?: string

                        A custom class name to be added to the root element.

                        +

                        Function InteractiveQuestion

                        • A component that renders an interactive question.

                          +

                          Parameters

                          • props: InteractiveQuestionProps
                            • OptionalclassName?: string

                              A custom class name to be added to the root element.

                            • OptionalcomponentPlugins?: MetabasePluginsConfig

                              Additional mapper function to override or add drill-down menu

                            • OptionalentityTypes?: EmbeddingEntityType[]

                              An array that specifies which entity types are available in the data picker

                            • Optionalheight?: Height<string | number>

                              A number or string specifying a CSS size value that specifies the height of the component

                              @@ -41,7 +41,7 @@
                            • OptionalwithChartTypeSelector?: boolean

                              Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

                            • OptionalwithDownloads?: boolean

                              Enables the ability to download results in the interactive question.

                            • OptionalwithResetButton?: boolean

                              Determines whether a reset button is displayed. Only relevant when using the default layout.

                              -

                          Returns Element

                        Index

                        InteractiveQuestion

                    Returns Element

                  Index

                  InteractiveQuestion

                  BackButton: (props: InteractiveQuestionBackButtonProps) => null | Element

                  Type declaration

                  Breakout: () => null | Element

                  Type declaration

                    • (): null | Element
                    • Function

                      A set of badges for managing data groupings (breakouts). @@ -131,6 +131,7 @@

                  Parameters

                  • props: { className?: string; style?: CSSProperties }
                    • OptionalclassName?: string

                      A custom class name to be added to the root element.

                    • Optionalstyle?: CSSProperties

                      A custom style object to be added to the root element.

                      -

                  Returns undefined | Element

                  other

                  VisualizationButton: () => null | Element

                  +

                  Returns undefined | Element

                  VisualizationButton: () => null | Element

                  Type declaration

                    • (): null | Element
                    • Function

                      A button that triggers the visualization of the current question.

                      +

                      Returns null | Element

                  \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/InteractiveQuestionComponents.html b/_site/docs/master/embedding/sdk/api/InteractiveQuestionComponents.html new file mode 100644 index 0000000000..b48e72a8a7 --- /dev/null +++ b/_site/docs/master/embedding/sdk/api/InteractiveQuestionComponents.html @@ -0,0 +1,119 @@ +InteractiveQuestionComponents | Embedded analytics SDK API + + + + + + + + + + + + + + + + + + + + + + + + +

                  Interface InteractiveQuestionComponents

                  interface InteractiveQuestionComponents {
                      BackButton: (
                          props: InteractiveQuestionBackButtonProps,
                      ) => null | Element;
                      Breakout: () => null | Element;
                      BreakoutDropdown: (
                          props: InteractiveQuestionBreakoutDropdownProps,
                      ) => null | Element;
                      ChartTypeDropdown: (props: MenuProps) => Element;
                      ChartTypeSelector: (props: StackProps) => Element;
                      DownloadWidget: (props: StackProps) => null | Element;
                      DownloadWidgetDropdown: (props: PopoverProps) => Element;
                      Editor: (props: InteractiveQuestionEditorProps) => undefined | Element;
                      EditorButton: (
                          props: InteractiveQuestionEditorButtonProps,
                      ) => undefined | false | Element;
                      Filter: (props: InteractiveQuestionFilterProps) => Element;
                      FilterDropdown: (
                          props: InteractiveQuestionFilterDropdownProps,
                      ) => null | Element;
                      Notebook: (props: InteractiveQuestionEditorProps) => undefined | Element;
                      NotebookButton: (
                          props: InteractiveQuestionEditorButtonProps,
                      ) => undefined | false | Element;
                      QuestionSettings: (props: StackProps) => null | Element;
                      QuestionSettingsDropdown: (
                          props?: InteractiveQuestionQuestionSettingsDropdownProps,
                      ) => Element;
                      QuestionVisualization: (
                          props: { className?: string; style?: CSSProperties } & {
                              height?: Height<string | number>;
                              width?: Width<string | number>;
                          } & {},
                      ) => Element;
                      ResetButton: (props?: ButtonProps) => null | Element;
                      SaveButton: (props?: InteractiveQuestionSaveButtonProps) => Element;
                      SaveQuestionForm: (
                          props: InteractiveQuestionSaveQuestionFormProps,
                      ) => null | Element;
                      Summarize: () => Element;
                      SummarizeDropdown: (
                          props: InteractiveQuestionSummarizeDropdownProps,
                      ) => Element;
                      Title: (
                          props: { className?: string; style?: CSSProperties },
                      ) => undefined | Element;
                      VisualizationButton: () => null | Element;
                  }
                  Index

                  InteractiveQuestion

                  BackButton: (props: InteractiveQuestionBackButtonProps) => null | Element

                  Type declaration

                  Breakout: () => null | Element

                  Type declaration

                    • (): null | Element
                    • Function

                      A set of badges for managing data groupings (breakouts). +Uses question context for breakout functionality.

                      +

                      Returns null | Element

                  BreakoutDropdown: (
                      props: InteractiveQuestionBreakoutDropdownProps,
                  ) => null | Element

                  Type declaration

                  ChartTypeDropdown: (props: MenuProps) => Element

                  Type declaration

                    • (props: MenuProps): Element
                    • Function

                      Dropdown for selecting the visualization type (bar chart, line chart, table, etc.). +Automatically updates to show recommended visualization types for the current data.

                      +

                      Parameters

                      Returns Element

                  ChartTypeSelector: (props: StackProps) => Element

                  Type declaration

                  DownloadWidget: (props: StackProps) => null | Element

                  Type declaration

                    • (props: StackProps): null | Element
                    • Function

                      Provides a UI widget for downloading data in different formats (CSV, XLSX, JSON, and PNG depending on the visualization).

                      +

                      Parameters

                      Returns null | Element

                  DownloadWidgetDropdown: (props: PopoverProps) => Element

                  Type declaration

                  Editor: (props: InteractiveQuestionEditorProps) => undefined | Element

                  Type declaration

                    • (props: InteractiveQuestionEditorProps): undefined | Element
                    • Function

                      Advanced query editor that provides full access to question configuration. +Includes filtering, aggregation, custom expressions, and joins.

                      +

                      Parameters

                      • props: InteractiveQuestionEditorProps
                        • OptionalhasVisualizeButton?: boolean
                        • OptionalonApply?: () => void

                          Callback function executed when changes are applied

                          +

                      Returns undefined | Element

                  EditorButton: (
                      props: InteractiveQuestionEditorButtonProps,
                  ) => undefined | false | Element

                  Type declaration

                  Type declaration

                  FilterDropdown: (
                      props: InteractiveQuestionFilterDropdownProps,
                  ) => null | Element

                  Type declaration

                  Notebook: (props: InteractiveQuestionEditorProps) => undefined | Element

                  Type declaration

                    • (props: InteractiveQuestionEditorProps): undefined | Element
                    • Function

                      Advanced query editor that provides full access to question configuration. +Includes filtering, aggregation, custom expressions, and joins.

                      +

                      Parameters

                      • props: InteractiveQuestionEditorProps
                        • OptionalhasVisualizeButton?: boolean
                        • OptionalonApply?: () => void

                          Callback function executed when changes are applied

                          +

                      Returns undefined | Element

                  Use InteractiveQuestion.Editor instead

                  +
                  NotebookButton: (
                      props: InteractiveQuestionEditorButtonProps,
                  ) => undefined | false | Element

                  Type declaration

                  Use InteractiveQuestion.EditorButton instead

                  +
                  QuestionSettings: (props: StackProps) => null | Element

                  Type declaration

                    • (props: StackProps): null | Element
                    • Function

                      Settings panel for configuring visualization options like axes, colors, and formatting. +Uses question context for settings.

                      +

                      Parameters

                      Returns null | Element

                  QuestionSettingsDropdown: (
                      props?: InteractiveQuestionQuestionSettingsDropdownProps,
                  ) => Element

                  Type declaration

                  QuestionVisualization: (
                      props: { className?: string; style?: CSSProperties } & {
                          height?: Height<string | number>;
                          width?: Width<string | number>;
                      } & {},
                  ) => Element

                  Type declaration

                    • (
                          props: { className?: string; style?: CSSProperties } & {
                              height?: Height<string | number>;
                              width?: Width<string | number>;
                          } & {},
                      ): Element
                    • Function

                      The main visualization component that renders the question results as a chart, table, or other visualization type.

                      +

                      Parameters

                      • props: { className?: string; style?: CSSProperties } & {
                            height?: Height<string | number>;
                            width?: Width<string | number>;
                        } & {}
                        • OptionalclassName?: string

                          A custom class name to be added to the root element.

                          +
                        • Optionalstyle?: CSSProperties

                          A custom style object to be added to the root element.

                          +
                        • Optionalheight?: Height<string | number>

                          A number or string specifying a CSS size value that specifies the height of the component

                          +
                        • Optionalwidth?: Width<string | number>

                          A number or string specifying a CSS size value that specifies the width of the component

                          +

                        Returns Element

                    ResetButton: (props?: ButtonProps) => null | Element

                    Type declaration

                      • (props?: ButtonProps): null | Element
                      • Function

                        Button to reset question modifications. Only appears when there are unsaved changes to the question.

                        +

                        Parameters

                        Returns null | Element

                    Type declaration

                    SaveQuestionForm: (
                        props: InteractiveQuestionSaveQuestionFormProps,
                    ) => null | Element

                    Type declaration

                    Summarize: () => Element

                    Type declaration

                      • (): Element
                      • Function

                        Interface for adding and managing data summaries (like counts, sums, averages). Displays as a set of badges. +Uses question context for summarization functionality.

                        +

                        Returns Element

                    SummarizeDropdown: (props: InteractiveQuestionSummarizeDropdownProps) => Element

                    Type declaration

                    Title: (
                        props: { className?: string; style?: CSSProperties },
                    ) => undefined | Element

                    Type declaration

                      • (props: { className?: string; style?: CSSProperties }): undefined | Element
                      • Function

                        Displays a title based on the question's state. Shows:

                        +
                          +
                        • The question's display name if it's saved
                        • +
                        • An auto-generated description for ad-hoc questions (non-native queries)
                        • +
                        +

                        Parameters

                        • props: { className?: string; style?: CSSProperties }
                          • OptionalclassName?: string

                            A custom class name to be added to the root element.

                            +
                          • Optionalstyle?: CSSProperties

                            A custom style object to be added to the root element.

                            +

                        Returns undefined | Element

                    VisualizationButton: () => null | Element

                    Type declaration

                      • (): null | Element
                      • Function

                        A button that triggers the visualization of the current question.

                        +

                        Returns null | Element

                    + + \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/MetabaseProvider.html b/_site/docs/master/embedding/sdk/api/MetabaseProvider.html index 24ca1dd88b..470123d659 100644 --- a/_site/docs/master/embedding/sdk/api/MetabaseProvider.html +++ b/_site/docs/master/embedding/sdk/api/MetabaseProvider.html @@ -28,7 +28,8 @@
                  • authConfig: MetabaseAuthConfig

                    Defines how to authenticate with Metabase.

                  • children: ReactNode

                    The children of the MetabaseProvider component.

                  • OptionalclassName?: string

                    A custom class name to be added to the root element.

                    -
                  • OptionalerrorComponent?: SdkErrorComponent

                    A custom error component to display when the SDK encounters an error.

                    +

                    This prop is not used anymore.

                    +
                  • OptionalerrorComponent?: SdkErrorComponent

                    A custom error component to display when the SDK encounters an error.

                  • OptionaleventHandlers?: SdkEventHandlersConfig
                  • OptionalloaderComponent?: () => Element

                    A custom loader component to display while the SDK is loading.

                  • Optionallocale?: string

                    Defines the display language. Accepts an ISO language code such as en or de. diff --git a/_site/docs/master/embedding/sdk/api/MetabaseProviderProps.html b/_site/docs/master/embedding/sdk/api/MetabaseProviderProps.html index fe2ebafebc..4c17b73948 100644 --- a/_site/docs/master/embedding/sdk/api/MetabaseProviderProps.html +++ b/_site/docs/master/embedding/sdk/api/MetabaseProviderProps.html @@ -23,10 +23,10 @@ -

                    Interface MetabaseProviderProps

                    interface MetabaseProviderProps {
                        allowConsoleLog?: boolean;
                        authConfig: MetabaseAuthConfig;
                        children: ReactNode;
                        className?: string;
                        errorComponent?: SdkErrorComponent;
                        eventHandlers?: SdkEventHandlersConfig;
                        loaderComponent?: () => Element;
                        locale?: string;
                        pluginsConfig?: MetabasePluginsConfig;
                        theme?: MetabaseTheme;
                    }

                    Hierarchy

                    Index

                    Properties

                    allowConsoleLog? +

                    Interface MetabaseProviderProps

                    interface MetabaseProviderProps {
                        allowConsoleLog?: boolean;
                        authConfig: MetabaseAuthConfig;
                        children: ReactNode;
                        className?: string;
                        errorComponent?: SdkErrorComponent;
                        eventHandlers?: SdkEventHandlersConfig;
                        loaderComponent?: () => Element;
                        locale?: string;
                        pluginsConfig?: MetabasePluginsConfig;
                        theme?: MetabaseTheme;
                    }
                    Index

                    Properties

                    allowConsoleLog?: boolean

                    Whether to allow logging to the DevTools console. Defaults to true.

                    authConfig: MetabaseAuthConfig

                    Defines how to authenticate with Metabase.

                    children: ReactNode

                    The children of the MetabaseProvider component.

                    -
                    className?: string

                    A custom class name to be added to the root element.

                    -
                    errorComponent?: SdkErrorComponent

                    A custom error component to display when the SDK encounters an error.

                    +
                    className?: string

                    A custom class name to be added to the root element.

                    +

                    This prop is not used anymore.

                    +
                    errorComponent?: SdkErrorComponent

                    A custom error component to display when the SDK encounters an error.

                    eventHandlers?: SdkEventHandlersConfig
                    loaderComponent?: () => Element

                    A custom loader component to display while the SDK is loading.

                    locale?: string

                    Defines the display language. Accepts an ISO language code such as en or de. diff --git a/_site/docs/master/embedding/sdk/api/MetabotQuestion.html b/_site/docs/master/embedding/sdk/api/MetabotQuestion.html new file mode 100644 index 0000000000..168b8b6ea8 --- /dev/null +++ b/_site/docs/master/embedding/sdk/api/MetabotQuestion.html @@ -0,0 +1,29 @@ +MetabotQuestion | Embedded analytics SDK API + + + + + + + + + + + + + + + + + + + + + + + + +

                    Function MetabotQuestion

                    • A component that renders a metabot question.

                      +

                      Parameters

                      • props: object

                      Returns Element

                    + + \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/SdkErrorComponent.html b/_site/docs/master/embedding/sdk/api/SdkErrorComponent.html index acc1b11b37..23c001598f 100644 --- a/_site/docs/master/embedding/sdk/api/SdkErrorComponent.html +++ b/_site/docs/master/embedding/sdk/api/SdkErrorComponent.html @@ -23,6 +23,6 @@ -

                    Type Alias SdkErrorComponent

                    SdkErrorComponent: ({ message, }: SdkErrorComponentProps) => JSX_2.Element

                    Type declaration

                    +

                    Type Alias SdkErrorComponent

                    SdkErrorComponent: ({ type, message, }: SdkErrorComponentProps) => JSX_3.Element

                    Type declaration

                    \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/SdkErrorComponentProps.html b/_site/docs/master/embedding/sdk/api/SdkErrorComponentProps.html index a7388b25ab..56d8c44c82 100644 --- a/_site/docs/master/embedding/sdk/api/SdkErrorComponentProps.html +++ b/_site/docs/master/embedding/sdk/api/SdkErrorComponentProps.html @@ -23,7 +23,9 @@ -

                    Type Alias SdkErrorComponentProps

                    type SdkErrorComponentProps = {
                        message: ReactNode;
                    }
                    Index

                    Properties

                    Properties

                    message: ReactNode

                    +

                    Type Alias SdkErrorComponentProps

                    type SdkErrorComponentProps = {
                        message: ReactNode;
                        onClose?: () => void;
                        type?: "default" | "floating";
                    }
                    Index

                    Properties

                    Properties

                    message: ReactNode
                    onClose?: () => void
                    type?: "default" | "floating"

                    \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/StaticDashboard.html b/_site/docs/master/embedding/sdk/api/StaticDashboard.html index 3a427a3fc1..6399cda5d2 100644 --- a/_site/docs/master/embedding/sdk/api/StaticDashboard.html +++ b/_site/docs/master/embedding/sdk/api/StaticDashboard.html @@ -23,7 +23,7 @@ -

                    Function StaticDashboard

                    • A lightweight dashboard component.

                      +

                      Function StaticDashboard

                      • A lightweight dashboard component.

                        Parameters

                        • props: {
                              drillThroughQuestionHeight?: Height<string | number>;
                              drillThroughQuestionProps?: DrillThroughQuestionProps;
                              plugins?: MetabasePluginsConfig;
                              renderDrillThroughQuestion?: () => ReactNode;
                          } & {
                              dashboardId: SdkDashboardId;
                              hiddenParameters?: string[];
                              initialParameters?: ParameterValues;
                              withCardTitle?: boolean;
                              withDownloads?: boolean;
                              withTitle?: boolean;
                          } & { className?: string; style?: CSSProperties } & {
                              onLoad?: (dashboard: null | MetabaseDashboard) => void;
                              onLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void;
                          } & { dataPickerProps?: Pick<SdkQuestionProps, "entityTypes"> } & {}
                          • OptionaldrillThroughQuestionHeight?: Height<string | number>

                            Height of a question component when drilled from the dashboard to a question level.

                          • OptionaldrillThroughQuestionProps?: DrillThroughQuestionProps

                            Props of a question component when drilled from the dashboard to a question level.

                          • Optionalplugins?: MetabasePluginsConfig

                            Additional mapper function to override or add drill-down menu. See the implementing custom actions section for more details.

                            @@ -60,6 +60,6 @@
                          • OptionalonLoad?: (dashboard: null | MetabaseDashboard) => void

                            Callback that is called when the dashboard is loaded.

                          • OptionalonLoadWithoutCards?: (dashboard: null | MetabaseDashboard) => void

                            Callback that is called when the dashboard is loaded without cards.

                          • OptionaldataPickerProps?: Pick<SdkQuestionProps, "entityTypes">

                            Additional props to pass to the query builder rendered by InteractiveQuestion when creating a new dashboard question.

                            -

                          Returns Element

                        +
                      • Returns Element

                        \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/StaticQuestion.html b/_site/docs/master/embedding/sdk/api/StaticQuestion.html index 4034300404..0e8723f35f 100644 --- a/_site/docs/master/embedding/sdk/api/StaticQuestion.html +++ b/_site/docs/master/embedding/sdk/api/StaticQuestion.html @@ -23,8 +23,8 @@ -

                        Function StaticQuestion

                        • A question component without drill-downs.

                          -

                          Parameters

                          • __namedParameters: StaticQuestionProps
                            • OptionalclassName?: string

                              A custom class name to be added to the root element.

                              +

                              Function StaticQuestion

                              • A component that renders a static question.

                                +

                                Parameters

                                • props: StaticQuestionProps
                                  • OptionalclassName?: string

                                    A custom class name to be added to the root element.

                                  • Optionalheight?: Height<string | number>

                                    A number or string specifying a CSS size value that specifies the height of the component

                                  • OptionalinitialSqlParameters?: SqlParameterValues

                                    Initial values for the SQL parameters.

                                  • questionId: null | SdkQuestionId
                                  • Optionalstyle?: CSSProperties

                                    A custom style object to be added to the root element.

                                    @@ -32,7 +32,7 @@
                                  • Optionalwidth?: Width<string | number>

                                    A number or string specifying a CSS size value that specifies the width of the component

                                  • OptionalwithChartTypeSelector?: boolean

                                    Determines whether the chart type selector and corresponding settings button are shown. Only relevant when using the default layout.

                                  • OptionalwithDownloads?: boolean

                                    Enables the ability to download results in the interactive question.

                                    -

                                Returns null | Element

                              Index

                              InteractiveQuestion

                          Returns Element

                        Index

                        InteractiveQuestion

                        Breakout BreakoutDropdown ChartTypeDropdown ChartTypeSelector diff --git a/_site/docs/master/embedding/sdk/api/StaticQuestionComponents.html b/_site/docs/master/embedding/sdk/api/StaticQuestionComponents.html new file mode 100644 index 0000000000..92c3eec899 --- /dev/null +++ b/_site/docs/master/embedding/sdk/api/StaticQuestionComponents.html @@ -0,0 +1,76 @@ +StaticQuestionComponents | Embedded analytics SDK API + + + + + + + + + + + + + + + + + + + + + + + + +

                        Interface StaticQuestionComponents

                        interface StaticQuestionComponents {
                            Breakout: () => null | Element;
                            BreakoutDropdown: (
                                props: InteractiveQuestionBreakoutDropdownProps,
                            ) => null | Element;
                            ChartTypeDropdown: (props: MenuProps) => Element;
                            ChartTypeSelector: (props: StackProps) => Element;
                            DownloadWidget: (props: StackProps) => null | Element;
                            DownloadWidgetDropdown: (props: PopoverProps) => Element;
                            Filter: (props: InteractiveQuestionFilterProps) => Element;
                            FilterDropdown: (
                                props: InteractiveQuestionFilterDropdownProps,
                            ) => null | Element;
                            QuestionSettings: (props: StackProps) => null | Element;
                            QuestionSettingsDropdown: (
                                props?: InteractiveQuestionQuestionSettingsDropdownProps,
                            ) => Element;
                            QuestionVisualization: (
                                props: { className?: string; style?: CSSProperties } & {
                                    height?: Height<string | number>;
                                    width?: Width<string | number>;
                                } & {},
                            ) => Element;
                            ResetButton: (props?: ButtonProps) => null | Element;
                            Summarize: () => Element;
                            SummarizeDropdown: (
                                props: InteractiveQuestionSummarizeDropdownProps,
                            ) => Element;
                            Title: (
                                props: { className?: string; style?: CSSProperties },
                            ) => undefined | Element;
                        }
                        Index

                        InteractiveQuestion

                        Breakout: () => null | Element

                        Type declaration

                          • (): null | Element
                          • Function

                            A set of badges for managing data groupings (breakouts). +Uses question context for breakout functionality.

                            +

                            Returns null | Element

                        BreakoutDropdown: (
                            props: InteractiveQuestionBreakoutDropdownProps,
                        ) => null | Element

                        Type declaration

                        ChartTypeDropdown: (props: MenuProps) => Element

                        Type declaration

                          • (props: MenuProps): Element
                          • Function

                            Dropdown for selecting the visualization type (bar chart, line chart, table, etc.). +Automatically updates to show recommended visualization types for the current data.

                            +

                            Parameters

                            Returns Element

                        ChartTypeSelector: (props: StackProps) => Element

                        Type declaration

                        DownloadWidget: (props: StackProps) => null | Element

                        Type declaration

                          • (props: StackProps): null | Element
                          • Function

                            Provides a UI widget for downloading data in different formats (CSV, XLSX, JSON, and PNG depending on the visualization).

                            +

                            Parameters

                            Returns null | Element

                        DownloadWidgetDropdown: (props: PopoverProps) => Element

                        Type declaration

                        Type declaration

                        FilterDropdown: (
                            props: InteractiveQuestionFilterDropdownProps,
                        ) => null | Element

                        Type declaration

                        QuestionSettings: (props: StackProps) => null | Element

                        Type declaration

                          • (props: StackProps): null | Element
                          • Function

                            Settings panel for configuring visualization options like axes, colors, and formatting. +Uses question context for settings.

                            +

                            Parameters

                            Returns null | Element

                        QuestionSettingsDropdown: (
                            props?: InteractiveQuestionQuestionSettingsDropdownProps,
                        ) => Element

                        Type declaration

                        QuestionVisualization: (
                            props: { className?: string; style?: CSSProperties } & {
                                height?: Height<string | number>;
                                width?: Width<string | number>;
                            } & {},
                        ) => Element

                        Type declaration

                          • (
                                props: { className?: string; style?: CSSProperties } & {
                                    height?: Height<string | number>;
                                    width?: Width<string | number>;
                                } & {},
                            ): Element
                          • Function

                            The main visualization component that renders the question results as a chart, table, or other visualization type.

                            +

                            Parameters

                            • props: { className?: string; style?: CSSProperties } & {
                                  height?: Height<string | number>;
                                  width?: Width<string | number>;
                              } & {}
                              • OptionalclassName?: string

                                A custom class name to be added to the root element.

                                +
                              • Optionalstyle?: CSSProperties

                                A custom style object to be added to the root element.

                                +
                              • Optionalheight?: Height<string | number>

                                A number or string specifying a CSS size value that specifies the height of the component

                                +
                              • Optionalwidth?: Width<string | number>

                                A number or string specifying a CSS size value that specifies the width of the component

                                +

                              Returns Element

                          ResetButton: (props?: ButtonProps) => null | Element

                          Type declaration

                            • (props?: ButtonProps): null | Element
                            • Function

                              Button to reset question modifications. Only appears when there are unsaved changes to the question.

                              +

                              Parameters

                              Returns null | Element

                          Summarize: () => Element

                          Type declaration

                            • (): Element
                            • Function

                              Interface for adding and managing data summaries (like counts, sums, averages). Displays as a set of badges. +Uses question context for summarization functionality.

                              +

                              Returns Element

                          SummarizeDropdown: (props: InteractiveQuestionSummarizeDropdownProps) => Element

                          Type declaration

                          Title: (
                              props: { className?: string; style?: CSSProperties },
                          ) => undefined | Element

                          Type declaration

                            • (props: { className?: string; style?: CSSProperties }): undefined | Element
                            • Function

                              Displays a title based on the question's state. Shows:

                              +
                                +
                              • The question's display name if it's saved
                              • +
                              • An auto-generated description for ad-hoc questions (non-native queries)
                              • +
                              +

                              Parameters

                              • props: { className?: string; style?: CSSProperties }
                                • OptionalclassName?: string

                                  A custom class name to be added to the root element.

                                  +
                                • Optionalstyle?: CSSProperties

                                  A custom style object to be added to the root element.

                                  +

                              Returns undefined | Element

                          + + \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/assets/navigation.js b/_site/docs/master/embedding/sdk/api/assets/navigation.js index f695acbc75..6aea3d90bb 100644 --- a/_site/docs/master/embedding/sdk/api/assets/navigation.js +++ b/_site/docs/master/embedding/sdk/api/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "eJylWV1z0zgU/S9+7uywzAKzfWvTZKCU3W5T4IHhQbEusTayZKTrhsLw3xknTSLLVx82T+3onHuOdHWtr3z6USB8w+K8mGkpoUSh1aXRWwumOCvKSkhuQBXnn6K8hmFFQX9UWMvirNgIxYvzl3/9PAvL3Brd2IjWDu8LPn/x8udnV9MAQ7hitlppZvg7zZkMjYKmHswJNDKW1oIXcdGIkxoJx1JDuPvZCVGGCQrqfmCyhbDmHs5J+H8t2G6ioql2SD2/Q7ufj7OilMza4rzg0BgoGQIvgtZkenpgfCDHUQfGMOcC2UqCy3vyGkCRmX2jEAwrUTxQShQaEVsiQ1ESOh4QkRj03csjjcdqjBqDJxqkxHS9MXmSFBqfcKcTifKlmcOxhArZrTIjpLyvjG7XVaByg5TMpB9iupnT5rJFHFjksCe55fpMcUhrT1E9/F0ColBre2V0w/U2wy0aObEXH4RtmRTfWd6Aw2Ej/e/AAuaWik8e6bVkp/8X2tRpQzJipOu9QAlpqxMtuhTxTaAqfWRkLy9ZucmdBo/rOT37+9WfL54n3AywjW4xv+bJiAnOs4oZvH9sIN+aDvkd7yV0x8ucRYsOmeB9pbdKasY/Cr6GEXmPxP12L8a6T3VdCIlg8sdM8Ce75rpNdfH3gvG7x1Tnbm3MXTE87hS3tq6ZEd9HfLd0CO3tHs/eAbIVs91i/CB48C7K4YtQcCBftFjNtPoi1qc+hRiRUxrh/STmIyNEvFSRcGy7iI0xNbrh5A4jPgqsLhrxFh5juifWNIfrLabkr7c4TXvJapkS7zjp4tvfJhLXggGpdxXJuAz0ieSFZsQFVmMV/EoumYXwoYVCcypxpqU2REnv23MUhsnzkRyV+wpqGErsmmPx5Lo5YoHcHQt2g3XeHY5tyWj/eetG2C6yrVXsEcxhJR1ai7o+3oln3TMRqPYNQu0YhEkp/V7QXmeoHyGN0u+CAqodNFpr35W5hBoURoR7vBwXOs0+klKa1yvgXKj1XKHAx+7w6TzKDMGk3pG5P+m8hUf3lYdAk8eDUqt/mPvhHVpSkTd6LVS3vrVOF5zG3NV/JkW5uSjpBcQBJ+jdynYtlA3tsyFmttPxqyZXzydsvFq/5mg8X7VutAKFgeW1j+eqEo+VA2i0VmK2aF6+C7JbLRT+u/ofSuL04hFydY8f8RKs7Z4e9AaIciBpuR4LwLK6g6/dZroLXBAOBClbXytcsFpI4sx4wnLVEtM4afbeW+r4/n7wy9RQ4ZYZVgOC8X8l8YCUzpJvnA/QfaTvAxk6x0L2ZJz2MSo3mvH5Q2/7I+EMzf0G4nXr0JgTb4w2xxWlr9KDRmsNH+gIPEe1y8RrprgEMyhRGs9QPRxzvcydmkdoUE+cJJyh2X0gXp/2TcnYrzL44QyxlFrn2b1zguLXW7wD22hlnb2IxkP3u8+/ALqey/Q=" \ No newline at end of file +window.navigationData = "eJylWsty3DYQ/BeeVanEFTtl3VYrqWJZThStZB9cOmDJ8RJeEKDBoTZyyv+ewj5BYPAgfZIK3dONwRvgfv6vQPgXi/NiroSAErmSF1ptOtDFWVHWXFQaZHH+OcprGdYU9EuNjSjOijWXVXH+5vcfZ2GZO63aLqK1xYeCr16/+fFka2pgCJesq5eK6eqDqpgIZUFTD+YEGsuFoLvphCg5Gf3TQ2daIpqLRRp4Hsrd+p8VpWBdV5wXFbQaSoZQFUFrMp0BGE/kmHkgh6uKI1sKsHl7Lw+K9MQ7iaBZifyZUqLQiNgCGfKS0HGAiIRXd6cdadxvyniGjmiQEtN1cnIkKTTe4VYlEsOXZvq5hAayPco0F+Kh1qpf1YGRG6RkNvohxvSc0hc9omeRw57kluszxSGtPUX18HcBiFyuukut2kptMtyikRNr8ZF3PRP8O8tLOBw20v8eOsDcoeKSR3ot2On/a6WbtCEZMdL1gaOAtNWJFl2KqnVgVLrIyFpesHKd2w0O13H69e0fv71+lXDTwNaqx/wxT0ZMcJ7XTOPDSwv51nTIz3gvwJzfchYtOmSC96XaSKFY9YlXKxjR7pG4n67FWPeprtdcIOj8nAn+ZNdct6ku7l4wfveY6mzWxtwVw+FOceubhmn+fcS8pUNob/t49gGQLVlnFuNnXgUvexV84RIO5FmP9VzJL3x1qlOIETmlEd57MRcZIeI0FQnHtotYjqns/M71Iz5xrGctfw8vMd0Ta5rDzQZT8jcbnKa9YI1IiRtO5uBTmLgX+Czb+gR4g+TJu9YknDzS4NaTce8YEsm704i7ssI6OCGp7VM1rZIgMbHLHmk502CuhNLEfNqV5ygE+s1CclQeamjAl9gWp6+zsSYKMWKq5FYwYs3fnnS2TWg9pRzLktHuk9gt70xk38jYw5nFSjr0HarmeM2fm5cqkP07hMYyCJNS+oOgnY6vHyGN0jdBAVUDjdbaVeVKQAMSI8IDXo4L3cwuklK6apZQVVyuriRyfDHnaeudyQeTekfm7vD2Hl7shysCTZ54SiX/YvZ0PpSkIm/VikszYXurClZh7oY2F7xcz0p6WbLACXp3ol9x2YWODiFmttNxVpNr8h4brzYcczSer7pfQwOL9hDPVSXeXz1otFait2hevguyO8Ul/r38CiVxIHMIubrHSbyArjOvKWoNxHAgabke14BlfQ/fzLa4DbwmHAhStr6SeM0aLohj8AnLVUt046Tee+yoG8mj9zXLV7hjmjWAoD8y0YO1UjlASmdRra0JaH93GAIZOseB7MhY5WNUbhWrrp4H2x8JZ2juNhCnWofCnHitlT6uKEOVATRay39zJPAcVdMSfzJZCdDeEKXxDNXDgdVpuVPxCA3q1ZaEMzTNBHHqtCtKxn4TwYnjYyk142mebkFWNxu8h65VsrP2IhpPX1n7DmZtK3i5/QiwP8VQFzSSuDf3sejd1dCfGRfmA6FZG7uIpcuzHAdQytD5Tj1rediU5J6MfTj/E7o7EEg4fos2Nei1BomP4R8zeCSr+qfyVKPZbyHHU2rAjuSeXH2YMH/6H2c5yi8=" \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/assets/search.js b/_site/docs/master/embedding/sdk/api/assets/search.js index 57a2948c77..b49995e08f 100644 --- a/_site/docs/master/embedding/sdk/api/assets/search.js +++ b/_site/docs/master/embedding/sdk/api/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/index.html b/_site/docs/master/embedding/sdk/api/index.html index c742f3dc65..420d96ce25 100644 --- a/_site/docs/master/embedding/sdk/api/index.html +++ b/_site/docs/master/embedding/sdk/api/index.html @@ -23,6 +23,6 @@ -

                          Embedded analytics SDK API

                          CollectionBrowser

                          CollectionBrowser
                          CollectionBrowserProps

                          CreateDashboardModal

                          CreateDashboardModal
                          useCreateDashboardApi
                          CreateDashboardModalProps
                          CreateDashboardValues

                          CreateQuestion

                          CreateQuestion
                          CreateQuestionProps

                          Dashboard

                          EditableDashboard
                          InteractiveDashboard
                          StaticDashboard
                          EditableDashboardProps
                          InteractiveDashboardProps
                          StaticDashboardProps

                          InteractiveQuestion

                          InteractiveQuestion
                          DrillThroughQuestionProps
                          InteractiveQuestionEditorButtonProps
                          InteractiveQuestionEditorProps
                          InteractiveQuestionProps
                          InteractiveQuestionQuestionSettingsDropdownProps
                          InteractiveQuestionQuestionVisualizationProps
                          InteractiveQuestionResetButtonProps
                          InteractiveQuestionSaveQuestionFormProps
                          InteractiveQuestionTitleProps
                          SdkQuestionProps
                          InteractiveQuestionBackButtonProps
                          InteractiveQuestionBreakoutDropdownProps
                          InteractiveQuestionChartTypeDropdownProps
                          InteractiveQuestionChartTypeSelectorProps
                          InteractiveQuestionDownloadWidgetDropdownProps
                          InteractiveQuestionDownloadWidgetProps
                          InteractiveQuestionFilterDropdownProps
                          InteractiveQuestionFilterProps
                          InteractiveQuestionQuestionSettingsProps
                          InteractiveQuestionSaveButtonProps
                          InteractiveQuestionSummarizeDropdownProps

                          MetabaseProvider

                          defineMetabaseAuthConfig
                          MetabaseProvider
                          MetabaseProviderProps
                          MetabaseAuthConfig
                          MetabaseAuthConfigWithApiKey
                          MetabaseAuthConfigWithJwt
                          MetabaseAuthConfigWithSaml

                          StaticQuestion

                          StaticQuestion
                          StaticQuestionProps

                          other

                          BaseSdkQuestionProps
                          MetabaseColors
                          MetabaseQuestion
                          MetabaseTheme
                          ButtonProps
                          ChartColor
                          CollectionBrowserListColumns
                          CustomDashboardCardMenuItem
                          DashboardCardCustomMenuItem
                          DashboardCardMenu
                          DashboardCardMenuCustomElement
                          DashCardMenuItem
                          EmbeddingEntityType
                          EntityTypeFilterKeys
                          IconName
                          LoginStatus
                          MetabaseClickAction
                          MetabaseClickActionPluginsConfig
                          MetabaseCollection
                          MetabaseCollectionItem
                          MetabaseComponentTheme
                          MetabaseDashboard
                          MetabaseDashboardPluginsConfig
                          MetabaseDataPointObject
                          MetabaseEmbeddingSessionToken
                          MetabaseFetchRequestTokenFn
                          MetabaseFontFamily
                          MetabasePluginsConfig
                          MetabaseUser
                          ParameterValues
                          SdkCollectionId
                          SdkDashboardId
                          SdkDashboardLoadEvent
                          SdkEntityId
                          SdkErrorComponent
                          SdkErrorComponentProps
                          SdkEventHandlersConfig
                          SdkQuestionId
                          SdkQuestionTitleProps
                          SdkUserId
                          SqlParameterValues
                          UserBackendJwtResponse

                          +

                          Embedded analytics SDK API

                          CollectionBrowser

                          CollectionBrowser
                          CollectionBrowserProps

                          CreateDashboardModal

                          CreateDashboardModal
                          CreateDashboardModalProps

                          CreateQuestion

                          CreateQuestion
                          CreateQuestionProps

                          Dashboard

                          EditableDashboard
                          InteractiveDashboard
                          StaticDashboard
                          EditableDashboardProps
                          InteractiveDashboardProps
                          StaticDashboardProps

                          InteractiveQuestion

                          InteractiveQuestion
                          DrillThroughQuestionProps
                          InteractiveQuestionEditorButtonProps
                          InteractiveQuestionEditorProps
                          InteractiveQuestionProps
                          InteractiveQuestionQuestionSettingsDropdownProps
                          InteractiveQuestionQuestionVisualizationProps
                          InteractiveQuestionResetButtonProps
                          InteractiveQuestionSaveQuestionFormProps
                          InteractiveQuestionTitleProps
                          SdkQuestionProps
                          InteractiveQuestionBackButtonProps
                          InteractiveQuestionBreakoutDropdownProps
                          InteractiveQuestionChartTypeDropdownProps
                          InteractiveQuestionChartTypeSelectorProps
                          InteractiveQuestionDownloadWidgetDropdownProps
                          InteractiveQuestionDownloadWidgetProps
                          InteractiveQuestionFilterDropdownProps
                          InteractiveQuestionFilterProps
                          InteractiveQuestionQuestionSettingsProps
                          InteractiveQuestionSaveButtonProps
                          InteractiveQuestionSummarizeDropdownProps

                          MetabaseProvider

                          defineMetabaseAuthConfig
                          MetabaseProvider
                          MetabaseProviderProps
                          MetabaseAuthConfig
                          MetabaseAuthConfigWithApiKey
                          MetabaseAuthConfigWithJwt
                          MetabaseAuthConfigWithSaml

                          MetabotQuestion

                          MetabotQuestion

                          StaticQuestion

                          StaticQuestion
                          StaticQuestionProps

                          other

                          InteractiveQuestionComponents
                          MetabaseColors
                          MetabaseQuestion
                          MetabaseTheme
                          StaticQuestionComponents
                          ButtonProps
                          ChartColor
                          CollectionBrowserListColumns
                          CustomDashboardCardMenuItem
                          DashboardCardCustomMenuItem
                          DashboardCardMenu
                          DashboardCardMenuCustomElement
                          DashCardMenuItem
                          EmbeddingEntityType
                          EntityTypeFilterKeys
                          IconName
                          LoginStatus
                          MetabaseClickAction
                          MetabaseClickActionPluginsConfig
                          MetabaseCollection
                          MetabaseCollectionItem
                          MetabaseComponentTheme
                          MetabaseDashboard
                          MetabaseDashboardPluginsConfig
                          MetabaseDataPointObject
                          MetabaseEmbeddingSessionToken
                          MetabaseFetchRequestTokenFn
                          MetabaseFontFamily
                          MetabasePluginsConfig
                          MetabaseUser
                          ParameterValues
                          SdkCollectionId
                          SdkDashboardId
                          SdkDashboardLoadEvent
                          SdkEntityId
                          SdkErrorComponent
                          SdkErrorComponentProps
                          SdkEventHandlersConfig
                          SdkQuestionId
                          SdkQuestionTitleProps
                          SdkUserId
                          SqlParameterValues
                          UserBackendJwtResponse

                          useApplicationName

                          useApplicationName

                          useAvailableFonts

                          useAvailableFonts

                          useCreateDashboardApi

                          useCreateDashboardApi
                          CreateDashboardValues

                          useCurrentUser

                          useCurrentUser

                          useMetabaseAuthStatus

                          useMetabaseAuthStatus

                          \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/useApplicationName.html b/_site/docs/master/embedding/sdk/api/useApplicationName.html new file mode 100644 index 0000000000..5163ba5a67 --- /dev/null +++ b/_site/docs/master/embedding/sdk/api/useApplicationName.html @@ -0,0 +1,30 @@ +useApplicationName | Embedded analytics SDK API + + + + + + + + + + + + + + + + + + + + + + + + +

                          Function useApplicationName

                          • Returns application name. +Returns null until the SDK is fully loaded and initialized.

                            +

                            Returns null | string

                          + + \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/useAvailableFonts.html b/_site/docs/master/embedding/sdk/api/useAvailableFonts.html new file mode 100644 index 0000000000..90ffe6c476 --- /dev/null +++ b/_site/docs/master/embedding/sdk/api/useAvailableFonts.html @@ -0,0 +1,30 @@ +useAvailableFonts | Embedded analytics SDK API + + + + + + + + + + + + + + + + + + + + + + + + +

                          Function useAvailableFonts

                          • Returns available fonts. +Returns null until the SDK is fully loaded and initialized.

                            +

                            Returns null | { availableFonts: string[] }

                          + + \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/useCreateDashboardApi.html b/_site/docs/master/embedding/sdk/api/useCreateDashboardApi.html index 4c60e1483a..fde6844476 100644 --- a/_site/docs/master/embedding/sdk/api/useCreateDashboardApi.html +++ b/_site/docs/master/embedding/sdk/api/useCreateDashboardApi.html @@ -23,7 +23,8 @@ -

                          Function useCreateDashboardApi

                          +

                          Function useCreateDashboardApi

                          \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/useCurrentUser.html b/_site/docs/master/embedding/sdk/api/useCurrentUser.html new file mode 100644 index 0000000000..ea05de3a48 --- /dev/null +++ b/_site/docs/master/embedding/sdk/api/useCurrentUser.html @@ -0,0 +1,30 @@ +useCurrentUser | Embedded analytics SDK API + + + + + + + + + + + + + + + + + + + + + + + + +

                          Function useCurrentUser

                          • Returns the current user. +Returns null until the SDK is fully loaded and initialized.

                            +

                            Returns null | MetabaseUser

                          + + \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/api/useMetabaseAuthStatus.html b/_site/docs/master/embedding/sdk/api/useMetabaseAuthStatus.html new file mode 100644 index 0000000000..5eb3d7e3f8 --- /dev/null +++ b/_site/docs/master/embedding/sdk/api/useMetabaseAuthStatus.html @@ -0,0 +1,30 @@ +useMetabaseAuthStatus | Embedded analytics SDK API + + + + + + + + + + + + + + + + + + + + + + + + +

                          Function useMetabaseAuthStatus

                          • Returns the authentication status of the current user in the Metabase embedding SDK. +Returns null until the SDK is fully loaded and initialized.

                            +

                            Returns null | LoginStatus

                          + + \ No newline at end of file diff --git a/_site/docs/master/embedding/sdk/appearance.html b/_site/docs/master/embedding/sdk/appearance.html index 854cdab162..a9897c8041 100644 --- a/_site/docs/master/embedding/sdk/appearance.html +++ b/_site/docs/master/embedding/sdk/appearance.html @@ -5073,7 +5073,19 @@

                          Customizing loader and error co <MetabaseProvider loaderComponent={() => <div>Analytics is loading...</div>} - errorComponent={({ message }) => <div>There was an error: {message}</div>} + errorComponent={({ type, message, onClose }) => { + switch (type) { + case "floating": + return ( + <div style={{ position: "fixed", left: 0, right: 0, bottom: 0 }}> + There was an error: {message}. <span onClick={onClose}>X</span> + </div> + ); + case "default": + default: + return <div>There was an error: {message}</div>; + } + }} > <StaticDashboard dashboardId={1} /> </MetabaseProvider> diff --git a/_site/docs/master/embedding/sdk/authentication.html b/_site/docs/master/embedding/sdk/authentication.html index 2035576541..e3d79f0feb 100644 --- a/_site/docs/master/embedding/sdk/authentication.html +++ b/_site/docs/master/embedding/sdk/authentication.html @@ -5207,11 +5207,11 @@

                          Getting Metabase authentication
                          const auth = useMetabaseAuthStatus();
                           
                          -if (auth.status === "error") {
                          +if (auth?.status === "error") {
                             return <div>Failed to authenticate: {auth.error.message}</div>;
                           }
                           
                          -if (auth.status === "success") {
                          +if (auth?.status === "success") {
                             return <InteractiveQuestion questionId={110} />;
                           }
                           
                          diff --git a/_site/docs/master/embedding/sdk/collections.html b/_site/docs/master/embedding/sdk/collections.html index 5a5380f7d3..ca2d177b0e 100644 --- a/_site/docs/master/embedding/sdk/collections.html +++ b/_site/docs/master/embedding/sdk/collections.html @@ -4945,7 +4945,7 @@

                          Props

                          visibleEntityTypes? - ("model" | "question" | "collection" | "dashboard")[] + ("collection" | "dashboard" | "question" | "model")[] The types of entities that should be visible. If not provided, all entities will be shown. diff --git a/_site/docs/master/embedding/sdk/config.html b/_site/docs/master/embedding/sdk/config.html index 1770faf3f6..a9d5efb9f8 100644 --- a/_site/docs/master/embedding/sdk/config.html +++ b/_site/docs/master/embedding/sdk/config.html @@ -4944,9 +4944,9 @@

                          Props

                          The children of the MetabaseProvider component. - className? + className? string - A custom class name to be added to the root element. + A custom class name to be added to the root element. Deprecated This prop is not used anymore. errorComponent? diff --git a/_site/docs/master/embedding/sdk/dashboards.html b/_site/docs/master/embedding/sdk/dashboards.html index 3014b91885..17f58af2cc 100644 --- a/_site/docs/master/embedding/sdk/dashboards.html +++ b/_site/docs/master/embedding/sdk/dashboards.html @@ -5340,6 +5340,8 @@

                          .

                          +

                          API Reference