## Uses of Class
org.apache.fop.layoutmgr.LayoutContext

- Packages that use LayoutContext
  Package | Description
  --- | ---
  org.apache.fop.layoutmgr | FOP's layout engine.
  org.apache.fop.layoutmgr.inline | Layout managers for inline formatting objects and line building.
  org.apache.fop.layoutmgr.list | Layout managers for lists.
  org.apache.fop.layoutmgr.table | Layout managers for tables.

- - ### Uses of LayoutContext in org.apache.fop.layoutmgr

    Methods in org.apache.fop.layoutmgr that return LayoutContext
    Modifier and Type | Method and Description
    --- | ---
    `static LayoutContext` | LayoutContext.`copyOf(LayoutContext copy)`
    `protected LayoutContext` | AbstractBreaker.`createLayoutContext()` Creates the top-level LayoutContext for the breaker operation.
    `protected LayoutContext` | LocalBreaker.`createLayoutContext()`
    `protected LayoutContext` | FlowLayoutManager.`makeChildLayoutContext(LayoutContext context)` Overridden to take into account the current page-master's writing-mode Creates and initializes a `LayoutContext` to pass to the child LM
    `protected LayoutContext` | BlockContainerLayoutManager.`makeChildLayoutContext(LayoutContext context)` Overridden to handle writing-mode, and different stack limit setup.
    `protected LayoutContext` | BlockStackingLayoutManager.`makeChildLayoutContext(LayoutContext context)` Creates and initializes a `LayoutContext` to pass to the child LM
    `static LayoutContext` | LayoutContext.`newInstance()`
    `static LayoutContext` | LayoutContext.`offspringOf(LayoutContext parent)` Returns a descendant of the given layout context.

    Methods in org.apache.fop.layoutmgr with parameters of type LayoutContext
    Modifier and Type | Method and Description
    --- | ---
    `static void` | AreaAdditionUtil.`addAreas(AbstractLayoutManager parentLM, PositionIterator parentIter, LayoutContext layoutContext)` Creates the child areas for the given layout manager.
    `protected void` | AbstractBreaker.`addAreas(org.apache.fop.layoutmgr.PageBreakingAlgorithm alg, int startPart, int partCount, AbstractBreaker.BlockSequence originalList, AbstractBreaker.BlockSequence effectiveList, LayoutContext childLC)` Phase 3 of Knuth algorithm: Adds the areas
    `void` | MultiCaseLayoutManager.`addAreas(PositionIterator posIter, LayoutContext context)` Tell the layout manager to add all the child areas implied by Position objects which will be returned by the Iterator.
    `void` | FlowLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext layoutContext)` Tell the layout manager to add all the child areas implied by Position objects which will be returned by the Iterator.
    `void` | FootnoteBodyLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext layoutContext)` Tell the layout manager to add all the child areas implied by Position objects which will be returned by the Iterator.
    `void` | RetrieveTableMarkerLayoutManager.`addAreas(PositionIterator posIter, LayoutContext context)` Add the area for this layout manager.
    `void` | FloatContentLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext layoutContext)`
    `void` | BlockLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext layoutContext)` Tell the layout manager to add all the child areas implied by Position objects which will be returned by the Iterator.
    `void` | BlockContainerLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext layoutContext)` Tell the layout manager to add all the child areas implied by Position objects which will be returned by the Iterator.
    `protected abstract void` | AbstractBreaker.`addAreas(PositionIterator posIter, LayoutContext context)` Tell the layout manager to add all the child areas implied by Position objects which will be returned by the Iterator.
    `void` | AbstractLayoutManager.`addAreas(PositionIterator posIter, LayoutContext context)` Tell the layout manager to add all the child areas implied by Position objects which will be returned by the Iterator.
    `void` | LayoutManager.`addAreas(PositionIterator posIter, LayoutContext context)` Tell the layout manager to add all the child areas implied by Position objects which will be returned by the Iterator.
    `void` | MultiSwitchLayoutManager.`addAreas(PositionIterator posIter, LayoutContext context)`
    `protected void` | PageBreaker.`addAreas(PositionIterator posIter, LayoutContext context)` Adds an area to the flow layout manager
    `protected void` | LocalBreaker.`addAreas(PositionIterator posIter, LayoutContext context)`
    `void` | StaticContentLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext layoutContext)` Tell the layout manager to add all the child areas implied by Position objects which will be returned by the Iterator.
    `protected void` | AbstractBreaker.`addAreasForFloats(org.apache.fop.layoutmgr.PageBreakingAlgorithm alg, int startPart, int partCount, AbstractBreaker.BlockSequence originalList, AbstractBreaker.BlockSequence effectiveList, LayoutContext childLC, int lastBreak, int startElementIndex, int endElementIndex)`
    `protected void` | PageBreaker.`addAreasForFloats(org.apache.fop.layoutmgr.PageBreakingAlgorithm alg, int startPart, int partCount, AbstractBreaker.BlockSequence originalList, AbstractBreaker.BlockSequence effectiveList, LayoutContext childLC, int lastBreak, int startElementIndex, int endElementIndex)`
    `protected void` | BlockStackingLayoutManager.`addFirstVisibleMarks(List<ListElement> elements, LayoutContext context, int alignment)` Checks if this LM's first "visible marks" (= borders, padding, spaces) have already been processed, and if necessary, adds corresponding elements to the specified list, and updates the given layout context accordingly.
    `protected void` | BlockStackingLayoutManager.`addInBetweenBreak(List<ListElement> contentList, LayoutContext parentLC, LayoutContext childLC)` Adds a break element to the content list between individual child elements.
    `protected boolean` | BlockStackingLayoutManager.`addKnuthElementsForBreakAfter(List returnList, LayoutContext context)` Creates Knuth elements for break-after and adds them to the return list.
    `protected boolean` | BlockStackingLayoutManager.`addKnuthElementsForBreakBefore(List returnList, LayoutContext context)` Creates Knuth elements for break-before and adds them to the return list.
    `protected void` | BlockStackingLayoutManager.`addLastVisibleMarks(List<ListElement> elements, LayoutContext context, int alignment)` Adds elements the LM's last/closing marks to the specified list, and updates the layout context accordingly.
    `protected void` | BlockStackingLayoutManager.`addPendingMarks(LayoutContext context)` Adds the unresolved elements for border and padding to a layout context so break possibilities can be properly constructed.
    `protected boolean` | BlockStackingLayoutManager.`breakBeforeServed(LayoutContext context, List<ListElement> elements)` Check whether there is a break-before condition.
    `static LayoutContext` | LayoutContext.`copyOf(LayoutContext copy)`
    `void` | LayoutContext.`copyPendingMarksFrom(LayoutContext source)`
    `static List<List<KnuthElement>>` | PageBreaker.`getFootnoteKnuthElements(FlowLayoutManager flowLM, LayoutContext context, List<FootnoteBodyLayoutManager> footnoteBodyLMs)`
    `protected int` | AbstractBreaker.`getNextBlockList(LayoutContext childLC, int nextSequenceStartsOn)` Gets the next block list (sequence) and adds it to a list of block lists if it's not empty.
    `protected int` | PageBreaker.`getNextBlockList(LayoutContext childLC, int nextSequenceStartsOn)` Gets the next block list (sequence) and adds it to a list of block lists if it's not empty.
    `protected int` | PageBreaker.`getNextBlockList(LayoutContext childLC, int nextSequenceStartsOn, Position positionAtIPDChange, LayoutManager restartLM, List firstElements)` Gets the next block list (sequence) and adds it to a list of block lists if it's not empty.
    `protected int` | AbstractBreaker.`getNextBlockList(LayoutContext childLC, int nextSequenceStartsOn, Position positionAtIPDChange, LayoutManager restartAtLM, List<KnuthElement> firstElements)` Gets the next block list (sequence) and adds it to a list of block lists if it's not empty.
    `protected List<ListElement>` | FlowLayoutManager.`getNextChildElements(LayoutManager childLM, LayoutContext context, LayoutContext childLC, int alignment, Stack<LayoutManager> lmStack, Position restartPosition, LayoutManager restartLM)` Overridden to wrap the child positions before returning the list Gets the next set of child elements for the given childLM.
    `protected List<ListElement>` | BlockStackingLayoutManager.`getNextChildElements(LayoutManager childLM, LayoutContext context, LayoutContext childLC, int alignment, Stack<LayoutManager> lmStack, Position restartPosition, LayoutManager restartAtLM)` Gets the next set of child elements for the given childLM.
    `protected List<ListElement>` | BlockLayoutManager.`getNextChildElements(LayoutManager childLM, LayoutContext context, LayoutContext childLC, int alignment, Stack lmStack, Position restartPosition, LayoutManager restartAtLM)` Overridden to take into account that the childLM may be the block's `LineLayoutManager`.
    `List` | FlowLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List<KnuthElement>` | FootnoteBodyLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)`
    `List` | RetrieveTableMarkerLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List` | BlockLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List` | BlockContainerLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `protected abstract List<KnuthElement>` | AbstractBreaker.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM
    `List` | AbstractLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List` | LayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List` | BlockStackingLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List<ListElement>` | MultiSwitchLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)`
    `protected List` | PageBreaker.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM
    `protected List` | LocalBreaker.`getNextKnuthElements(LayoutContext context, int alignment)`
    `List` | StaticContentLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `protected List<KnuthElement>` | AbstractBreaker.`getNextKnuthElements(LayoutContext context, int alignment, Position positionAtIPDChange, LayoutManager restartAtLM)` Get a sequence of KnuthElements representing the content of the node assigned to the LM
    `protected List` | PageBreaker.`getNextKnuthElements(LayoutContext context, int alignment, Position positionAtIPDChange, LayoutManager restartAtLM)` Get a sequence of KnuthElements representing the content of the node assigned to the LM
    `List` | AbstractBaseLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment, Stack lmStack, Position positionAtIPDChange, LayoutManager restartAtLM)` Returns an updated list of Knuth elements corresponding to this layout manager, after a change of IPD has been detected.
    `List` | BlockLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment, Stack lmStack, Position restartPosition, LayoutManager restartAtLM)` Returns an updated list of Knuth elements corresponding to this layout manager, after a change of IPD has been detected.
    `List` | BlockContainerLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment, Stack lmStack, Position restartPosition, LayoutManager restartAtLM)` Returns an updated list of Knuth elements corresponding to this layout manager, after a change of IPD has been detected.
    `List` | LayoutManager.`getNextKnuthElements(LayoutContext context, int alignment, Stack lmStack, Position positionAtIPDChange, LayoutManager restartAtLM)` Returns an updated list of Knuth elements corresponding to this layout manager, after a change of IPD has been detected.
    `List` | BlockStackingLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment, Stack lmStack, Position restartPosition, LayoutManager restartAtLM)` Returns an updated list of Knuth elements corresponding to this layout manager, after a change of IPD has been detected.
    `protected int` | AbstractBreaker.`handleFloatLayout(org.apache.fop.layoutmgr.PageBreakingAlgorithm alg, int optimalPageCount, AbstractBreaker.BlockSequence blockList, LayoutContext childLC)`
    `protected int` | PageBreaker.`handleFloatLayout(org.apache.fop.layoutmgr.PageBreakingAlgorithm alg, int optimalPageCount, AbstractBreaker.BlockSequence blockList, LayoutContext childLC)`
    `protected int` | AbstractBreaker.`handleSpanChange(LayoutContext childLC, int nextSequenceStartsOn)` Handles span changes reported through the `LayoutContext`.
    `protected int` | PageBreaker.`handleSpanChange(LayoutContext childLC, int nextSequenceStartsOn)` Handles span changes reported through the `LayoutContext`.
    `protected LayoutContext` | FlowLayoutManager.`makeChildLayoutContext(LayoutContext context)` Overridden to take into account the current page-master's writing-mode Creates and initializes a `LayoutContext` to pass to the child LM
    `protected LayoutContext` | BlockContainerLayoutManager.`makeChildLayoutContext(LayoutContext context)` Overridden to handle writing-mode, and different stack limit setup.
    `protected LayoutContext` | BlockStackingLayoutManager.`makeChildLayoutContext(LayoutContext context)` Creates and initializes a `LayoutContext` to pass to the child LM
    `static LayoutContext` | LayoutContext.`offspringOf(LayoutContext parent)` Returns a descendant of the given layout context.
    `void` | FloatContentLayoutManager.`processAreas(LayoutContext layoutContext)` {Add info}
    `protected void` | AbstractBreaker.`updateLayoutContext(LayoutContext context)` Used to update the LayoutContext in subclasses prior to starting a new element list.
    `protected void` | PageBreaker.`updateLayoutContext(LayoutContext context)` Used to update the LayoutContext in subclasses prior to starting a new element list.

    Constructors in org.apache.fop.layoutmgr with parameters of type LayoutContext
    Constructor and Description
    `BreakElement(Position position, int penaltyWidth, int penaltyValue, int breakClass, LayoutContext context)` Constructor for hard breaks.
    `BreakElement(Position position, int penaltyValue, int breakClass, LayoutContext context)` Create a new BreakElement for the given `position`, `penaltyValue` and `breakClass`.
    `BreakElement(Position position, int penaltyValue, LayoutContext context)` Main constructor

  - ### Uses of LayoutContext in org.apache.fop.layoutmgr.inline

    Fields in org.apache.fop.layoutmgr.inline declared as LayoutContext
    Modifier and Type | Field and Description
    --- | ---
    `protected LayoutContext` | InlineStackingLayoutManager.`childLC` The child layout context

    Methods in org.apache.fop.layoutmgr.inline that return LayoutContext
    Modifier and Type | Method and Description
    --- | ---
    `protected LayoutContext` | InlineStackingLayoutManager.`getContext()` Current child layout context

    Methods in org.apache.fop.layoutmgr.inline with parameters of type LayoutContext
    Modifier and Type | Method and Description
    --- | ---
    `void` | FootnoteLayoutManager.`addAreas(PositionIterator posIter, LayoutContext context)` Tell the layout manager to add all the child areas implied by Position objects which will be returned by the Iterator.
    `void` | LeaderLayoutManager.`addAreas(PositionIterator posIter, LayoutContext context)` Add the area for this layout manager.
    `void` | FloatLayoutManager.`addAreas(PositionIterator posIter, LayoutContext context)`
    `void` | ContentLayoutManager.`addAreas(PositionIterator posIter, LayoutContext context)` Tell the layout manager to add all the child areas implied by Position objects which will be returned by the Iterator.
    `void` | LeafNodeLayoutManager.`addAreas(PositionIterator posIter, LayoutContext context)` Add the area for this layout manager.
    `void` | WrapperLayoutManager.`addAreas(PositionIterator posIter, LayoutContext context)` Add the area for this layout manager.
    `void` | TextLayoutManager.`addAreas(PositionIterator posIter, LayoutContext context)` Generate and add areas to parent area.
    `void` | InlineContainerLayoutManager.`addAreas(PositionIterator posIter, LayoutContext context)`
    `void` | InlineLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext context)` Generate and add areas to parent area.
    `void` | LineLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext context)` Add the areas with the break points.
    `InlineArea` | LeaderLayoutManager.`get(LayoutContext context)` Return the inline area for this leader.
    `InlineArea` | PageNumberLayoutManager.`get(LayoutContext context)` get the inline area.
    `InlineArea` | LeafNodeLayoutManager.`get(LayoutContext context)` get the inline area.
    `InlineArea` | WrapperLayoutManager.`get(LayoutContext context)` get the inline area.
    `protected InlineArea` | PageNumberLayoutManager.`getEffectiveArea(LayoutContext layoutContext)`
    `protected InlineArea` | LeafNodeLayoutManager.`getEffectiveArea(LayoutContext layoutContext)`
    `protected InlineArea` | AbstractGraphicsLayoutManager.`getEffectiveArea(LayoutContext layoutContext)`
    `protected InlineArea` | CharacterLayoutManager.`getEffectiveArea(LayoutContext layoutContext)`
    `protected InlineArea` | AbstractPageNumberCitationLayoutManager.`getEffectiveArea(LayoutContext layoutContext)`
    `List` | FootnoteLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List` | LeaderLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `LinkedList` | FloatLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)`
    `List` | ContentLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List` | LeafNodeLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List` | TextLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List<KnuthSequence>` | InlineContainerLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)`
    `List` | InlineLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List` | AbstractGraphicsLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List` | LineLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List` | CharacterLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List` | LineLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment, LeafPosition restartPosition)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `protected AlignmentContext` | PageNumberLayoutManager.`makeAlignmentContext(LayoutContext context)` Creates a new alignment context or returns the current alignment context.
    `protected AlignmentContext` | LeafNodeLayoutManager.`makeAlignmentContext(LayoutContext context)` Creates a new alignment context or returns the current alignment context.
    `protected AlignmentContext` | InlineContainerLayoutManager.`makeAlignmentContext(LayoutContext context)`
    `protected AlignmentContext` | AbstractGraphicsLayoutManager.`makeAlignmentContext(LayoutContext context)` Creates a new alignment context or returns the current alignment context.
    `protected AlignmentContext` | AbstractPageNumberCitationLayoutManager.`makeAlignmentContext(LayoutContext context)` Creates a new alignment context or returns the current alignment context.
    `protected void` | LeafNodeLayoutManager.`offsetArea(InlineArea area, LayoutContext context)` Offset this area.
    `void` | FloatLayoutManager.`processAreas(LayoutContext context)`
    `protected void` | InlineStackingLayoutManager.`setChildContext(LayoutContext lc)` Set the current child layout context
    `protected void` | LeafNodeLayoutManager.`widthAdjustArea(InlineArea area, LayoutContext context)` Adjust the width of the area when adding.

  - ### Uses of LayoutContext in org.apache.fop.layoutmgr.list

    Methods in org.apache.fop.layoutmgr.list with parameters of type LayoutContext
    Modifier and Type | Method and Description
    --- | ---
    `void` | ListItemLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext layoutContext)` Add the areas for the break points.
    `void` | ListBlockLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext layoutContext)` A list block generates one or more normal block areas whose child areas are normal block areas returned by the children of fo:list-block.
    `void` | ListItemContentLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext layoutContext)` Add the areas for the break points.
    `protected void` | ListItemLayoutManager.`addFirstVisibleMarks(List<ListElement> elements, LayoutContext context, int alignment)` Overridden to unconditionally add elements for space-before.
    `List` | ListItemLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment, Stack lmStack, Position restartPosition, LayoutManager restartAtLM)` Returns an updated list of Knuth elements corresponding to this layout manager, after a change of IPD has been detected.
    `List` | ListBlockLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment, Stack lmStack, Position restartPosition, LayoutManager restartAtLM)` Returns an updated list of Knuth elements corresponding to this layout manager, after a change of IPD has been detected.
    `List` | ListItemContentLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment, Stack lmStack, Position restartPosition, LayoutManager restartAtLM)` Returns an updated list of Knuth elements corresponding to this layout manager, after a change of IPD has been detected.

  - ### Uses of LayoutContext in org.apache.fop.layoutmgr.table

    Methods in org.apache.fop.layoutmgr.table with parameters of type LayoutContext
    Modifier and Type | Method and Description
    --- | ---
    `void` | TableLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext layoutContext)` The table area is a reference area that contains areas for columns, bodies, rows and the contents are in cells.
    `void` | TableAndCaptionLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext layoutContext)` Add the areas.
    `void` | TableCaptionLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext layoutContext)` Add the areas to the parent.
    `void` | TableCellLayoutManager.`addAreas(PositionIterator parentIter, LayoutContext layoutContext, int[] spannedGridRowHeights, int startRow, int endRow, int borderBeforeWhich, int borderAfterWhich, boolean firstOnPage, boolean lastOnPage, org.apache.fop.layoutmgr.table.RowPainter painter, int firstRowHeight)` Add the areas for the break points.
    `LinkedList` | TableStepper.`getCombinedKnuthElementsForRowGroup(LayoutContext context, EffRow[] rows, int bodyType)` Creates the combined element list for a row group.
    `List` | TableLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List` | TableCellLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.
    `List` | TableContentLayoutManager.`getNextKnuthElements(LayoutContext context, int alignment)` Get a sequence of KnuthElements representing the content of the node assigned to the LM.

Copyright © 2023 Apache Software Foundation. All rights reserved.