@fundamental-ngx/core 0.58.0-rc.7 → 0.58.0-rc.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/button/index.d.ts +1 -1
- package/card/index.d.ts +8 -4
- package/combobox/index.d.ts +9 -1
- package/dialog/index.d.ts +2 -2
- package/feed-input/index.d.ts +1 -1
- package/fesm2022/fundamental-ngx-core-action-sheet.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-action-sheet.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-avatar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-card.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-combobox.mjs +44 -8
- package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-datetime.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-datetime.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dialog.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-feed-input.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-feed-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-flexible-column-layout.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-flexible-column-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-form.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-illustrated-message.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-illustrated-message.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-menu.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-input.mjs +1 -2
- package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-nested-list.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-nested-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-notification.mjs +3 -1
- package/fesm2022/fundamental-ngx-core-notification.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-status.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-object-status.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-popover.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-segmented-button.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-shellbar.mjs +32 -5
- package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-table.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-theming.mjs +2 -3
- package/fesm2022/fundamental-ngx-core-theming.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-time-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-user-menu.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-user-menu.mjs.map +1 -1
- package/form/index.d.ts +2 -2
- package/input-group/index.d.ts +1 -1
- package/list/index.d.ts +4 -4
- package/menu/index.d.ts +2 -2
- package/message-box/index.d.ts +1 -1
- package/multi-combobox/index.d.ts +2 -2
- package/multi-input/index.d.ts +1 -1
- package/nested-list/index.d.ts +11 -11
- package/notification/index.d.ts +2 -0
- package/overflow-layout/index.d.ts +4 -4
- package/package.json +45 -45
- package/popover/index.d.ts +2 -2
- package/segmented-button/index.d.ts +3 -3
- package/shellbar/index.d.ts +13 -2
- package/table/index.d.ts +2 -2
- package/tabs/index.d.ts +3 -3
- package/time/index.d.ts +1 -1
- package/time-picker/index.d.ts +1 -1
- package/toolbar/index.d.ts +1 -1
- package/tree/index.d.ts +3 -3
- package/schematics/add-animations/index.d.ts +0 -7
- package/schematics/add-animations/index.js +0 -83
- package/schematics/add-animations/index.js.map +0 -1
- package/schematics/add-animations/schema.json +0 -21
- package/schematics/add-dependencies/index.d.ts +0 -7
- package/schematics/add-dependencies/index.js +0 -105
- package/schematics/add-dependencies/index.js.map +0 -1
- package/schematics/add-dependencies/schema.json +0 -15
- package/schematics/add-styles/index.d.ts +0 -7
- package/schematics/add-styles/index.js +0 -97
- package/schematics/add-styles/index.js.map +0 -1
- package/schematics/add-styles/schema.json +0 -21
- package/schematics/add-theming/index.d.ts +0 -7
- package/schematics/add-theming/index.js +0 -108
- package/schematics/add-theming/index.js.map +0 -1
- package/schematics/add-theming/schema.json +0 -72
- package/schematics/collection.json +0 -40
- package/schematics/models/schema.d.ts +0 -6
- package/schematics/models/schema.js +0 -3
- package/schematics/models/schema.js.map +0 -1
- package/schematics/ng-add/index.d.ts +0 -9
- package/schematics/ng-add/index.js +0 -30
- package/schematics/ng-add/index.js.map +0 -1
- package/schematics/ng-add/schema.json +0 -84
- package/schematics/utils/calls-providers-function.d.ts +0 -11
- package/schematics/utils/calls-providers-function.js +0 -54
- package/schematics/utils/calls-providers-function.js.map +0 -1
- package/schematics/utils/file-utils.d.ts +0 -2
- package/schematics/utils/file-utils.js +0 -26
- package/schematics/utils/file-utils.js.map +0 -1
- package/schematics/utils/main-ts-file-path.d.ts +0 -2
- package/schematics/utils/main-ts-file-path.js +0 -27
- package/schematics/utils/main-ts-file-path.js.map +0 -1
- package/schematics/utils/ng-module-utils.d.ts +0 -6
- package/schematics/utils/ng-module-utils.js +0 -71
- package/schematics/utils/ng-module-utils.js.map +0 -1
- package/schematics/utils/one-time-packages.d.ts +0 -6
- package/schematics/utils/one-time-packages.js +0 -39
- package/schematics/utils/one-time-packages.js.map +0 -1
- package/schematics/utils/package-utils.d.ts +0 -10
- package/schematics/utils/package-utils.js +0 -25
- package/schematics/utils/package-utils.js.map +0 -1
- package/schematics/utils/workspace.d.ts +0 -40
- package/schematics/utils/workspace.js +0 -110
- package/schematics/utils/workspace.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-core-resizable-card-layout.mjs","sources":["../tmp-esm2022/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.js","../tmp-esm2022/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.js","../tmp-esm2022/resizable-card-layout/resizable-card-layout.module.js","../tmp-esm2022/resizable-card-layout/fundamental-ngx-core-resizable-card-layout.js"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Optional, Output, ViewEncapsulation } from '@angular/core';\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\nimport { Subscription } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/cdk/utils\";\n// Card resizes in step of fixed values. values are in pixel\nexport const horizontalResizeStep = 320;\n// vertical resize step\nexport const verticalResizeStep = 16;\n// gap of 1rem between the cards\nexport const gap = 16;\n// threshold offset for horizontal resizing.\nexport const horizontalResizeOffset = 160;\n// threshold offset for vertical resizing.\nexport const verticalResizeOffset = 8;\n// card is given numeric value, on which sorting of cards is done\nlet cardRank = 1;\nlet cardUniqueId = 0;\nexport class ResizableCardItemComponent {\n /** Card properties from the config */\n set config(config) {\n this._config = config;\n this._initialSetup();\n this._cd.detectChanges();\n }\n get config() {\n return this._config;\n }\n /**\n * Serial order of card.\n * cards are sorted based on ranks before displaying layout.\n * card with lower rank will be displayed first in layout than the card with higher rank.\n */\n set rank(rankValue) {\n // determine max value between user given value and default value\n this._rank = rankValue ? rankValue : cardRank++;\n if (rankValue > cardRank) {\n cardRank = rankValue;\n }\n }\n get rank() {\n return this._rank;\n }\n /**\n * Number of column span card width takes.\n * It will be in step of 20rem.\n */\n set cardWidthColSpan(colSpan) {\n this._cardWidthColSpan = colSpan;\n this._setCardWidth();\n }\n get cardWidthColSpan() {\n return this._cardWidthColSpan;\n }\n /**\n * Number of row span, card height takes.\n * It will be in the step of 1rem.\n */\n set cardHeightRowSpan(rowSpan) {\n this._cardHeightRowSpan = rowSpan;\n this._setCardHeight();\n }\n get cardHeightRowSpan() {\n return this._cardHeightRowSpan;\n }\n /**\n * Number of row span card mini header height takes.\n * Mini Header: The smallest representation of the card is the header.\n * The card can be collapsed to only its header height.\n */\n set cardMiniHeaderRowSpan(rowSpan) {\n this._cardMiniHeaderRowSpan = rowSpan;\n this._setCardMiniHeaderHeight();\n }\n get cardMiniHeaderRowSpan() {\n return this._cardMiniHeaderRowSpan;\n }\n /**\n * Number of row span card mini content height takes.\n * Mini Content: The minimum height for the card content depends on the card type,\n * and must be as high as the smallest representation of the content.\n */\n set cardMiniContentRowSpan(rowSpan) {\n this._cardMiniContentRowSpan = rowSpan;\n this._setCardMiniContentHeight();\n }\n get cardMiniContentRowSpan() {\n return this._cardMiniContentRowSpan ?? 0;\n }\n /** @hidden */\n constructor(_cd, elementRef, _rtlService) {\n this._cd = _cd;\n this.elementRef = elementRef;\n this._rtlService = _rtlService;\n /** set uinque id for the card */\n this.itemId = `fd-card-item-${cardUniqueId++}`;\n /** Card can be set to resizable=false, to restrict card resize */\n this.resizable = true;\n /** Set top position for the card*/\n this.top = 0;\n /** @hidden while resizing this value will change to a greater value */\n this.zIndex = 0;\n /** @hidden */\n this.position = 'absolute';\n /** @hidden transition animation when layout re-draws */\n this.reDrawAnimation = true;\n /** Emits when card is still resizing */\n this.resizing = new EventEmitter();\n /** Emits when card resize is completed */\n this.resized = new EventEmitter();\n /** Emits when card height is reduced to show only header */\n this.miniHeaderReached = new EventEmitter();\n /** Emits when minimum height of card content area is reached */\n this.miniContentReached = new EventEmitter();\n /** show corner resize icon on hover over card */\n this.showingResizeIcon = false;\n /** show border when card is resizing */\n this.showBorder = false;\n /** card width in px. Default value to 20rem */\n this.cardWidth = horizontalResizeStep;\n /** Outer resize indication border width for the card */\n this.resizeIndicationBorderWidth = 0;\n /**\n * Denotes if card is currently expanding or contracting horizontally.\n * +1 denotes increasing, -1 denotes decreasing and 0 denotes card-state has not changed horizontally.\n */\n this.cardState = 0;\n /** Change in rank from previous value*/\n this.prevRank = 0;\n /** @hidden Default width of card is 20rem ie. 1 column */\n this._cardWidthColSpan = 1;\n /** @hidden flag to control resize */\n this._resize = false;\n /**\n * @hidden stores original width span of card.\n * It may reduce on small screen, so have to restore using this.\n */\n this._originalCardWidthSpan = 0;\n /** @hidden */\n this._subscriptions = new Subscription();\n }\n /**\n * @hidden When mouse moves to resize the card.\n * using window:mousemove so, resize will happen smoothly\n * @param event {MouseEvent}\n */\n onMouseMove(event) {\n event.preventDefault();\n if (!this.resizable) {\n return;\n }\n // saves from un-necessary resize\n if (!this._resize) {\n return;\n }\n if (!this.showBorder) {\n this.showBorder = true;\n }\n // resizing card will go over other cards\n this.zIndex = 1;\n const { clientX, clientY } = event;\n switch (this._resizeDirection) {\n case 'both':\n this._horizontalResizing(clientX);\n this._verticalResizing(clientY);\n break;\n case 'horizontal':\n this._horizontalResizing(clientX);\n break;\n case 'vertical':\n this._verticalResizing(clientY);\n break;\n default:\n this._horizontalResizing(clientX);\n this._verticalResizing(clientY);\n }\n const cardWidthColSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n const cardWidthWithColumn = cardWidthColSpan * horizontalResizeStep + cardWidthColSpan * gap;\n const horizontalResizeThresholdReached = this.cardWidth - cardWidthWithColumn > horizontalResizeOffset;\n if (clientX > this._prevX) {\n // increasing width\n this.cardState = 1;\n if (horizontalResizeThresholdReached) {\n const futureCardWidth = (cardWidthColSpan + 1) * horizontalResizeStep + cardWidthColSpan * gap;\n this.resizeIndicationBorderWidth = futureCardWidth - this.cardWidth;\n }\n else {\n this.resizeIndicationBorderWidth = 0;\n }\n }\n else if (clientX < this._prevX) {\n // decreasing width\n this.cardState = -1;\n if (horizontalResizeThresholdReached) {\n const futureCardWidth = (cardWidthColSpan + 1) * horizontalResizeStep + cardWidthColSpan * gap;\n this.resizeIndicationBorderWidth = futureCardWidth - this.cardWidth;\n }\n else {\n this.resizeIndicationBorderWidth = 0;\n }\n }\n this._prevX = clientX;\n this._prevY = clientY;\n this._cd.detectChanges();\n // Emits resizing event.\n this.resizing.emit(this.getResizedEventObject());\n }\n /**\n * when resizing of card stops\n */\n onMouseUp() {\n if (!this.resizable) {\n return;\n }\n // if card was not resizing\n if (!this._resize) {\n return;\n }\n // increase/decrease width of card in order of 20rem\n if (Math.abs(this.cardWidth - this._prevCardWidth) > 0) {\n this._horizontalStepResizing();\n }\n // increase/decrease height of card in order of 1rem\n if (Math.abs(this.cardHeight - this._prevCardHeight) > 0) {\n this._verticalStepResizing();\n }\n this._stopResizing();\n this._cd.markForCheck();\n }\n /** @hidden */\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n }\n /**\n * When resize handler is pressed and resizing may start.\n * @param event {MouseEvent}\n * @param resizeDirection which handler is pressed to resize\n */\n onMouseDown(event, resizeDirection) {\n event.preventDefault();\n if (!this.resizable) {\n return;\n }\n this.showingResizeIcon = true;\n this._resize = true;\n this._prevX = event.clientX;\n this._prevY = event.clientY;\n this._prevCardWidth = this.cardWidth;\n this._prevCardHeight = this.cardHeight;\n this._resizeDirection = resizeDirection;\n }\n /** Sets focus on the element */\n focus() {\n const header = this.elementRef.nativeElement.querySelector('.fd-card__header');\n header?.focus();\n }\n /** Shows resize icon */\n showResizeIcon() {\n if (!this.resizable) {\n return;\n }\n this.showingResizeIcon = true;\n }\n /** Hides resize icon */\n hideResizeIcon() {\n if (!this._resize) {\n this.showingResizeIcon = false;\n }\n }\n /** Returns max width for card, based on layout size passed */\n getMaxColSpan(layoutSize) {\n switch (layoutSize) {\n case 'sm':\n this._maxColumn = 1;\n break;\n case 'md':\n this._maxColumn = 2;\n break;\n case 'lg':\n this._maxColumn = 3;\n break;\n case 'xl':\n this._maxColumn = 4;\n break;\n default:\n this._maxColumn = 1;\n }\n return this._maxColumn;\n }\n /** Update card width if it exceeds column span based on layout */\n verifyUpdateCardWidth(layoutSize) {\n const widthColSpan = this._config?.cardWidthColSpan || this.cardWidthColSpan;\n // storing original width of card.\n // used to restore width on window resize from small to large\n this._originalCardWidthSpan = !this._originalCardWidthSpan ? widthColSpan : this._originalCardWidthSpan;\n this._maxColumn = this.getMaxColSpan(layoutSize);\n if (widthColSpan > this._maxColumn) {\n this.cardWidthColSpan = this._maxColumn;\n this._setCardWidth();\n // Emits resized event.\n this.resized.emit(this.getResizedEventObject());\n }\n else {\n // keep card width minimum, so it can fit in screen.\n this.cardWidthColSpan = Math.min(this._maxColumn, this._originalCardWidthSpan);\n this._setCardWidth();\n // Emits resized event.\n this.resized.emit(this.getResizedEventObject());\n }\n }\n /** Returns ResizedEvent object to emit. */\n getResizedEventObject() {\n const newCardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n const newCardWidthColSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n const newCardWidth = newCardWidthColSpan * horizontalResizeStep + newCardWidthColSpan * gap;\n const horizontalResizeThresholdReached = this.cardWidth - newCardWidth > horizontalResizeOffset;\n const newCardColSpan = horizontalResizeThresholdReached ? newCardWidthColSpan + 1 : newCardWidthColSpan;\n return new ResizedEvent(this, this._prevCardWidth, this._prevCardHeight, this.cardWidth, this.cardHeight, this._cardWidthColSpan, this._cardHeightRowSpan, newCardColSpan, newCardHeightRowSpan);\n }\n /** @hidden Return previous height row span of the card */\n get previousCardHeightRowSpan() {\n return this._prevCardHeightRowSpan;\n }\n /** @hidden Set card properties using config received */\n _initialSetup() {\n this.cardWidthColSpan = this._config?.cardWidthColSpan || this.cardWidthColSpan;\n this.cardHeightRowSpan = this._config?.cardHeightRowSpan || this.cardHeightRowSpan;\n this.title = this._config?.title || this.title;\n this.rank = this._config?.rank || this.rank;\n this.cardMiniHeaderRowSpan = this._config?.cardMiniHeaderRowSpan || this.cardMiniHeaderRowSpan;\n this.cardMiniContentRowSpan = this._config?.cardMiniContentRowSpan || this.cardMiniContentRowSpan;\n this.resizable = this._config.resizable || this.resizable;\n }\n /** @hidden Returns true when resize offset is crossed */\n _horizontalResizeWithOffset() {\n // positive value indicates that width has increased\n const widthIncrement = this.cardWidth - this._prevCardWidth;\n const cardSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n const cardSpanFraction = this.cardWidth % horizontalResizeStep;\n // when width increases\n if (widthIncrement > 0) {\n if (widthIncrement < horizontalResizeOffset + gap) {\n // widthIncrement is less than offset, do not increase width\n this.cardWidth = this._prevCardWidth;\n }\n else {\n // check value of cardSpanFraction, including gaps in cards\n const isCardSpanFractionCrossingOffset = cardSpanFraction - (cardSpan - 1) * gap > horizontalResizeOffset;\n this.cardWidth = isCardSpanFractionCrossingOffset\n ? (cardSpan + 1) * horizontalResizeStep\n : cardSpan * horizontalResizeStep;\n }\n }\n else {\n // when width decreases\n if (Math.abs(widthIncrement) < horizontalResizeOffset) {\n // widthIncrement is less than offset, do not decrease width\n this.cardWidth = this._prevCardWidth;\n }\n else {\n // check value of cardSpanFraction, including gaps in cards\n const isCardSpanFractionCrossingOffset = cardSpanFraction - cardSpan * gap > horizontalResizeOffset;\n this.cardWidth = isCardSpanFractionCrossingOffset\n ? (cardSpan + 1) * horizontalResizeStep\n : cardSpan * horizontalResizeStep;\n }\n }\n }\n /**\n * @hidden make horizontal resize only on step of 20rem\n */\n _horizontalStepResizing() {\n this._horizontalResizeWithOffset();\n // Add inner gap in cardWidth if width is more than 1 column\n if (this.cardWidth > horizontalResizeStep) {\n this.cardWidth = this.cardWidth + (this.cardWidth / horizontalResizeStep - 1) * gap;\n }\n this.cardWidthColSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n }\n /**\n * @hidden make vertical resize only on step of 1rem\n */\n _verticalStepResizing() {\n // positive value indicates that height has increased\n const cardHeightSpan = Math.floor(this.cardHeight / verticalResizeStep);\n const cardSpanFraction = this.cardHeight % verticalResizeStep;\n this.cardHeight =\n cardSpanFraction > verticalResizeOffset\n ? (cardHeightSpan + 1) * verticalResizeStep\n : cardHeightSpan * verticalResizeStep;\n this.cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n }\n /**\n * @hidden Resize card horizontally by checking boundary condition\n * @param xPosition current x-position of cursor\n */\n _horizontalResizing(xPosition) {\n const difference = this._prevX - xPosition;\n this.cardWidth = this._rtlService?.rtlSignal() ? this.cardWidth + difference : this.cardWidth - difference;\n const totalIndentation = (this._maxColumn - 1) * gap;\n const maxCardWidtWithoutIndentation = this._maxColumn * horizontalResizeStep;\n const maxCardWidth = this._rtlService?.rtlSignal()\n ? maxCardWidtWithoutIndentation - totalIndentation\n : maxCardWidtWithoutIndentation + totalIndentation;\n if (this.cardWidth > maxCardWidth) {\n this.cardWidth = maxCardWidth;\n }\n else if (this.cardWidth < horizontalResizeStep) {\n this.cardWidth = horizontalResizeStep;\n }\n }\n /**\n * @hidden Resize card vertically.\n * takes care of mini-header height and mini-content height\n * @param yPosition current y-position of cursor\n */\n _verticalResizing(yPosition) {\n let reachingMiniHeader = false;\n if (this.cardHeight === this.cardMiniHeaderHeight) {\n // if card height is already at mini-header height\n if (this._prevY - yPosition > 0) {\n // decreasing height\n // if miniHeader height reached, stop resizing\n this.cardHeight = this.cardMiniHeaderHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n }\n else {\n // increasing height\n this.cardHeight = this.cardMiniHeaderHeight + this.cardMiniContentHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n this._stopResizing();\n this.miniContentReached.emit(this.getResizedEventObject());\n }\n }\n else if (this.cardHeight < this.cardMiniContentHeight + this.cardMiniHeaderHeight) {\n // if card height is between mini-header and mini-content\n if (this._prevY - yPosition < 0) {\n this.cardHeight = this.cardMiniHeaderHeight + this.cardMiniContentHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n this._stopResizing();\n this.miniContentReached.emit(this.getResizedEventObject());\n }\n }\n else if (this.cardHeight === this.cardMiniContentHeight + this.cardMiniHeaderHeight &&\n this._prevY - yPosition > 0) {\n // decreasing height\n // height decreasing after reaching mini-content. this needs to differentiate\n // from height decreasing and reaching to mini-content.\n reachingMiniHeader = true;\n this.cardHeight = this.cardMiniHeaderHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n // miniHeader height reached, stop resizing\n this._stopResizing();\n this.miniHeaderReached.emit(this.getResizedEventObject());\n }\n else {\n this.cardHeight = this.cardHeight - (this._prevY - yPosition);\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n }\n // stop resizing on miniContent height\n if (this.cardHeight <= this.cardMiniContentHeight + this.cardMiniHeaderHeight &&\n this._prevY - yPosition > 0 &&\n !reachingMiniHeader) {\n this.cardHeight = this.cardMiniContentHeight + this.cardMiniHeaderHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n this.miniContentReached.emit(this.getResizedEventObject());\n this._stopResizing();\n }\n // while corner resize, width might have increased and reached to mini-content height.\n // so, on mini-content resize will stop, but have to do step resizing for vertical and horizontal.\n if (!this._resize) {\n // increase/decrease width of card in order of 20rem\n if (Math.abs(this.cardWidth - this._prevCardWidth) > 0) {\n this._horizontalStepResizing();\n }\n // increase/decrease height of card in order of 1rem\n if (Math.abs(this.cardHeight - this._prevCardHeight) > 0) {\n this._verticalStepResizing();\n }\n }\n }\n /** @hidden reset involved variables while resizing */\n _stopResizing() {\n if (this._resize) {\n this.cardState = 0;\n this.resizeIndicationBorderWidth = 0;\n this._resize = false;\n this.zIndex = 0;\n this.showBorder = false;\n this.resized.emit(this.getResizedEventObject());\n }\n }\n /** @hidden Returns cardWidth based on card column span */\n _setCardWidth() {\n this.cardWidth = this._cardWidthColSpan * horizontalResizeStep + (this._cardWidthColSpan - 1) * gap;\n this._cd.markForCheck();\n }\n /** @hidden Returns cardHeight based on card row span */\n _setCardHeight() {\n this.cardHeight = this._cardHeightRowSpan * verticalResizeStep;\n this._cd.markForCheck();\n }\n /** @hidden Returns card mini header height */\n _setCardMiniHeaderHeight() {\n this.cardMiniHeaderHeight = this._cardMiniHeaderRowSpan * verticalResizeStep;\n this._cd.markForCheck();\n }\n /** @hidden Returns card mini content height */\n _setCardMiniContentHeight() {\n this.cardMiniContentHeight = this.cardMiniContentRowSpan * verticalResizeStep;\n this._cd.markForCheck();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardItemComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: ResizableCardItemComponent, isStandalone: true, selector: \"fd-resizable-card-item\", inputs: { config: \"config\", itemId: \"itemId\", title: \"title\", rank: \"rank\", cardWidthColSpan: \"cardWidthColSpan\", cardHeightRowSpan: \"cardHeightRowSpan\", cardMiniHeaderRowSpan: \"cardMiniHeaderRowSpan\", cardMiniContentRowSpan: \"cardMiniContentRowSpan\", resizable: \"resizable\", left: \"left\", right: \"right\", top: \"top\" }, outputs: { resizing: \"resizing\", resized: \"resized\", miniHeaderReached: \"miniHeaderReached\", miniContentReached: \"miniContentReached\" }, host: { listeners: { \"window:mousemove\": \"onMouseMove($event)\", \"document:mouseup\": \"onMouseUp($event)\" }, properties: { \"style.left.px\": \"this.left\", \"style.right.px\": \"this.right\", \"style.top.px\": \"this.top\", \"style.z-index\": \"this.zIndex\", \"style.position\": \"this.position\", \"class.fd-resizable-card-layout__draw-transition\": \"this.reDrawAnimation\" } }, ngImport: i0, template: \"<div\\n class=\\\"fd-resizable-card-layout__item\\\"\\n [class.fd-resizable-card-layout__indication-border]=\\\"showBorder\\\"\\n #resizeCard\\n>\\n <div\\n class=\\\"fd-resizable-card-layout__item--border-display fd-resizable-card-layout__item--resize-transition\\\"\\n [style.width.px]=\\\"cardWidth\\\"\\n [style.height.px]=\\\"cardHeight\\\"\\n (mouseenter)=\\\"showResizeIcon()\\\"\\n (mouseleave)=\\\"hideResizeIcon()\\\"\\n >\\n <div class=\\\"fd-resizable-card-layout__card\\\">\\n <ng-content></ng-content>\\n @if (showingResizeIcon) {\\n <div class=\\\"fd-resizable-card-layout__icon-wrapper\\\" role=\\\"presentation\\\" aria-hidden=\\\"true\\\">\\n <div\\n class=\\\"fd-resizable-card-layout__icon\\\"\\n #cornerHandle\\n (mousedown)=\\\"onMouseDown($event, 'both')\\\"\\n ></div>\\n </div>\\n }\\n </div>\\n @if (resizable) {\\n <ng-template [ngTemplateOutlet]=\\\"verticalHandleTemplate\\\"></ng-template>\\n <ng-template [ngTemplateOutlet]=\\\"horizontalHandleTemplate\\\"></ng-template>\\n }\\n </div>\\n <div\\n class=\\\"fd-resizable-card-layout__item--resize-transition\\\"\\n [style.width.px]=\\\"resizeIndicationBorderWidth\\\"\\n [style.height.px]=\\\"cardHeight\\\"\\n ></div>\\n</div>\\n<ng-template #verticalHandleTemplate>\\n <div\\n #verticalHandle\\n class=\\\"fd-resizable-card-layout__resize--vertical\\\"\\n (mousedown)=\\\"onMouseDown($event, 'horizontal')\\\"\\n ></div>\\n</ng-template>\\n<ng-template #horizontalHandleTemplate>\\n <div\\n #horizontalHandle\\n class=\\\"fd-resizable-card-layout__resize--horizontal\\\"\\n (mousedown)=\\\"onMouseDown($event, 'vertical')\\\"\\n ></div>\\n</ng-template>\\n\", styles: [\".fd-resizable-card-layout{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;margin-top:1rem;padding-block:0;padding-inline:0;padding-inline:.5rem;position:relative}.fd-resizable-card-layout:after,.fd-resizable-card-layout:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-width:20rem;position:relative}.fd-resizable-card-layout__item:after,.fd-resizable-card-layout__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__card{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;-webkit-box-flex:1;-ms-flex:1;flex:1;height:calc(100% - .0625rem);position:relative}.fd-resizable-card-layout__card:after,.fd-resizable-card-layout__card:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1.5rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1.5rem;padding-block:0;padding-inline:0;width:1.5rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;bottom:-.35rem;justify-content:flex-start;position:absolute;right:0;z-index:2}.fd-resizable-card-layout__icon-wrapper:after,.fd-resizable-card-layout__icon-wrapper:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon-wrapper{bottom:-.125rem;left:-.25rem;right:auto}.fd-resizable-card-layout__icon{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1rem;padding-block:0;padding-inline:0;width:1rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--sapButton_Lite_TextColor);cursor:nwse-resize;font-family:SAP-icons;font-size:1rem;height:100%;line-height:1rem;position:absolute;width:100%;z-index:2}.fd-resizable-card-layout__icon:after,.fd-resizable-card-layout__icon:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon:before{content:\\\"\\\\e24f\\\";font-family:SAP-icons;height:100%;text-align:center;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;width:100%}.fd-resizable-card-layout__icon[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon{cursor:nesw-resize;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fd-resizable-card-layout__icon--vertical,.fd-resizable-card-layout__icon--vertical[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--vertical{cursor:ns-resize}.fd-resizable-card-layout__icon--horizontal,.fd-resizable-card-layout__icon--horizontal[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--horizontal{cursor:ew-resize}.fd-resizable-card-layout__resize--vertical{-webkit-box-ordinal-group:3;-ms-flex-order:2;cursor:ew-resize;order:2;width:.0625rem;z-index:2}.fd-resizable-card-layout__resize--vertical::content{content:\\\"\\\";position:absolute}.fd-resizable-card-layout__resize--horizontal{bottom:0;cursor:ns-resize;height:.0625rem;position:absolute;width:calc(100% - .5rem);z-index:2}.fd-resizable-card-layout__indication-border{border:0;border:.125rem dashed var(--sapContent_DragAndDropActiveColor);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-resizable-card-layout__indication-border:after,.fd-resizable-card-layout__indication-border:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout--sm{padding-inline:.5rem}.fd-resizable-card-layout--lg,.fd-resizable-card-layout--md{padding-inline:1rem}.fd-resizable-card-layout--xl{padding-inline:3rem}.fd-resizable-card-layout__item--resize-transition{transition-duration:.25s;animation-timing-function:ease-in-out}.fd-resizable-card-layout__draw-transition{transition-duration:.5s;animation-timing-function:ease-in}.fd-resizable-card-layout__item--border-display{display:flex}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/resizable-card-layout.css:\\n (*!\\n * Fundamental Library Styles v0.40.1\\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\\n *)\\n*/\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardItemComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-resizable-card-item', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [NgTemplateOutlet], template: \"<div\\n class=\\\"fd-resizable-card-layout__item\\\"\\n [class.fd-resizable-card-layout__indication-border]=\\\"showBorder\\\"\\n #resizeCard\\n>\\n <div\\n class=\\\"fd-resizable-card-layout__item--border-display fd-resizable-card-layout__item--resize-transition\\\"\\n [style.width.px]=\\\"cardWidth\\\"\\n [style.height.px]=\\\"cardHeight\\\"\\n (mouseenter)=\\\"showResizeIcon()\\\"\\n (mouseleave)=\\\"hideResizeIcon()\\\"\\n >\\n <div class=\\\"fd-resizable-card-layout__card\\\">\\n <ng-content></ng-content>\\n @if (showingResizeIcon) {\\n <div class=\\\"fd-resizable-card-layout__icon-wrapper\\\" role=\\\"presentation\\\" aria-hidden=\\\"true\\\">\\n <div\\n class=\\\"fd-resizable-card-layout__icon\\\"\\n #cornerHandle\\n (mousedown)=\\\"onMouseDown($event, 'both')\\\"\\n ></div>\\n </div>\\n }\\n </div>\\n @if (resizable) {\\n <ng-template [ngTemplateOutlet]=\\\"verticalHandleTemplate\\\"></ng-template>\\n <ng-template [ngTemplateOutlet]=\\\"horizontalHandleTemplate\\\"></ng-template>\\n }\\n </div>\\n <div\\n class=\\\"fd-resizable-card-layout__item--resize-transition\\\"\\n [style.width.px]=\\\"resizeIndicationBorderWidth\\\"\\n [style.height.px]=\\\"cardHeight\\\"\\n ></div>\\n</div>\\n<ng-template #verticalHandleTemplate>\\n <div\\n #verticalHandle\\n class=\\\"fd-resizable-card-layout__resize--vertical\\\"\\n (mousedown)=\\\"onMouseDown($event, 'horizontal')\\\"\\n ></div>\\n</ng-template>\\n<ng-template #horizontalHandleTemplate>\\n <div\\n #horizontalHandle\\n class=\\\"fd-resizable-card-layout__resize--horizontal\\\"\\n (mousedown)=\\\"onMouseDown($event, 'vertical')\\\"\\n ></div>\\n</ng-template>\\n\", styles: [\".fd-resizable-card-layout{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;margin-top:1rem;padding-block:0;padding-inline:0;padding-inline:.5rem;position:relative}.fd-resizable-card-layout:after,.fd-resizable-card-layout:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-width:20rem;position:relative}.fd-resizable-card-layout__item:after,.fd-resizable-card-layout__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__card{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;-webkit-box-flex:1;-ms-flex:1;flex:1;height:calc(100% - .0625rem);position:relative}.fd-resizable-card-layout__card:after,.fd-resizable-card-layout__card:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1.5rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1.5rem;padding-block:0;padding-inline:0;width:1.5rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;bottom:-.35rem;justify-content:flex-start;position:absolute;right:0;z-index:2}.fd-resizable-card-layout__icon-wrapper:after,.fd-resizable-card-layout__icon-wrapper:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon-wrapper{bottom:-.125rem;left:-.25rem;right:auto}.fd-resizable-card-layout__icon{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1rem;padding-block:0;padding-inline:0;width:1rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--sapButton_Lite_TextColor);cursor:nwse-resize;font-family:SAP-icons;font-size:1rem;height:100%;line-height:1rem;position:absolute;width:100%;z-index:2}.fd-resizable-card-layout__icon:after,.fd-resizable-card-layout__icon:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon:before{content:\\\"\\\\e24f\\\";font-family:SAP-icons;height:100%;text-align:center;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;width:100%}.fd-resizable-card-layout__icon[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon{cursor:nesw-resize;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fd-resizable-card-layout__icon--vertical,.fd-resizable-card-layout__icon--vertical[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--vertical{cursor:ns-resize}.fd-resizable-card-layout__icon--horizontal,.fd-resizable-card-layout__icon--horizontal[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--horizontal{cursor:ew-resize}.fd-resizable-card-layout__resize--vertical{-webkit-box-ordinal-group:3;-ms-flex-order:2;cursor:ew-resize;order:2;width:.0625rem;z-index:2}.fd-resizable-card-layout__resize--vertical::content{content:\\\"\\\";position:absolute}.fd-resizable-card-layout__resize--horizontal{bottom:0;cursor:ns-resize;height:.0625rem;position:absolute;width:calc(100% - .5rem);z-index:2}.fd-resizable-card-layout__indication-border{border:0;border:.125rem dashed var(--sapContent_DragAndDropActiveColor);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-resizable-card-layout__indication-border:after,.fd-resizable-card-layout__indication-border:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout--sm{padding-inline:.5rem}.fd-resizable-card-layout--lg,.fd-resizable-card-layout--md{padding-inline:1rem}.fd-resizable-card-layout--xl{padding-inline:3rem}.fd-resizable-card-layout__item--resize-transition{transition-duration:.25s;animation-timing-function:ease-in-out}.fd-resizable-card-layout__draw-transition{transition-duration:.5s;animation-timing-function:ease-in}.fd-resizable-card-layout__item--border-display{display:flex}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/resizable-card-layout.css:\\n (*!\\n * Fundamental Library Styles v0.40.1\\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\\n *)\\n*/\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.RtlService, decorators: [{\n type: Optional\n }] }], propDecorators: { config: [{\n type: Input\n }], itemId: [{\n type: Input\n }], title: [{\n type: Input\n }], rank: [{\n type: Input\n }], cardWidthColSpan: [{\n type: Input\n }], cardHeightRowSpan: [{\n type: Input\n }], cardMiniHeaderRowSpan: [{\n type: Input\n }], cardMiniContentRowSpan: [{\n type: Input\n }], resizable: [{\n type: Input\n }], left: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['style.left.px']\n }], right: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['style.right.px']\n }], top: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['style.top.px']\n }], zIndex: [{\n type: HostBinding,\n args: ['style.z-index']\n }], position: [{\n type: HostBinding,\n args: ['style.position']\n }], reDrawAnimation: [{\n type: HostBinding,\n args: ['class.fd-resizable-card-layout__draw-transition']\n }], resizing: [{\n type: Output\n }], resized: [{\n type: Output\n }], miniHeaderReached: [{\n type: Output\n }], miniContentReached: [{\n type: Output\n }], onMouseMove: [{\n type: HostListener,\n args: ['window:mousemove', ['$event']]\n }], onMouseUp: [{\n type: HostListener,\n args: ['document:mouseup', ['$event']]\n }] } });\n/** Object to emit on resize complete */\nexport class ResizedEvent {\n /**\n * Object to emit on resize complete\n * @param card\n * @param prevCardWidth Previous card width\n * @param prevCardHeight Previous card height\n * @param cardWidth Current card width\n * @param cardHeight Current card height\n * @param cardWidthColSpan Current card width column span\n * @param cardHeightRowSpan Current card height row span\n * @param newCardWidthColSpan New card width column span\n * @param newCardHeightRowSpan New card height row span\n */\n constructor(card, prevCardWidth, prevCardHeight, cardWidth, cardHeight, cardWidthColSpan, cardHeightRowSpan, newCardWidthColSpan, newCardHeightRowSpan) {\n this.card = card;\n this.prevCardWidth = prevCardWidth;\n this.prevCardHeight = prevCardHeight;\n this.cardWidth = cardWidth;\n this.cardHeight = cardHeight;\n this.cardWidthColSpan = cardWidthColSpan;\n this.cardHeightRowSpan = cardHeightRowSpan;\n this.newCardWidthColSpan = newCardWidthColSpan;\n this.newCardHeightRowSpan = newCardHeightRowSpan;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLWNhcmQtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvcmVzaXphYmxlLWNhcmQtbGF5b3V0L3Jlc2l6YWJsZS1jYXJkLWxheW91dC9yZXNpemFibGUtY2FyZC1pdGVtL3Jlc2l6YWJsZS1jYXJkLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3Jlc2l6YWJsZS1jYXJkLWxheW91dC9yZXNpemFibGUtY2FyZC1sYXlvdXQvcmVzaXphYmxlLWNhcmQtaXRlbS9yZXNpemFibGUtY2FyZC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04saUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBWSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFJcEMsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUV4Qyx1QkFBdUI7QUFDdkIsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBRXJDLGdDQUFnQztBQUNoQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBRXRCLDRDQUE0QztBQUM1QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUFFMUMsMENBQTBDO0FBQzFDLE1BQU0sQ0FBQyxN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Ozs7Ozs7Ozs7T0FXRztJQUNILFlBQ1csSUFBZ0MsRUFDaEMsYUFBcUIsRUFDckIsY0FBc0IsRUFDdEIsU0FBaUIsRUFDakIsVUFBa0IsRUFDbEIsZ0JBQXdCLEVBQ3hCLGlCQUF5QixFQUN6QixtQkFBMkIsRUFDM0Isb0JBQTRCO1FBUjVCLFNBQUksR0FBSixJQUFJLENBQTRCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFRO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUNsQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQVE7UUFDeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFRO1FBQ3pCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBUTtRQUMzQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQVE7SUFDcEMsQ0FBQztDQUNQIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNhYmxlT3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE51bGxhYmxlLCBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIFJlc2l6ZURpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcgfCAnYm90aCc7XG5cbi8vIENhcmQgcmVzaXplcyBpbiBzdGVwIG9mIGZpeGVkIHZhbHVlcy4gdmFsdWVzIGFyZSBpbiBwaXhlbFxuZXhwb3J0IGNvbnN0IGhvcml6b250YWxSZXNpemVTdGVwID0gMzIwO1xuXG4vLyB2ZXJ0aWNhbCByZXNpemUgc3RlcFxuZXhwb3J0IGNvbnN0IHZlcnRpY2FsUmVzaXplU3RlcCA9IDE2O1xuXG4vLyBnYXAgb2YgMXJlbSBiZXR3ZWVuIHRoZSBjYXJkc1xuZXhwb3J0IGNvbnN0IGdhcCA9IDE2O1xuXG4vLyB0aHJlc2hvbGQgb2Zmc2V0IGZvciBob3Jpem9udGFsIHJlc2l6aW5nLlxuZXhwb3J0IGNvbnN0IGhvcml6b250YWxSZXNpemVPZmZzZXQgPSAxNjA7XG5cbi8vIHRocmVzaG9sZCBvZmZzZXQgZm9yIHZlcnRpY2FsIHJlc2l6aW5nLlxuZXhwb3J0IGNvbnN0IHZlcnRpY2FsUmVzaXplT2Zmc2V0ID0gODtcblxuLy8gc3RhdGUgb2YgY2FyZC4gSW5jcmVhc2luZyB3aWR0aCwgbm8gY2hhbmdlIG9yIGRlY3JlYXNpbmcgd2lkdGguXG5leHBvcnQgdHlwZSBDYXJkU3RhdGUgPSAxIHwgMCB8IC0xO1xuXG4vLyBjYXJkIGlzIGdpdmVuIG51bWVyaWMgdmFsdWUsIG9uIHdoaWNoIHNvcnRpbmcgb2YgY2FyZHMgaXMgZG9uZVxubGV0IGNhcmRSYW5rID0gMTtcbmxldCBjYXJkVW5pcXVlSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXJlc2l6YWJsZS1jYXJkLWl0ZW0nLFxuICAgIHRlbXBsYXRlVXJsOiAncmVzaXphYmxlLWNhcmQtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3Jlc2l6YWJsZS1jYXJkLWl0ZW0uY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaW1wb3J0czogW05nVGVtcGxhdGVPdXRsZXRdXG59KVxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgRm9jdXNhYmxlT3B0aW9uLCBPbkRlc3Ryb3kge1xuICAgIC8qKiBDYXJkIHByb3BlcnRpZXMgZnJvbSB0aGUgY29uZmlnICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY29uZmlnKGNvbmZpZzogUmVzaXphYmxlQ2FyZEl0ZW1Db25maWcpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICAgICAgICB0aGlzLl9pbml0aWFsU2V0dXAoKTtcbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICBnZXQgY29uZmlnKCk6IFJlc2l6YWJsZUNhcmRJdGVtQ29uZmlnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgICB9XG5cbiAgICAvKiogc2V0IHVpbnF1ZSBpZCBmb3IgdGhlIGNhcmQgKi9cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1JZCA9IGBmZC1jYXJkLWl0ZW0tJHtjYXJkVW5pcXVlSWQrK31gO1xuXG4gICAgLyoqIHNldCB0aXRsZSBvZiB0aGUgY2FyZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNlcmlhbCBvcmRlciBvZiBjYXJkLlxuICAgICAqIGNhcmRzIGFyZSBzb3J0ZWQgYmFzZWQgb24gcmFua3MgYmVmb3JlIGRpc3BsYXlpbmcgbGF5b3V0LlxuICAgICAqIGNhcmQgd2l0aCBsb3dlciByYW5rIHdpbGwgYmUgZGlzcGxheWVkIGZpcnN0IGluIGxheW91dCB0aGFuIHRoZSBjYXJkIHdpdGggaGlnaGVyIHJhbmsuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcmFuayhyYW5rVmFsdWU6IG51bWJlcikge1xuICAgICAgICAvLyBkZXRlcm1pbmUgbWF4IHZhbHVlIGJldHdlZW4gdXNlciBnaXZlbiB2YWx1ZSBhbmQgZGVmYXVsdCB2YWx1ZVxuICAgICAgICB0aGlzLl9yYW5rID0gcmFua1ZhbHVlID8gcmFua1ZhbHVlIDogY2FyZFJhbmsrKztcbiAgICAgICAgaWYgKHJhbmtWYWx1ZSA+IGNhcmRSYW5rKSB7XG4gICAgICAgICAgICBjYXJkUmFuayA9IHJhbmtWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgcmFuaygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmFuaztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgY29sdW1uIHNwYW4gY2FyZCB3aWR0aCB0YWtlcy5cbiAgICAgKiBJdCB3aWxsIGJlIGluIHN0ZXAgb2YgMjByZW0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY2FyZFdpZHRoQ29sU3Bhbihjb2xTcGFuOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY2FyZFdpZHRoQ29sU3BhbiA9IGNvbFNwYW47XG4gICAgICAgIHRoaXMuX3NldENhcmRXaWR0aCgpO1xuICAgIH1cbiAgICBnZXQgY2FyZFdpZHRoQ29sU3BhbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FyZFdpZHRoQ29sU3BhbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2Ygcm93IHNwYW4sIGNhcmQgaGVpZ2h0IHRha2VzLlxuICAgICAqIEl0IHdpbGwgYmUgaW4gdGhlIHN0ZXAgb2YgMXJlbS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjYXJkSGVpZ2h0Um93U3Bhbihyb3dTcGFuOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY2FyZEhlaWdodFJvd1NwYW4gPSByb3dTcGFuO1xuICAgICAgICB0aGlzLl9zZXRDYXJkSGVpZ2h0KCk7XG4gICAgfVxuICAgIGdldCBjYXJkSGVpZ2h0Um93U3BhbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FyZEhlaWdodFJvd1NwYW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHJvdyBzcGFuIGNhcmQgbWluaSBoZWFkZXIgaGVpZ2h0IHRha2VzLlxuICAgICAqIE1pbmkgSGVhZGVyOiBUaGUgc21hbGxlc3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNhcmQgaXMgdGhlIGhlYWRlci5cbiAgICAgKiBUaGUgY2FyZCBjYW4gYmUgY29sbGFwc2VkIHRvIG9ubHkgaXRzIGhlYWRlciBoZWlnaHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY2FyZE1pbmlIZWFkZXJSb3dTcGFuKHJvd1NwYW46IG51bWJlcikge1xuICAgICAgICB0aGlzLl9jYXJkTWluaUhlYWRlclJvd1NwYW4gPSByb3dTcGFuO1xuICAgICAgICB0aGlzLl9zZXRDYXJkTWluaUhlYWRlckhlaWdodCgpO1xuICAgIH1cbiAgICBnZXQgY2FyZE1pbmlIZWFkZXJSb3dTcGFuKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJkTWluaUhlYWRlclJvd1NwYW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHJvdyBzcGFuIGNhcmQgbWluaSBjb250ZW50IGhlaWdodCB0YWtlcy5cbiAgICAgKiBNaW5pIENvbnRlbnQ6IFRoZSBtaW5pbXVtIGhlaWdodCBmb3IgdGhlIGNhcmQgY29udGVudCBkZXBlbmRzIG9uIHRoZSBjYXJkIHR5cGUsXG4gICAgICogYW5kIG11c3QgYmUgYXMgaGlnaCBhcyB0aGUgc21hbGxlc3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRlbnQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY2FyZE1pbmlDb250ZW50Um93U3Bhbihyb3dTcGFuOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY2FyZE1pbmlDb250ZW50Um93U3BhbiA9IHJvd1NwYW47XG4gICAgICAgIHRoaXMuX3NldENhcmRNaW5pQ29udGVudEhlaWdodCgpO1xuICAgIH1cbiAgICBnZXQgY2FyZE1pbmlDb250ZW50Um93U3BhbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FyZE1pbmlDb250ZW50Um93U3BhbiA/PyAwO1xuICAgIH1cblxuICAgIC8qKiBDYXJkIGNhbiBiZSBzZXQgdG8gcmVzaXphYmxlPWZhbHNlLCB0byByZXN0cmljdCBjYXJkIHJlc2l6ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVzaXphYmxlID0gdHJ1ZTtcblxuICAgIC8qKiBTZXQgbGVmdCBwb3NpdGlvbiBmb3IgdGhlIGNhcmQgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUubGVmdC5weCcpXG4gICAgbGVmdDogTnVsbGFibGU8bnVtYmVyPjtcblxuICAgIC8qKiBTZXQgcmlnaHQgcG9zaXRpb24gZm9yIHRoZSBjYXJkICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnJpZ2h0LnB4JylcbiAgICByaWdodDogTnVsbGFibGU8bnVtYmVyPjtcblxuICAgIC8qKiBTZXQgdG9wIHBvc2l0aW9uIGZvciB0aGUgY2FyZCovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnRvcC5weCcpXG4gICAgdG9wID0gMDtcblxuICAgIC8qKiBAaGlkZGVuIHdoaWxlIHJlc2l6aW5nIHRoaXMgdmFsdWUgd2lsbCBjaGFuZ2UgdG8gYSBncmVhdGVyIHZhbHVlICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS56LWluZGV4JylcbiAgICB6SW5kZXggPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnBvc2l0aW9uJylcbiAgICBwb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cbiAgICAvKiogQGhpZGRlbiB0cmFuc2l0aW9uIGFuaW1hdGlvbiB3aGVuIGxheW91dCByZS1kcmF3cyAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19kcmF3LXRyYW5zaXRpb24nKVxuICAgIHJlRHJhd0FuaW1hdGlvbiA9IHRydWU7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBjYXJkIGlzIHN0aWxsIHJlc2l6aW5nICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVzaXppbmc6IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBjYXJkIHJlc2l6ZSBpcyBjb21wbGV0ZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZXNpemVkOiBFdmVudEVtaXR0ZXI8UmVzaXplZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVzaXplZEV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXRzIHdoZW4gY2FyZCBoZWlnaHQgaXMgcmVkdWNlZCB0byBzaG93IG9ubHkgaGVhZGVyICovXG4gICAgQE91dHB1dCgpXG4gICAgbWluaUhlYWRlclJlYWNoZWQ6IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBtaW5pbXVtIGhlaWdodCBvZiBjYXJkIGNvbnRlbnQgYXJlYSBpcyByZWFjaGVkICovXG4gICAgQE91dHB1dCgpXG4gICAgbWluaUNvbnRlbnRSZWFjaGVkOiBFdmVudEVtaXR0ZXI8UmVzaXplZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVzaXplZEV2ZW50PigpO1xuXG4gICAgLyoqIHNob3cgY29ybmVyIHJlc2l6ZSBpY29uIG9uIGhvdmVyIG92ZXIgY2FyZCAqL1xuICAgIHNob3dpbmdSZXNpemVJY29uID0gZmFsc2U7XG5cbiAgICAvKiogc2hvdyBib3JkZXIgd2hlbiBjYXJkIGlzIHJlc2l6aW5nICovXG4gICAgc2hvd0JvcmRlciA9IGZhbHNlO1xuXG4gICAgLyoqIHN0YXJ0aW5nIGNvbHVtbiBwb3NpdGlvbiBvZiBjYXJkLiBzdGFydHMgd2l0aCAwICovXG4gICAgc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbjogbnVtYmVyO1xuXG4gICAgLyoqIGNhcmQgd2lkdGggaW4gcHguIERlZmF1bHQgdmFsdWUgdG8gMjByZW0gKi9cbiAgICBjYXJkV2lkdGg6IG51bWJlciA9IGhvcml6b250YWxSZXNpemVTdGVwO1xuXG4gICAgLyoqIGNhcmQgaGVpZ2h0IGluIHB4ICovXG4gICAgY2FyZEhlaWdodDogbnVtYmVyO1xuXG4gICAgLyoqIE1pbmktaGVhZGVyIGhlaWdodCBvZiBjYXJkICovXG4gICAgY2FyZE1pbmlIZWFkZXJIZWlnaHQ6IG51bWJlcjtcblxuICAgIC8qKiBNaW5pLWNvbnRlbnQgaGVpZ2h0IG9mIGNhcmQgdG8gZGlzcGxheSBtaW5pbXVtIHZhbGlkIGNvbnRlbnQgKi9cbiAgICBjYXJkTWluaUNvbnRlbnRIZWlnaHQ6IG51bWJlcjtcblxuICAgIC8qKiBPdXRlciByZXNpemUgaW5kaWNhdGlvbiBib3JkZXIgd2lkdGggZm9yIHRoZSBjYXJkICovXG4gICAgcmVzaXplSW5kaWNhdGlvbkJvcmRlcldpZHRoID0gMDtcblxuICAgIC8qKlxuICAgICAqIERlbm90ZXMgaWYgY2FyZCBpcyBjdXJyZW50bHkgZXhwYW5kaW5nIG9yIGNvbnRyYWN0aW5nIGhvcml6b250YWxseS5cbiAgICAgKiArMSBkZW5vdGVzIGluY3JlYXNpbmcsIC0xIGRlbm90ZXMgZGVjcmVhc2luZyBhbmQgMCBkZW5vdGVzIGNhcmQtc3RhdGUgaGFzIG5vdCBjaGFuZ2VkIGhvcml6b250YWxseS5cbiAgICAgKi9cbiAgICBjYXJkU3RhdGU6IENhcmRTdGF0ZSA9IDA7XG5cbiAgICAvKiogQ2hhbmdlIGluIHJhbmsgZnJvbSBwcmV2aW91cyB2YWx1ZSovXG4gICAgcHJldlJhbmsgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gRGVmYXVsdCB3aWR0aCBvZiBjYXJkIGlzIDIwcmVtIGllLiAxIGNvbHVtbiAqL1xuICAgIHByaXZhdGUgX2NhcmRXaWR0aENvbFNwYW4gPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYXJkSGVpZ2h0Um93U3BhbjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gaGVscHMgaW4gdmVydGljYWwgc3RlcCBjaGFuZ2UgZXZlbnQgZW1pdCAqL1xuICAgIHByaXZhdGUgX3ByZXZDYXJkSGVpZ2h0Um93U3BhbjogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jYXJkTWluaUhlYWRlclJvd1NwYW46IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FyZE1pbmlDb250ZW50Um93U3Bhbj86IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuIGNvbmZpZyB2YWx1ZXMgZm9yIGNhcmQgKi9cbiAgICBwcml2YXRlIF9jb25maWc6IFJlc2l6YWJsZUNhcmRJdGVtQ29uZmlnO1xuXG4gICAgLyoqIEBoaWRkZW4gcHJldmlvdXMgY3Vyc29yIHggcG9zaXRpb24gKi9cbiAgICBwcml2YXRlIF9wcmV2WDogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gcHJldmlvdXMgY3Vyc29yIHkgcG9zaXRpb24gKi9cbiAgICBwcml2YXRlIF9wcmV2WTogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcmV2Q2FyZFdpZHRoOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZXZDYXJkSGVpZ2h0OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiBmbGFnIHRvIGNvbnRyb2wgcmVzaXplICovXG4gICAgcHJpdmF0ZSBfcmVzaXplID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jlc2l6ZURpcmVjdGlvbjogUmVzaXplRGlyZWN0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tYXhDb2x1bW46IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gc3RvcmVzIG9yaWdpbmFsIHdpZHRoIHNwYW4gb2YgY2FyZC5cbiAgICAgKiBJdCBtYXkgcmVkdWNlIG9uIHNtYWxsIHNjcmVlbiwgc28gaGF2ZSB0byByZXN0b3JlIHVzaW5nIHRoaXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb3JpZ2luYWxDYXJkV2lkdGhTcGFuID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmFuazogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge31cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gV2hlbiBtb3VzZSBtb3ZlcyB0byByZXNpemUgdGhlIGNhcmQuXG4gICAgICogdXNpbmcgd2luZG93Om1vdXNlbW92ZSBzbywgcmVzaXplIHdpbGwgaGFwcGVuIHNtb290aGx5XG4gICAgICogQHBhcmFtIGV2ZW50IHtNb3VzZUV2ZW50fVxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptb3VzZW1vdmUnLCBbJyRldmVudCddKVxuICAgIG9uTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICghdGhpcy5yZXNpemFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNhdmVzIGZyb20gdW4tbmVjZXNzYXJ5IHJlc2l6ZVxuICAgICAgICBpZiAoIXRoaXMuX3Jlc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnNob3dCb3JkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0JvcmRlciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXNpemluZyBjYXJkIHdpbGwgZ28gb3ZlciBvdGhlciBjYXJkc1xuICAgICAgICB0aGlzLnpJbmRleCA9IDE7XG5cbiAgICAgICAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBldmVudDtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9yZXNpemVEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ2JvdGgnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2hvcml6b250YWxSZXNpemluZyhjbGllbnRYKTtcbiAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0aWNhbFJlc2l6aW5nKGNsaWVudFkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICAgICAgICAgICAgdGhpcy5faG9yaXpvbnRhbFJlc2l6aW5nKGNsaWVudFgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICAgICAgICAgIHRoaXMuX3ZlcnRpY2FsUmVzaXppbmcoY2xpZW50WSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuX2hvcml6b250YWxSZXNpemluZyhjbGllbnRYKTtcbiAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0aWNhbFJlc2l6aW5nKGNsaWVudFkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2FyZFdpZHRoQ29sU3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkV2lkdGggLyBob3Jpem9udGFsUmVzaXplU3RlcCk7XG4gICAgICAgIGNvbnN0IGNhcmRXaWR0aFdpdGhDb2x1bW4gPSBjYXJkV2lkdGhDb2xTcGFuICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgKyBjYXJkV2lkdGhDb2xTcGFuICogZ2FwO1xuXG4gICAgICAgIGNvbnN0IGhvcml6b250YWxSZXNpemVUaHJlc2hvbGRSZWFjaGVkID0gdGhpcy5jYXJkV2lkdGggLSBjYXJkV2lkdGhXaXRoQ29sdW1uID4gaG9yaXpvbnRhbFJlc2l6ZU9mZnNldDtcblxuICAgICAgICBpZiAoY2xpZW50WCA+IHRoaXMuX3ByZXZYKSB7XG4gICAgICAgICAgICAvLyBpbmNyZWFzaW5nIHdpZHRoXG4gICAgICAgICAgICB0aGlzLmNhcmRTdGF0ZSA9IDE7XG5cbiAgICAgICAgICAgIGlmIChob3Jpem9udGFsUmVzaXplVGhyZXNob2xkUmVhY2hlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1dHVyZUNhcmRXaWR0aCA9IChjYXJkV2lkdGhDb2xTcGFuICsgMSkgKiBob3Jpem9udGFsUmVzaXplU3RlcCArIGNhcmRXaWR0aENvbFNwYW4gKiBnYXA7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVJbmRpY2F0aW9uQm9yZGVyV2lkdGggPSBmdXR1cmVDYXJkV2lkdGggLSB0aGlzLmNhcmRXaWR0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVJbmRpY2F0aW9uQm9yZGVyV2lkdGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNsaWVudFggPCB0aGlzLl9wcmV2WCkge1xuICAgICAgICAgICAgLy8gZGVjcmVhc2luZyB3aWR0aFxuICAgICAgICAgICAgdGhpcy5jYXJkU3RhdGUgPSAtMTtcbiAgICAgICAgICAgIGlmIChob3Jpem9udGFsUmVzaXplVGhyZXNob2xkUmVhY2hlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1dHVyZUNhcmRXaWR0aCA9IChjYXJkV2lkdGhDb2xTcGFuICsgMSkgKiBob3Jpem9udGFsUmVzaXplU3RlcCArIGNhcmRXaWR0aENvbFNwYW4gKiBnYXA7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVJbmRpY2F0aW9uQm9yZGVyV2lkdGggPSBmdXR1cmVDYXJkV2lkdGggLSB0aGlzLmNhcmRXaWR0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVJbmRpY2F0aW9uQm9yZGVyV2lkdGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHJldlggPSBjbGllbnRYO1xuICAgICAgICB0aGlzLl9wcmV2WSA9IGNsaWVudFk7XG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAvLyBFbWl0cyByZXNpemluZyBldmVudC5cbiAgICAgICAgdGhpcy5yZXNpemluZy5lbWl0KHRoaXMuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHdoZW4gcmVzaXppbmcgb2YgY2FyZCBzdG9wc1xuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNldXAnLCBbJyRldmVudCddKVxuICAgIG9uTW91c2VVcCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlc2l6YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIGNhcmQgd2FzIG5vdCByZXNpemluZ1xuICAgICAgICBpZiAoIXRoaXMuX3Jlc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW5jcmVhc2UvZGVjcmVhc2Ugd2lkdGggb2YgY2FyZCBpbiBvcmRlciBvZiAyMHJlbVxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5jYXJkV2lkdGggLSB0aGlzLl9wcmV2Q2FyZFdpZHRoKSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2hvcml6b250YWxTdGVwUmVzaXppbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluY3JlYXNlL2RlY3JlYXNlIGhlaWdodCBvZiBjYXJkIGluIG9yZGVyIG9mIDFyZW1cbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMuY2FyZEhlaWdodCAtIHRoaXMuX3ByZXZDYXJkSGVpZ2h0KSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3ZlcnRpY2FsU3RlcFJlc2l6aW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdG9wUmVzaXppbmcoKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZW4gcmVzaXplIGhhbmRsZXIgaXMgcHJlc3NlZCBhbmQgcmVzaXppbmcgbWF5IHN0YXJ0LlxuICAgICAqIEBwYXJhbSBldmVudCB7TW91c2VFdmVudH1cbiAgICAgKiBAcGFyYW0gcmVzaXplRGlyZWN0aW9uIHdoaWNoIGhhbmRsZXIgaXMgcHJlc3NlZCB0byByZXNpemVcbiAgICAgKi9cbiAgICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCwgcmVzaXplRGlyZWN0aW9uOiBSZXNpemVEaXJlY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCF0aGlzLnJlc2l6YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93aW5nUmVzaXplSWNvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX3ByZXZYID0gZXZlbnQuY2xpZW50WDtcbiAgICAgICAgdGhpcy5fcHJldlkgPSBldmVudC5jbGllbnRZO1xuICAgICAgICB0aGlzLl9wcmV2Q2FyZFdpZHRoID0gdGhpcy5jYXJkV2lkdGg7XG4gICAgICAgIHRoaXMuX3ByZXZDYXJkSGVpZ2h0ID0gdGhpcy5jYXJkSGVpZ2h0O1xuICAgICAgICB0aGlzLl9yZXNpemVEaXJlY3Rpb24gPSByZXNpemVEaXJlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqIFNldHMgZm9jdXMgb24gdGhlIGVsZW1lbnQgKi9cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmZkLWNhcmRfX2hlYWRlcicpO1xuICAgICAgICBoZWFkZXI/LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIFNob3dzIHJlc2l6ZSBpY29uICovXG4gICAgc2hvd1Jlc2l6ZUljb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5yZXNpemFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dpbmdSZXNpemVJY29uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogSGlkZXMgcmVzaXplIGljb24gKi9cbiAgICBoaWRlUmVzaXplSWNvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9yZXNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd2luZ1Jlc2l6ZUljb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIG1heCB3aWR0aCBmb3IgY2FyZCwgYmFzZWQgb24gbGF5b3V0IHNpemUgcGFzc2VkICovXG4gICAgZ2V0TWF4Q29sU3BhbihsYXlvdXRTaXplOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICBzd2l0Y2ggKGxheW91dFNpemUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhDb2x1bW4gPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWQnOlxuICAgICAgICAgICAgICAgIHRoaXMuX21heENvbHVtbiA9IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsZyc6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4Q29sdW1uID0gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3hsJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhDb2x1bW4gPSA0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhDb2x1bW4gPSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhDb2x1bW47XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZSBjYXJkIHdpZHRoIGlmIGl0IGV4Y2VlZHMgY29sdW1uIHNwYW4gYmFzZWQgb24gbGF5b3V0ICovXG4gICAgdmVyaWZ5VXBkYXRlQ2FyZFdpZHRoKGxheW91dFNpemU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB3aWR0aENvbFNwYW4gPSB0aGlzLl9jb25maWc/LmNhcmRXaWR0aENvbFNwYW4gfHwgdGhpcy5jYXJkV2lkdGhDb2xTcGFuO1xuICAgICAgICAvLyBzdG9yaW5nIG9yaWdpbmFsIHdpZHRoIG9mIGNhcmQuXG4gICAgICAgIC8vIHVzZWQgdG8gcmVzdG9yZSB3aWR0aCBvbiB3aW5kb3cgcmVzaXplIGZyb20gc21hbGwgdG8gbGFyZ2VcbiAgICAgICAgdGhpcy5fb3JpZ2luYWxDYXJkV2lkdGhTcGFuID0gIXRoaXMuX29yaWdpbmFsQ2FyZFdpZHRoU3BhbiA/IHdpZHRoQ29sU3BhbiA6IHRoaXMuX29yaWdpbmFsQ2FyZFdpZHRoU3BhbjtcbiAgICAgICAgdGhpcy5fbWF4Q29sdW1uID0gdGhpcy5nZXRNYXhDb2xTcGFuKGxheW91dFNpemUpO1xuICAgICAgICBpZiAod2lkdGhDb2xTcGFuID4gdGhpcy5fbWF4Q29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmNhcmRXaWR0aENvbFNwYW4gPSB0aGlzLl9tYXhDb2x1bW47XG4gICAgICAgICAgICB0aGlzLl9zZXRDYXJkV2lkdGgoKTtcbiAgICAgICAgICAgIC8vIEVtaXRzIHJlc2l6ZWQgZXZlbnQuXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZWQuZW1pdCh0aGlzLmdldFJlc2l6ZWRFdmVudE9iamVjdCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGtlZXAgY2FyZCB3aWR0aCBtaW5pbXVtLCBzbyBpdCBjYW4gZml0IGluIHNjcmVlbi5cbiAgICAgICAgICAgIHRoaXMuY2FyZFdpZHRoQ29sU3BhbiA9IE1hdGgubWluKHRoaXMuX21heENvbHVtbiwgdGhpcy5fb3JpZ2luYWxDYXJkV2lkdGhTcGFuKTtcbiAgICAgICAgICAgIHRoaXMuX3NldENhcmRXaWR0aCgpO1xuICAgICAgICAgICAgLy8gRW1pdHMgcmVzaXplZCBldmVudC5cbiAgICAgICAgICAgIHRoaXMucmVzaXplZC5lbWl0KHRoaXMuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgUmVzaXplZEV2ZW50IG9iamVjdCB0byBlbWl0LiAqL1xuICAgIGdldFJlc2l6ZWRFdmVudE9iamVjdCgpOiBSZXNpemVkRXZlbnQge1xuICAgICAgICBjb25zdCBuZXdDYXJkSGVpZ2h0Um93U3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkSGVpZ2h0IC8gdmVydGljYWxSZXNpemVTdGVwKTtcbiAgICAgICAgY29uc3QgbmV3Q2FyZFdpZHRoQ29sU3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkV2lkdGggLyBob3Jpem9udGFsUmVzaXplU3RlcCk7XG4gICAgICAgIGNvbnN0IG5ld0NhcmRXaWR0aCA9IG5ld0NhcmRXaWR0aENvbFNwYW4gKiBob3Jpem9udGFsUmVzaXplU3RlcCArIG5ld0NhcmRXaWR0aENvbFNwYW4gKiBnYXA7XG5cbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFJlc2l6ZVRocmVzaG9sZFJlYWNoZWQgPSB0aGlzLmNhcmRXaWR0aCAtIG5ld0NhcmRXaWR0aCA+IGhvcml6b250YWxSZXNpemVPZmZzZXQ7XG4gICAgICAgIGNvbnN0IG5ld0NhcmRDb2xTcGFuID0gaG9yaXpvbnRhbFJlc2l6ZVRocmVzaG9sZFJlYWNoZWQgPyBuZXdDYXJkV2lkdGhDb2xTcGFuICsgMSA6IG5ld0NhcmRXaWR0aENvbFNwYW47XG4gICAgICAgIHJldHVybiBuZXcgUmVzaXplZEV2ZW50KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIHRoaXMuX3ByZXZDYXJkV2lkdGgsXG4gICAgICAgICAgICB0aGlzLl9wcmV2Q2FyZEhlaWdodCxcbiAgICAgICAgICAgIHRoaXMuY2FyZFdpZHRoLFxuICAgICAgICAgICAgdGhpcy5jYXJkSGVpZ2h0LFxuICAgICAgICAgICAgdGhpcy5fY2FyZFdpZHRoQ29sU3BhbixcbiAgICAgICAgICAgIHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuLFxuICAgICAgICAgICAgbmV3Q2FyZENvbFNwYW4sXG4gICAgICAgICAgICBuZXdDYXJkSGVpZ2h0Um93U3BhblxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJldHVybiBwcmV2aW91cyBoZWlnaHQgcm93IHNwYW4gb2YgdGhlIGNhcmQgKi9cbiAgICBnZXQgcHJldmlvdXNDYXJkSGVpZ2h0Um93U3BhbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJldkNhcmRIZWlnaHRSb3dTcGFuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNldCBjYXJkIHByb3BlcnRpZXMgdXNpbmcgY29uZmlnIHJlY2VpdmVkICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbFNldHVwKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhcmRXaWR0aENvbFNwYW4gPSB0aGlzLl9jb25maWc/LmNhcmRXaWR0aENvbFNwYW4gfHwgdGhpcy5jYXJkV2lkdGhDb2xTcGFuO1xuICAgICAgICB0aGlzLmNhcmRIZWlnaHRSb3dTcGFuID0gdGhpcy5fY29uZmlnPy5jYXJkSGVpZ2h0Um93U3BhbiB8fCB0aGlzLmNhcmRIZWlnaHRSb3dTcGFuO1xuICAgICAgICB0aGlzLnRpdGxlID0gdGhpcy5fY29uZmlnPy50aXRsZSB8fCB0aGlzLnRpdGxlO1xuICAgICAgICB0aGlzLnJhbmsgPSB0aGlzLl9jb25maWc/LnJhbmsgfHwgdGhpcy5yYW5rO1xuICAgICAgICB0aGlzLmNhcmRNaW5pSGVhZGVyUm93U3BhbiA9IHRoaXMuX2NvbmZpZz8uY2FyZE1pbmlIZWFkZXJSb3dTcGFuIHx8IHRoaXMuY2FyZE1pbmlIZWFkZXJSb3dTcGFuO1xuICAgICAgICB0aGlzLmNhcmRNaW5pQ29udGVudFJvd1NwYW4gPSB0aGlzLl9jb25maWc/LmNhcmRNaW5pQ29udGVudFJvd1NwYW4gfHwgdGhpcy5jYXJkTWluaUNvbnRlbnRSb3dTcGFuO1xuICAgICAgICB0aGlzLnJlc2l6YWJsZSA9IHRoaXMuX2NvbmZpZy5yZXNpemFibGUgfHwgdGhpcy5yZXNpemFibGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmV0dXJucyB0cnVlIHdoZW4gcmVzaXplIG9mZnNldCBpcyBjcm9zc2VkICovXG4gICAgcHJpdmF0ZSBfaG9yaXpvbnRhbFJlc2l6ZVdpdGhPZmZzZXQoKTogdm9pZCB7XG4gICAgICAgIC8vIHBvc2l0aXZlIHZhbHVlIGluZGljYXRlcyB0aGF0IHdpZHRoIGhhcyBpbmNyZWFzZWRcbiAgICAgICAgY29uc3Qgd2lkdGhJbmNyZW1lbnQgPSB0aGlzLmNhcmRXaWR0aCAtIHRoaXMuX3ByZXZDYXJkV2lkdGg7XG4gICAgICAgIGNvbnN0IGNhcmRTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRXaWR0aCAvIGhvcml6b250YWxSZXNpemVTdGVwKTtcbiAgICAgICAgY29uc3QgY2FyZFNwYW5GcmFjdGlvbiA9IHRoaXMuY2FyZFdpZHRoICUgaG9yaXpvbnRhbFJlc2l6ZVN0ZXA7XG5cbiAgICAgICAgLy8gd2hlbiB3aWR0aCBpbmNyZWFzZXNcbiAgICAgICAgaWYgKHdpZHRoSW5jcmVtZW50ID4gMCkge1xuICAgICAgICAgICAgaWYgKHdpZHRoSW5jcmVtZW50IDwgaG9yaXpvbnRhbFJlc2l6ZU9mZnNldCArIGdhcCkge1xuICAgICAgICAgICAgICAgIC8vIHdpZHRoSW5jcmVtZW50IGlzIGxlc3MgdGhhbiBvZmZzZXQsIGRvIG5vdCBpbmNyZWFzZSB3aWR0aFxuICAgICAgICAgICAgICAgIHRoaXMuY2FyZFdpZHRoID0gdGhpcy5fcHJldkNhcmRXaWR0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgdmFsdWUgb2YgY2FyZFNwYW5GcmFjdGlvbiwgaW5jbHVkaW5nIGdhcHMgaW4gY2FyZHNcbiAgICAgICAgICAgICAgICBjb25zdCBpc0NhcmRTcGFuRnJhY3Rpb25Dcm9zc2luZ09mZnNldCA9XG4gICAgICAgICAgICAgICAgICAgIGNhcmRTcGFuRnJhY3Rpb24gLSAoY2FyZFNwYW4gLSAxKSAqIGdhcCA+IGhvcml6b250YWxSZXNpemVPZmZzZXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJkV2lkdGggPSBpc0NhcmRTcGFuRnJhY3Rpb25Dcm9zc2luZ09mZnNldFxuICAgICAgICAgICAgICAgICAgICA/IChjYXJkU3BhbiArIDEpICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXBcbiAgICAgICAgICAgICAgICAgICAgOiBjYXJkU3BhbiAqIGhvcml6b250YWxSZXNpemVTdGVwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gd2hlbiB3aWR0aCBkZWNyZWFzZXNcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh3aWR0aEluY3JlbWVudCkgPCBob3Jpem9udGFsUmVzaXplT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gd2lkdGhJbmNyZW1lbnQgaXMgbGVzcyB0aGFuIG9mZnNldCwgZG8gbm90IGRlY3JlYXNlIHdpZHRoXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJkV2lkdGggPSB0aGlzLl9wcmV2Q2FyZFdpZHRoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayB2YWx1ZSBvZiBjYXJkU3BhbkZyYWN0aW9uLCBpbmNsdWRpbmcgZ2FwcyBpbiBjYXJkc1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ2FyZFNwYW5GcmFjdGlvbkNyb3NzaW5nT2Zmc2V0ID0gY2FyZFNwYW5GcmFjdGlvbiAtIGNhcmRTcGFuICogZ2FwID4gaG9yaXpvbnRhbFJlc2l6ZU9mZnNldDtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmRXaWR0aCA9IGlzQ2FyZFNwYW5GcmFjdGlvbkNyb3NzaW5nT2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgID8gKGNhcmRTcGFuICsgMSkgKiBob3Jpem9udGFsUmVzaXplU3RlcFxuICAgICAgICAgICAgICAgICAgICA6IGNhcmRTcGFuICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIG1ha2UgaG9yaXpvbnRhbCByZXNpemUgb25seSBvbiBzdGVwIG9mIDIwcmVtXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaG9yaXpvbnRhbFN0ZXBSZXNpemluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faG9yaXpvbnRhbFJlc2l6ZVdpdGhPZmZzZXQoKTtcblxuICAgICAgICAvLyBBZGQgaW5uZXIgZ2FwIGluICBjYXJkV2lkdGggaWYgd2lkdGggaXMgbW9yZSB0aGFuIDEgY29sdW1uXG4gICAgICAgIGlmICh0aGlzLmNhcmRXaWR0aCA+IGhvcml6b250YWxSZXNpemVTdGVwKSB7XG4gICAgICAgICAgICB0aGlzLmNhcmRXaWR0aCA9IHRoaXMuY2FyZFdpZHRoICsgKHRoaXMuY2FyZFdpZHRoIC8gaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgLSAxKSAqIGdhcDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhcmRXaWR0aENvbFNwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZFdpZHRoIC8gaG9yaXpvbnRhbFJlc2l6ZVN0ZXApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gbWFrZSB2ZXJ0aWNhbCByZXNpemUgb25seSBvbiBzdGVwIG9mIDFyZW1cbiAgICAgKi9cbiAgICBwcml2YXRlIF92ZXJ0aWNhbFN0ZXBSZXNpemluZygpOiB2b2lkIHtcbiAgICAgICAgLy8gcG9zaXRpdmUgdmFsdWUgaW5kaWNhdGVzIHRoYXQgaGVpZ2h0IGhhcyBpbmNyZWFzZWRcbiAgICAgICAgY29uc3QgY2FyZEhlaWdodFNwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZEhlaWdodCAvIHZlcnRpY2FsUmVzaXplU3RlcCk7XG4gICAgICAgIGNvbnN0IGNhcmRTcGFuRnJhY3Rpb24gPSB0aGlzLmNhcmRIZWlnaHQgJSB2ZXJ0aWNhbFJlc2l6ZVN0ZXA7XG4gICAgICAgIHRoaXMuY2FyZEhlaWdodCA9XG4gICAgICAgICAgICBjYXJkU3BhbkZyYWN0aW9uID4gdmVydGljYWxSZXNpemVPZmZzZXRcbiAgICAgICAgICAgICAgICA/IChjYXJkSGVpZ2h0U3BhbiArIDEpICogdmVydGljYWxSZXNpemVTdGVwXG4gICAgICAgICAgICAgICAgOiBjYXJkSGVpZ2h0U3BhbiAqIHZlcnRpY2FsUmVzaXplU3RlcDtcblxuICAgICAgICB0aGlzLmNhcmRIZWlnaHRSb3dTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRIZWlnaHQgLyB2ZXJ0aWNhbFJlc2l6ZVN0ZXApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gUmVzaXplIGNhcmQgaG9yaXpvbnRhbGx5IGJ5IGNoZWNraW5nIGJvdW5kYXJ5IGNvbmRpdGlvblxuICAgICAqIEBwYXJhbSB4UG9zaXRpb24gY3VycmVudCB4LXBvc2l0aW9uIG9mIGN1cnNvclxuICAgICAqL1xuICAgIHByaXZhdGUgX2hvcml6b250YWxSZXNpemluZyh4UG9zaXRpb246IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gdGhpcy5fcHJldlggLSB4UG9zaXRpb247XG4gICAgICAgIHRoaXMuY2FyZFdpZHRoID0gdGhpcy5fcnRsU2VydmljZT8ucnRsU2lnbmFsKCkgPyB0aGlzLmNhcmRXaWR0aCArIGRpZmZlcmVuY2UgOiB0aGlzLmNhcmRXaWR0aCAtIGRpZmZlcmVuY2U7XG5cbiAgICAgICAgY29uc3QgdG90YWxJbmRlbnRhdGlvbiA9ICh0aGlzLl9tYXhDb2x1bW4gLSAxKSAqIGdhcDtcbiAgICAgICAgY29uc3QgbWF4Q2FyZFdpZHRXaXRob3V0SW5kZW50YXRpb24gPSB0aGlzLl9tYXhDb2x1bW4gKiBob3Jpem9udGFsUmVzaXplU3RlcDtcblxuICAgICAgICBjb25zdCBtYXhDYXJkV2lkdGggPSB0aGlzLl9ydGxTZXJ2aWNlPy5ydGxTaWduYWwoKVxuICAgICAgICAgICAgPyBtYXhDYXJkV2lkdFdpdGhvdXRJbmRlbnRhdGlvbiAtIHRvdGFsSW5kZW50YXRpb25cbiAgICAgICAgICAgIDogbWF4Q2FyZFdpZHRXaXRob3V0SW5kZW50YXRpb24gKyB0b3RhbEluZGVudGF0aW9uO1xuXG4gICAgICAgIGlmICh0aGlzLmNhcmRXaWR0aCA+IG1heENhcmRXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5jYXJkV2lkdGggPSBtYXhDYXJkV2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXJkV2lkdGggPCBob3Jpem9udGFsUmVzaXplU3RlcCkge1xuICAgICAgICAgICAgdGhpcy5jYXJkV2lkdGggPSBob3Jpem9udGFsUmVzaXplU3RlcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gUmVzaXplIGNhcmQgdmVydGljYWxseS5cbiAgICAgKiB0YWtlcyBjYXJlIG9mIG1pbmktaGVhZGVyIGhlaWdodCBhbmQgbWluaS1jb250ZW50IGhlaWdodFxuICAgICAqIEBwYXJhbSB5UG9zaXRpb24gY3VycmVudCB5LXBvc2l0aW9uIG9mIGN1cnNvclxuICAgICAqL1xuICAgIHByaXZhdGUgX3ZlcnRpY2FsUmVzaXppbmcoeVBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgbGV0IHJlYWNoaW5nTWluaUhlYWRlciA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLmNhcmRIZWlnaHQgPT09IHRoaXMuY2FyZE1pbmlIZWFkZXJIZWlnaHQpIHtcbiAgICAgICAgICAgIC8vIGlmIGNhcmQgaGVpZ2h0IGlzIGFscmVhZHkgYXQgbWluaS1oZWFkZXIgaGVpZ2h0XG4gICAgICAgICAgICBpZiAodGhpcy5fcHJldlkgLSB5UG9zaXRpb24gPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gZGVjcmVhc2luZyBoZWlnaHRcbiAgICAgICAgICAgICAgICAvLyBpZiBtaW5pSGVhZGVyIGhlaWdodCByZWFjaGVkLCBzdG9wIHJlc2l6aW5nXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJkSGVpZ2h0ID0gdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcmV2Q2FyZEhlaWdodFJvd1NwYW4gPSB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbjtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkSGVpZ2h0IC8gdmVydGljYWxSZXNpemVTdGVwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaW5jcmVhc2luZyBoZWlnaHRcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmRIZWlnaHQgPSB0aGlzLmNhcmRNaW5pSGVhZGVySGVpZ2h0ICsgdGhpcy5jYXJkTWluaUNvbnRlbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldkNhcmRIZWlnaHRSb3dTcGFuID0gdGhpcy5fY2FyZEhlaWdodFJvd1NwYW47XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FyZEhlaWdodFJvd1NwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZEhlaWdodCAvIHZlcnRpY2FsUmVzaXplU3RlcCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcFJlc2l6aW5nKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5taW5pQ29udGVudFJlYWNoZWQuZW1pdCh0aGlzLmdldFJlc2l6ZWRFdmVudE9iamVjdCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcmRIZWlnaHQgPCB0aGlzLmNhcmRNaW5pQ29udGVudEhlaWdodCArIHRoaXMuY2FyZE1pbmlIZWFkZXJIZWlnaHQpIHtcbiAgICAgICAgICAgIC8vIGlmIGNhcmQgaGVpZ2h0IGlzIGJldHdlZW4gbWluaS1oZWFkZXIgYW5kIG1pbmktY29udGVudFxuICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZZIC0geVBvc2l0aW9uIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FyZEhlaWdodCA9IHRoaXMuY2FyZE1pbmlIZWFkZXJIZWlnaHQgKyB0aGlzLmNhcmRNaW5pQ29udGVudEhlaWdodDtcbiAgICAgICAgICAgICAgICB0aGlzLl9wcmV2Q2FyZEhlaWdodFJvd1NwYW4gPSB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbjtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkSGVpZ2h0IC8gdmVydGljYWxSZXNpemVTdGVwKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdG9wUmVzaXppbmcoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1pbmlDb250ZW50UmVhY2hlZC5lbWl0KHRoaXMuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdGhpcy5jYXJkSGVpZ2h0ID09PSB0aGlzLmNhcmRNaW5pQ29udGVudEhlaWdodCArIHRoaXMuY2FyZE1pbmlIZWFkZXJIZWlnaHQgJiZcbiAgICAgICAgICAgIHRoaXMuX3ByZXZZIC0geVBvc2l0aW9uID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIGRlY3JlYXNpbmcgaGVpZ2h0XG4gICAgICAgICAgICAvLyBoZWlnaHQgZGVjcmVhc2luZyBhZnRlciByZWFjaGluZyBtaW5pLWNvbnRlbnQuIHRoaXMgbmVlZHMgdG8gZGlmZmVyZW50aWF0ZVxuICAgICAgICAgICAgLy8gZnJvbSBoZWlnaHQgZGVjcmVhc2luZyBhbmQgcmVhY2hpbmcgdG8gbWluaS1jb250ZW50LlxuICAgICAgICAgICAgcmVhY2hpbmdNaW5pSGVhZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY2FyZEhlaWdodCA9IHRoaXMuY2FyZE1pbmlIZWFkZXJIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9wcmV2Q2FyZEhlaWdodFJvd1NwYW4gPSB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbjtcbiAgICAgICAgICAgIHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRIZWlnaHQgLyB2ZXJ0aWNhbFJlc2l6ZVN0ZXApO1xuICAgICAgICAgICAgLy8gbWluaUhlYWRlciBoZWlnaHQgcmVhY2hlZCwgc3RvcCByZXNpemluZ1xuICAgICAgICAgICAgdGhpcy5fc3RvcFJlc2l6aW5nKCk7XG4gICAgICAgICAgICB0aGlzLm1pbmlIZWFkZXJSZWFjaGVkLmVtaXQodGhpcy5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhcmRIZWlnaHQgPSB0aGlzLmNhcmRIZWlnaHQgLSAodGhpcy5fcHJldlkgLSB5UG9zaXRpb24pO1xuICAgICAgICAgICAgdGhpcy5fcHJldkNhcmRIZWlnaHRSb3dTcGFuID0gdGhpcy5fY2FyZEhlaWdodFJvd1NwYW47XG4gICAgICAgICAgICB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkSGVpZ2h0IC8gdmVydGljYWxSZXNpemVTdGVwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHN0b3AgcmVzaXppbmcgb24gbWluaUNvbnRlbnQgaGVpZ2h0XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuY2FyZEhlaWdodCA8PSB0aGlzLmNhcmRNaW5pQ29udGVudEhlaWdodCArIHRoaXMuY2FyZE1pbmlIZWFkZXJIZWlnaHQgJiZcbiAgICAgICAgICAgIHRoaXMuX3ByZXZZIC0geVBvc2l0aW9uID4gMCAmJlxuICAgICAgICAgICAgIXJlYWNoaW5nTWluaUhlYWRlclxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZEhlaWdodCA9IHRoaXMuY2FyZE1pbmlDb250ZW50SGVpZ2h0ICsgdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodDtcbiAgICAgICAgICAgIHRoaXMuX3ByZXZDYXJkSGVpZ2h0Um93U3BhbiA9IHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuO1xuICAgICAgICAgICAgdGhpcy5fY2FyZEhlaWdodFJvd1NwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZEhlaWdodCAvIHZlcnRpY2FsUmVzaXplU3RlcCk7XG4gICAgICAgICAgICB0aGlzLm1pbmlDb250ZW50UmVhY2hlZC5lbWl0KHRoaXMuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICAgICAgdGhpcy5fc3RvcFJlc2l6aW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGlsZSBjb3JuZXIgcmVzaXplLCB3aWR0aCBtaWdodCBoYXZlIGluY3JlYXNlZCBhbmQgcmVhY2hlZCB0byBtaW5pLWNvbnRlbnQgaGVpZ2h0LlxuICAgICAgICAvLyBzbywgb24gbWluaS1jb250ZW50IHJlc2l6ZSB3aWxsIHN0b3AsIGJ1dCBoYXZlIHRvIGRvIHN0ZXAgcmVzaXppbmcgZm9yIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsLlxuICAgICAgICBpZiAoIXRoaXMuX3Jlc2l6ZSkge1xuICAgICAgICAgICAgLy8gaW5jcmVhc2UvZGVjcmVhc2Ugd2lkdGggb2YgY2FyZCBpbiBvcmRlciBvZiAyMHJlbVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMuY2FyZFdpZHRoIC0gdGhpcy5fcHJldkNhcmRXaWR0aCkgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faG9yaXpvbnRhbFN0ZXBSZXNpemluZygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpbmNyZWFzZS9kZWNyZWFzZSBoZWlnaHQgb2YgY2FyZCBpbiBvcmRlciBvZiAxcmVtXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy5jYXJkSGVpZ2h0IC0gdGhpcy5fcHJldkNhcmRIZWlnaHQpID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZlcnRpY2FsU3RlcFJlc2l6aW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiByZXNldCBpbnZvbHZlZCB2YXJpYWJsZXMgd2hpbGUgcmVzaXppbmcgKi9cbiAgICBwcml2YXRlIF9zdG9wUmVzaXppbmcoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9yZXNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZFN0YXRlID0gMDtcbiAgICAgICAgICAgIHRoaXMucmVzaXplSW5kaWNhdGlvbkJvcmRlcldpZHRoID0gMDtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2l6ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy56SW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5zaG93Qm9yZGVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZWQuZW1pdCh0aGlzLmdldFJlc2l6ZWRFdmVudE9iamVjdCgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJldHVybnMgY2FyZFdpZHRoIGJhc2VkIG9uIGNhcmQgY29sdW1uIHNwYW4gKi9cbiAgICBwcml2YXRlIF9zZXRDYXJkV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FyZFdpZHRoID0gdGhpcy5fY2FyZFdpZHRoQ29sU3BhbiAqIGhvcml6b250YWxSZXNpemVTdGVwICsgKHRoaXMuX2NhcmRXaWR0aENvbFNwYW4gLSAxKSAqIGdhcDtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmV0dXJucyBjYXJkSGVpZ2h0IGJhc2VkIG9uIGNhcmQgcm93IHNwYW4gKi9cbiAgICBwcml2YXRlIF9zZXRDYXJkSGVpZ2h0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhcmRIZWlnaHQgPSB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbiAqIHZlcnRpY2FsUmVzaXplU3RlcDtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmV0dXJucyBjYXJkIG1pbmkgaGVhZGVyIGhlaWdodCAqL1xuICAgIHByaXZhdGUgX3NldENhcmRNaW5pSGVhZGVySGVpZ2h0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhcmRNaW5pSGVhZGVySGVpZ2h0ID0gdGhpcy5fY2FyZE1pbmlIZWFkZXJSb3dTcGFuICogdmVydGljYWxSZXNpemVTdGVwO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXR1cm5zIGNhcmQgbWluaSBjb250ZW50IGhlaWdodCAqL1xuICAgIHByaXZhdGUgX3NldENhcmRNaW5pQ29udGVudEhlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYXJkTWluaUNvbnRlbnRIZWlnaHQgPSB0aGlzLmNhcmRNaW5pQ29udGVudFJvd1NwYW4gKiB2ZXJ0aWNhbFJlc2l6ZVN0ZXA7XG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbn1cblxuLyoqIENvbmZpZyBpbnRlcmZhY2UgZm9yIGNhcmQgcHJvcGVydGllcyAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNpemFibGVDYXJkSXRlbUNvbmZpZyB7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgcmFuaz86IG51bWJlcjtcbiAgICBjYXJkV2lkdGhDb2xTcGFuPzogbnVtYmVyO1xuICAgIGNhcmRIZWlnaHRSb3dTcGFuPzogbnVtYmVyO1xuICAgIGNhcmRNaW5pSGVhZGVyUm93U3Bhbj86IG51bWJlcjtcbiAgICBjYXJkTWluaUNvbnRlbnRSb3dTcGFuPzogbnVtYmVyO1xuICAgIHJlc2l6YWJsZT86IGJvb2xlYW47XG59XG5cbi8qKiBPYmplY3QgdG8gZW1pdCBvbiByZXNpemUgY29tcGxldGUgKi9cbmV4cG9ydCBjbGFzcyBSZXNpemVkRXZlbnQge1xuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBlbWl0IG9uIHJlc2l6ZSBjb21wbGV0ZVxuICAgICAqIEBwYXJhbSBjYXJkXG4gICAgICogQHBhcmFtIHByZXZDYXJkV2lkdGggUHJldmlvdXMgY2FyZCB3aWR0aFxuICAgICAqIEBwYXJhbSBwcmV2Q2FyZEhlaWdodCBQcmV2aW91cyBjYXJkIGhlaWdodFxuICAgICAqIEBwYXJhbSBjYXJkV2lkdGggQ3VycmVudCBjYXJkIHdpZHRoXG4gICAgICogQHBhcmFtIGNhcmRIZWlnaHQgQ3VycmVudCBjYXJkIGhlaWdodFxuICAgICAqIEBwYXJhbSBjYXJkV2lkdGhDb2xTcGFuIEN1cnJlbnQgY2FyZCB3aWR0aCBjb2x1bW4gc3BhblxuICAgICAqIEBwYXJhbSBjYXJkSGVpZ2h0Um93U3BhbiBDdXJyZW50IGNhcmQgaGVpZ2h0IHJvdyBzcGFuXG4gICAgICogQHBhcmFtIG5ld0NhcmRXaWR0aENvbFNwYW4gTmV3IGNhcmQgd2lkdGggY29sdW1uIHNwYW5cbiAgICAgKiBAcGFyYW0gbmV3Q2FyZEhlaWdodFJvd1NwYW4gTmV3IGNhcmQgaGVpZ2h0IHJvdyBzcGFuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjYXJkOiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCxcbiAgICAgICAgcHVibGljIHByZXZDYXJkV2lkdGg6IG51bWJlcixcbiAgICAgICAgcHVibGljIHByZXZDYXJkSGVpZ2h0OiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBjYXJkV2lkdGg6IG51bWJlcixcbiAgICAgICAgcHVibGljIGNhcmRIZWlnaHQ6IG51bWJlcixcbiAgICAgICAgcHVibGljIGNhcmRXaWR0aENvbFNwYW46IG51bWJlcixcbiAgICAgICAgcHVibGljIGNhcmRIZWlnaHRSb3dTcGFuOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBuZXdDYXJkV2lkdGhDb2xTcGFuOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBuZXdDYXJkSGVpZ2h0Um93U3BhbjogbnVtYmVyXG4gICAgKSB7fVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19pdGVtXCJcbiAgICBbY2xhc3MuZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19pbmRpY2F0aW9uLWJvcmRlcl09XCJzaG93Qm9yZGVyXCJcbiAgICAjcmVzaXplQ2FyZFxuPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZC1yZXNpemFibGUtY2FyZC1sYXlvdXRfX2l0ZW0tLWJvcmRlci1kaXNwbGF5IGZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9faXRlbS0tcmVzaXplLXRyYW5zaXRpb25cIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY2FyZFdpZHRoXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjYXJkSGVpZ2h0XCJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwic2hvd1Jlc2l6ZUljb24oKVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cImhpZGVSZXNpemVJY29uKClcIlxuICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9fY2FyZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgQGlmIChzaG93aW5nUmVzaXplSWNvbikge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC1yZXNpemFibGUtY2FyZC1sYXlvdXRfX2ljb24td3JhcHBlclwiIHJvbGU9XCJwcmVzZW50YXRpb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1yZXNpemFibGUtY2FyZC1sYXlvdXRfX2ljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgI2Nvcm5lckhhbmRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQsICdib3RoJylcIlxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKHJlc2l6YWJsZSkge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInZlcnRpY2FsSGFuZGxlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhvcml6b250YWxIYW5kbGVUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19pdGVtLS1yZXNpemUtdHJhbnNpdGlvblwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJyZXNpemVJbmRpY2F0aW9uQm9yZGVyV2lkdGhcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImNhcmRIZWlnaHRcIlxuICAgID48L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICN2ZXJ0aWNhbEhhbmRsZVRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgICAgI3ZlcnRpY2FsSGFuZGxlXG4gICAgICAgIGNsYXNzPVwiZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19yZXNpemUtLXZlcnRpY2FsXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQsICdob3Jpem9udGFsJylcIlxuICAgID48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2hvcml6b250YWxIYW5kbGVUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgICNob3Jpem9udGFsSGFuZGxlXG4gICAgICAgIGNsYXNzPVwiZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19yZXNpemUtLWhvcml6b250YWxcIlxuICAgICAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudCwgJ3ZlcnRpY2FsJylcIlxuICAgID48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, DestroyRef, ElementRef, EventEmitter, HostListener, Input, Optional, Output, QueryList, ViewEncapsulation, computed, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\nimport { ResizableCardItemComponent, gap, horizontalResizeOffset, horizontalResizeStep, verticalResizeStep } from './resizable-card-item/resizable-card-item.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/cdk/utils\";\nexport class ResizableCardLayoutComponent {\n /** @hidden */\n constructor(_cd, elementRef, _rtlService) {\n this._cd = _cd;\n this.elementRef = elementRef;\n this._rtlService = _rtlService;\n /** Emits when card resize is reached to one new step in horizontal or vertical direction */\n this.stepChange = new EventEmitter();\n /** Emits when card is still resizing */\n this.resizing = new EventEmitter();\n /** Emits when card resize is completed */\n this.resized = new EventEmitter();\n /** Emits when card height is reduced to show only header */\n this.miniHeaderReached = new EventEmitter();\n /** Emits when minimum height of card content area is reached */\n this.miniContentReached = new EventEmitter();\n /** Emits when layout changes */\n this.layoutChange = new EventEmitter();\n /** @hidden */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this._layoutShifted = false;\n /** @hidden */\n this._directionPosition$ = computed(() => (this._rtlService?.rtlSignal() ? 'right' : 'left'), ...(ngDevMode ? [{ debugName: \"_directionPosition$\" }] : []));\n }\n /** @hidden handles keyboard accessibility */\n _handleKeydown(event) {\n event.stopImmediatePropagation();\n if (!this._keyboardEventsManager.activeItemIndex) {\n this._keyboardEventsManager.setFirstItemActive();\n }\n if (this._keyboardEventsManager) {\n this._keyboardEventsManager.onKeydown(event);\n }\n }\n /** @hidden */\n onResize() {\n this._createLayout();\n }\n /** @hidden */\n ngOnInit() {\n this._columnsHeight = new Array(this._columns);\n this._columnsHeight.fill(0);\n // initialise value 0\n // detect initial window size and set layout\n this._createLayout();\n }\n /** @hidden */\n ngAfterContentInit() {\n this._initialSetup();\n // listen for query-list change\n this.resizeCardItems?.forEach((card) => {\n card?.verifyUpdateCardWidth(this.layoutSize);\n });\n this.resizeCardItems.changes.subscribe(() => {\n this.arrangeCards(this.resizeCardItems?.toArray());\n });\n this.arrangeCards(this.resizeCardItems?.toArray());\n this._cd.markForCheck();\n }\n /** @hidden */\n ngAfterViewInit() {\n this._accessibilitySetup();\n }\n /** @hidden */\n ngOnDestroy() {\n this._keyboardEventsManager?.destroy();\n }\n /** Layout size. Available options are 'sm', 'md', 'lg' and 'xl' */\n set layoutSize(layoutSize) {\n this._layout = layoutSize;\n }\n get layoutSize() {\n return this._layout;\n }\n /**\n * Arranges cards in layout based on rank, width and height of card\n * @param cards Array of ResizableCardItemComponent\n */\n arrangeCards(cards) {\n this._columnsHeight = new Array(this._columns);\n this._columnsHeight.fill(0);\n // sort based on the card rank\n this._sortedCards = cards?.sort(this._sortCards);\n this._sortedCards?.forEach((card, index) => {\n this._setCardPositionValues(card, index);\n this._updateColumnsHeight(card);\n });\n this.layoutHeight = Math.max.apply(null, this._columnsHeight) + verticalResizeStep;\n this._emitLayoutChange();\n this._cd.markForCheck();\n }\n /**\n * Handles shifting of cards with animation, while card is still resizing.\n * @param event {ResizedEvent}\n */\n cardResizing(event) {\n this.resizing.emit(event);\n this._handleHorizontalResize(event);\n this._handleVerticalResize(event);\n }\n /**\n * Handles arrangement of cards in layout\n * @param event {ResizedEvent}\n */\n cardResizeComplete(event) {\n this._layoutShifted = false;\n this.arrangeCards(this.resizeCardItems.toArray());\n this.resized.emit(event);\n }\n /** @hidden */\n updateLayout() {\n this.resizeCardItems?.forEach((card) => {\n card?.verifyUpdateCardWidth(this.layoutSize);\n });\n this.arrangeCards(this.resizeCardItems?.toArray());\n }\n /**\n * method to get screen width\n * @returns Window width in px\n */\n getWidthAvailable() {\n return window.innerWidth;\n }\n /** @hidden Subscribe to events from items */\n _initialSetup() {\n // listen for resizing event of card item\n this.resizeCardItems?.forEach((resizeCardItem, index) => {\n if (this.layoutConfig && this.layoutConfig.length >= index + 1) {\n resizeCardItem.config = this.layoutConfig[index];\n }\n resizeCardItem.resizing\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event) => this.cardResizing(event));\n // listen for resize complete event of card item\n resizeCardItem.resized\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event) => this.cardResizeComplete(event));\n // listen for mini-header height event of card item\n resizeCardItem.miniHeaderReached\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event) => {\n this.miniHeaderReached.emit(event);\n this.stepChange.emit(event);\n });\n // listen for mini-content height event of card item\n resizeCardItem.miniContentReached\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event) => {\n this.miniContentReached.emit(event);\n this.stepChange.emit(event);\n });\n });\n }\n /** @hidden */\n _accessibilitySetup() {\n this._keyboardEventsManager?.destroy();\n this._keyboardEventsManager = new FocusKeyManager(this.resizeCardItems).withWrap();\n }\n /** @hidden create layout based on layout size */\n _createLayout() {\n const screenWidth = this.getWidthAvailable();\n const prevLayoutSize = this.layoutSize;\n if (screenWidth > 0 && screenWidth <= 656 && prevLayoutSize !== 'sm') {\n this.layoutSize = 'sm';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n }\n else if (screenWidth > 656 && screenWidth <= 975 && prevLayoutSize !== 'md') {\n this.layoutSize = 'md';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n }\n else if (screenWidth > 975 && screenWidth <= 1359 && prevLayoutSize !== 'lg') {\n this.layoutSize = 'lg';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n }\n else if (screenWidth > 1359 && prevLayoutSize !== 'xl') {\n this.layoutSize = 'xl';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n }\n }\n /** @hidden Emit layoutChange event with updated card dimensions */\n _emitLayoutChange() {\n const latestCardConfig = [];\n this.resizeCardItems?.forEach((card) => {\n const cardConfig = {};\n cardConfig.cardWidthColSpan = card.cardWidthColSpan;\n cardConfig.cardHeightRowSpan = card.cardHeightRowSpan;\n cardConfig.rank = card.rank;\n cardConfig.title = card.title;\n cardConfig.cardMiniContentRowSpan = card.cardMiniContentRowSpan;\n cardConfig.cardMiniHeaderRowSpan = card.cardMiniHeaderRowSpan;\n cardConfig.resizable = card.resizable;\n latestCardConfig.push(cardConfig);\n });\n this.layoutChange.emit(latestCardConfig);\n }\n /**\n * @hidden Sets number of column in layout, based on LayoutSize passed\n * @param layoutSize {'sm' | 'md' | 'lg' | 'xl'}\n */\n _setLayoutColumns(layoutSize) {\n let layoutWidthDefault;\n switch (layoutSize) {\n case 'sm':\n this._columns = 1;\n this._paddingLeft = 8;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault;\n break;\n case 'md':\n this._columns = 2;\n this._paddingLeft = 16;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + gap;\n break;\n case 'lg':\n this._columns = 3;\n this._paddingLeft = 16;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + 2 * gap;\n break;\n case 'xl':\n this._columns = 4;\n this._paddingLeft = 48;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + 3 * gap;\n break;\n default:\n this._columns = 4;\n this._paddingLeft = 48;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + 3 * gap;\n }\n }\n /**\n * @hidden Method to handle card vertical resize and trigger the layout change\n * @param event {ResizedEvent}\n */\n _handleVerticalResize(event) {\n if (event.card.cardHeightRowSpan !== event.card.previousCardHeightRowSpan) {\n this.arrangeCards(this._sortedCards);\n this._cd.markForCheck();\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n }\n /**\n * @hidden Method to handle card horizontal resize and trigger the layout change\n * @param event {ResizedEvent}\n */\n _handleHorizontalResize(event) {\n // when increasing width hit the offset, show extended border and start pushing down border cards\n // when width is decreasing , show extended border till it reaches to offset.\n const cardWidthChange = event.cardWidth - event.prevCardWidth;\n const currentResizingItemIndex = this._sortedCards?.findIndex((x) => x.rank === event.card.rank);\n if (event.cardWidth > event.prevCardWidth) {\n // when increasing size\n // card width increasing currently\n if (event.card.cardState === 1 && cardWidthChange > horizontalResizeOffset + gap && !this._layoutShifted) {\n // index of this card, then get next card. exchange ranks\n this._sortedCards.forEach((card, index) => {\n if (index > currentResizingItemIndex) {\n // if there are some cards on same height. make the current card rank higher than these.\n // otherwise next index where it will fit. until any card has less column span than total columns\n // if only in next top, one card is taking full columns\n if (card.startingColumnPosition + card.cardWidthColSpan === this._columns &&\n card.cardWidthColSpan !== this._columns) {\n // get cards with top > current top , but minimum of it\n // exchange rank with these card\n this._moveCardDown(index);\n }\n }\n });\n this._layoutShifted = true;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n else if (event.card.cardState === -1 &&\n cardWidthChange < horizontalResizeOffset + gap &&\n this._layoutShifted) {\n // card width decreasing currently\n // move up the cards, if it was shifted while increasing the width\n this._sortedCards.forEach((card) => {\n card.rank = card.prevRank ? card.prevRank : card.rank;\n card.prevRank = 0;\n });\n this._layoutShifted = false;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n }\n else if (event.cardWidth < event.prevCardWidth) {\n // when decreasing size\n if (event.card.cardState === -1 && -cardWidthChange > horizontalResizeOffset && !this._layoutShifted) {\n // card width decreasing currently\n this._layoutShifted = true;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n else if (event.card.cardState === 1 && -cardWidthChange < horizontalResizeOffset && this._layoutShifted) {\n // card width increasing currently\n this._layoutShifted = false;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n }\n }\n /**\n * @hidden Method to move card down, when another card width is increasing\n * Method to loop till this._columns -1 positions and exchange the rank\n * @param currentCardIndex Index of current card\n */\n _moveCardDown(currentCardIndex) {\n // taking width of adjacent card col-span into account\n // eg: 4 columns - 2 col(adjacent card) = 2 positions can exchange ranks\n const currentCard = this._sortedCards[currentCardIndex];\n let card;\n // unoccupiedPositions positions left after currentCard occupies in next row.\n let unoccupiedPositions = this._columns - currentCard.cardWidthColSpan;\n currentCard.prevRank = currentCard.rank;\n let index = 1;\n while (unoccupiedPositions > 0) {\n // compare from next card\n card = this._sortedCards[index + currentCardIndex];\n if (card && unoccupiedPositions >= card.cardWidthColSpan) {\n card.prevRank = card.rank;\n card.rank -= 1;\n currentCard.rank = card.prevRank;\n unoccupiedPositions -= card.cardWidthColSpan;\n }\n else {\n unoccupiedPositions = 0;\n }\n index += 1;\n }\n }\n /**\n * @hidden updates array with new column heights\n * @param card {ResizableCardItemComponent}\n */\n _updateColumnsHeight(card) {\n const directionPosition = this._directionPosition$();\n const columnsStart = card[directionPosition] != null ? Math.floor(card[directionPosition] / horizontalResizeStep) : 0;\n // Get width of current card resizing and assign width here for that card\n const cardBaseColSpan = Math.floor(card.cardWidth / horizontalResizeStep);\n // till which columns card spans\n const columnsSpan = card.cardWidth - cardBaseColSpan * horizontalResizeStep - cardBaseColSpan * gap > horizontalResizeOffset\n ? cardBaseColSpan + 1\n : cardBaseColSpan;\n const columnHeight = card.cardHeight + card.top;\n for (let i = 0; i < columnsSpan; i++) {\n this._columnsHeight[i + columnsStart] = columnHeight;\n }\n if (columnsStart === columnsSpan) {\n this._columnsHeight[columnsStart] = columnHeight;\n }\n }\n /**\n * @hidden Try to set card at available heights\n * @param card ResizableCardItemComponent\n * @param index value of card in array of ResizableCardItemComponent\n */\n _setCardPositionValues(card, index) {\n const directionPosition = this._directionPosition$();\n if (index === 0) {\n card[directionPosition] = Number(this._paddingLeft);\n card.top = 0;\n card.startingColumnPosition = 0;\n return;\n }\n const uniqueHeights = this._getSortedUniqueHeights();\n let cardPositioned = false;\n for (let i = 0; i < uniqueHeights.length && !cardPositioned; i++) {\n cardPositioned = this._isPositionSetSuccess(uniqueHeights[i], card);\n }\n }\n /**\n * @hidden try to set card at given height.\n * @param height height at which card is getting positioned.\n * @param card ResizableCardItemComponent\n * @returns It returns true when card position id found otherwise it returns false.\n */\n _isPositionSetSuccess(height, card) {\n const directionPosition = this._directionPosition$();\n const columnPositions = [];\n let index = 0;\n for (const columnHeight of this._columnsHeight) {\n index++;\n if (columnHeight === height) {\n columnPositions.push(index);\n }\n }\n // check for each card position, starting from leftmost\n let isFitting = false;\n // try to fit as left (or right if Rtl) as possible from the column position\n const startingColumnPosition = this._fitCardColumnPosition(card, columnPositions, height);\n if (startingColumnPosition !== -1) {\n isFitting = true;\n card[directionPosition] =\n startingColumnPosition * horizontalResizeStep +\n this._paddingLeft +\n (startingColumnPosition > 0 ? gap * startingColumnPosition : 0);\n card.top = height + (height > 0 ? verticalResizeStep : 0);\n card.startingColumnPosition = startingColumnPosition;\n }\n return isFitting;\n }\n /**\n * @hidden Try to start card position from left most fit position.\n * @param card ResizableCardItemComponent\n * @param columnPositions {Array<number>} Array of available positions for cards.\n * @param height {number} height at which fixing the card\n * @returns {number} returns starting column position where card will fit.\n */\n _fitCardColumnPosition(card, columnPositions, height) {\n // check for each card position, starting from leftmost\n let isFitting = false;\n let startingColumnPosition = -1;\n // start from previous indexes\n const cardBaseColSpan = Math.floor(card.cardWidth / horizontalResizeStep);\n const cardColSpan = card.cardWidth - cardBaseColSpan * horizontalResizeStep - cardBaseColSpan * gap > horizontalResizeOffset\n ? cardBaseColSpan + 1\n : cardBaseColSpan;\n // try to set towards left from available card position\n // eg. [1, 2, 3, 4] columnsPositions\n for (const columnPosition of columnPositions) {\n if (isFitting) {\n break;\n }\n // startingPosition values will be 1, 2, 3, 4\n // try to fit as left as possible\n let startingPosition = columnPosition - (cardColSpan - 1);\n startingPosition = startingPosition > 0 ? startingPosition : 1;\n for (let index = startingPosition; index <= columnPosition && !isFitting; index++) {\n for (let span = 0; span < cardColSpan; span++) {\n if (this._columnsHeight[index + span - 1] <= height && cardColSpan + index - 1 <= this._columns) {\n isFitting = true;\n startingColumnPosition = index - 1;\n }\n else {\n isFitting = false;\n startingColumnPosition = -1;\n break;\n }\n }\n }\n }\n return startingColumnPosition;\n }\n /** @hidden returns sorted unique height of columns */\n _getSortedUniqueHeights() {\n const tempArray = this._columnsHeight.slice();\n const sortedColumnsHeightArray = tempArray.sort(comparer);\n const uniqueHeights = [];\n for (const sortedHeight of sortedColumnsHeightArray) {\n if (uniqueHeights.indexOf(sortedHeight) === -1) {\n uniqueHeights.push(sortedHeight);\n }\n }\n function comparer(first, second) {\n return first - second;\n }\n return uniqueHeights;\n }\n /**\n * @hidden Comparator to sort card based on rank.\n * @param firstCard ResizableCardItemComponent\n * @param secondCard ResizableCardItemComponent\n * @returns : returns difference between first card rank and other card rank.\n */\n _sortCards(firstCard, secondCard) {\n return firstCard.rank - secondCard.rank;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardLayoutComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.4\", type: ResizableCardLayoutComponent, isStandalone: true, selector: \"fd-resizable-card-layout\", inputs: { layoutConfig: \"layoutConfig\" }, outputs: { stepChange: \"stepChange\", resizing: \"resizing\", resized: \"resized\", miniHeaderReached: \"miniHeaderReached\", miniContentReached: \"miniContentReached\", layoutChange: \"layoutChange\" }, host: { listeners: { \"keydown\": \"_handleKeydown($event)\", \"window:resize\": \"onResize()\" } }, queries: [{ propertyName: \"resizeCardItems\", predicate: ResizableCardItemComponent }], ngImport: i0, template: \"<div\\n #layout\\n class=\\\"fd-resizable-card-layout\\\"\\n [class]=\\\"'fd-resizable-card-layout--' + layoutSize\\\"\\n [style.width.px]=\\\"layoutWidth\\\"\\n [style.height.px]=\\\"layoutHeight\\\"\\n>\\n <ng-content></ng-content>\\n</div>\\n\", styles: [\".fd-resizable-card-layout{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;margin-top:1rem;padding-block:0;padding-inline:0;padding-inline:.5rem;position:relative}.fd-resizable-card-layout:after,.fd-resizable-card-layout:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-width:20rem;position:relative}.fd-resizable-card-layout__item:after,.fd-resizable-card-layout__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__card{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;-webkit-box-flex:1;-ms-flex:1;flex:1;height:calc(100% - .0625rem);position:relative}.fd-resizable-card-layout__card:after,.fd-resizable-card-layout__card:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1.5rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1.5rem;padding-block:0;padding-inline:0;width:1.5rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;bottom:-.35rem;justify-content:flex-start;position:absolute;right:0;z-index:2}.fd-resizable-card-layout__icon-wrapper:after,.fd-resizable-card-layout__icon-wrapper:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon-wrapper{bottom:-.125rem;left:-.25rem;right:auto}.fd-resizable-card-layout__icon{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1rem;padding-block:0;padding-inline:0;width:1rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--sapButton_Lite_TextColor);cursor:nwse-resize;font-family:SAP-icons;font-size:1rem;height:100%;line-height:1rem;position:absolute;width:100%;z-index:2}.fd-resizable-card-layout__icon:after,.fd-resizable-card-layout__icon:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon:before{content:\\\"\\\\e24f\\\";font-family:SAP-icons;height:100%;text-align:center;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;width:100%}.fd-resizable-card-layout__icon[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon{cursor:nesw-resize;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fd-resizable-card-layout__icon--vertical,.fd-resizable-card-layout__icon--vertical[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--vertical{cursor:ns-resize}.fd-resizable-card-layout__icon--horizontal,.fd-resizable-card-layout__icon--horizontal[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--horizontal{cursor:ew-resize}.fd-resizable-card-layout__resize--vertical{-webkit-box-ordinal-group:3;-ms-flex-order:2;cursor:ew-resize;order:2;width:.0625rem;z-index:2}.fd-resizable-card-layout__resize--vertical::content{content:\\\"\\\";position:absolute}.fd-resizable-card-layout__resize--horizontal{bottom:0;cursor:ns-resize;height:.0625rem;position:absolute;width:calc(100% - .5rem);z-index:2}.fd-resizable-card-layout__indication-border{border:0;border:.125rem dashed var(--sapContent_DragAndDropActiveColor);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-resizable-card-layout__indication-border:after,.fd-resizable-card-layout__indication-border:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout--sm{padding-inline:.5rem}.fd-resizable-card-layout--lg,.fd-resizable-card-layout--md{padding-inline:1rem}.fd-resizable-card-layout--xl{padding-inline:3rem}fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper{right:0}[dir=rtl] fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper,fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper[dir=rtl]{right:auto;left:-.375rem;bottom:0}fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper .fd-resizable-card-layout__icon{width:100%;height:100%}fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper .fd-resizable-card-layout__icon:before{width:100%;height:100%}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/resizable-card-layout.css:\\n (*!\\n * Fundamental Library Styles v0.40.1\\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\\n *)\\n*/\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardLayoutComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-resizable-card-layout', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, template: \"<div\\n #layout\\n class=\\\"fd-resizable-card-layout\\\"\\n [class]=\\\"'fd-resizable-card-layout--' + layoutSize\\\"\\n [style.width.px]=\\\"layoutWidth\\\"\\n [style.height.px]=\\\"layoutHeight\\\"\\n>\\n <ng-content></ng-content>\\n</div>\\n\", styles: [\".fd-resizable-card-layout{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;margin-top:1rem;padding-block:0;padding-inline:0;padding-inline:.5rem;position:relative}.fd-resizable-card-layout:after,.fd-resizable-card-layout:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-width:20rem;position:relative}.fd-resizable-card-layout__item:after,.fd-resizable-card-layout__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__card{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;-webkit-box-flex:1;-ms-flex:1;flex:1;height:calc(100% - .0625rem);position:relative}.fd-resizable-card-layout__card:after,.fd-resizable-card-layout__card:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1.5rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1.5rem;padding-block:0;padding-inline:0;width:1.5rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;bottom:-.35rem;justify-content:flex-start;position:absolute;right:0;z-index:2}.fd-resizable-card-layout__icon-wrapper:after,.fd-resizable-card-layout__icon-wrapper:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon-wrapper{bottom:-.125rem;left:-.25rem;right:auto}.fd-resizable-card-layout__icon{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1rem;padding-block:0;padding-inline:0;width:1rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--sapButton_Lite_TextColor);cursor:nwse-resize;font-family:SAP-icons;font-size:1rem;height:100%;line-height:1rem;position:absolute;width:100%;z-index:2}.fd-resizable-card-layout__icon:after,.fd-resizable-card-layout__icon:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon:before{content:\\\"\\\\e24f\\\";font-family:SAP-icons;height:100%;text-align:center;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;width:100%}.fd-resizable-card-layout__icon[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon{cursor:nesw-resize;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fd-resizable-card-layout__icon--vertical,.fd-resizable-card-layout__icon--vertical[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--vertical{cursor:ns-resize}.fd-resizable-card-layout__icon--horizontal,.fd-resizable-card-layout__icon--horizontal[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--horizontal{cursor:ew-resize}.fd-resizable-card-layout__resize--vertical{-webkit-box-ordinal-group:3;-ms-flex-order:2;cursor:ew-resize;order:2;width:.0625rem;z-index:2}.fd-resizable-card-layout__resize--vertical::content{content:\\\"\\\";position:absolute}.fd-resizable-card-layout__resize--horizontal{bottom:0;cursor:ns-resize;height:.0625rem;position:absolute;width:calc(100% - .5rem);z-index:2}.fd-resizable-card-layout__indication-border{border:0;border:.125rem dashed var(--sapContent_DragAndDropActiveColor);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-resizable-card-layout__indication-border:after,.fd-resizable-card-layout__indication-border:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout--sm{padding-inline:.5rem}.fd-resizable-card-layout--lg,.fd-resizable-card-layout--md{padding-inline:1rem}.fd-resizable-card-layout--xl{padding-inline:3rem}fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper{right:0}[dir=rtl] fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper,fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper[dir=rtl]{right:auto;left:-.375rem;bottom:0}fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper .fd-resizable-card-layout__icon{width:100%;height:100%}fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper .fd-resizable-card-layout__icon:before{width:100%;height:100%}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/resizable-card-layout.css:\\n (*!\\n * Fundamental Library Styles v0.40.1\\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\\n *)\\n*/\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.RtlService, decorators: [{\n type: Optional\n }] }], propDecorators: { layoutConfig: [{\n type: Input\n }], stepChange: [{\n type: Output\n }], resizing: [{\n type: Output\n }], resized: [{\n type: Output\n }], miniHeaderReached: [{\n type: Output\n }], miniContentReached: [{\n type: Output\n }], layoutChange: [{\n type: Output\n }], resizeCardItems: [{\n type: ContentChildren,\n args: [ResizableCardItemComponent]\n }], _handleKeydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], onResize: [{\n type: HostListener,\n args: ['window:resize']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLWNhcmQtbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9yZXNpemFibGUtY2FyZC1sYXlvdXQvcmVzaXphYmxlLWNhcmQtbGF5b3V0L3Jlc2l6YWJsZS1jYXJkLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvcmVzaXphYmxlLWNhcmQtbGF5b3V0L3Jlc2l6YWJsZS1jYXJkLWxheW91dC9yZXNpemFibGUtY2FyZC1sYXlvdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUNILDBCQUEwQixFQUcxQixHQUFHLEVBQ0gsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDckIsTUFBTSxxREFBcUQsQ0FBQzs7O0FBYTdELE1BQU0sT0FBTyw0QkFBNEI7SUFrRXJDLGNBQWM7SUFDZCxZQUNxQixHQUFzQixFQUN2QixVQUFzQixFQUNULFdBQXVCO1FBRm5DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3ZCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDVCxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtR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QUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFVBQVUsQ0FBQyxTQUFxQyxFQUFFLFVBQXNDO1FBQzVGLE9BQU8sU0FBUyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQzVDLENBQUM7OEdBcGtCUSw0QkFBNEI7a0dBQTVCLDRCQUE0Qiw0YkE4QnBCLDBCQUEwQiw2QkM1RS9DLGdQQVNBOzsyRkRxQ2EsNEJBQTRCO2tCQVJ4QyxTQUFTOytCQUNJLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxjQUN6QixJQUFJOzswQkF3RVgsUUFBUTt5Q0FuRWIsWUFBWTtzQkFEWCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsTUFBTTtnQkFLUCxRQUFRO3NCQURQLE1BQU07Z0JBS1AsT0FBTztzQkFETixNQUFNO2dCQUtQLGlCQUFpQjtzQkFEaEIsTUFBTTtnQkFLUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQUtQLGVBQWU7c0JBRGQsZUFBZTt1QkFBQywwQkFBMEI7Z0JBNkMzQyxjQUFjO3NCQURiLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWNuQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzS2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGNvbXB1dGVkLFxuICAgIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQsXG4gICAgUmVzaXphYmxlQ2FyZEl0ZW1Db25maWcsXG4gICAgUmVzaXplZEV2ZW50LFxuICAgIGdhcCxcbiAgICBob3Jpem9udGFsUmVzaXplT2Zmc2V0LFxuICAgIGhvcml6b250YWxSZXNpemVTdGVwLFxuICAgIHZlcnRpY2FsUmVzaXplU3RlcFxufSBmcm9tICcuL3Jlc2l6YWJsZS1jYXJkLWl0ZW0vcmVzaXphYmxlLWNhcmQtaXRlbS5jb21wb25lbnQnO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRTaXplID0gJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3hsJztcbmV4cG9ydCB0eXBlIFJlc2l6YWJsZUNhcmRMYXlvdXRDb25maWcgPSBBcnJheTxSZXNpemFibGVDYXJkSXRlbUNvbmZpZz47XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0JyxcbiAgICB0ZW1wbGF0ZVVybDogJ3Jlc2l6YWJsZS1jYXJkLWxheW91dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3Jlc2l6YWJsZS1jYXJkLWxheW91dC5jb21wb25lbnQuc2NzcycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZUNhcmRMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIE9iamVjdCBmb3Igc2V0dGluZyBlYWNoIGNhcmQgcHJvcGVydHkgKi9cbiAgICBASW5wdXQoKVxuICAgIGxheW91dENvbmZpZzogUmVzaXphYmxlQ2FyZExheW91dENvbmZpZztcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgcmVzaXplIGlzIHJlYWNoZWQgdG8gb25lIG5ldyBzdGVwIGluIGhvcml6b250YWwgb3IgdmVydGljYWwgZGlyZWN0aW9uICovXG4gICAgQE91dHB1dCgpXG4gICAgc3RlcENoYW5nZTogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgaXMgc3RpbGwgcmVzaXppbmcgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZXNpemluZzogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgcmVzaXplIGlzIGNvbXBsZXRlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlc2l6ZWQ6IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBjYXJkIGhlaWdodCBpcyByZWR1Y2VkIHRvIHNob3cgb25seSBoZWFkZXIgKi9cbiAgICBAT3V0cHV0KClcbiAgICBtaW5pSGVhZGVyUmVhY2hlZDogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIG1pbmltdW0gaGVpZ2h0IG9mIGNhcmQgY29udGVudCBhcmVhIGlzIHJlYWNoZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBtaW5pQ29udGVudFJlYWNoZWQ6IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBsYXlvdXQgY2hhbmdlcyAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGxheW91dENoYW5nZTogRXZlbnRFbWl0dGVyPFJlc2l6YWJsZUNhcmRMYXlvdXRDb25maWc+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemFibGVDYXJkTGF5b3V0Q29uZmlnPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50KVxuICAgIHJlc2l6ZUNhcmRJdGVtczogUXVlcnlMaXN0PFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50PjtcblxuICAgIC8qKiB3aWR0aCBmb3IgbGF5b3V0ICovXG4gICAgbGF5b3V0V2lkdGg6IG51bWJlcjtcblxuICAgIC8qKiBoZWlnaHQgZm9yIGxheW91dCAqL1xuICAgIGxheW91dEhlaWdodDogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gTnVtYmVyIG9mIGNvbHVtbnMgaW4gbGF5b3V0LiBjb25zaWRlcmluZyAxIGNvbHVtbiB3aWR0aCAyMHJlbSAqL1xuICAgIHByaXZhdGUgX2NvbHVtbnM6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuIExheW91dCBwYWRkaW5nLiB3aWxsIGJlIGFkZGVkIHRvIGZpcnN0IGNhcmQgcGFkZGluZyBpbiBldmVyeSByb3cgKi9cbiAgICBwcml2YXRlIF9wYWRkaW5nTGVmdDogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gU3RvcmVzIGhlaWdodCBvZiBlYWNoIGNvbHVtbiBvbiBjYXJkIGFycmFuZ2VtZW50ICovXG4gICAgcHJpdmF0ZSBfY29sdW1uc0hlaWdodDogQXJyYXk8bnVtYmVyPjtcblxuICAgIC8qKiBAaGlkZGVuIEF2YWlsYWJsZSBzY3JlZW4gbGF5b3V0ICovXG4gICAgcHJpdmF0ZSBfbGF5b3V0OiBMYXlvdXRTaXplO1xuXG4gICAgLyoqIEBoaWRkZW4gU3RvcmVzIHNvcnRlZCBjYXJkIGJlZm9yZSBwbGFjaW5nIGluIGxheW91dCAqL1xuICAgIHByaXZhdGUgX3NvcnRlZENhcmRzOiBBcnJheTxSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiBGb2N1c0tleU1hbmFnZXIgaW5zdGFuY2UgKi9cbiAgICBwcml2YXRlIF9rZXlib2FyZEV2ZW50c01hbmFnZXI6IEZvY3VzS2V5TWFuYWdlcjxSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xheW91dFNoaWZ0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGlyZWN0aW9uUG9zaXRpb24kID0gY29tcHV0ZWQ8J2xlZnQnIHwgJ3JpZ2h0Jz4oKCkgPT4gKHRoaXMuX3J0bFNlcnZpY2U/LnJ0bFNpZ25hbCgpID8gJ3JpZ2h0JyA6ICdsZWZ0JykpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuIGhhbmRsZXMga2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIF9oYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoIXRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlci5hY3RpdmVJdGVtSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgICBvblJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlTGF5b3V0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29sdW1uc0hlaWdodCA9IG5ldyBBcnJheSh0aGlzLl9jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5fY29sdW1uc0hlaWdodC5maWxsKDApO1xuICAgICAgICAvLyBpbml0aWFsaXNlIHZhbHVlIDBcbiAgICAgICAgLy8gZGV0ZWN0IGluaXRpYWwgd2luZG93IHNpemUgYW5kIHNldCBsYXlvdXRcbiAgICAgICAgdGhpcy5fY3JlYXRlTGF5b3V0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luaXRpYWxTZXR1cCgpO1xuICAgICAgICAvLyBsaXN0ZW4gZm9yIHF1ZXJ5LWxpc3QgY2hhbmdlXG4gICAgICAgIHRoaXMucmVzaXplQ2FyZEl0ZW1zPy5mb3JFYWNoKChjYXJkKSA9PiB7XG4gICAgICAgICAgICBjYXJkPy52ZXJpZnlVcGRhdGVDYXJkV2lkdGgodGhpcy5sYXlvdXRTaXplKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZXNpemVDYXJkSXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5yZXNpemVDYXJkSXRlbXM/LnRvQXJyYXkoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFycmFuZ2VDYXJkcyh0aGlzLnJlc2l6ZUNhcmRJdGVtcz8udG9BcnJheSgpKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FjY2Vzc2liaWxpdHlTZXR1cCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlcj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKiBMYXlvdXQgc2l6ZS4gQXZhaWxhYmxlIG9wdGlvbnMgYXJlICdzbScsICdtZCcsICdsZycgYW5kICd4bCcgKi9cbiAgICBzZXQgbGF5b3V0U2l6ZShsYXlvdXRTaXplOiBMYXlvdXRTaXplKSB7XG4gICAgICAgIHRoaXMuX2xheW91dCA9IGxheW91dFNpemU7XG4gICAgfVxuICAgIGdldCBsYXlvdXRTaXplKCk6IExheW91dFNpemUge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGF5b3V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFycmFuZ2VzIGNhcmRzIGluIGxheW91dCBiYXNlZCBvbiByYW5rLCB3aWR0aCBhbmQgaGVpZ2h0IG9mIGNhcmRcbiAgICAgKiBAcGFyYW0gY2FyZHMgQXJyYXkgb2YgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnRcbiAgICAgKi9cbiAgICBhcnJhbmdlQ2FyZHMoY2FyZHM6IEFycmF5PFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50Pik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb2x1bW5zSGVpZ2h0ID0gbmV3IEFycmF5KHRoaXMuX2NvbHVtbnMpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zSGVpZ2h0LmZpbGwoMCk7XG4gICAgICAgIC8vIHNvcnQgYmFzZWQgb24gdGhlIGNhcmQgcmFua1xuICAgICAgICB0aGlzLl9zb3J0ZWRDYXJkcyA9IGNhcmRzPy5zb3J0KHRoaXMuX3NvcnRDYXJkcyk7XG5cbiAgICAgICAgdGhpcy5fc29ydGVkQ2FyZHM/LmZvckVhY2goKGNhcmQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDYXJkUG9zaXRpb25WYWx1ZXMoY2FyZCwgaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ29sdW1uc0hlaWdodChjYXJkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGF5b3V0SGVpZ2h0ID0gTWF0aC5tYXguYXBwbHkobnVsbCwgdGhpcy5fY29sdW1uc0hlaWdodCkgKyB2ZXJ0aWNhbFJlc2l6ZVN0ZXA7XG5cbiAgICAgICAgdGhpcy5fZW1pdExheW91dENoYW5nZSgpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHNoaWZ0aW5nIG9mIGNhcmRzIHdpdGggYW5pbWF0aW9uLCB3aGlsZSBjYXJkIGlzIHN0aWxsIHJlc2l6aW5nLlxuICAgICAqIEBwYXJhbSBldmVudCB7UmVzaXplZEV2ZW50fVxuICAgICAqL1xuICAgIGNhcmRSZXNpemluZyhldmVudDogUmVzaXplZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVzaXppbmcuZW1pdChldmVudCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUhvcml6b250YWxSZXNpemUoZXZlbnQpO1xuICAgICAgICB0aGlzLl9oYW5kbGVWZXJ0aWNhbFJlc2l6ZShldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBhcnJhbmdlbWVudCBvZiBjYXJkcyBpbiBsYXlvdXRcbiAgICAgKiBAcGFyYW0gZXZlbnQge1Jlc2l6ZWRFdmVudH1cbiAgICAgKi9cbiAgICBjYXJkUmVzaXplQ29tcGxldGUoZXZlbnQ6IFJlc2l6ZWRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9sYXlvdXRTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYXJyYW5nZUNhcmRzKHRoaXMucmVzaXplQ2FyZEl0ZW1zLnRvQXJyYXkoKSk7XG4gICAgICAgIHRoaXMucmVzaXplZC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHVwZGF0ZUxheW91dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVDYXJkSXRlbXM/LmZvckVhY2goKGNhcmQpID0+IHtcbiAgICAgICAgICAgIGNhcmQ/LnZlcmlmeVVwZGF0ZUNhcmRXaWR0aCh0aGlzLmxheW91dFNpemUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5yZXNpemVDYXJkSXRlbXM/LnRvQXJyYXkoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbWV0aG9kIHRvIGdldCBzY3JlZW4gd2lkdGhcbiAgICAgKiBAcmV0dXJucyBXaW5kb3cgd2lkdGggaW4gcHhcbiAgICAgKi9cbiAgICBnZXRXaWR0aEF2YWlsYWJsZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU3Vic2NyaWJlIHRvIGV2ZW50cyBmcm9tIGl0ZW1zICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbFNldHVwKCk6IHZvaWQge1xuICAgICAgICAvLyBsaXN0ZW4gZm9yIHJlc2l6aW5nIGV2ZW50IG9mIGNhcmQgaXRlbVxuICAgICAgICB0aGlzLnJlc2l6ZUNhcmRJdGVtcz8uZm9yRWFjaCgocmVzaXplQ2FyZEl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXRDb25maWcgJiYgdGhpcy5sYXlvdXRDb25maWcubGVuZ3RoID49IGluZGV4ICsgMSkge1xuICAgICAgICAgICAgICAgIHJlc2l6ZUNhcmRJdGVtLmNvbmZpZyA9IHRoaXMubGF5b3V0Q29uZmlnW2luZGV4XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzaXplQ2FyZEl0ZW0ucmVzaXppbmdcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFJlc2l6ZWRFdmVudCkgPT4gdGhpcy5jYXJkUmVzaXppbmcoZXZlbnQpKTtcblxuICAgICAgICAgICAgLy8gbGlzdGVuIGZvciByZXNpemUgY29tcGxldGUgZXZlbnQgb2YgY2FyZCBpdGVtXG4gICAgICAgICAgICByZXNpemVDYXJkSXRlbS5yZXNpemVkXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBSZXNpemVkRXZlbnQpID0+IHRoaXMuY2FyZFJlc2l6ZUNvbXBsZXRlKGV2ZW50KSk7XG5cbiAgICAgICAgICAgIC8vIGxpc3RlbiBmb3IgbWluaS1oZWFkZXIgaGVpZ2h0IGV2ZW50IG9mIGNhcmQgaXRlbVxuICAgICAgICAgICAgcmVzaXplQ2FyZEl0ZW0ubWluaUhlYWRlclJlYWNoZWRcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFJlc2l6ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbmlIZWFkZXJSZWFjaGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGxpc3RlbiBmb3IgbWluaS1jb250ZW50IGhlaWdodCBldmVudCBvZiBjYXJkIGl0ZW1cbiAgICAgICAgICAgIHJlc2l6ZUNhcmRJdGVtLm1pbmlDb250ZW50UmVhY2hlZFxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogUmVzaXplZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWluaUNvbnRlbnRSZWFjaGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWNjZXNzaWJpbGl0eVNldHVwKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXI/LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcih0aGlzLnJlc2l6ZUNhcmRJdGVtcykud2l0aFdyYXAoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBjcmVhdGUgbGF5b3V0IGJhc2VkIG9uIGxheW91dCBzaXplICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlTGF5b3V0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzY3JlZW5XaWR0aCA9IHRoaXMuZ2V0V2lkdGhBdmFpbGFibGUoKTtcbiAgICAgICAgY29uc3QgcHJldkxheW91dFNpemUgPSB0aGlzLmxheW91dFNpemU7XG5cbiAgICAgICAgaWYgKHNjcmVlbldpZHRoID4gMCAmJiBzY3JlZW5XaWR0aCA8PSA2NTYgJiYgcHJldkxheW91dFNpemUgIT09ICdzbScpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0U2l6ZSA9ICdzbSc7XG4gICAgICAgICAgICB0aGlzLl9zZXRMYXlvdXRDb2x1bW5zKHRoaXMubGF5b3V0U2l6ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHNjcmVlbldpZHRoID4gNjU2ICYmIHNjcmVlbldpZHRoIDw9IDk3NSAmJiBwcmV2TGF5b3V0U2l6ZSAhPT0gJ21kJykge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRTaXplID0gJ21kJztcbiAgICAgICAgICAgIHRoaXMuX3NldExheW91dENvbHVtbnModGhpcy5sYXlvdXRTaXplKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NyZWVuV2lkdGggPiA5NzUgJiYgc2NyZWVuV2lkdGggPD0gMTM1OSAmJiBwcmV2TGF5b3V0U2l6ZSAhPT0gJ2xnJykge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRTaXplID0gJ2xnJztcbiAgICAgICAgICAgIHRoaXMuX3NldExheW91dENvbHVtbnModGhpcy5sYXlvdXRTaXplKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NyZWVuV2lkdGggPiAxMzU5ICYmIHByZXZMYXlvdXRTaXplICE9PSAneGwnKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFNpemUgPSAneGwnO1xuICAgICAgICAgICAgdGhpcy5fc2V0TGF5b3V0Q29sdW1ucyh0aGlzLmxheW91dFNpemUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEVtaXQgbGF5b3V0Q2hhbmdlIGV2ZW50IHdpdGggdXBkYXRlZCBjYXJkIGRpbWVuc2lvbnMgKi9cbiAgICBwcml2YXRlIF9lbWl0TGF5b3V0Q2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBsYXRlc3RDYXJkQ29uZmlnOiBSZXNpemFibGVDYXJkTGF5b3V0Q29uZmlnID0gW107XG4gICAgICAgIHRoaXMucmVzaXplQ2FyZEl0ZW1zPy5mb3JFYWNoKChjYXJkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXJkQ29uZmlnOiBSZXNpemFibGVDYXJkSXRlbUNvbmZpZyA9IHt9O1xuICAgICAgICAgICAgY2FyZENvbmZpZy5jYXJkV2lkdGhDb2xTcGFuID0gY2FyZC5jYXJkV2lkdGhDb2xTcGFuO1xuICAgICAgICAgICAgY2FyZENvbmZpZy5jYXJkSGVpZ2h0Um93U3BhbiA9IGNhcmQuY2FyZEhlaWdodFJvd1NwYW47XG4gICAgICAgICAgICBjYXJkQ29uZmlnLnJhbmsgPSBjYXJkLnJhbms7XG4gICAgICAgICAgICBjYXJkQ29uZmlnLnRpdGxlID0gY2FyZC50aXRsZTtcbiAgICAgICAgICAgIGNhcmRDb25maWcuY2FyZE1pbmlDb250ZW50Um93U3BhbiA9IGNhcmQuY2FyZE1pbmlDb250ZW50Um93U3BhbjtcbiAgICAgICAgICAgIGNhcmRDb25maWcuY2FyZE1pbmlIZWFkZXJSb3dTcGFuID0gY2FyZC5jYXJkTWluaUhlYWRlclJvd1NwYW47XG4gICAgICAgICAgICBjYXJkQ29uZmlnLnJlc2l6YWJsZSA9IGNhcmQucmVzaXphYmxlO1xuICAgICAgICAgICAgbGF0ZXN0Q2FyZENvbmZpZy5wdXNoKGNhcmRDb25maWcpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2UuZW1pdChsYXRlc3RDYXJkQ29uZmlnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIFNldHMgbnVtYmVyIG9mIGNvbHVtbiBpbiBsYXlvdXQsIGJhc2VkIG9uIExheW91dFNpemUgcGFzc2VkXG4gICAgICogQHBhcmFtIGxheW91dFNpemUgeydzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCd9XG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0TGF5b3V0Q29sdW1ucyhsYXlvdXRTaXplOiBMYXlvdXRTaXplKTogdm9pZCB7XG4gICAgICAgIGxldCBsYXlvdXRXaWR0aERlZmF1bHQ6IG51bWJlcjtcblxuICAgICAgICBzd2l0Y2ggKGxheW91dFNpemUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zID0gMTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYWRkaW5nTGVmdCA9IDg7XG4gICAgICAgICAgICAgICAgbGF5b3V0V2lkdGhEZWZhdWx0ID0gdGhpcy5fY29sdW1ucyAqIGhvcml6b250YWxSZXNpemVTdGVwICsgMiAqIHRoaXMuX3BhZGRpbmdMZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0V2lkdGggPSBsYXlvdXRXaWR0aERlZmF1bHQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sdW1ucyA9IDI7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFkZGluZ0xlZnQgPSAxNjtcbiAgICAgICAgICAgICAgICBsYXlvdXRXaWR0aERlZmF1bHQgPSB0aGlzLl9jb2x1bW5zICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgKyAyICogdGhpcy5fcGFkZGluZ0xlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRXaWR0aCA9IGxheW91dFdpZHRoRGVmYXVsdCArIGdhcDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xnJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zID0gMztcbiAgICAgICAgICAgICAgICB0aGlzLl9wYWRkaW5nTGVmdCA9IDE2O1xuICAgICAgICAgICAgICAgIGxheW91dFdpZHRoRGVmYXVsdCA9IHRoaXMuX2NvbHVtbnMgKiBob3Jpem9udGFsUmVzaXplU3RlcCArIDIgKiB0aGlzLl9wYWRkaW5nTGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dFdpZHRoID0gbGF5b3V0V2lkdGhEZWZhdWx0ICsgMiAqIGdhcDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3hsJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zID0gNDtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYWRkaW5nTGVmdCA9IDQ4O1xuICAgICAgICAgICAgICAgIGxheW91dFdpZHRoRGVmYXVsdCA9IHRoaXMuX2NvbHVtbnMgKiBob3Jpem9udGFsUmVzaXplU3RlcCArIDIgKiB0aGlzLl9wYWRkaW5nTGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dFdpZHRoID0gbGF5b3V0V2lkdGhEZWZhdWx0ICsgMyAqIGdhcDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sdW1ucyA9IDQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFkZGluZ0xlZnQgPSA0ODtcbiAgICAgICAgICAgICAgICBsYXlvdXRXaWR0aERlZmF1bHQgPSB0aGlzLl9jb2x1bW5zICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgKyAyICogdGhpcy5fcGFkZGluZ0xlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRXaWR0aCA9IGxheW91dFdpZHRoRGVmYXVsdCArIDMgKiBnYXA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIE1ldGhvZCB0byBoYW5kbGUgY2FyZCB2ZXJ0aWNhbCByZXNpemUgYW5kIHRyaWdnZXIgdGhlIGxheW91dCBjaGFuZ2VcbiAgICAgKiBAcGFyYW0gZXZlbnQge1Jlc2l6ZWRFdmVudH1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYW5kbGVWZXJ0aWNhbFJlc2l6ZShldmVudDogUmVzaXplZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5jYXJkLmNhcmRIZWlnaHRSb3dTcGFuICE9PSBldmVudC5jYXJkLnByZXZpb3VzQ2FyZEhlaWdodFJvd1NwYW4pIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYW5nZUNhcmRzKHRoaXMuX3NvcnRlZENhcmRzKTtcbiAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5zdGVwQ2hhbmdlLmVtaXQoZXZlbnQuY2FyZC5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIE1ldGhvZCB0byBoYW5kbGUgY2FyZCBob3Jpem9udGFsIHJlc2l6ZSBhbmQgdHJpZ2dlciB0aGUgbGF5b3V0IGNoYW5nZVxuICAgICAqIEBwYXJhbSBldmVudCB7UmVzaXplZEV2ZW50fVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUhvcml6b250YWxSZXNpemUoZXZlbnQ6IFJlc2l6ZWRFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyB3aGVuIGluY3JlYXNpbmcgd2lkdGggaGl0IHRoZSBvZmZzZXQsIHNob3cgZXh0ZW5kZWQgYm9yZGVyIGFuZCBzdGFydCBwdXNoaW5nIGRvd24gYm9yZGVyIGNhcmRzXG4gICAgICAgIC8vIHdoZW4gd2lkdGggaXMgZGVjcmVhc2luZyAsIHNob3cgZXh0ZW5kZWQgYm9yZGVyIHRpbGwgaXQgcmVhY2hlcyB0byBvZmZzZXQuXG4gICAgICAgIGNvbnN0IGNhcmRXaWR0aENoYW5nZSA9IGV2ZW50LmNhcmRXaWR0aCAtIGV2ZW50LnByZXZDYXJkV2lkdGg7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZXNpemluZ0l0ZW1JbmRleCA9IHRoaXMuX3NvcnRlZENhcmRzPy5maW5kSW5kZXgoKHgpID0+IHgucmFuayA9PT0gZXZlbnQuY2FyZC5yYW5rKTtcblxuICAgICAgICBpZiAoZXZlbnQuY2FyZFdpZHRoID4gZXZlbnQucHJldkNhcmRXaWR0aCkge1xuICAgICAgICAgICAgLy8gd2hlbiBpbmNyZWFzaW5nIHNpemVcbiAgICAgICAgICAgIC8vIGNhcmQgd2lkdGggaW5jcmVhc2luZyBjdXJyZW50bHlcbiAgICAgICAgICAgIGlmIChldmVudC5jYXJkLmNhcmRTdGF0ZSA9PT0gMSAmJiBjYXJkV2lkdGhDaGFuZ2UgPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0ICsgZ2FwICYmICF0aGlzLl9sYXlvdXRTaGlmdGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gaW5kZXggb2YgdGhpcyBjYXJkLCB0aGVuIGdldCBuZXh0IGNhcmQuIGV4Y2hhbmdlIHJhbmtzXG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydGVkQ2FyZHMuZm9yRWFjaCgoY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gY3VycmVudFJlc2l6aW5nSXRlbUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgc29tZSBjYXJkcyBvbiBzYW1lIGhlaWdodC4gbWFrZSB0aGUgY3VycmVudCBjYXJkIHJhbmsgaGlnaGVyIHRoYW4gdGhlc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgbmV4dCBpbmRleCB3aGVyZSBpdCB3aWxsIGZpdC4gdW50aWwgYW55IGNhcmQgaGFzIGxlc3MgY29sdW1uIHNwYW4gdGhhbiB0b3RhbCBjb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBvbmx5IGluIG5leHQgdG9wLCBvbmUgY2FyZCBpcyB0YWtpbmcgZnVsbCBjb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC5zdGFydGluZ0NvbHVtblBvc2l0aW9uICsgY2FyZC5jYXJkV2lkdGhDb2xTcGFuID09PSB0aGlzLl9jb2x1bW5zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC5jYXJkV2lkdGhDb2xTcGFuICE9PSB0aGlzLl9jb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgY2FyZHMgd2l0aCB0b3AgPiBjdXJyZW50IHRvcCAsIGJ1dCBtaW5pbXVtIG9mIGl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhjaGFuZ2UgcmFuayB3aXRoIHRoZXNlIGNhcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQ2FyZERvd24oaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGF5b3V0U2hpZnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5fc29ydGVkQ2FyZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KGV2ZW50LmNhcmQuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBldmVudC5jYXJkLmNhcmRTdGF0ZSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICBjYXJkV2lkdGhDaGFuZ2UgPCBob3Jpem9udGFsUmVzaXplT2Zmc2V0ICsgZ2FwICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbGF5b3V0U2hpZnRlZFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FyZCB3aWR0aCBkZWNyZWFzaW5nIGN1cnJlbnRseVxuICAgICAgICAgICAgICAgIC8vIG1vdmUgdXAgdGhlIGNhcmRzLCBpZiBpdCB3YXMgc2hpZnRlZCB3aGlsZSBpbmNyZWFzaW5nIHRoZSB3aWR0aFxuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnRlZENhcmRzLmZvckVhY2goKGNhcmQ6IFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNhcmQucmFuayA9IGNhcmQucHJldlJhbmsgPyBjYXJkLnByZXZSYW5rIDogY2FyZC5yYW5rO1xuICAgICAgICAgICAgICAgICAgICBjYXJkLnByZXZSYW5rID0gMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXlvdXRTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5fc29ydGVkQ2FyZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KGV2ZW50LmNhcmQuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNhcmRXaWR0aCA8IGV2ZW50LnByZXZDYXJkV2lkdGgpIHtcbiAgICAgICAgICAgIC8vIHdoZW4gZGVjcmVhc2luZyBzaXplXG4gICAgICAgICAgICBpZiAoZXZlbnQuY2FyZC5jYXJkU3RhdGUgPT09IC0xICYmIC1jYXJkV2lkdGhDaGFuZ2UgPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0ICYmICF0aGlzLl9sYXlvdXRTaGlmdGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FyZCB3aWR0aCBkZWNyZWFzaW5nIGN1cnJlbnRseVxuICAgICAgICAgICAgICAgIHRoaXMuX2xheW91dFNoaWZ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuYXJyYW5nZUNhcmRzKHRoaXMuX3NvcnRlZENhcmRzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBDaGFuZ2UuZW1pdChldmVudC5jYXJkLmdldFJlc2l6ZWRFdmVudE9iamVjdCgpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2FyZC5jYXJkU3RhdGUgPT09IDEgJiYgLWNhcmRXaWR0aENoYW5nZSA8IGhvcml6b250YWxSZXNpemVPZmZzZXQgJiYgdGhpcy5fbGF5b3V0U2hpZnRlZCkge1xuICAgICAgICAgICAgICAgIC8vIGNhcmQgd2lkdGggaW5jcmVhc2luZyBjdXJyZW50bHlcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXlvdXRTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5fc29ydGVkQ2FyZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KGV2ZW50LmNhcmQuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBNZXRob2QgdG8gbW92ZSBjYXJkIGRvd24sIHdoZW4gYW5vdGhlciBjYXJkIHdpZHRoIGlzIGluY3JlYXNpbmdcbiAgICAgKiBNZXRob2QgdG8gbG9vcCB0aWxsIHRoaXMuX2NvbHVtbnMgLTEgcG9zaXRpb25zIGFuZCBleGNoYW5nZSB0aGUgcmFua1xuICAgICAqIEBwYXJhbSBjdXJyZW50Q2FyZEluZGV4IEluZGV4IG9mIGN1cnJlbnQgY2FyZFxuICAgICAqL1xuICAgIHByaXZhdGUgX21vdmVDYXJkRG93bihjdXJyZW50Q2FyZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gdGFraW5nIHdpZHRoIG9mIGFkamFjZW50IGNhcmQgY29sLXNwYW4gaW50byBhY2NvdW50XG5cbiAgICAgICAgLy8gZWc6IDQgY29sdW1ucyAtIDIgY29sKGFkamFjZW50IGNhcmQpID0gMiBwb3NpdGlvbnMgY2FuIGV4Y2hhbmdlIHJhbmtzXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDYXJkOiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCA9IHRoaXMuX3NvcnRlZENhcmRzW2N1cnJlbnRDYXJkSW5kZXhdO1xuICAgICAgICBsZXQgY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQ7XG5cbiAgICAgICAgLy8gdW5vY2N1cGllZFBvc2l0aW9ucyBwb3NpdGlvbnMgbGVmdCBhZnRlciBjdXJyZW50Q2FyZCBvY2N1cGllcyBpbiBuZXh0IHJvdy5cbiAgICAgICAgbGV0IHVub2NjdXBpZWRQb3NpdGlvbnMgPSB0aGlzLl9jb2x1bW5zIC0gY3VycmVudENhcmQuY2FyZFdpZHRoQ29sU3BhbjtcblxuICAgICAgICBjdXJyZW50Q2FyZC5wcmV2UmFuayA9IGN1cnJlbnRDYXJkLnJhbms7XG5cbiAgICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgICAgd2hpbGUgKHVub2NjdXBpZWRQb3NpdGlvbnMgPiAwKSB7XG4gICAgICAgICAgICAvLyBjb21wYXJlIGZyb20gbmV4dCBjYXJkXG4gICAgICAgICAgICBjYXJkID0gdGhpcy5fc29ydGVkQ2FyZHNbaW5kZXggKyBjdXJyZW50Q2FyZEluZGV4XTtcbiAgICAgICAgICAgIGlmIChjYXJkICYmIHVub2NjdXBpZWRQb3NpdGlvbnMgPj0gY2FyZC5jYXJkV2lkdGhDb2xTcGFuKSB7XG4gICAgICAgICAgICAgICAgY2FyZC5wcmV2UmFuayA9IGNhcmQucmFuaztcbiAgICAgICAgICAgICAgICBjYXJkLnJhbmsgLT0gMTtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2FyZC5yYW5rID0gY2FyZC5wcmV2UmFuaztcbiAgICAgICAgICAgICAgICB1bm9jY3VwaWVkUG9zaXRpb25zIC09IGNhcmQuY2FyZFdpZHRoQ29sU3BhbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdW5vY2N1cGllZFBvc2l0aW9ucyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiB1cGRhdGVzIGFycmF5IHdpdGggbmV3IGNvbHVtbiBoZWlnaHRzXG4gICAgICogQHBhcmFtIGNhcmQge1Jlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50fVxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUNvbHVtbnNIZWlnaHQoY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uUG9zaXRpb24gPSB0aGlzLl9kaXJlY3Rpb25Qb3NpdGlvbiQoKTtcbiAgICAgICAgY29uc3QgY29sdW1uc1N0YXJ0ID1cbiAgICAgICAgICAgIGNhcmRbZGlyZWN0aW9uUG9zaXRpb25dICE9IG51bGwgPyBNYXRoLmZsb29yKGNhcmRbZGlyZWN0aW9uUG9zaXRpb25dISAvIGhvcml6b250YWxSZXNpemVTdGVwKSA6IDA7XG5cbiAgICAgICAgLy8gR2V0IHdpZHRoIG9mIGN1cnJlbnQgY2FyZCByZXNpemluZyBhbmQgYXNzaWduIHdpZHRoIGhlcmUgZm9yIHRoYXQgY2FyZFxuICAgICAgICBjb25zdCBjYXJkQmFzZUNvbFNwYW4gPSBNYXRoLmZsb29yKGNhcmQuY2FyZFdpZHRoIC8gaG9yaXpvbnRhbFJlc2l6ZVN0ZXApO1xuXG4gICAgICAgIC8vIHRpbGwgd2hpY2ggY29sdW1ucyBjYXJkIHNwYW5zXG4gICAgICAgIGNvbnN0IGNvbHVtbnNTcGFuID1cbiAgICAgICAgICAgIGNhcmQuY2FyZFdpZHRoIC0gY2FyZEJhc2VDb2xTcGFuICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgLSBjYXJkQmFzZUNvbFNwYW4gKiBnYXAgPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0XG4gICAgICAgICAgICAgICAgPyBjYXJkQmFzZUNvbFNwYW4gKyAxXG4gICAgICAgICAgICAgICAgOiBjYXJkQmFzZUNvbFNwYW47XG5cbiAgICAgICAgY29uc3QgY29sdW1uSGVpZ2h0ID0gY2FyZC5jYXJkSGVpZ2h0ICsgY2FyZC50b3A7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5zU3BhbjsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5zSGVpZ2h0W2kgKyBjb2x1bW5zU3RhcnRdID0gY29sdW1uSGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbnNTdGFydCA9PT0gY29sdW1uc1NwYW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNIZWlnaHRbY29sdW1uc1N0YXJ0XSA9IGNvbHVtbkhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gVHJ5IHRvIHNldCBjYXJkIGF0IGF2YWlsYWJsZSBoZWlnaHRzXG4gICAgICogQHBhcmFtIGNhcmQgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnRcbiAgICAgKiBAcGFyYW0gaW5kZXggdmFsdWUgb2YgY2FyZCBpbiBhcnJheSBvZiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldENhcmRQb3NpdGlvblZhbHVlcyhjYXJkOiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBkaXJlY3Rpb25Qb3NpdGlvbiA9IHRoaXMuX2RpcmVjdGlvblBvc2l0aW9uJCgpO1xuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIGNhcmRbZGlyZWN0aW9uUG9zaXRpb25dID0gTnVtYmVyKHRoaXMuX3BhZGRpbmdMZWZ0KTtcbiAgICAgICAgICAgIGNhcmQudG9wID0gMDtcbiAgICAgICAgICAgIGNhcmQuc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxdWVIZWlnaHRzID0gdGhpcy5fZ2V0U29ydGVkVW5pcXVlSGVpZ2h0cygpO1xuICAgICAgICBsZXQgY2FyZFBvc2l0aW9uZWQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVuaXF1ZUhlaWdodHMubGVuZ3RoICYmICFjYXJkUG9zaXRpb25lZDsgaSsrKSB7XG4gICAgICAgICAgICBjYXJkUG9zaXRpb25lZCA9IHRoaXMuX2lzUG9zaXRpb25TZXRTdWNjZXNzKHVuaXF1ZUhlaWdodHNbaV0sIGNhcmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiB0cnkgdG8gc2V0IGNhcmQgYXQgZ2l2ZW4gaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBoZWlnaHQgaGVpZ2h0IGF0IHdoaWNoIGNhcmQgaXMgZ2V0dGluZyBwb3NpdGlvbmVkLlxuICAgICAqIEBwYXJhbSBjYXJkIFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50XG4gICAgICogQHJldHVybnMgSXQgcmV0dXJucyB0cnVlIHdoZW4gY2FyZCBwb3NpdGlvbiBpZCBmb3VuZCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc1Bvc2l0aW9uU2V0U3VjY2VzcyhoZWlnaHQ6IG51bWJlciwgY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uUG9zaXRpb24gPSB0aGlzLl9kaXJlY3Rpb25Qb3NpdGlvbiQoKTtcbiAgICAgICAgY29uc3QgY29sdW1uUG9zaXRpb25zOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbkhlaWdodCBvZiB0aGlzLl9jb2x1bW5zSGVpZ2h0KSB7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA9PT0gaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgY29sdW1uUG9zaXRpb25zLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIGZvciBlYWNoIGNhcmQgcG9zaXRpb24sIHN0YXJ0aW5nIGZyb20gbGVmdG1vc3RcbiAgICAgICAgbGV0IGlzRml0dGluZyA9IGZhbHNlO1xuICAgICAgICAvLyB0cnkgdG8gZml0IGFzIGxlZnQgKG9yIHJpZ2h0IGlmIFJ0bCkgYXMgcG9zc2libGUgZnJvbSB0aGUgY29sdW1uIHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IHN0YXJ0aW5nQ29sdW1uUG9zaXRpb24gPSB0aGlzLl9maXRDYXJkQ29sdW1uUG9zaXRpb24oY2FyZCwgY29sdW1uUG9zaXRpb25zLCBoZWlnaHQpO1xuXG4gICAgICAgIGlmIChzdGFydGluZ0NvbHVtblBvc2l0aW9uICE9PSAtMSkge1xuICAgICAgICAgICAgaXNGaXR0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhcmRbZGlyZWN0aW9uUG9zaXRpb25dID1cbiAgICAgICAgICAgICAgICBzdGFydGluZ0NvbHVtblBvc2l0aW9uICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgK1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhZGRpbmdMZWZ0ICtcbiAgICAgICAgICAgICAgICAoc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbiA+IDAgPyBnYXAgKiBzdGFydGluZ0NvbHVtblBvc2l0aW9uIDogMCk7XG4gICAgICAgICAgICBjYXJkLnRvcCA9IGhlaWdodCArIChoZWlnaHQgPiAwID8gdmVydGljYWxSZXNpemVTdGVwIDogMCk7XG4gICAgICAgICAgICBjYXJkLnN0YXJ0aW5nQ29sdW1uUG9zaXRpb24gPSBzdGFydGluZ0NvbHVtblBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0ZpdHRpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBUcnkgdG8gc3RhcnQgY2FyZCBwb3NpdGlvbiBmcm9tIGxlZnQgbW9zdCBmaXQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIGNhcmQgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnRcbiAgICAgKiBAcGFyYW0gY29sdW1uUG9zaXRpb25zIHtBcnJheTxudW1iZXI+fSBBcnJheSBvZiBhdmFpbGFibGUgcG9zaXRpb25zIGZvciBjYXJkcy5cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IGhlaWdodCBhdCB3aGljaCBmaXhpbmcgdGhlIGNhcmRcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSByZXR1cm5zIHN0YXJ0aW5nIGNvbHVtbiBwb3NpdGlvbiB3aGVyZSBjYXJkIHdpbGwgZml0LlxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZpdENhcmRDb2x1bW5Qb3NpdGlvbihcbiAgICAgICAgY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQsXG4gICAgICAgIGNvbHVtblBvc2l0aW9uczogQXJyYXk8bnVtYmVyPixcbiAgICAgICAgaGVpZ2h0OiBudW1iZXJcbiAgICApOiBudW1iZXIge1xuICAgICAgICAvLyBjaGVjayBmb3IgZWFjaCBjYXJkIHBvc2l0aW9uLCBzdGFydGluZyBmcm9tIGxlZnRtb3N0XG4gICAgICAgIGxldCBpc0ZpdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0YXJ0aW5nQ29sdW1uUG9zaXRpb24gPSAtMTtcblxuICAgICAgICAvLyBzdGFydCBmcm9tIHByZXZpb3VzIGluZGV4ZXNcbiAgICAgICAgY29uc3QgY2FyZEJhc2VDb2xTcGFuID0gTWF0aC5mbG9vcihjYXJkLmNhcmRXaWR0aCAvIGhvcml6b250YWxSZXNpemVTdGVwKTtcbiAgICAgICAgY29uc3QgY2FyZENvbFNwYW4gPVxuICAgICAgICAgICAgY2FyZC5jYXJkV2lkdGggLSBjYXJkQmFzZUNvbFNwYW4gKiBob3Jpem9udGFsUmVzaXplU3RlcCAtIGNhcmRCYXNlQ29sU3BhbiAqIGdhcCA+IGhvcml6b250YWxSZXNpemVPZmZzZXRcbiAgICAgICAgICAgICAgICA/IGNhcmRCYXNlQ29sU3BhbiArIDFcbiAgICAgICAgICAgICAgICA6IGNhcmRCYXNlQ29sU3BhbjtcbiAgICAgICAgLy8gdHJ5IHRvIHNldCB0b3dhcmRzIGxlZnQgZnJvbSBhdmFpbGFibGUgY2FyZCBwb3NpdGlvblxuICAgICAgICAvLyBlZy4gWzEsIDIsIDMsIDRdIGNvbHVtbnNQb3NpdGlvbnNcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW5Qb3NpdGlvbiBvZiBjb2x1bW5Qb3NpdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChpc0ZpdHRpbmcpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc3RhcnRpbmdQb3NpdGlvbiB2YWx1ZXMgd2lsbCBiZSAxLCAyLCAzLCA0XG4gICAgICAgICAgICAvLyB0cnkgdG8gZml0IGFzIGxlZnQgYXMgcG9zc2libGVcbiAgICAgICAgICAgIGxldCBzdGFydGluZ1Bvc2l0aW9uID0gY29sdW1uUG9zaXRpb24gLSAoY2FyZENvbFNwYW4gLSAxKTtcbiAgICAgICAgICAgIHN0YXJ0aW5nUG9zaXRpb24gPSBzdGFydGluZ1Bvc2l0aW9uID4gMCA/IHN0YXJ0aW5nUG9zaXRpb24gOiAxO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0aW5nUG9zaXRpb247IGluZGV4IDw9IGNvbHVtblBvc2l0aW9uICYmICFpc0ZpdHRpbmc7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBzcGFuID0gMDsgc3BhbiA8IGNhcmRDb2xTcGFuOyBzcGFuKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbHVtbnNIZWlnaHRbaW5kZXggKyBzcGFuIC0gMV0gPD0gaGVpZ2h0ICYmIGNhcmRDb2xTcGFuICsgaW5kZXggLSAxIDw9IHRoaXMuX2NvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRml0dGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZ0NvbHVtblBvc2l0aW9uID0gaW5kZXggLSAxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNGaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZ0NvbHVtblBvc2l0aW9uID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiByZXR1cm5zIHNvcnRlZCB1bmlxdWUgaGVpZ2h0IG9mIGNvbHVtbnMgKi9cbiAgICBwcml2YXRlIF9nZXRTb3J0ZWRVbmlxdWVIZWlnaHRzKCk6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgdGVtcEFycmF5ID0gdGhpcy5fY29sdW1uc0hlaWdodC5zbGljZSgpO1xuICAgICAgICBjb25zdCBzb3J0ZWRDb2x1bW5zSGVpZ2h0QXJyYXkgPSB0ZW1wQXJyYXkuc29ydChjb21wYXJlcik7XG4gICAgICAgIGNvbnN0IHVuaXF1ZUhlaWdodHM6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBzb3J0ZWRIZWlnaHQgb2Ygc29ydGVkQ29sdW1uc0hlaWdodEFycmF5KSB7XG4gICAgICAgICAgICBpZiAodW5pcXVlSGVpZ2h0cy5pbmRleE9mKHNvcnRlZEhlaWdodCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdW5pcXVlSGVpZ2h0cy5wdXNoKHNvcnRlZEhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY29tcGFyZXIoZmlyc3Q6IG51bWJlciwgc2Vjb25kOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICAgICAgcmV0dXJuIGZpcnN0IC0gc2Vjb25kO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmlxdWVIZWlnaHRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQ29tcGFyYXRvciB0byBzb3J0IGNhcmQgYmFzZWQgb24gcmFuay5cbiAgICAgKiBAcGFyYW0gZmlyc3RDYXJkIFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50XG4gICAgICogQHBhcmFtIHNlY29uZENhcmQgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnRcbiAgICAgKiBAcmV0dXJucyA6IHJldHVybnMgZGlmZmVyZW5jZSBiZXR3ZWVuIGZpcnN0IGNhcmQgcmFuayBhbmQgb3RoZXIgY2FyZCByYW5rLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NvcnRDYXJkcyhmaXJzdENhcmQ6IFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50LCBzZWNvbmRDYXJkOiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBmaXJzdENhcmQucmFuayAtIHNlY29uZENhcmQucmFuaztcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgI2xheW91dFxuICAgIGNsYXNzPVwiZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0XCJcbiAgICBbY2xhc3NdPVwiJ2ZkLXJlc2l6YWJsZS1jYXJkLWxheW91dC0tJyArIGxheW91dFNpemVcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJsYXlvdXRXaWR0aFwiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJsYXlvdXRIZWlnaHRcIlxuPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19","import { NgModule } from '@angular/core';\nimport { ResizableCardItemComponent } from './resizable-card-layout/resizable-card-item/resizable-card-item.component';\nimport { ResizableCardLayoutComponent } from './resizable-card-layout/resizable-card-layout.component';\nimport * as i0 from \"@angular/core\";\n/**\n * @deprecated\n * Use direct imports of `ResizableCardLayoutComponent` and `ResizableCardItemComponent`.\n */\nexport class ResizableCardLayoutModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardLayoutModule, imports: [ResizableCardLayoutComponent, ResizableCardItemComponent], exports: [ResizableCardLayoutComponent, ResizableCardItemComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardLayoutModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardLayoutModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [ResizableCardLayoutComponent, ResizableCardItemComponent],\n exports: [ResizableCardLayoutComponent, ResizableCardItemComponent]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLWNhcmQtbGF5b3V0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9yZXNpemFibGUtY2FyZC1sYXlvdXQvcmVzaXphYmxlLWNhcmQtbGF5b3V0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDOztBQUV2Rzs7O0dBR0c7QUFLSCxNQUFNLE9BQU8seUJBQXlCOzhHQUF6Qix5QkFBeUI7K0dBQXpCLHlCQUF5QixZQUh4Qiw0QkFBNEIsRUFBRSwwQkFBMEIsYUFDeEQsNEJBQTRCLEVBQUUsMEJBQTBCOytHQUV6RCx5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBSnJDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsMEJBQTBCLENBQUM7b0JBQ25FLE9BQU8sRUFBRSxDQUFDLDRCQUE0QixFQUFFLDBCQUEwQixDQUFDO2lCQUN0RSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9yZXNpemFibGUtY2FyZC1sYXlvdXQvcmVzaXphYmxlLWNhcmQtaXRlbS9yZXNpemFibGUtY2FyZC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXNpemFibGVDYXJkTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi9yZXNpemFibGUtY2FyZC1sYXlvdXQvcmVzaXphYmxlLWNhcmQtbGF5b3V0LmNvbXBvbmVudCc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFVzZSBkaXJlY3QgaW1wb3J0cyBvZiBgUmVzaXphYmxlQ2FyZExheW91dENvbXBvbmVudGAgYW5kIGBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudGAuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1Jlc2l6YWJsZUNhcmRMYXlvdXRDb21wb25lbnQsIFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbUmVzaXphYmxlQ2FyZExheW91dENvbXBvbmVudCwgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZUNhcmRMYXlvdXRNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtcmVzaXphYmxlLWNhcmQtbGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3Jlc2l6YWJsZS1jYXJkLWxheW91dC9mdW5kYW1lbnRhbC1uZ3gtY29yZS1yZXNpemFibGUtY2FyZC1sYXlvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-core-resizable-card-layout.mjs","sources":["../tmp-esm2022/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.js","../tmp-esm2022/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.js","../tmp-esm2022/resizable-card-layout/resizable-card-layout.module.js","../tmp-esm2022/resizable-card-layout/fundamental-ngx-core-resizable-card-layout.js"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Optional, Output, ViewEncapsulation } from '@angular/core';\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\nimport { Subscription } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/cdk/utils\";\n// Card resizes in step of fixed values. values are in pixel\nexport const horizontalResizeStep = 320;\n// vertical resize step\nexport const verticalResizeStep = 16;\n// gap of 1rem between the cards\nexport const gap = 16;\n// threshold offset for horizontal resizing.\nexport const horizontalResizeOffset = 160;\n// threshold offset for vertical resizing.\nexport const verticalResizeOffset = 8;\n// card is given numeric value, on which sorting of cards is done\nlet cardRank = 1;\nlet cardUniqueId = 0;\nexport class ResizableCardItemComponent {\n /** Card properties from the config */\n set config(config) {\n this._config = config;\n this._initialSetup();\n this._cd.detectChanges();\n }\n get config() {\n return this._config;\n }\n /**\n * Serial order of card.\n * cards are sorted based on ranks before displaying layout.\n * card with lower rank will be displayed first in layout than the card with higher rank.\n */\n set rank(rankValue) {\n // determine max value between user given value and default value\n this._rank = rankValue ? rankValue : cardRank++;\n if (rankValue > cardRank) {\n cardRank = rankValue;\n }\n }\n get rank() {\n return this._rank;\n }\n /**\n * Number of column span card width takes.\n * It will be in step of 20rem.\n */\n set cardWidthColSpan(colSpan) {\n this._cardWidthColSpan = colSpan;\n this._setCardWidth();\n }\n get cardWidthColSpan() {\n return this._cardWidthColSpan;\n }\n /**\n * Number of row span, card height takes.\n * It will be in the step of 1rem.\n */\n set cardHeightRowSpan(rowSpan) {\n this._cardHeightRowSpan = rowSpan;\n this._setCardHeight();\n }\n get cardHeightRowSpan() {\n return this._cardHeightRowSpan;\n }\n /**\n * Number of row span card mini header height takes.\n * Mini Header: The smallest representation of the card is the header.\n * The card can be collapsed to only its header height.\n */\n set cardMiniHeaderRowSpan(rowSpan) {\n this._cardMiniHeaderRowSpan = rowSpan;\n this._setCardMiniHeaderHeight();\n }\n get cardMiniHeaderRowSpan() {\n return this._cardMiniHeaderRowSpan;\n }\n /**\n * Number of row span card mini content height takes.\n * Mini Content: The minimum height for the card content depends on the card type,\n * and must be as high as the smallest representation of the content.\n */\n set cardMiniContentRowSpan(rowSpan) {\n this._cardMiniContentRowSpan = rowSpan;\n this._setCardMiniContentHeight();\n }\n get cardMiniContentRowSpan() {\n return this._cardMiniContentRowSpan ?? 0;\n }\n /** @hidden */\n constructor(_cd, elementRef, _rtlService) {\n this._cd = _cd;\n this.elementRef = elementRef;\n this._rtlService = _rtlService;\n /** set uinque id for the card */\n this.itemId = `fd-card-item-${cardUniqueId++}`;\n /** Card can be set to resizable=false, to restrict card resize */\n this.resizable = true;\n /** Set top position for the card*/\n this.top = 0;\n /** @hidden while resizing this value will change to a greater value */\n this.zIndex = 0;\n /** @hidden */\n this.position = 'absolute';\n /** @hidden transition animation when layout re-draws */\n this.reDrawAnimation = true;\n /** Emits when card is still resizing */\n this.resizing = new EventEmitter();\n /** Emits when card resize is completed */\n this.resized = new EventEmitter();\n /** Emits when card height is reduced to show only header */\n this.miniHeaderReached = new EventEmitter();\n /** Emits when minimum height of card content area is reached */\n this.miniContentReached = new EventEmitter();\n /** show corner resize icon on hover over card */\n this.showingResizeIcon = false;\n /** show border when card is resizing */\n this.showBorder = false;\n /** card width in px. Default value to 20rem */\n this.cardWidth = horizontalResizeStep;\n /** Outer resize indication border width for the card */\n this.resizeIndicationBorderWidth = 0;\n /**\n * Denotes if card is currently expanding or contracting horizontally.\n * +1 denotes increasing, -1 denotes decreasing and 0 denotes card-state has not changed horizontally.\n */\n this.cardState = 0;\n /** Change in rank from previous value*/\n this.prevRank = 0;\n /** @hidden Default width of card is 20rem ie. 1 column */\n this._cardWidthColSpan = 1;\n /** @hidden flag to control resize */\n this._resize = false;\n /**\n * @hidden stores original width span of card.\n * It may reduce on small screen, so have to restore using this.\n */\n this._originalCardWidthSpan = 0;\n /** @hidden */\n this._subscriptions = new Subscription();\n }\n /**\n * @hidden When mouse moves to resize the card.\n * using window:mousemove so, resize will happen smoothly\n * @param event {MouseEvent}\n */\n onMouseMove(event) {\n event.preventDefault();\n if (!this.resizable) {\n return;\n }\n // saves from un-necessary resize\n if (!this._resize) {\n return;\n }\n if (!this.showBorder) {\n this.showBorder = true;\n }\n // resizing card will go over other cards\n this.zIndex = 1;\n const { clientX, clientY } = event;\n switch (this._resizeDirection) {\n case 'both':\n this._horizontalResizing(clientX);\n this._verticalResizing(clientY);\n break;\n case 'horizontal':\n this._horizontalResizing(clientX);\n break;\n case 'vertical':\n this._verticalResizing(clientY);\n break;\n default:\n this._horizontalResizing(clientX);\n this._verticalResizing(clientY);\n }\n const cardWidthColSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n const cardWidthWithColumn = cardWidthColSpan * horizontalResizeStep + cardWidthColSpan * gap;\n const horizontalResizeThresholdReached = this.cardWidth - cardWidthWithColumn > horizontalResizeOffset;\n if (clientX > this._prevX) {\n // increasing width\n this.cardState = 1;\n if (horizontalResizeThresholdReached) {\n const futureCardWidth = (cardWidthColSpan + 1) * horizontalResizeStep + cardWidthColSpan * gap;\n this.resizeIndicationBorderWidth = futureCardWidth - this.cardWidth;\n }\n else {\n this.resizeIndicationBorderWidth = 0;\n }\n }\n else if (clientX < this._prevX) {\n // decreasing width\n this.cardState = -1;\n if (horizontalResizeThresholdReached) {\n const futureCardWidth = (cardWidthColSpan + 1) * horizontalResizeStep + cardWidthColSpan * gap;\n this.resizeIndicationBorderWidth = futureCardWidth - this.cardWidth;\n }\n else {\n this.resizeIndicationBorderWidth = 0;\n }\n }\n this._prevX = clientX;\n this._prevY = clientY;\n this._cd.detectChanges();\n // Emits resizing event.\n this.resizing.emit(this.getResizedEventObject());\n }\n /**\n * when resizing of card stops\n */\n onMouseUp() {\n if (!this.resizable) {\n return;\n }\n // if card was not resizing\n if (!this._resize) {\n return;\n }\n // increase/decrease width of card in order of 20rem\n if (Math.abs(this.cardWidth - this._prevCardWidth) > 0) {\n this._horizontalStepResizing();\n }\n // increase/decrease height of card in order of 1rem\n if (Math.abs(this.cardHeight - this._prevCardHeight) > 0) {\n this._verticalStepResizing();\n }\n this._stopResizing();\n this._cd.markForCheck();\n }\n /** @hidden */\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n }\n /**\n * When resize handler is pressed and resizing may start.\n * @param event {MouseEvent}\n * @param resizeDirection which handler is pressed to resize\n */\n onMouseDown(event, resizeDirection) {\n event.preventDefault();\n if (!this.resizable) {\n return;\n }\n this.showingResizeIcon = true;\n this._resize = true;\n this._prevX = event.clientX;\n this._prevY = event.clientY;\n this._prevCardWidth = this.cardWidth;\n this._prevCardHeight = this.cardHeight;\n this._resizeDirection = resizeDirection;\n }\n /** Sets focus on the element */\n focus() {\n const header = this.elementRef.nativeElement.querySelector('.fd-card__header');\n header?.focus();\n }\n /** Shows resize icon */\n showResizeIcon() {\n if (!this.resizable) {\n return;\n }\n this.showingResizeIcon = true;\n }\n /** Hides resize icon */\n hideResizeIcon() {\n if (!this._resize) {\n this.showingResizeIcon = false;\n }\n }\n /** Returns max width for card, based on layout size passed */\n getMaxColSpan(layoutSize) {\n switch (layoutSize) {\n case 'sm':\n this._maxColumn = 1;\n break;\n case 'md':\n this._maxColumn = 2;\n break;\n case 'lg':\n this._maxColumn = 3;\n break;\n case 'xl':\n this._maxColumn = 4;\n break;\n default:\n this._maxColumn = 1;\n }\n return this._maxColumn;\n }\n /** Update card width if it exceeds column span based on layout */\n verifyUpdateCardWidth(layoutSize) {\n const widthColSpan = this._config?.cardWidthColSpan || this.cardWidthColSpan;\n // storing original width of card.\n // used to restore width on window resize from small to large\n this._originalCardWidthSpan = !this._originalCardWidthSpan ? widthColSpan : this._originalCardWidthSpan;\n this._maxColumn = this.getMaxColSpan(layoutSize);\n if (widthColSpan > this._maxColumn) {\n this.cardWidthColSpan = this._maxColumn;\n this._setCardWidth();\n // Emits resized event.\n this.resized.emit(this.getResizedEventObject());\n }\n else {\n // keep card width minimum, so it can fit in screen.\n this.cardWidthColSpan = Math.min(this._maxColumn, this._originalCardWidthSpan);\n this._setCardWidth();\n // Emits resized event.\n this.resized.emit(this.getResizedEventObject());\n }\n }\n /** Returns ResizedEvent object to emit. */\n getResizedEventObject() {\n const newCardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n const newCardWidthColSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n const newCardWidth = newCardWidthColSpan * horizontalResizeStep + newCardWidthColSpan * gap;\n const horizontalResizeThresholdReached = this.cardWidth - newCardWidth > horizontalResizeOffset;\n const newCardColSpan = horizontalResizeThresholdReached ? newCardWidthColSpan + 1 : newCardWidthColSpan;\n return new ResizedEvent(this, this._prevCardWidth, this._prevCardHeight, this.cardWidth, this.cardHeight, this._cardWidthColSpan, this._cardHeightRowSpan, newCardColSpan, newCardHeightRowSpan);\n }\n /** @hidden Return previous height row span of the card */\n get previousCardHeightRowSpan() {\n return this._prevCardHeightRowSpan;\n }\n /** @hidden Set card properties using config received */\n _initialSetup() {\n this.cardWidthColSpan = this._config?.cardWidthColSpan || this.cardWidthColSpan;\n this.cardHeightRowSpan = this._config?.cardHeightRowSpan || this.cardHeightRowSpan;\n this.title = this._config?.title || this.title;\n this.rank = this._config?.rank || this.rank;\n this.cardMiniHeaderRowSpan = this._config?.cardMiniHeaderRowSpan || this.cardMiniHeaderRowSpan;\n this.cardMiniContentRowSpan = this._config?.cardMiniContentRowSpan || this.cardMiniContentRowSpan;\n this.resizable = this._config.resizable || this.resizable;\n }\n /** @hidden Returns true when resize offset is crossed */\n _horizontalResizeWithOffset() {\n // positive value indicates that width has increased\n const widthIncrement = this.cardWidth - this._prevCardWidth;\n const cardSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n const cardSpanFraction = this.cardWidth % horizontalResizeStep;\n // when width increases\n if (widthIncrement > 0) {\n if (widthIncrement < horizontalResizeOffset + gap) {\n // widthIncrement is less than offset, do not increase width\n this.cardWidth = this._prevCardWidth;\n }\n else {\n // check value of cardSpanFraction, including gaps in cards\n const isCardSpanFractionCrossingOffset = cardSpanFraction - (cardSpan - 1) * gap > horizontalResizeOffset;\n this.cardWidth = isCardSpanFractionCrossingOffset\n ? (cardSpan + 1) * horizontalResizeStep\n : cardSpan * horizontalResizeStep;\n }\n }\n else {\n // when width decreases\n if (Math.abs(widthIncrement) < horizontalResizeOffset) {\n // widthIncrement is less than offset, do not decrease width\n this.cardWidth = this._prevCardWidth;\n }\n else {\n // check value of cardSpanFraction, including gaps in cards\n const isCardSpanFractionCrossingOffset = cardSpanFraction - cardSpan * gap > horizontalResizeOffset;\n this.cardWidth = isCardSpanFractionCrossingOffset\n ? (cardSpan + 1) * horizontalResizeStep\n : cardSpan * horizontalResizeStep;\n }\n }\n }\n /**\n * @hidden make horizontal resize only on step of 20rem\n */\n _horizontalStepResizing() {\n this._horizontalResizeWithOffset();\n // Add inner gap in cardWidth if width is more than 1 column\n if (this.cardWidth > horizontalResizeStep) {\n this.cardWidth = this.cardWidth + (this.cardWidth / horizontalResizeStep - 1) * gap;\n }\n this.cardWidthColSpan = Math.floor(this.cardWidth / horizontalResizeStep);\n }\n /**\n * @hidden make vertical resize only on step of 1rem\n */\n _verticalStepResizing() {\n // positive value indicates that height has increased\n const cardHeightSpan = Math.floor(this.cardHeight / verticalResizeStep);\n const cardSpanFraction = this.cardHeight % verticalResizeStep;\n this.cardHeight =\n cardSpanFraction > verticalResizeOffset\n ? (cardHeightSpan + 1) * verticalResizeStep\n : cardHeightSpan * verticalResizeStep;\n this.cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n }\n /**\n * @hidden Resize card horizontally by checking boundary condition\n * @param xPosition current x-position of cursor\n */\n _horizontalResizing(xPosition) {\n const difference = this._prevX - xPosition;\n this.cardWidth = this._rtlService?.rtlSignal() ? this.cardWidth + difference : this.cardWidth - difference;\n const totalIndentation = (this._maxColumn - 1) * gap;\n const maxCardWidtWithoutIndentation = this._maxColumn * horizontalResizeStep;\n const maxCardWidth = this._rtlService?.rtlSignal()\n ? maxCardWidtWithoutIndentation - totalIndentation\n : maxCardWidtWithoutIndentation + totalIndentation;\n if (this.cardWidth > maxCardWidth) {\n this.cardWidth = maxCardWidth;\n }\n else if (this.cardWidth < horizontalResizeStep) {\n this.cardWidth = horizontalResizeStep;\n }\n }\n /**\n * @hidden Resize card vertically.\n * takes care of mini-header height and mini-content height\n * @param yPosition current y-position of cursor\n */\n _verticalResizing(yPosition) {\n let reachingMiniHeader = false;\n if (this.cardHeight === this.cardMiniHeaderHeight) {\n // if card height is already at mini-header height\n if (this._prevY - yPosition > 0) {\n // decreasing height\n // if miniHeader height reached, stop resizing\n this.cardHeight = this.cardMiniHeaderHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n }\n else {\n // increasing height\n this.cardHeight = this.cardMiniHeaderHeight + this.cardMiniContentHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n this._stopResizing();\n this.miniContentReached.emit(this.getResizedEventObject());\n }\n }\n else if (this.cardHeight < this.cardMiniContentHeight + this.cardMiniHeaderHeight) {\n // if card height is between mini-header and mini-content\n if (this._prevY - yPosition < 0) {\n this.cardHeight = this.cardMiniHeaderHeight + this.cardMiniContentHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n this._stopResizing();\n this.miniContentReached.emit(this.getResizedEventObject());\n }\n }\n else if (this.cardHeight === this.cardMiniContentHeight + this.cardMiniHeaderHeight &&\n this._prevY - yPosition > 0) {\n // decreasing height\n // height decreasing after reaching mini-content. this needs to differentiate\n // from height decreasing and reaching to mini-content.\n reachingMiniHeader = true;\n this.cardHeight = this.cardMiniHeaderHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n // miniHeader height reached, stop resizing\n this._stopResizing();\n this.miniHeaderReached.emit(this.getResizedEventObject());\n }\n else {\n this.cardHeight = this.cardHeight - (this._prevY - yPosition);\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n }\n // stop resizing on miniContent height\n if (this.cardHeight <= this.cardMiniContentHeight + this.cardMiniHeaderHeight &&\n this._prevY - yPosition > 0 &&\n !reachingMiniHeader) {\n this.cardHeight = this.cardMiniContentHeight + this.cardMiniHeaderHeight;\n this._prevCardHeightRowSpan = this._cardHeightRowSpan;\n this._cardHeightRowSpan = Math.floor(this.cardHeight / verticalResizeStep);\n this.miniContentReached.emit(this.getResizedEventObject());\n this._stopResizing();\n }\n // while corner resize, width might have increased and reached to mini-content height.\n // so, on mini-content resize will stop, but have to do step resizing for vertical and horizontal.\n if (!this._resize) {\n // increase/decrease width of card in order of 20rem\n if (Math.abs(this.cardWidth - this._prevCardWidth) > 0) {\n this._horizontalStepResizing();\n }\n // increase/decrease height of card in order of 1rem\n if (Math.abs(this.cardHeight - this._prevCardHeight) > 0) {\n this._verticalStepResizing();\n }\n }\n }\n /** @hidden reset involved variables while resizing */\n _stopResizing() {\n if (this._resize) {\n this.cardState = 0;\n this.resizeIndicationBorderWidth = 0;\n this._resize = false;\n this.zIndex = 0;\n this.showBorder = false;\n this.resized.emit(this.getResizedEventObject());\n }\n }\n /** @hidden Returns cardWidth based on card column span */\n _setCardWidth() {\n this.cardWidth = this._cardWidthColSpan * horizontalResizeStep + (this._cardWidthColSpan - 1) * gap;\n this._cd.markForCheck();\n }\n /** @hidden Returns cardHeight based on card row span */\n _setCardHeight() {\n this.cardHeight = this._cardHeightRowSpan * verticalResizeStep;\n this._cd.markForCheck();\n }\n /** @hidden Returns card mini header height */\n _setCardMiniHeaderHeight() {\n this.cardMiniHeaderHeight = this._cardMiniHeaderRowSpan * verticalResizeStep;\n this._cd.markForCheck();\n }\n /** @hidden Returns card mini content height */\n _setCardMiniContentHeight() {\n this.cardMiniContentHeight = this.cardMiniContentRowSpan * verticalResizeStep;\n this._cd.markForCheck();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardItemComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: ResizableCardItemComponent, isStandalone: true, selector: \"fd-resizable-card-item\", inputs: { config: \"config\", itemId: \"itemId\", title: \"title\", rank: \"rank\", cardWidthColSpan: \"cardWidthColSpan\", cardHeightRowSpan: \"cardHeightRowSpan\", cardMiniHeaderRowSpan: \"cardMiniHeaderRowSpan\", cardMiniContentRowSpan: \"cardMiniContentRowSpan\", resizable: \"resizable\", left: \"left\", right: \"right\", top: \"top\" }, outputs: { resizing: \"resizing\", resized: \"resized\", miniHeaderReached: \"miniHeaderReached\", miniContentReached: \"miniContentReached\" }, host: { listeners: { \"window:mousemove\": \"onMouseMove($event)\", \"document:mouseup\": \"onMouseUp()\" }, properties: { \"style.left.px\": \"this.left\", \"style.right.px\": \"this.right\", \"style.top.px\": \"this.top\", \"style.z-index\": \"this.zIndex\", \"style.position\": \"this.position\", \"class.fd-resizable-card-layout__draw-transition\": \"this.reDrawAnimation\" } }, ngImport: i0, template: \"<div\\n class=\\\"fd-resizable-card-layout__item\\\"\\n [class.fd-resizable-card-layout__indication-border]=\\\"showBorder\\\"\\n #resizeCard\\n>\\n <div\\n class=\\\"fd-resizable-card-layout__item--border-display fd-resizable-card-layout__item--resize-transition\\\"\\n [style.width.px]=\\\"cardWidth\\\"\\n [style.height.px]=\\\"cardHeight\\\"\\n (mouseenter)=\\\"showResizeIcon()\\\"\\n (mouseleave)=\\\"hideResizeIcon()\\\"\\n >\\n <div class=\\\"fd-resizable-card-layout__card\\\">\\n <ng-content></ng-content>\\n @if (showingResizeIcon) {\\n <div class=\\\"fd-resizable-card-layout__icon-wrapper\\\" role=\\\"presentation\\\" aria-hidden=\\\"true\\\">\\n <div\\n class=\\\"fd-resizable-card-layout__icon\\\"\\n #cornerHandle\\n (mousedown)=\\\"onMouseDown($event, 'both')\\\"\\n ></div>\\n </div>\\n }\\n </div>\\n @if (resizable) {\\n <ng-template [ngTemplateOutlet]=\\\"verticalHandleTemplate\\\"></ng-template>\\n <ng-template [ngTemplateOutlet]=\\\"horizontalHandleTemplate\\\"></ng-template>\\n }\\n </div>\\n <div\\n class=\\\"fd-resizable-card-layout__item--resize-transition\\\"\\n [style.width.px]=\\\"resizeIndicationBorderWidth\\\"\\n [style.height.px]=\\\"cardHeight\\\"\\n ></div>\\n</div>\\n<ng-template #verticalHandleTemplate>\\n <div\\n #verticalHandle\\n class=\\\"fd-resizable-card-layout__resize--vertical\\\"\\n (mousedown)=\\\"onMouseDown($event, 'horizontal')\\\"\\n ></div>\\n</ng-template>\\n<ng-template #horizontalHandleTemplate>\\n <div\\n #horizontalHandle\\n class=\\\"fd-resizable-card-layout__resize--horizontal\\\"\\n (mousedown)=\\\"onMouseDown($event, 'vertical')\\\"\\n ></div>\\n</ng-template>\\n\", styles: [\".fd-resizable-card-layout{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;margin-top:1rem;padding-block:0;padding-inline:0;padding-inline:.5rem;position:relative}.fd-resizable-card-layout:after,.fd-resizable-card-layout:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-width:20rem;position:relative}.fd-resizable-card-layout__item:after,.fd-resizable-card-layout__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__card{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;-webkit-box-flex:1;-ms-flex:1;flex:1;height:calc(100% - .0625rem);position:relative}.fd-resizable-card-layout__card:after,.fd-resizable-card-layout__card:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1.5rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1.5rem;padding-block:0;padding-inline:0;width:1.5rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;bottom:-.35rem;justify-content:flex-start;position:absolute;right:0;z-index:2}.fd-resizable-card-layout__icon-wrapper:after,.fd-resizable-card-layout__icon-wrapper:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon-wrapper{bottom:-.125rem;left:-.25rem;right:auto}.fd-resizable-card-layout__icon{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1rem;padding-block:0;padding-inline:0;width:1rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--sapButton_Lite_TextColor);cursor:nwse-resize;font-family:SAP-icons;font-size:1rem;height:100%;line-height:1rem;position:absolute;width:100%;z-index:2}.fd-resizable-card-layout__icon:after,.fd-resizable-card-layout__icon:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon:before{content:\\\"\\\\e24f\\\";font-family:SAP-icons;height:100%;text-align:center;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;width:100%}.fd-resizable-card-layout__icon[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon{cursor:nesw-resize;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fd-resizable-card-layout__icon--vertical,.fd-resizable-card-layout__icon--vertical[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--vertical{cursor:ns-resize}.fd-resizable-card-layout__icon--horizontal,.fd-resizable-card-layout__icon--horizontal[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--horizontal{cursor:ew-resize}.fd-resizable-card-layout__resize--vertical{-webkit-box-ordinal-group:3;-ms-flex-order:2;cursor:ew-resize;order:2;width:.0625rem;z-index:2}.fd-resizable-card-layout__resize--vertical::content{content:\\\"\\\";position:absolute}.fd-resizable-card-layout__resize--horizontal{bottom:0;cursor:ns-resize;height:.0625rem;position:absolute;width:calc(100% - .5rem);z-index:2}.fd-resizable-card-layout__indication-border{border:0;border:.125rem dashed var(--sapContent_DragAndDropActiveColor);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-resizable-card-layout__indication-border:after,.fd-resizable-card-layout__indication-border:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout--sm{padding-inline:.5rem}.fd-resizable-card-layout--lg,.fd-resizable-card-layout--md{padding-inline:1rem}.fd-resizable-card-layout--xl{padding-inline:3rem}.fd-resizable-card-layout__item--resize-transition{transition-duration:.25s;animation-timing-function:ease-in-out}.fd-resizable-card-layout__draw-transition{transition-duration:.5s;animation-timing-function:ease-in}.fd-resizable-card-layout__item--border-display{display:flex}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/resizable-card-layout.css:\\n (*!\\n * Fundamental Library Styles v0.40.1\\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\\n *)\\n*/\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardItemComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-resizable-card-item', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [NgTemplateOutlet], template: \"<div\\n class=\\\"fd-resizable-card-layout__item\\\"\\n [class.fd-resizable-card-layout__indication-border]=\\\"showBorder\\\"\\n #resizeCard\\n>\\n <div\\n class=\\\"fd-resizable-card-layout__item--border-display fd-resizable-card-layout__item--resize-transition\\\"\\n [style.width.px]=\\\"cardWidth\\\"\\n [style.height.px]=\\\"cardHeight\\\"\\n (mouseenter)=\\\"showResizeIcon()\\\"\\n (mouseleave)=\\\"hideResizeIcon()\\\"\\n >\\n <div class=\\\"fd-resizable-card-layout__card\\\">\\n <ng-content></ng-content>\\n @if (showingResizeIcon) {\\n <div class=\\\"fd-resizable-card-layout__icon-wrapper\\\" role=\\\"presentation\\\" aria-hidden=\\\"true\\\">\\n <div\\n class=\\\"fd-resizable-card-layout__icon\\\"\\n #cornerHandle\\n (mousedown)=\\\"onMouseDown($event, 'both')\\\"\\n ></div>\\n </div>\\n }\\n </div>\\n @if (resizable) {\\n <ng-template [ngTemplateOutlet]=\\\"verticalHandleTemplate\\\"></ng-template>\\n <ng-template [ngTemplateOutlet]=\\\"horizontalHandleTemplate\\\"></ng-template>\\n }\\n </div>\\n <div\\n class=\\\"fd-resizable-card-layout__item--resize-transition\\\"\\n [style.width.px]=\\\"resizeIndicationBorderWidth\\\"\\n [style.height.px]=\\\"cardHeight\\\"\\n ></div>\\n</div>\\n<ng-template #verticalHandleTemplate>\\n <div\\n #verticalHandle\\n class=\\\"fd-resizable-card-layout__resize--vertical\\\"\\n (mousedown)=\\\"onMouseDown($event, 'horizontal')\\\"\\n ></div>\\n</ng-template>\\n<ng-template #horizontalHandleTemplate>\\n <div\\n #horizontalHandle\\n class=\\\"fd-resizable-card-layout__resize--horizontal\\\"\\n (mousedown)=\\\"onMouseDown($event, 'vertical')\\\"\\n ></div>\\n</ng-template>\\n\", styles: [\".fd-resizable-card-layout{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;margin-top:1rem;padding-block:0;padding-inline:0;padding-inline:.5rem;position:relative}.fd-resizable-card-layout:after,.fd-resizable-card-layout:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-width:20rem;position:relative}.fd-resizable-card-layout__item:after,.fd-resizable-card-layout__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__card{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;-webkit-box-flex:1;-ms-flex:1;flex:1;height:calc(100% - .0625rem);position:relative}.fd-resizable-card-layout__card:after,.fd-resizable-card-layout__card:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1.5rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1.5rem;padding-block:0;padding-inline:0;width:1.5rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;bottom:-.35rem;justify-content:flex-start;position:absolute;right:0;z-index:2}.fd-resizable-card-layout__icon-wrapper:after,.fd-resizable-card-layout__icon-wrapper:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon-wrapper{bottom:-.125rem;left:-.25rem;right:auto}.fd-resizable-card-layout__icon{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1rem;padding-block:0;padding-inline:0;width:1rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--sapButton_Lite_TextColor);cursor:nwse-resize;font-family:SAP-icons;font-size:1rem;height:100%;line-height:1rem;position:absolute;width:100%;z-index:2}.fd-resizable-card-layout__icon:after,.fd-resizable-card-layout__icon:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon:before{content:\\\"\\\\e24f\\\";font-family:SAP-icons;height:100%;text-align:center;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;width:100%}.fd-resizable-card-layout__icon[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon{cursor:nesw-resize;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fd-resizable-card-layout__icon--vertical,.fd-resizable-card-layout__icon--vertical[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--vertical{cursor:ns-resize}.fd-resizable-card-layout__icon--horizontal,.fd-resizable-card-layout__icon--horizontal[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--horizontal{cursor:ew-resize}.fd-resizable-card-layout__resize--vertical{-webkit-box-ordinal-group:3;-ms-flex-order:2;cursor:ew-resize;order:2;width:.0625rem;z-index:2}.fd-resizable-card-layout__resize--vertical::content{content:\\\"\\\";position:absolute}.fd-resizable-card-layout__resize--horizontal{bottom:0;cursor:ns-resize;height:.0625rem;position:absolute;width:calc(100% - .5rem);z-index:2}.fd-resizable-card-layout__indication-border{border:0;border:.125rem dashed var(--sapContent_DragAndDropActiveColor);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-resizable-card-layout__indication-border:after,.fd-resizable-card-layout__indication-border:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout--sm{padding-inline:.5rem}.fd-resizable-card-layout--lg,.fd-resizable-card-layout--md{padding-inline:1rem}.fd-resizable-card-layout--xl{padding-inline:3rem}.fd-resizable-card-layout__item--resize-transition{transition-duration:.25s;animation-timing-function:ease-in-out}.fd-resizable-card-layout__draw-transition{transition-duration:.5s;animation-timing-function:ease-in}.fd-resizable-card-layout__item--border-display{display:flex}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/resizable-card-layout.css:\\n (*!\\n * Fundamental Library Styles v0.40.1\\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\\n *)\\n*/\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.RtlService, decorators: [{\n type: Optional\n }] }], propDecorators: { config: [{\n type: Input\n }], itemId: [{\n type: Input\n }], title: [{\n type: Input\n }], rank: [{\n type: Input\n }], cardWidthColSpan: [{\n type: Input\n }], cardHeightRowSpan: [{\n type: Input\n }], cardMiniHeaderRowSpan: [{\n type: Input\n }], cardMiniContentRowSpan: [{\n type: Input\n }], resizable: [{\n type: Input\n }], left: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['style.left.px']\n }], right: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['style.right.px']\n }], top: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['style.top.px']\n }], zIndex: [{\n type: HostBinding,\n args: ['style.z-index']\n }], position: [{\n type: HostBinding,\n args: ['style.position']\n }], reDrawAnimation: [{\n type: HostBinding,\n args: ['class.fd-resizable-card-layout__draw-transition']\n }], resizing: [{\n type: Output\n }], resized: [{\n type: Output\n }], miniHeaderReached: [{\n type: Output\n }], miniContentReached: [{\n type: Output\n }], onMouseMove: [{\n type: HostListener,\n args: ['window:mousemove', ['$event']]\n }], onMouseUp: [{\n type: HostListener,\n args: ['document:mouseup']\n }] } });\n/** Object to emit on resize complete */\nexport class ResizedEvent {\n /**\n * Object to emit on resize complete\n * @param card\n * @param prevCardWidth Previous card width\n * @param prevCardHeight Previous card height\n * @param cardWidth Current card width\n * @param cardHeight Current card height\n * @param cardWidthColSpan Current card width column span\n * @param cardHeightRowSpan Current card height row span\n * @param newCardWidthColSpan New card width column span\n * @param newCardHeightRowSpan New card height row span\n */\n constructor(card, prevCardWidth, prevCardHeight, cardWidth, cardHeight, cardWidthColSpan, cardHeightRowSpan, newCardWidthColSpan, newCardHeightRowSpan) {\n this.card = card;\n this.prevCardWidth = prevCardWidth;\n this.prevCardHeight = prevCardHeight;\n this.cardWidth = cardWidth;\n this.cardHeight = cardHeight;\n this.cardWidthColSpan = cardWidthColSpan;\n this.cardHeightRowSpan = cardHeightRowSpan;\n this.newCardWidthColSpan = newCardWidthColSpan;\n this.newCardHeightRowSpan = newCardHeightRowSpan;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLWNhcmQtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvcmVzaXphYmxlLWNhcmQtbGF5b3V0L3Jlc2l6YWJsZS1jYXJkLWxheW91dC9yZXNpemFibGUtY2FyZC1pdGVtL3Jlc2l6YWJsZS1jYXJkLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3Jlc2l6YWJsZS1jYXJkLWxheW91dC9yZXNpemFibGUtY2FyZC1sYXlvdXQvcmVzaXphYmxlLWNhcmQtaXRlbS9yZXNpemFibGUtY2FyZC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04saUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBWSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFJcEMsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUV4Qyx1QkFBdUI7QUFDdkIsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBRXJDLGdDQUFnQztBQUNoQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBRXRCLDRDQUE0QztBQUM1QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUFFMUMsMENBQTBDO0FBQzFDLE1BQU0sQ0FBQyxN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QUNXLElBQWdDLEVBQ2hDLGFBQXFCLEVBQ3JCLGNBQXNCLEVBQ3RCLFNBQWlCLEVBQ2pCLFVBQWtCLEVBQ2xCLGdCQUF3QixFQUN4QixpQkFBeUIsRUFDekIsbUJBQTJCLEVBQzNCLG9CQUE0QjtRQVI1QixTQUFJLEdBQUosSUFBSSxDQUE0QjtRQUNoQyxrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUNyQixtQkFBYyxHQUFkLGNBQWMsQ0FBUTtRQUN0QixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFRO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUTtRQUN6Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQVE7UUFDM0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFRO0lBQ3BDLENBQUM7Q0FDUCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzYWJsZU9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOdWxsYWJsZSwgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgdHlwZSBSZXNpemVEaXJlY3Rpb24gPSAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIHwgJ2JvdGgnO1xuXG4vLyBDYXJkIHJlc2l6ZXMgaW4gc3RlcCBvZiBmaXhlZCB2YWx1ZXMuIHZhbHVlcyBhcmUgaW4gcGl4ZWxcbmV4cG9ydCBjb25zdCBob3Jpem9udGFsUmVzaXplU3RlcCA9IDMyMDtcblxuLy8gdmVydGljYWwgcmVzaXplIHN0ZXBcbmV4cG9ydCBjb25zdCB2ZXJ0aWNhbFJlc2l6ZVN0ZXAgPSAxNjtcblxuLy8gZ2FwIG9mIDFyZW0gYmV0d2VlbiB0aGUgY2FyZHNcbmV4cG9ydCBjb25zdCBnYXAgPSAxNjtcblxuLy8gdGhyZXNob2xkIG9mZnNldCBmb3IgaG9yaXpvbnRhbCByZXNpemluZy5cbmV4cG9ydCBjb25zdCBob3Jpem9udGFsUmVzaXplT2Zmc2V0ID0gMTYwO1xuXG4vLyB0aHJlc2hvbGQgb2Zmc2V0IGZvciB2ZXJ0aWNhbCByZXNpemluZy5cbmV4cG9ydCBjb25zdCB2ZXJ0aWNhbFJlc2l6ZU9mZnNldCA9IDg7XG5cbi8vIHN0YXRlIG9mIGNhcmQuIEluY3JlYXNpbmcgd2lkdGgsIG5vIGNoYW5nZSBvciBkZWNyZWFzaW5nIHdpZHRoLlxuZXhwb3J0IHR5cGUgQ2FyZFN0YXRlID0gMSB8IDAgfCAtMTtcblxuLy8gY2FyZCBpcyBnaXZlbiBudW1lcmljIHZhbHVlLCBvbiB3aGljaCBzb3J0aW5nIG9mIGNhcmRzIGlzIGRvbmVcbmxldCBjYXJkUmFuayA9IDE7XG5sZXQgY2FyZFVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1yZXNpemFibGUtY2FyZC1pdGVtJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3Jlc2l6YWJsZS1jYXJkLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9yZXNpemFibGUtY2FyZC1pdGVtLmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGltcG9ydHM6IFtOZ1RlbXBsYXRlT3V0bGV0XVxufSlcbmV4cG9ydCBjbGFzcyBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIEZvY3VzYWJsZU9wdGlvbiwgT25EZXN0cm95IHtcbiAgICAvKiogQ2FyZCBwcm9wZXJ0aWVzIGZyb20gdGhlIGNvbmZpZyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNvbmZpZyhjb25maWc6IFJlc2l6YWJsZUNhcmRJdGVtQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5faW5pdGlhbFNldHVwKCk7XG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgZ2V0IGNvbmZpZygpOiBSZXNpemFibGVDYXJkSXRlbUNvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gICAgfVxuXG4gICAgLyoqIHNldCB1aW5xdWUgaWQgZm9yIHRoZSBjYXJkICovXG4gICAgQElucHV0KClcbiAgICBpdGVtSWQgPSBgZmQtY2FyZC1pdGVtLSR7Y2FyZFVuaXF1ZUlkKyt9YDtcblxuICAgIC8qKiBzZXQgdGl0bGUgb2YgdGhlIGNhcmQgKi9cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTZXJpYWwgb3JkZXIgb2YgY2FyZC5cbiAgICAgKiBjYXJkcyBhcmUgc29ydGVkIGJhc2VkIG9uIHJhbmtzIGJlZm9yZSBkaXNwbGF5aW5nIGxheW91dC5cbiAgICAgKiBjYXJkIHdpdGggbG93ZXIgcmFuayB3aWxsIGJlIGRpc3BsYXllZCBmaXJzdCBpbiBsYXlvdXQgdGhhbiB0aGUgY2FyZCB3aXRoIGhpZ2hlciByYW5rLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHJhbmsocmFua1ZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgLy8gZGV0ZXJtaW5lIG1heCB2YWx1ZSBiZXR3ZWVuIHVzZXIgZ2l2ZW4gdmFsdWUgYW5kIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgdGhpcy5fcmFuayA9IHJhbmtWYWx1ZSA/IHJhbmtWYWx1ZSA6IGNhcmRSYW5rKys7XG4gICAgICAgIGlmIChyYW5rVmFsdWUgPiBjYXJkUmFuaykge1xuICAgICAgICAgICAgY2FyZFJhbmsgPSByYW5rVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHJhbmsoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jhbms7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIGNvbHVtbiBzcGFuIGNhcmQgd2lkdGggdGFrZXMuXG4gICAgICogSXQgd2lsbCBiZSBpbiBzdGVwIG9mIDIwcmVtLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNhcmRXaWR0aENvbFNwYW4oY29sU3BhbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2NhcmRXaWR0aENvbFNwYW4gPSBjb2xTcGFuO1xuICAgICAgICB0aGlzLl9zZXRDYXJkV2lkdGgoKTtcbiAgICB9XG4gICAgZ2V0IGNhcmRXaWR0aENvbFNwYW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhcmRXaWR0aENvbFNwYW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHJvdyBzcGFuLCBjYXJkIGhlaWdodCB0YWtlcy5cbiAgICAgKiBJdCB3aWxsIGJlIGluIHRoZSBzdGVwIG9mIDFyZW0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY2FyZEhlaWdodFJvd1NwYW4ocm93U3BhbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuID0gcm93U3BhbjtcbiAgICAgICAgdGhpcy5fc2V0Q2FyZEhlaWdodCgpO1xuICAgIH1cbiAgICBnZXQgY2FyZEhlaWdodFJvd1NwYW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiByb3cgc3BhbiBjYXJkIG1pbmkgaGVhZGVyIGhlaWdodCB0YWtlcy5cbiAgICAgKiBNaW5pIEhlYWRlcjogVGhlIHNtYWxsZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjYXJkIGlzIHRoZSBoZWFkZXIuXG4gICAgICogVGhlIGNhcmQgY2FuIGJlIGNvbGxhcHNlZCB0byBvbmx5IGl0cyBoZWFkZXIgaGVpZ2h0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNhcmRNaW5pSGVhZGVyUm93U3Bhbihyb3dTcGFuOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fY2FyZE1pbmlIZWFkZXJSb3dTcGFuID0gcm93U3BhbjtcbiAgICAgICAgdGhpcy5fc2V0Q2FyZE1pbmlIZWFkZXJIZWlnaHQoKTtcbiAgICB9XG4gICAgZ2V0IGNhcmRNaW5pSGVhZGVyUm93U3BhbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FyZE1pbmlIZWFkZXJSb3dTcGFuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiByb3cgc3BhbiBjYXJkIG1pbmkgY29udGVudCBoZWlnaHQgdGFrZXMuXG4gICAgICogTWluaSBDb250ZW50OiBUaGUgbWluaW11bSBoZWlnaHQgZm9yIHRoZSBjYXJkIGNvbnRlbnQgZGVwZW5kcyBvbiB0aGUgY2FyZCB0eXBlLFxuICAgICAqIGFuZCBtdXN0IGJlIGFzIGhpZ2ggYXMgdGhlIHNtYWxsZXN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNhcmRNaW5pQ29udGVudFJvd1NwYW4ocm93U3BhbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2NhcmRNaW5pQ29udGVudFJvd1NwYW4gPSByb3dTcGFuO1xuICAgICAgICB0aGlzLl9zZXRDYXJkTWluaUNvbnRlbnRIZWlnaHQoKTtcbiAgICB9XG4gICAgZ2V0IGNhcmRNaW5pQ29udGVudFJvd1NwYW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhcmRNaW5pQ29udGVudFJvd1NwYW4gPz8gMDtcbiAgICB9XG5cbiAgICAvKiogQ2FyZCBjYW4gYmUgc2V0IHRvIHJlc2l6YWJsZT1mYWxzZSwgdG8gcmVzdHJpY3QgY2FyZCByZXNpemUgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlc2l6YWJsZSA9IHRydWU7XG5cbiAgICAvKiogU2V0IGxlZnQgcG9zaXRpb24gZm9yIHRoZSBjYXJkICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmxlZnQucHgnKVxuICAgIGxlZnQ6IE51bGxhYmxlPG51bWJlcj47XG5cbiAgICAvKiogU2V0IHJpZ2h0IHBvc2l0aW9uIGZvciB0aGUgY2FyZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5yaWdodC5weCcpXG4gICAgcmlnaHQ6IE51bGxhYmxlPG51bWJlcj47XG5cbiAgICAvKiogU2V0IHRvcCBwb3NpdGlvbiBmb3IgdGhlIGNhcmQqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS50b3AucHgnKVxuICAgIHRvcCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiB3aGlsZSByZXNpemluZyB0aGlzIHZhbHVlIHdpbGwgY2hhbmdlIHRvIGEgZ3JlYXRlciB2YWx1ZSAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuei1pbmRleCcpXG4gICAgekluZGV4ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5wb3NpdGlvbicpXG4gICAgcG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuXG4gICAgLyoqIEBoaWRkZW4gdHJhbnNpdGlvbiBhbmltYXRpb24gd2hlbiBsYXlvdXQgcmUtZHJhd3MgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9fZHJhdy10cmFuc2l0aW9uJylcbiAgICByZURyYXdBbmltYXRpb24gPSB0cnVlO1xuXG4gICAgLyoqIEVtaXRzIHdoZW4gY2FyZCBpcyBzdGlsbCByZXNpemluZyAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlc2l6aW5nOiBFdmVudEVtaXR0ZXI8UmVzaXplZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVzaXplZEV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXRzIHdoZW4gY2FyZCByZXNpemUgaXMgY29tcGxldGVkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVzaXplZDogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgaGVpZ2h0IGlzIHJlZHVjZWQgdG8gc2hvdyBvbmx5IGhlYWRlciAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG1pbmlIZWFkZXJSZWFjaGVkOiBFdmVudEVtaXR0ZXI8UmVzaXplZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVzaXplZEV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXRzIHdoZW4gbWluaW11bSBoZWlnaHQgb2YgY2FyZCBjb250ZW50IGFyZWEgaXMgcmVhY2hlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG1pbmlDb250ZW50UmVhY2hlZDogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBzaG93IGNvcm5lciByZXNpemUgaWNvbiBvbiBob3ZlciBvdmVyIGNhcmQgKi9cbiAgICBzaG93aW5nUmVzaXplSWNvbiA9IGZhbHNlO1xuXG4gICAgLyoqIHNob3cgYm9yZGVyIHdoZW4gY2FyZCBpcyByZXNpemluZyAqL1xuICAgIHNob3dCb3JkZXIgPSBmYWxzZTtcblxuICAgIC8qKiBzdGFydGluZyBjb2x1bW4gcG9zaXRpb24gb2YgY2FyZC4gc3RhcnRzIHdpdGggMCAqL1xuICAgIHN0YXJ0aW5nQ29sdW1uUG9zaXRpb246IG51bWJlcjtcblxuICAgIC8qKiBjYXJkIHdpZHRoIGluIHB4LiBEZWZhdWx0IHZhbHVlIHRvIDIwcmVtICovXG4gICAgY2FyZFdpZHRoOiBudW1iZXIgPSBob3Jpem9udGFsUmVzaXplU3RlcDtcblxuICAgIC8qKiBjYXJkIGhlaWdodCBpbiBweCAqL1xuICAgIGNhcmRIZWlnaHQ6IG51bWJlcjtcblxuICAgIC8qKiBNaW5pLWhlYWRlciBoZWlnaHQgb2YgY2FyZCAqL1xuICAgIGNhcmRNaW5pSGVhZGVySGVpZ2h0OiBudW1iZXI7XG5cbiAgICAvKiogTWluaS1jb250ZW50IGhlaWdodCBvZiBjYXJkIHRvIGRpc3BsYXkgbWluaW11bSB2YWxpZCBjb250ZW50ICovXG4gICAgY2FyZE1pbmlDb250ZW50SGVpZ2h0OiBudW1iZXI7XG5cbiAgICAvKiogT3V0ZXIgcmVzaXplIGluZGljYXRpb24gYm9yZGVyIHdpZHRoIGZvciB0aGUgY2FyZCAqL1xuICAgIHJlc2l6ZUluZGljYXRpb25Cb3JkZXJXaWR0aCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBEZW5vdGVzIGlmIGNhcmQgaXMgY3VycmVudGx5IGV4cGFuZGluZyBvciBjb250cmFjdGluZyBob3Jpem9udGFsbHkuXG4gICAgICogKzEgZGVub3RlcyBpbmNyZWFzaW5nLCAtMSBkZW5vdGVzIGRlY3JlYXNpbmcgYW5kIDAgZGVub3RlcyBjYXJkLXN0YXRlIGhhcyBub3QgY2hhbmdlZCBob3Jpem9udGFsbHkuXG4gICAgICovXG4gICAgY2FyZFN0YXRlOiBDYXJkU3RhdGUgPSAwO1xuXG4gICAgLyoqIENoYW5nZSBpbiByYW5rIGZyb20gcHJldmlvdXMgdmFsdWUqL1xuICAgIHByZXZSYW5rID0gMDtcblxuICAgIC8qKiBAaGlkZGVuIERlZmF1bHQgd2lkdGggb2YgY2FyZCBpcyAyMHJlbSBpZS4gMSBjb2x1bW4gKi9cbiAgICBwcml2YXRlIF9jYXJkV2lkdGhDb2xTcGFuID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FyZEhlaWdodFJvd1NwYW46IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuIGhlbHBzIGluIHZlcnRpY2FsIHN0ZXAgY2hhbmdlIGV2ZW50IGVtaXQgKi9cbiAgICBwcml2YXRlIF9wcmV2Q2FyZEhlaWdodFJvd1NwYW46IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FyZE1pbmlIZWFkZXJSb3dTcGFuOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhcmRNaW5pQ29udGVudFJvd1NwYW4/OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiBjb25maWcgdmFsdWVzIGZvciBjYXJkICovXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBSZXNpemFibGVDYXJkSXRlbUNvbmZpZztcblxuICAgIC8qKiBAaGlkZGVuIHByZXZpb3VzIGN1cnNvciB4IHBvc2l0aW9uICovXG4gICAgcHJpdmF0ZSBfcHJldlg6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuIHByZXZpb3VzIGN1cnNvciB5IHBvc2l0aW9uICovXG4gICAgcHJpdmF0ZSBfcHJldlk6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJldkNhcmRXaWR0aDogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcmV2Q2FyZEhlaWdodDogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gZmxhZyB0byBjb250cm9sIHJlc2l6ZSAqL1xuICAgIHByaXZhdGUgX3Jlc2l6ZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNpemVEaXJlY3Rpb246IFJlc2l6ZURpcmVjdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWF4Q29sdW1uOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIHN0b3JlcyBvcmlnaW5hbCB3aWR0aCBzcGFuIG9mIGNhcmQuXG4gICAgICogSXQgbWF5IHJlZHVjZSBvbiBzbWFsbCBzY3JlZW4sIHNvIGhhdmUgdG8gcmVzdG9yZSB1c2luZyB0aGlzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX29yaWdpbmFsQ2FyZFdpZHRoU3BhbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jhbms6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2VcbiAgICApIHt9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIFdoZW4gbW91c2UgbW92ZXMgdG8gcmVzaXplIHRoZSBjYXJkLlxuICAgICAqIHVzaW5nIHdpbmRvdzptb3VzZW1vdmUgc28sIHJlc2l6ZSB3aWxsIGhhcHBlbiBzbW9vdGhseVxuICAgICAqIEBwYXJhbSBldmVudCB7TW91c2VFdmVudH1cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2Vtb3ZlJywgWyckZXZlbnQnXSlcbiAgICBvbk1vdXNlTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoIXRoaXMucmVzaXphYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzYXZlcyBmcm9tIHVuLW5lY2Vzc2FyeSByZXNpemVcbiAgICAgICAgaWYgKCF0aGlzLl9yZXNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zaG93Qm9yZGVyKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dCb3JkZXIgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVzaXppbmcgY2FyZCB3aWxsIGdvIG92ZXIgb3RoZXIgY2FyZHNcbiAgICAgICAgdGhpcy56SW5kZXggPSAxO1xuXG4gICAgICAgIGNvbnN0IHsgY2xpZW50WCwgY2xpZW50WSB9ID0gZXZlbnQ7XG4gICAgICAgIHN3aXRjaCAodGhpcy5fcmVzaXplRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlICdib3RoJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsUmVzaXppbmcoY2xpZW50WCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmVydGljYWxSZXNpemluZyhjbGllbnRZKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgICAgICAgICAgIHRoaXMuX2hvcml6b250YWxSZXNpemluZyhjbGllbnRYKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0aWNhbFJlc2l6aW5nKGNsaWVudFkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsUmVzaXppbmcoY2xpZW50WCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmVydGljYWxSZXNpemluZyhjbGllbnRZKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhcmRXaWR0aENvbFNwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZFdpZHRoIC8gaG9yaXpvbnRhbFJlc2l6ZVN0ZXApO1xuICAgICAgICBjb25zdCBjYXJkV2lkdGhXaXRoQ29sdW1uID0gY2FyZFdpZHRoQ29sU3BhbiAqIGhvcml6b250YWxSZXNpemVTdGVwICsgY2FyZFdpZHRoQ29sU3BhbiAqIGdhcDtcblxuICAgICAgICBjb25zdCBob3Jpem9udGFsUmVzaXplVGhyZXNob2xkUmVhY2hlZCA9IHRoaXMuY2FyZFdpZHRoIC0gY2FyZFdpZHRoV2l0aENvbHVtbiA+IGhvcml6b250YWxSZXNpemVPZmZzZXQ7XG5cbiAgICAgICAgaWYgKGNsaWVudFggPiB0aGlzLl9wcmV2WCkge1xuICAgICAgICAgICAgLy8gaW5jcmVhc2luZyB3aWR0aFxuICAgICAgICAgICAgdGhpcy5jYXJkU3RhdGUgPSAxO1xuXG4gICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFJlc2l6ZVRocmVzaG9sZFJlYWNoZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmdXR1cmVDYXJkV2lkdGggPSAoY2FyZFdpZHRoQ29sU3BhbiArIDEpICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgKyBjYXJkV2lkdGhDb2xTcGFuICogZ2FwO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplSW5kaWNhdGlvbkJvcmRlcldpZHRoID0gZnV0dXJlQ2FyZFdpZHRoIC0gdGhpcy5jYXJkV2lkdGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplSW5kaWNhdGlvbkJvcmRlcldpZHRoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjbGllbnRYIDwgdGhpcy5fcHJldlgpIHtcbiAgICAgICAgICAgIC8vIGRlY3JlYXNpbmcgd2lkdGhcbiAgICAgICAgICAgIHRoaXMuY2FyZFN0YXRlID0gLTE7XG4gICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFJlc2l6ZVRocmVzaG9sZFJlYWNoZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmdXR1cmVDYXJkV2lkdGggPSAoY2FyZFdpZHRoQ29sU3BhbiArIDEpICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgKyBjYXJkV2lkdGhDb2xTcGFuICogZ2FwO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplSW5kaWNhdGlvbkJvcmRlcldpZHRoID0gZnV0dXJlQ2FyZFdpZHRoIC0gdGhpcy5jYXJkV2lkdGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplSW5kaWNhdGlvbkJvcmRlcldpZHRoID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ByZXZYID0gY2xpZW50WDtcbiAgICAgICAgdGhpcy5fcHJldlkgPSBjbGllbnRZO1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgLy8gRW1pdHMgcmVzaXppbmcgZXZlbnQuXG4gICAgICAgIHRoaXMucmVzaXppbmcuZW1pdCh0aGlzLmdldFJlc2l6ZWRFdmVudE9iamVjdCgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB3aGVuIHJlc2l6aW5nIG9mIGNhcmQgc3RvcHNcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDptb3VzZXVwJylcbiAgICBvbk1vdXNlVXAoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5yZXNpemFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBjYXJkIHdhcyBub3QgcmVzaXppbmdcbiAgICAgICAgaWYgKCF0aGlzLl9yZXNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluY3JlYXNlL2RlY3JlYXNlIHdpZHRoIG9mIGNhcmQgaW4gb3JkZXIgb2YgMjByZW1cbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMuY2FyZFdpZHRoIC0gdGhpcy5fcHJldkNhcmRXaWR0aCkgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9ob3Jpem9udGFsU3RlcFJlc2l6aW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbmNyZWFzZS9kZWNyZWFzZSBoZWlnaHQgb2YgY2FyZCBpbiBvcmRlciBvZiAxcmVtXG4gICAgICAgIGlmIChNYXRoLmFicyh0aGlzLmNhcmRIZWlnaHQgLSB0aGlzLl9wcmV2Q2FyZEhlaWdodCkgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl92ZXJ0aWNhbFN0ZXBSZXNpemluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3RvcFJlc2l6aW5nKCk7XG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHJlc2l6ZSBoYW5kbGVyIGlzIHByZXNzZWQgYW5kIHJlc2l6aW5nIG1heSBzdGFydC5cbiAgICAgKiBAcGFyYW0gZXZlbnQge01vdXNlRXZlbnR9XG4gICAgICogQHBhcmFtIHJlc2l6ZURpcmVjdGlvbiB3aGljaCBoYW5kbGVyIGlzIHByZXNzZWQgdG8gcmVzaXplXG4gICAgICovXG4gICAgb25Nb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQsIHJlc2l6ZURpcmVjdGlvbjogUmVzaXplRGlyZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICghdGhpcy5yZXNpemFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2hvd2luZ1Jlc2l6ZUljb24gPSB0cnVlO1xuICAgICAgICB0aGlzLl9yZXNpemUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9wcmV2WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgICAgIHRoaXMuX3ByZXZZID0gZXZlbnQuY2xpZW50WTtcbiAgICAgICAgdGhpcy5fcHJldkNhcmRXaWR0aCA9IHRoaXMuY2FyZFdpZHRoO1xuICAgICAgICB0aGlzLl9wcmV2Q2FyZEhlaWdodCA9IHRoaXMuY2FyZEhlaWdodDtcbiAgICAgICAgdGhpcy5fcmVzaXplRGlyZWN0aW9uID0gcmVzaXplRGlyZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIGZvY3VzIG9uIHRoZSBlbGVtZW50ICovXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5mZC1jYXJkX19oZWFkZXInKTtcbiAgICAgICAgaGVhZGVyPy5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBTaG93cyByZXNpemUgaWNvbiAqL1xuICAgIHNob3dSZXNpemVJY29uKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucmVzaXphYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93aW5nUmVzaXplSWNvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEhpZGVzIHJlc2l6ZSBpY29uICovXG4gICAgaGlkZVJlc2l6ZUljb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fcmVzaXplKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dpbmdSZXNpemVJY29uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBtYXggd2lkdGggZm9yIGNhcmQsIGJhc2VkIG9uIGxheW91dCBzaXplIHBhc3NlZCAqL1xuICAgIGdldE1heENvbFNwYW4obGF5b3V0U2l6ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgc3dpdGNoIChsYXlvdXRTaXplKSB7XG4gICAgICAgICAgICBjYXNlICdzbSc6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4Q29sdW1uID0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21kJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9tYXhDb2x1bW4gPSAyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGcnOlxuICAgICAgICAgICAgICAgIHRoaXMuX21heENvbHVtbiA9IDM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd4bCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4Q29sdW1uID0gNDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF4Q29sdW1uID0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fbWF4Q29sdW1uO1xuICAgIH1cblxuICAgIC8qKiBVcGRhdGUgY2FyZCB3aWR0aCBpZiBpdCBleGNlZWRzIGNvbHVtbiBzcGFuIGJhc2VkIG9uIGxheW91dCAqL1xuICAgIHZlcmlmeVVwZGF0ZUNhcmRXaWR0aChsYXlvdXRTaXplOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgd2lkdGhDb2xTcGFuID0gdGhpcy5fY29uZmlnPy5jYXJkV2lkdGhDb2xTcGFuIHx8IHRoaXMuY2FyZFdpZHRoQ29sU3BhbjtcbiAgICAgICAgLy8gc3RvcmluZyBvcmlnaW5hbCB3aWR0aCBvZiBjYXJkLlxuICAgICAgICAvLyB1c2VkIHRvIHJlc3RvcmUgd2lkdGggb24gd2luZG93IHJlc2l6ZSBmcm9tIHNtYWxsIHRvIGxhcmdlXG4gICAgICAgIHRoaXMuX29yaWdpbmFsQ2FyZFdpZHRoU3BhbiA9ICF0aGlzLl9vcmlnaW5hbENhcmRXaWR0aFNwYW4gPyB3aWR0aENvbFNwYW4gOiB0aGlzLl9vcmlnaW5hbENhcmRXaWR0aFNwYW47XG4gICAgICAgIHRoaXMuX21heENvbHVtbiA9IHRoaXMuZ2V0TWF4Q29sU3BhbihsYXlvdXRTaXplKTtcbiAgICAgICAgaWYgKHdpZHRoQ29sU3BhbiA+IHRoaXMuX21heENvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5jYXJkV2lkdGhDb2xTcGFuID0gdGhpcy5fbWF4Q29sdW1uO1xuICAgICAgICAgICAgdGhpcy5fc2V0Q2FyZFdpZHRoKCk7XG4gICAgICAgICAgICAvLyBFbWl0cyByZXNpemVkIGV2ZW50LlxuICAgICAgICAgICAgdGhpcy5yZXNpemVkLmVtaXQodGhpcy5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBrZWVwIGNhcmQgd2lkdGggbWluaW11bSwgc28gaXQgY2FuIGZpdCBpbiBzY3JlZW4uXG4gICAgICAgICAgICB0aGlzLmNhcmRXaWR0aENvbFNwYW4gPSBNYXRoLm1pbih0aGlzLl9tYXhDb2x1bW4sIHRoaXMuX29yaWdpbmFsQ2FyZFdpZHRoU3Bhbik7XG4gICAgICAgICAgICB0aGlzLl9zZXRDYXJkV2lkdGgoKTtcbiAgICAgICAgICAgIC8vIEVtaXRzIHJlc2l6ZWQgZXZlbnQuXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZWQuZW1pdCh0aGlzLmdldFJlc2l6ZWRFdmVudE9iamVjdCgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIFJlc2l6ZWRFdmVudCBvYmplY3QgdG8gZW1pdC4gKi9cbiAgICBnZXRSZXNpemVkRXZlbnRPYmplY3QoKTogUmVzaXplZEV2ZW50IHtcbiAgICAgICAgY29uc3QgbmV3Q2FyZEhlaWdodFJvd1NwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZEhlaWdodCAvIHZlcnRpY2FsUmVzaXplU3RlcCk7XG4gICAgICAgIGNvbnN0IG5ld0NhcmRXaWR0aENvbFNwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZFdpZHRoIC8gaG9yaXpvbnRhbFJlc2l6ZVN0ZXApO1xuICAgICAgICBjb25zdCBuZXdDYXJkV2lkdGggPSBuZXdDYXJkV2lkdGhDb2xTcGFuICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgKyBuZXdDYXJkV2lkdGhDb2xTcGFuICogZ2FwO1xuXG4gICAgICAgIGNvbnN0IGhvcml6b250YWxSZXNpemVUaHJlc2hvbGRSZWFjaGVkID0gdGhpcy5jYXJkV2lkdGggLSBuZXdDYXJkV2lkdGggPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0O1xuICAgICAgICBjb25zdCBuZXdDYXJkQ29sU3BhbiA9IGhvcml6b250YWxSZXNpemVUaHJlc2hvbGRSZWFjaGVkID8gbmV3Q2FyZFdpZHRoQ29sU3BhbiArIDEgOiBuZXdDYXJkV2lkdGhDb2xTcGFuO1xuICAgICAgICByZXR1cm4gbmV3IFJlc2l6ZWRFdmVudChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICB0aGlzLl9wcmV2Q2FyZFdpZHRoLFxuICAgICAgICAgICAgdGhpcy5fcHJldkNhcmRIZWlnaHQsXG4gICAgICAgICAgICB0aGlzLmNhcmRXaWR0aCxcbiAgICAgICAgICAgIHRoaXMuY2FyZEhlaWdodCxcbiAgICAgICAgICAgIHRoaXMuX2NhcmRXaWR0aENvbFNwYW4sXG4gICAgICAgICAgICB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbixcbiAgICAgICAgICAgIG5ld0NhcmRDb2xTcGFuLFxuICAgICAgICAgICAgbmV3Q2FyZEhlaWdodFJvd1NwYW5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXR1cm4gcHJldmlvdXMgaGVpZ2h0IHJvdyBzcGFuIG9mIHRoZSBjYXJkICovXG4gICAgZ2V0IHByZXZpb3VzQ2FyZEhlaWdodFJvd1NwYW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZXZDYXJkSGVpZ2h0Um93U3BhbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTZXQgY2FyZCBwcm9wZXJ0aWVzIHVzaW5nIGNvbmZpZyByZWNlaXZlZCAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxTZXR1cCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYXJkV2lkdGhDb2xTcGFuID0gdGhpcy5fY29uZmlnPy5jYXJkV2lkdGhDb2xTcGFuIHx8IHRoaXMuY2FyZFdpZHRoQ29sU3BhbjtcbiAgICAgICAgdGhpcy5jYXJkSGVpZ2h0Um93U3BhbiA9IHRoaXMuX2NvbmZpZz8uY2FyZEhlaWdodFJvd1NwYW4gfHwgdGhpcy5jYXJkSGVpZ2h0Um93U3BhbjtcbiAgICAgICAgdGhpcy50aXRsZSA9IHRoaXMuX2NvbmZpZz8udGl0bGUgfHwgdGhpcy50aXRsZTtcbiAgICAgICAgdGhpcy5yYW5rID0gdGhpcy5fY29uZmlnPy5yYW5rIHx8IHRoaXMucmFuaztcbiAgICAgICAgdGhpcy5jYXJkTWluaUhlYWRlclJvd1NwYW4gPSB0aGlzLl9jb25maWc/LmNhcmRNaW5pSGVhZGVyUm93U3BhbiB8fCB0aGlzLmNhcmRNaW5pSGVhZGVyUm93U3BhbjtcbiAgICAgICAgdGhpcy5jYXJkTWluaUNvbnRlbnRSb3dTcGFuID0gdGhpcy5fY29uZmlnPy5jYXJkTWluaUNvbnRlbnRSb3dTcGFuIHx8IHRoaXMuY2FyZE1pbmlDb250ZW50Um93U3BhbjtcbiAgICAgICAgdGhpcy5yZXNpemFibGUgPSB0aGlzLl9jb25maWcucmVzaXphYmxlIHx8IHRoaXMucmVzaXphYmxlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJldHVybnMgdHJ1ZSB3aGVuIHJlc2l6ZSBvZmZzZXQgaXMgY3Jvc3NlZCAqL1xuICAgIHByaXZhdGUgX2hvcml6b250YWxSZXNpemVXaXRoT2Zmc2V0KCk6IHZvaWQge1xuICAgICAgICAvLyBwb3NpdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCB3aWR0aCBoYXMgaW5jcmVhc2VkXG4gICAgICAgIGNvbnN0IHdpZHRoSW5jcmVtZW50ID0gdGhpcy5jYXJkV2lkdGggLSB0aGlzLl9wcmV2Q2FyZFdpZHRoO1xuICAgICAgICBjb25zdCBjYXJkU3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkV2lkdGggLyBob3Jpem9udGFsUmVzaXplU3RlcCk7XG4gICAgICAgIGNvbnN0IGNhcmRTcGFuRnJhY3Rpb24gPSB0aGlzLmNhcmRXaWR0aCAlIGhvcml6b250YWxSZXNpemVTdGVwO1xuXG4gICAgICAgIC8vIHdoZW4gd2lkdGggaW5jcmVhc2VzXG4gICAgICAgIGlmICh3aWR0aEluY3JlbWVudCA+IDApIHtcbiAgICAgICAgICAgIGlmICh3aWR0aEluY3JlbWVudCA8IGhvcml6b250YWxSZXNpemVPZmZzZXQgKyBnYXApIHtcbiAgICAgICAgICAgICAgICAvLyB3aWR0aEluY3JlbWVudCBpcyBsZXNzIHRoYW4gb2Zmc2V0LCBkbyBub3QgaW5jcmVhc2Ugd2lkdGhcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmRXaWR0aCA9IHRoaXMuX3ByZXZDYXJkV2lkdGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHZhbHVlIG9mIGNhcmRTcGFuRnJhY3Rpb24sIGluY2x1ZGluZyBnYXBzIGluIGNhcmRzXG4gICAgICAgICAgICAgICAgY29uc3QgaXNDYXJkU3BhbkZyYWN0aW9uQ3Jvc3NpbmdPZmZzZXQgPVxuICAgICAgICAgICAgICAgICAgICBjYXJkU3BhbkZyYWN0aW9uIC0gKGNhcmRTcGFuIC0gMSkgKiBnYXAgPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0O1xuICAgICAgICAgICAgICAgIHRoaXMuY2FyZFdpZHRoID0gaXNDYXJkU3BhbkZyYWN0aW9uQ3Jvc3NpbmdPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgPyAoY2FyZFNwYW4gKyAxKSAqIGhvcml6b250YWxSZXNpemVTdGVwXG4gICAgICAgICAgICAgICAgICAgIDogY2FyZFNwYW4gKiBob3Jpem9udGFsUmVzaXplU3RlcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHdoZW4gd2lkdGggZGVjcmVhc2VzXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMod2lkdGhJbmNyZW1lbnQpIDwgaG9yaXpvbnRhbFJlc2l6ZU9mZnNldCkge1xuICAgICAgICAgICAgICAgIC8vIHdpZHRoSW5jcmVtZW50IGlzIGxlc3MgdGhhbiBvZmZzZXQsIGRvIG5vdCBkZWNyZWFzZSB3aWR0aFxuICAgICAgICAgICAgICAgIHRoaXMuY2FyZFdpZHRoID0gdGhpcy5fcHJldkNhcmRXaWR0aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgdmFsdWUgb2YgY2FyZFNwYW5GcmFjdGlvbiwgaW5jbHVkaW5nIGdhcHMgaW4gY2FyZHNcbiAgICAgICAgICAgICAgICBjb25zdCBpc0NhcmRTcGFuRnJhY3Rpb25Dcm9zc2luZ09mZnNldCA9IGNhcmRTcGFuRnJhY3Rpb24gLSBjYXJkU3BhbiAqIGdhcCA+IGhvcml6b250YWxSZXNpemVPZmZzZXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJkV2lkdGggPSBpc0NhcmRTcGFuRnJhY3Rpb25Dcm9zc2luZ09mZnNldFxuICAgICAgICAgICAgICAgICAgICA/IChjYXJkU3BhbiArIDEpICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXBcbiAgICAgICAgICAgICAgICAgICAgOiBjYXJkU3BhbiAqIGhvcml6b250YWxSZXNpemVTdGVwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBtYWtlIGhvcml6b250YWwgcmVzaXplIG9ubHkgb24gc3RlcCBvZiAyMHJlbVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hvcml6b250YWxTdGVwUmVzaXppbmcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2hvcml6b250YWxSZXNpemVXaXRoT2Zmc2V0KCk7XG5cbiAgICAgICAgLy8gQWRkIGlubmVyIGdhcCBpbiAgY2FyZFdpZHRoIGlmIHdpZHRoIGlzIG1vcmUgdGhhbiAxIGNvbHVtblxuICAgICAgICBpZiAodGhpcy5jYXJkV2lkdGggPiBob3Jpem9udGFsUmVzaXplU3RlcCkge1xuICAgICAgICAgICAgdGhpcy5jYXJkV2lkdGggPSB0aGlzLmNhcmRXaWR0aCArICh0aGlzLmNhcmRXaWR0aCAvIGhvcml6b250YWxSZXNpemVTdGVwIC0gMSkgKiBnYXA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYXJkV2lkdGhDb2xTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRXaWR0aCAvIGhvcml6b250YWxSZXNpemVTdGVwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIG1ha2UgdmVydGljYWwgcmVzaXplIG9ubHkgb24gc3RlcCBvZiAxcmVtXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdmVydGljYWxTdGVwUmVzaXppbmcoKTogdm9pZCB7XG4gICAgICAgIC8vIHBvc2l0aXZlIHZhbHVlIGluZGljYXRlcyB0aGF0IGhlaWdodCBoYXMgaW5jcmVhc2VkXG4gICAgICAgIGNvbnN0IGNhcmRIZWlnaHRTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRIZWlnaHQgLyB2ZXJ0aWNhbFJlc2l6ZVN0ZXApO1xuICAgICAgICBjb25zdCBjYXJkU3BhbkZyYWN0aW9uID0gdGhpcy5jYXJkSGVpZ2h0ICUgdmVydGljYWxSZXNpemVTdGVwO1xuICAgICAgICB0aGlzLmNhcmRIZWlnaHQgPVxuICAgICAgICAgICAgY2FyZFNwYW5GcmFjdGlvbiA+IHZlcnRpY2FsUmVzaXplT2Zmc2V0XG4gICAgICAgICAgICAgICAgPyAoY2FyZEhlaWdodFNwYW4gKyAxKSAqIHZlcnRpY2FsUmVzaXplU3RlcFxuICAgICAgICAgICAgICAgIDogY2FyZEhlaWdodFNwYW4gKiB2ZXJ0aWNhbFJlc2l6ZVN0ZXA7XG5cbiAgICAgICAgdGhpcy5jYXJkSGVpZ2h0Um93U3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkSGVpZ2h0IC8gdmVydGljYWxSZXNpemVTdGVwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIFJlc2l6ZSBjYXJkIGhvcml6b250YWxseSBieSBjaGVja2luZyBib3VuZGFyeSBjb25kaXRpb25cbiAgICAgKiBAcGFyYW0geFBvc2l0aW9uIGN1cnJlbnQgeC1wb3NpdGlvbiBvZiBjdXJzb3JcbiAgICAgKi9cbiAgICBwcml2YXRlIF9ob3Jpem9udGFsUmVzaXppbmcoeFBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IHRoaXMuX3ByZXZYIC0geFBvc2l0aW9uO1xuICAgICAgICB0aGlzLmNhcmRXaWR0aCA9IHRoaXMuX3J0bFNlcnZpY2U/LnJ0bFNpZ25hbCgpID8gdGhpcy5jYXJkV2lkdGggKyBkaWZmZXJlbmNlIDogdGhpcy5jYXJkV2lkdGggLSBkaWZmZXJlbmNlO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsSW5kZW50YXRpb24gPSAodGhpcy5fbWF4Q29sdW1uIC0gMSkgKiBnYXA7XG4gICAgICAgIGNvbnN0IG1heENhcmRXaWR0V2l0aG91dEluZGVudGF0aW9uID0gdGhpcy5fbWF4Q29sdW1uICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXA7XG5cbiAgICAgICAgY29uc3QgbWF4Q2FyZFdpZHRoID0gdGhpcy5fcnRsU2VydmljZT8ucnRsU2lnbmFsKClcbiAgICAgICAgICAgID8gbWF4Q2FyZFdpZHRXaXRob3V0SW5kZW50YXRpb24gLSB0b3RhbEluZGVudGF0aW9uXG4gICAgICAgICAgICA6IG1heENhcmRXaWR0V2l0aG91dEluZGVudGF0aW9uICsgdG90YWxJbmRlbnRhdGlvbjtcblxuICAgICAgICBpZiAodGhpcy5jYXJkV2lkdGggPiBtYXhDYXJkV2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZFdpZHRoID0gbWF4Q2FyZFdpZHRoO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2FyZFdpZHRoIDwgaG9yaXpvbnRhbFJlc2l6ZVN0ZXApIHtcbiAgICAgICAgICAgIHRoaXMuY2FyZFdpZHRoID0gaG9yaXpvbnRhbFJlc2l6ZVN0ZXA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIFJlc2l6ZSBjYXJkIHZlcnRpY2FsbHkuXG4gICAgICogdGFrZXMgY2FyZSBvZiBtaW5pLWhlYWRlciBoZWlnaHQgYW5kIG1pbmktY29udGVudCBoZWlnaHRcbiAgICAgKiBAcGFyYW0geVBvc2l0aW9uIGN1cnJlbnQgeS1wb3NpdGlvbiBvZiBjdXJzb3JcbiAgICAgKi9cbiAgICBwcml2YXRlIF92ZXJ0aWNhbFJlc2l6aW5nKHlQb3NpdGlvbjogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGxldCByZWFjaGluZ01pbmlIZWFkZXIgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5jYXJkSGVpZ2h0ID09PSB0aGlzLmNhcmRNaW5pSGVhZGVySGVpZ2h0KSB7XG4gICAgICAgICAgICAvLyBpZiBjYXJkIGhlaWdodCBpcyBhbHJlYWR5IGF0IG1pbmktaGVhZGVyIGhlaWdodFxuICAgICAgICAgICAgaWYgKHRoaXMuX3ByZXZZIC0geVBvc2l0aW9uID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIGRlY3JlYXNpbmcgaGVpZ2h0XG4gICAgICAgICAgICAgICAgLy8gaWYgbWluaUhlYWRlciBoZWlnaHQgcmVhY2hlZCwgc3RvcCByZXNpemluZ1xuICAgICAgICAgICAgICAgIHRoaXMuY2FyZEhlaWdodCA9IHRoaXMuY2FyZE1pbmlIZWFkZXJIZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldkNhcmRIZWlnaHRSb3dTcGFuID0gdGhpcy5fY2FyZEhlaWdodFJvd1NwYW47XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FyZEhlaWdodFJvd1NwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZEhlaWdodCAvIHZlcnRpY2FsUmVzaXplU3RlcCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGluY3JlYXNpbmcgaGVpZ2h0XG4gICAgICAgICAgICAgICAgdGhpcy5jYXJkSGVpZ2h0ID0gdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodCArIHRoaXMuY2FyZE1pbmlDb250ZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZDYXJkSGVpZ2h0Um93U3BhbiA9IHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRIZWlnaHQgLyB2ZXJ0aWNhbFJlc2l6ZVN0ZXApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BSZXNpemluZygpO1xuICAgICAgICAgICAgICAgIHRoaXMubWluaUNvbnRlbnRSZWFjaGVkLmVtaXQodGhpcy5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXJkSGVpZ2h0IDwgdGhpcy5jYXJkTWluaUNvbnRlbnRIZWlnaHQgKyB0aGlzLmNhcmRNaW5pSGVhZGVySGVpZ2h0KSB7XG4gICAgICAgICAgICAvLyBpZiBjYXJkIGhlaWdodCBpcyBiZXR3ZWVuIG1pbmktaGVhZGVyIGFuZCBtaW5pLWNvbnRlbnRcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcmV2WSAtIHlQb3NpdGlvbiA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmRIZWlnaHQgPSB0aGlzLmNhcmRNaW5pSGVhZGVySGVpZ2h0ICsgdGhpcy5jYXJkTWluaUNvbnRlbnRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJldkNhcmRIZWlnaHRSb3dTcGFuID0gdGhpcy5fY2FyZEhlaWdodFJvd1NwYW47XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FyZEhlaWdodFJvd1NwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZEhlaWdodCAvIHZlcnRpY2FsUmVzaXplU3RlcCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcFJlc2l6aW5nKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5taW5pQ29udGVudFJlYWNoZWQuZW1pdCh0aGlzLmdldFJlc2l6ZWRFdmVudE9iamVjdCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHRoaXMuY2FyZEhlaWdodCA9PT0gdGhpcy5jYXJkTWluaUNvbnRlbnRIZWlnaHQgKyB0aGlzLmNhcmRNaW5pSGVhZGVySGVpZ2h0ICYmXG4gICAgICAgICAgICB0aGlzLl9wcmV2WSAtIHlQb3NpdGlvbiA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBkZWNyZWFzaW5nIGhlaWdodFxuICAgICAgICAgICAgLy8gaGVpZ2h0IGRlY3JlYXNpbmcgYWZ0ZXIgcmVhY2hpbmcgbWluaS1jb250ZW50LiB0aGlzIG5lZWRzIHRvIGRpZmZlcmVudGlhdGVcbiAgICAgICAgICAgIC8vIGZyb20gaGVpZ2h0IGRlY3JlYXNpbmcgYW5kIHJlYWNoaW5nIHRvIG1pbmktY29udGVudC5cbiAgICAgICAgICAgIHJlYWNoaW5nTWluaUhlYWRlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNhcmRIZWlnaHQgPSB0aGlzLmNhcmRNaW5pSGVhZGVySGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5fcHJldkNhcmRIZWlnaHRSb3dTcGFuID0gdGhpcy5fY2FyZEhlaWdodFJvd1NwYW47XG4gICAgICAgICAgICB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbiA9IE1hdGguZmxvb3IodGhpcy5jYXJkSGVpZ2h0IC8gdmVydGljYWxSZXNpemVTdGVwKTtcbiAgICAgICAgICAgIC8vIG1pbmlIZWFkZXIgaGVpZ2h0IHJlYWNoZWQsIHN0b3AgcmVzaXppbmdcbiAgICAgICAgICAgIHRoaXMuX3N0b3BSZXNpemluZygpO1xuICAgICAgICAgICAgdGhpcy5taW5pSGVhZGVyUmVhY2hlZC5lbWl0KHRoaXMuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jYXJkSGVpZ2h0ID0gdGhpcy5jYXJkSGVpZ2h0IC0gKHRoaXMuX3ByZXZZIC0geVBvc2l0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuX3ByZXZDYXJkSGVpZ2h0Um93U3BhbiA9IHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuO1xuICAgICAgICAgICAgdGhpcy5fY2FyZEhlaWdodFJvd1NwYW4gPSBNYXRoLmZsb29yKHRoaXMuY2FyZEhlaWdodCAvIHZlcnRpY2FsUmVzaXplU3RlcCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdG9wIHJlc2l6aW5nIG9uIG1pbmlDb250ZW50IGhlaWdodFxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmNhcmRIZWlnaHQgPD0gdGhpcy5jYXJkTWluaUNvbnRlbnRIZWlnaHQgKyB0aGlzLmNhcmRNaW5pSGVhZGVySGVpZ2h0ICYmXG4gICAgICAgICAgICB0aGlzLl9wcmV2WSAtIHlQb3NpdGlvbiA+IDAgJiZcbiAgICAgICAgICAgICFyZWFjaGluZ01pbmlIZWFkZXJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmNhcmRIZWlnaHQgPSB0aGlzLmNhcmRNaW5pQ29udGVudEhlaWdodCArIHRoaXMuY2FyZE1pbmlIZWFkZXJIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLl9wcmV2Q2FyZEhlaWdodFJvd1NwYW4gPSB0aGlzLl9jYXJkSGVpZ2h0Um93U3BhbjtcbiAgICAgICAgICAgIHRoaXMuX2NhcmRIZWlnaHRSb3dTcGFuID0gTWF0aC5mbG9vcih0aGlzLmNhcmRIZWlnaHQgLyB2ZXJ0aWNhbFJlc2l6ZVN0ZXApO1xuICAgICAgICAgICAgdGhpcy5taW5pQ29udGVudFJlYWNoZWQuZW1pdCh0aGlzLmdldFJlc2l6ZWRFdmVudE9iamVjdCgpKTtcbiAgICAgICAgICAgIHRoaXMuX3N0b3BSZXNpemluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2hpbGUgY29ybmVyIHJlc2l6ZSwgd2lkdGggbWlnaHQgaGF2ZSBpbmNyZWFzZWQgYW5kIHJlYWNoZWQgdG8gbWluaS1jb250ZW50IGhlaWdodC5cbiAgICAgICAgLy8gc28sIG9uIG1pbmktY29udGVudCByZXNpemUgd2lsbCBzdG9wLCBidXQgaGF2ZSB0byBkbyBzdGVwIHJlc2l6aW5nIGZvciB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbC5cbiAgICAgICAgaWYgKCF0aGlzLl9yZXNpemUpIHtcbiAgICAgICAgICAgIC8vIGluY3JlYXNlL2RlY3JlYXNlIHdpZHRoIG9mIGNhcmQgaW4gb3JkZXIgb2YgMjByZW1cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLmNhcmRXaWR0aCAtIHRoaXMuX3ByZXZDYXJkV2lkdGgpID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hvcml6b250YWxTdGVwUmVzaXppbmcoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaW5jcmVhc2UvZGVjcmVhc2UgaGVpZ2h0IG9mIGNhcmQgaW4gb3JkZXIgb2YgMXJlbVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMuY2FyZEhlaWdodCAtIHRoaXMuX3ByZXZDYXJkSGVpZ2h0KSA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92ZXJ0aWNhbFN0ZXBSZXNpemluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gcmVzZXQgaW52b2x2ZWQgdmFyaWFibGVzIHdoaWxlIHJlc2l6aW5nICovXG4gICAgcHJpdmF0ZSBfc3RvcFJlc2l6aW5nKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fcmVzaXplKSB7XG4gICAgICAgICAgICB0aGlzLmNhcmRTdGF0ZSA9IDA7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZUluZGljYXRpb25Cb3JkZXJXaWR0aCA9IDA7XG4gICAgICAgICAgICB0aGlzLl9yZXNpemUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuekluZGV4ID0gMDtcbiAgICAgICAgICAgIHRoaXMuc2hvd0JvcmRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZXNpemVkLmVtaXQodGhpcy5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSZXR1cm5zIGNhcmRXaWR0aCBiYXNlZCBvbiBjYXJkIGNvbHVtbiBzcGFuICovXG4gICAgcHJpdmF0ZSBfc2V0Q2FyZFdpZHRoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhcmRXaWR0aCA9IHRoaXMuX2NhcmRXaWR0aENvbFNwYW4gKiBob3Jpem9udGFsUmVzaXplU3RlcCArICh0aGlzLl9jYXJkV2lkdGhDb2xTcGFuIC0gMSkgKiBnYXA7XG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJldHVybnMgY2FyZEhlaWdodCBiYXNlZCBvbiBjYXJkIHJvdyBzcGFuICovXG4gICAgcHJpdmF0ZSBfc2V0Q2FyZEhlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYXJkSGVpZ2h0ID0gdGhpcy5fY2FyZEhlaWdodFJvd1NwYW4gKiB2ZXJ0aWNhbFJlc2l6ZVN0ZXA7XG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJldHVybnMgY2FyZCBtaW5pIGhlYWRlciBoZWlnaHQgKi9cbiAgICBwcml2YXRlIF9zZXRDYXJkTWluaUhlYWRlckhlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jYXJkTWluaUhlYWRlckhlaWdodCA9IHRoaXMuX2NhcmRNaW5pSGVhZGVyUm93U3BhbiAqIHZlcnRpY2FsUmVzaXplU3RlcDtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmV0dXJucyBjYXJkIG1pbmkgY29udGVudCBoZWlnaHQgKi9cbiAgICBwcml2YXRlIF9zZXRDYXJkTWluaUNvbnRlbnRIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2FyZE1pbmlDb250ZW50SGVpZ2h0ID0gdGhpcy5jYXJkTWluaUNvbnRlbnRSb3dTcGFuICogdmVydGljYWxSZXNpemVTdGVwO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG5cbi8qKiBDb25maWcgaW50ZXJmYWNlIGZvciBjYXJkIHByb3BlcnRpZXMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzaXphYmxlQ2FyZEl0ZW1Db25maWcge1xuICAgIHRpdGxlPzogc3RyaW5nO1xuICAgIHJhbms/OiBudW1iZXI7XG4gICAgY2FyZFdpZHRoQ29sU3Bhbj86IG51bWJlcjtcbiAgICBjYXJkSGVpZ2h0Um93U3Bhbj86IG51bWJlcjtcbiAgICBjYXJkTWluaUhlYWRlclJvd1NwYW4/OiBudW1iZXI7XG4gICAgY2FyZE1pbmlDb250ZW50Um93U3Bhbj86IG51bWJlcjtcbiAgICByZXNpemFibGU/OiBib29sZWFuO1xufVxuXG4vKiogT2JqZWN0IHRvIGVtaXQgb24gcmVzaXplIGNvbXBsZXRlICovXG5leHBvcnQgY2xhc3MgUmVzaXplZEV2ZW50IHtcbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gZW1pdCBvbiByZXNpemUgY29tcGxldGVcbiAgICAgKiBAcGFyYW0gY2FyZFxuICAgICAqIEBwYXJhbSBwcmV2Q2FyZFdpZHRoIFByZXZpb3VzIGNhcmQgd2lkdGhcbiAgICAgKiBAcGFyYW0gcHJldkNhcmRIZWlnaHQgUHJldmlvdXMgY2FyZCBoZWlnaHRcbiAgICAgKiBAcGFyYW0gY2FyZFdpZHRoIEN1cnJlbnQgY2FyZCB3aWR0aFxuICAgICAqIEBwYXJhbSBjYXJkSGVpZ2h0IEN1cnJlbnQgY2FyZCBoZWlnaHRcbiAgICAgKiBAcGFyYW0gY2FyZFdpZHRoQ29sU3BhbiBDdXJyZW50IGNhcmQgd2lkdGggY29sdW1uIHNwYW5cbiAgICAgKiBAcGFyYW0gY2FyZEhlaWdodFJvd1NwYW4gQ3VycmVudCBjYXJkIGhlaWdodCByb3cgc3BhblxuICAgICAqIEBwYXJhbSBuZXdDYXJkV2lkdGhDb2xTcGFuIE5ldyBjYXJkIHdpZHRoIGNvbHVtbiBzcGFuXG4gICAgICogQHBhcmFtIG5ld0NhcmRIZWlnaHRSb3dTcGFuIE5ldyBjYXJkIGhlaWdodCByb3cgc3BhblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQsXG4gICAgICAgIHB1YmxpYyBwcmV2Q2FyZFdpZHRoOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBwcmV2Q2FyZEhlaWdodDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgY2FyZFdpZHRoOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBjYXJkSGVpZ2h0OiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBjYXJkV2lkdGhDb2xTcGFuOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBjYXJkSGVpZ2h0Um93U3BhbjogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgbmV3Q2FyZFdpZHRoQ29sU3BhbjogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgbmV3Q2FyZEhlaWdodFJvd1NwYW46IG51bWJlclxuICAgICkge31cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9faXRlbVwiXG4gICAgW2NsYXNzLmZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9faW5kaWNhdGlvbi1ib3JkZXJdPVwic2hvd0JvcmRlclwiXG4gICAgI3Jlc2l6ZUNhcmRcbj5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19pdGVtLS1ib3JkZXItZGlzcGxheSBmZC1yZXNpemFibGUtY2FyZC1sYXlvdXRfX2l0ZW0tLXJlc2l6ZS10cmFuc2l0aW9uXCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNhcmRXaWR0aFwiXG4gICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY2FyZEhlaWdodFwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cInNob3dSZXNpemVJY29uKClcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJoaWRlUmVzaXplSWNvbigpXCJcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmZC1yZXNpemFibGUtY2FyZC1sYXlvdXRfX2NhcmRcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICAgIEBpZiAoc2hvd2luZ1Jlc2l6ZUljb24pIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19pY29uLXdyYXBwZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0X19pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNjb3JuZXJIYW5kbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCAnYm90aCcpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChyZXNpemFibGUpIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ2ZXJ0aWNhbEhhbmRsZVRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJob3Jpem9udGFsSGFuZGxlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9faXRlbS0tcmVzaXplLXRyYW5zaXRpb25cIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicmVzaXplSW5kaWNhdGlvbkJvcmRlcldpZHRoXCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjYXJkSGVpZ2h0XCJcbiAgICA+PC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjdmVydGljYWxIYW5kbGVUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgICN2ZXJ0aWNhbEhhbmRsZVxuICAgICAgICBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9fcmVzaXplLS12ZXJ0aWNhbFwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCAnaG9yaXpvbnRhbCcpXCJcbiAgICA+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNob3Jpem9udGFsSGFuZGxlVGVtcGxhdGU+XG4gICAgPGRpdlxuICAgICAgICAjaG9yaXpvbnRhbEhhbmRsZVxuICAgICAgICBjbGFzcz1cImZkLXJlc2l6YWJsZS1jYXJkLWxheW91dF9fcmVzaXplLS1ob3Jpem9udGFsXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQsICd2ZXJ0aWNhbCcpXCJcbiAgICA+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, DestroyRef, ElementRef, EventEmitter, HostListener, Input, Optional, Output, QueryList, ViewEncapsulation, computed, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\nimport { ResizableCardItemComponent, gap, horizontalResizeOffset, horizontalResizeStep, verticalResizeStep } from './resizable-card-item/resizable-card-item.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@fundamental-ngx/cdk/utils\";\nexport class ResizableCardLayoutComponent {\n /** @hidden */\n constructor(_cd, elementRef, _rtlService) {\n this._cd = _cd;\n this.elementRef = elementRef;\n this._rtlService = _rtlService;\n /** Emits when card resize is reached to one new step in horizontal or vertical direction */\n this.stepChange = new EventEmitter();\n /** Emits when card is still resizing */\n this.resizing = new EventEmitter();\n /** Emits when card resize is completed */\n this.resized = new EventEmitter();\n /** Emits when card height is reduced to show only header */\n this.miniHeaderReached = new EventEmitter();\n /** Emits when minimum height of card content area is reached */\n this.miniContentReached = new EventEmitter();\n /** Emits when layout changes */\n this.layoutChange = new EventEmitter();\n /** @hidden */\n this._destroyRef = inject(DestroyRef);\n /** @hidden */\n this._layoutShifted = false;\n /** @hidden */\n this._directionPosition$ = computed(() => (this._rtlService?.rtlSignal() ? 'right' : 'left'), ...(ngDevMode ? [{ debugName: \"_directionPosition$\" }] : []));\n }\n /** @hidden handles keyboard accessibility */\n _handleKeydown(event) {\n event.stopImmediatePropagation();\n if (!this._keyboardEventsManager.activeItemIndex) {\n this._keyboardEventsManager.setFirstItemActive();\n }\n if (this._keyboardEventsManager) {\n this._keyboardEventsManager.onKeydown(event);\n }\n }\n /** @hidden */\n onResize() {\n this._createLayout();\n }\n /** @hidden */\n ngOnInit() {\n this._columnsHeight = new Array(this._columns);\n this._columnsHeight.fill(0);\n // initialise value 0\n // detect initial window size and set layout\n this._createLayout();\n }\n /** @hidden */\n ngAfterContentInit() {\n this._initialSetup();\n // listen for query-list change\n this.resizeCardItems?.forEach((card) => {\n card?.verifyUpdateCardWidth(this.layoutSize);\n });\n this.resizeCardItems.changes.subscribe(() => {\n this.arrangeCards(this.resizeCardItems?.toArray());\n });\n this.arrangeCards(this.resizeCardItems?.toArray());\n this._cd.markForCheck();\n }\n /** @hidden */\n ngAfterViewInit() {\n this._accessibilitySetup();\n }\n /** @hidden */\n ngOnDestroy() {\n this._keyboardEventsManager?.destroy();\n }\n /** Layout size. Available options are 'sm', 'md', 'lg' and 'xl' */\n set layoutSize(layoutSize) {\n this._layout = layoutSize;\n }\n get layoutSize() {\n return this._layout;\n }\n /**\n * Arranges cards in layout based on rank, width and height of card\n * @param cards Array of ResizableCardItemComponent\n */\n arrangeCards(cards) {\n this._columnsHeight = new Array(this._columns);\n this._columnsHeight.fill(0);\n // sort based on the card rank\n this._sortedCards = cards?.sort(this._sortCards);\n this._sortedCards?.forEach((card, index) => {\n this._setCardPositionValues(card, index);\n this._updateColumnsHeight(card);\n });\n this.layoutHeight = Math.max.apply(null, this._columnsHeight) + verticalResizeStep;\n this._emitLayoutChange();\n this._cd.markForCheck();\n }\n /**\n * Handles shifting of cards with animation, while card is still resizing.\n * @param event {ResizedEvent}\n */\n cardResizing(event) {\n this.resizing.emit(event);\n this._handleHorizontalResize(event);\n this._handleVerticalResize(event);\n }\n /**\n * Handles arrangement of cards in layout\n * @param event {ResizedEvent}\n */\n cardResizeComplete(event) {\n this._layoutShifted = false;\n this.arrangeCards(this.resizeCardItems.toArray());\n this.resized.emit(event);\n }\n /** @hidden */\n updateLayout() {\n this.resizeCardItems?.forEach((card) => {\n card?.verifyUpdateCardWidth(this.layoutSize);\n });\n this.arrangeCards(this.resizeCardItems?.toArray());\n }\n /**\n * method to get screen width\n * @returns Window width in px\n */\n getWidthAvailable() {\n return window.innerWidth;\n }\n /** @hidden Subscribe to events from items */\n _initialSetup() {\n // listen for resizing event of card item\n this.resizeCardItems?.forEach((resizeCardItem, index) => {\n if (this.layoutConfig && this.layoutConfig.length >= index + 1) {\n resizeCardItem.config = this.layoutConfig[index];\n }\n resizeCardItem.resizing\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event) => this.cardResizing(event));\n // listen for resize complete event of card item\n resizeCardItem.resized\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event) => this.cardResizeComplete(event));\n // listen for mini-header height event of card item\n resizeCardItem.miniHeaderReached\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event) => {\n this.miniHeaderReached.emit(event);\n this.stepChange.emit(event);\n });\n // listen for mini-content height event of card item\n resizeCardItem.miniContentReached\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((event) => {\n this.miniContentReached.emit(event);\n this.stepChange.emit(event);\n });\n });\n }\n /** @hidden */\n _accessibilitySetup() {\n this._keyboardEventsManager?.destroy();\n this._keyboardEventsManager = new FocusKeyManager(this.resizeCardItems).withWrap();\n }\n /** @hidden create layout based on layout size */\n _createLayout() {\n const screenWidth = this.getWidthAvailable();\n const prevLayoutSize = this.layoutSize;\n if (screenWidth > 0 && screenWidth <= 656 && prevLayoutSize !== 'sm') {\n this.layoutSize = 'sm';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n }\n else if (screenWidth > 656 && screenWidth <= 975 && prevLayoutSize !== 'md') {\n this.layoutSize = 'md';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n }\n else if (screenWidth > 975 && screenWidth <= 1359 && prevLayoutSize !== 'lg') {\n this.layoutSize = 'lg';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n }\n else if (screenWidth > 1359 && prevLayoutSize !== 'xl') {\n this.layoutSize = 'xl';\n this._setLayoutColumns(this.layoutSize);\n this.updateLayout();\n }\n }\n /** @hidden Emit layoutChange event with updated card dimensions */\n _emitLayoutChange() {\n const latestCardConfig = [];\n this.resizeCardItems?.forEach((card) => {\n const cardConfig = {};\n cardConfig.cardWidthColSpan = card.cardWidthColSpan;\n cardConfig.cardHeightRowSpan = card.cardHeightRowSpan;\n cardConfig.rank = card.rank;\n cardConfig.title = card.title;\n cardConfig.cardMiniContentRowSpan = card.cardMiniContentRowSpan;\n cardConfig.cardMiniHeaderRowSpan = card.cardMiniHeaderRowSpan;\n cardConfig.resizable = card.resizable;\n latestCardConfig.push(cardConfig);\n });\n this.layoutChange.emit(latestCardConfig);\n }\n /**\n * @hidden Sets number of column in layout, based on LayoutSize passed\n * @param layoutSize {'sm' | 'md' | 'lg' | 'xl'}\n */\n _setLayoutColumns(layoutSize) {\n let layoutWidthDefault;\n switch (layoutSize) {\n case 'sm':\n this._columns = 1;\n this._paddingLeft = 8;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault;\n break;\n case 'md':\n this._columns = 2;\n this._paddingLeft = 16;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + gap;\n break;\n case 'lg':\n this._columns = 3;\n this._paddingLeft = 16;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + 2 * gap;\n break;\n case 'xl':\n this._columns = 4;\n this._paddingLeft = 48;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + 3 * gap;\n break;\n default:\n this._columns = 4;\n this._paddingLeft = 48;\n layoutWidthDefault = this._columns * horizontalResizeStep + 2 * this._paddingLeft;\n this.layoutWidth = layoutWidthDefault + 3 * gap;\n }\n }\n /**\n * @hidden Method to handle card vertical resize and trigger the layout change\n * @param event {ResizedEvent}\n */\n _handleVerticalResize(event) {\n if (event.card.cardHeightRowSpan !== event.card.previousCardHeightRowSpan) {\n this.arrangeCards(this._sortedCards);\n this._cd.markForCheck();\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n }\n /**\n * @hidden Method to handle card horizontal resize and trigger the layout change\n * @param event {ResizedEvent}\n */\n _handleHorizontalResize(event) {\n // when increasing width hit the offset, show extended border and start pushing down border cards\n // when width is decreasing , show extended border till it reaches to offset.\n const cardWidthChange = event.cardWidth - event.prevCardWidth;\n const currentResizingItemIndex = this._sortedCards?.findIndex((x) => x.rank === event.card.rank);\n if (event.cardWidth > event.prevCardWidth) {\n // when increasing size\n // card width increasing currently\n if (event.card.cardState === 1 && cardWidthChange > horizontalResizeOffset + gap && !this._layoutShifted) {\n // index of this card, then get next card. exchange ranks\n this._sortedCards.forEach((card, index) => {\n if (index > currentResizingItemIndex) {\n // if there are some cards on same height. make the current card rank higher than these.\n // otherwise next index where it will fit. until any card has less column span than total columns\n // if only in next top, one card is taking full columns\n if (card.startingColumnPosition + card.cardWidthColSpan === this._columns &&\n card.cardWidthColSpan !== this._columns) {\n // get cards with top > current top , but minimum of it\n // exchange rank with these card\n this._moveCardDown(index);\n }\n }\n });\n this._layoutShifted = true;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n else if (event.card.cardState === -1 &&\n cardWidthChange < horizontalResizeOffset + gap &&\n this._layoutShifted) {\n // card width decreasing currently\n // move up the cards, if it was shifted while increasing the width\n this._sortedCards.forEach((card) => {\n card.rank = card.prevRank ? card.prevRank : card.rank;\n card.prevRank = 0;\n });\n this._layoutShifted = false;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n }\n else if (event.cardWidth < event.prevCardWidth) {\n // when decreasing size\n if (event.card.cardState === -1 && -cardWidthChange > horizontalResizeOffset && !this._layoutShifted) {\n // card width decreasing currently\n this._layoutShifted = true;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n else if (event.card.cardState === 1 && -cardWidthChange < horizontalResizeOffset && this._layoutShifted) {\n // card width increasing currently\n this._layoutShifted = false;\n this.arrangeCards(this._sortedCards);\n this.stepChange.emit(event.card.getResizedEventObject());\n }\n }\n }\n /**\n * @hidden Method to move card down, when another card width is increasing\n * Method to loop till this._columns -1 positions and exchange the rank\n * @param currentCardIndex Index of current card\n */\n _moveCardDown(currentCardIndex) {\n // taking width of adjacent card col-span into account\n // eg: 4 columns - 2 col(adjacent card) = 2 positions can exchange ranks\n const currentCard = this._sortedCards[currentCardIndex];\n let card;\n // unoccupiedPositions positions left after currentCard occupies in next row.\n let unoccupiedPositions = this._columns - currentCard.cardWidthColSpan;\n currentCard.prevRank = currentCard.rank;\n let index = 1;\n while (unoccupiedPositions > 0) {\n // compare from next card\n card = this._sortedCards[index + currentCardIndex];\n if (card && unoccupiedPositions >= card.cardWidthColSpan) {\n card.prevRank = card.rank;\n card.rank -= 1;\n currentCard.rank = card.prevRank;\n unoccupiedPositions -= card.cardWidthColSpan;\n }\n else {\n unoccupiedPositions = 0;\n }\n index += 1;\n }\n }\n /**\n * @hidden updates array with new column heights\n * @param card {ResizableCardItemComponent}\n */\n _updateColumnsHeight(card) {\n const directionPosition = this._directionPosition$();\n const columnsStart = card[directionPosition] != null ? Math.floor(card[directionPosition] / horizontalResizeStep) : 0;\n // Get width of current card resizing and assign width here for that card\n const cardBaseColSpan = Math.floor(card.cardWidth / horizontalResizeStep);\n // till which columns card spans\n const columnsSpan = card.cardWidth - cardBaseColSpan * horizontalResizeStep - cardBaseColSpan * gap > horizontalResizeOffset\n ? cardBaseColSpan + 1\n : cardBaseColSpan;\n const columnHeight = card.cardHeight + card.top;\n for (let i = 0; i < columnsSpan; i++) {\n this._columnsHeight[i + columnsStart] = columnHeight;\n }\n if (columnsStart === columnsSpan) {\n this._columnsHeight[columnsStart] = columnHeight;\n }\n }\n /**\n * @hidden Try to set card at available heights\n * @param card ResizableCardItemComponent\n * @param index value of card in array of ResizableCardItemComponent\n */\n _setCardPositionValues(card, index) {\n const directionPosition = this._directionPosition$();\n if (index === 0) {\n card[directionPosition] = Number(this._paddingLeft);\n card.top = 0;\n card.startingColumnPosition = 0;\n return;\n }\n const uniqueHeights = this._getSortedUniqueHeights();\n let cardPositioned = false;\n for (let i = 0; i < uniqueHeights.length && !cardPositioned; i++) {\n cardPositioned = this._isPositionSetSuccess(uniqueHeights[i], card);\n }\n }\n /**\n * @hidden try to set card at given height.\n * @param height height at which card is getting positioned.\n * @param card ResizableCardItemComponent\n * @returns It returns true when card position id found otherwise it returns false.\n */\n _isPositionSetSuccess(height, card) {\n const directionPosition = this._directionPosition$();\n const columnPositions = [];\n let index = 0;\n for (const columnHeight of this._columnsHeight) {\n index++;\n if (columnHeight === height) {\n columnPositions.push(index);\n }\n }\n // check for each card position, starting from leftmost\n let isFitting = false;\n // try to fit as left (or right if Rtl) as possible from the column position\n const startingColumnPosition = this._fitCardColumnPosition(card, columnPositions, height);\n if (startingColumnPosition !== -1) {\n isFitting = true;\n card[directionPosition] =\n startingColumnPosition * horizontalResizeStep +\n this._paddingLeft +\n (startingColumnPosition > 0 ? gap * startingColumnPosition : 0);\n card.top = height + (height > 0 ? verticalResizeStep : 0);\n card.startingColumnPosition = startingColumnPosition;\n }\n return isFitting;\n }\n /**\n * @hidden Try to start card position from left most fit position.\n * @param card ResizableCardItemComponent\n * @param columnPositions {Array<number>} Array of available positions for cards.\n * @param height {number} height at which fixing the card\n * @returns {number} returns starting column position where card will fit.\n */\n _fitCardColumnPosition(card, columnPositions, height) {\n // check for each card position, starting from leftmost\n let isFitting = false;\n let startingColumnPosition = -1;\n // start from previous indexes\n const cardBaseColSpan = Math.floor(card.cardWidth / horizontalResizeStep);\n const cardColSpan = card.cardWidth - cardBaseColSpan * horizontalResizeStep - cardBaseColSpan * gap > horizontalResizeOffset\n ? cardBaseColSpan + 1\n : cardBaseColSpan;\n // try to set towards left from available card position\n // eg. [1, 2, 3, 4] columnsPositions\n for (const columnPosition of columnPositions) {\n if (isFitting) {\n break;\n }\n // startingPosition values will be 1, 2, 3, 4\n // try to fit as left as possible\n let startingPosition = columnPosition - (cardColSpan - 1);\n startingPosition = startingPosition > 0 ? startingPosition : 1;\n for (let index = startingPosition; index <= columnPosition && !isFitting; index++) {\n for (let span = 0; span < cardColSpan; span++) {\n if (this._columnsHeight[index + span - 1] <= height && cardColSpan + index - 1 <= this._columns) {\n isFitting = true;\n startingColumnPosition = index - 1;\n }\n else {\n isFitting = false;\n startingColumnPosition = -1;\n break;\n }\n }\n }\n }\n return startingColumnPosition;\n }\n /** @hidden returns sorted unique height of columns */\n _getSortedUniqueHeights() {\n const tempArray = this._columnsHeight.slice();\n const sortedColumnsHeightArray = tempArray.sort(comparer);\n const uniqueHeights = [];\n for (const sortedHeight of sortedColumnsHeightArray) {\n if (uniqueHeights.indexOf(sortedHeight) === -1) {\n uniqueHeights.push(sortedHeight);\n }\n }\n function comparer(first, second) {\n return first - second;\n }\n return uniqueHeights;\n }\n /**\n * @hidden Comparator to sort card based on rank.\n * @param firstCard ResizableCardItemComponent\n * @param secondCard ResizableCardItemComponent\n * @returns : returns difference between first card rank and other card rank.\n */\n _sortCards(firstCard, secondCard) {\n return firstCard.rank - secondCard.rank;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardLayoutComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.1.4\", type: ResizableCardLayoutComponent, isStandalone: true, selector: \"fd-resizable-card-layout\", inputs: { layoutConfig: \"layoutConfig\" }, outputs: { stepChange: \"stepChange\", resizing: \"resizing\", resized: \"resized\", miniHeaderReached: \"miniHeaderReached\", miniContentReached: \"miniContentReached\", layoutChange: \"layoutChange\" }, host: { listeners: { \"keydown\": \"_handleKeydown($event)\", \"window:resize\": \"onResize()\" } }, queries: [{ propertyName: \"resizeCardItems\", predicate: ResizableCardItemComponent }], ngImport: i0, template: \"<div\\n #layout\\n class=\\\"fd-resizable-card-layout\\\"\\n [class]=\\\"'fd-resizable-card-layout--' + layoutSize\\\"\\n [style.width.px]=\\\"layoutWidth\\\"\\n [style.height.px]=\\\"layoutHeight\\\"\\n>\\n <ng-content></ng-content>\\n</div>\\n\", styles: [\".fd-resizable-card-layout{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;margin-top:1rem;padding-block:0;padding-inline:0;padding-inline:.5rem;position:relative}.fd-resizable-card-layout:after,.fd-resizable-card-layout:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-width:20rem;position:relative}.fd-resizable-card-layout__item:after,.fd-resizable-card-layout__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__card{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;-webkit-box-flex:1;-ms-flex:1;flex:1;height:calc(100% - .0625rem);position:relative}.fd-resizable-card-layout__card:after,.fd-resizable-card-layout__card:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1.5rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1.5rem;padding-block:0;padding-inline:0;width:1.5rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;bottom:-.35rem;justify-content:flex-start;position:absolute;right:0;z-index:2}.fd-resizable-card-layout__icon-wrapper:after,.fd-resizable-card-layout__icon-wrapper:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon-wrapper{bottom:-.125rem;left:-.25rem;right:auto}.fd-resizable-card-layout__icon{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1rem;padding-block:0;padding-inline:0;width:1rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--sapButton_Lite_TextColor);cursor:nwse-resize;font-family:SAP-icons;font-size:1rem;height:100%;line-height:1rem;position:absolute;width:100%;z-index:2}.fd-resizable-card-layout__icon:after,.fd-resizable-card-layout__icon:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon:before{content:\\\"\\\\e24f\\\";font-family:SAP-icons;height:100%;text-align:center;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;width:100%}.fd-resizable-card-layout__icon[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon{cursor:nesw-resize;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fd-resizable-card-layout__icon--vertical,.fd-resizable-card-layout__icon--vertical[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--vertical{cursor:ns-resize}.fd-resizable-card-layout__icon--horizontal,.fd-resizable-card-layout__icon--horizontal[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--horizontal{cursor:ew-resize}.fd-resizable-card-layout__resize--vertical{-webkit-box-ordinal-group:3;-ms-flex-order:2;cursor:ew-resize;order:2;width:.0625rem;z-index:2}.fd-resizable-card-layout__resize--vertical::content{content:\\\"\\\";position:absolute}.fd-resizable-card-layout__resize--horizontal{bottom:0;cursor:ns-resize;height:.0625rem;position:absolute;width:calc(100% - .5rem);z-index:2}.fd-resizable-card-layout__indication-border{border:0;border:.125rem dashed var(--sapContent_DragAndDropActiveColor);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-resizable-card-layout__indication-border:after,.fd-resizable-card-layout__indication-border:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout--sm{padding-inline:.5rem}.fd-resizable-card-layout--lg,.fd-resizable-card-layout--md{padding-inline:1rem}.fd-resizable-card-layout--xl{padding-inline:3rem}fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper{right:0}[dir=rtl] fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper,fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper[dir=rtl]{right:auto;left:-.375rem;bottom:0}fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper .fd-resizable-card-layout__icon{width:100%;height:100%}fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper .fd-resizable-card-layout__icon:before{width:100%;height:100%}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/resizable-card-layout.css:\\n (*!\\n * Fundamental Library Styles v0.40.1\\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\\n *)\\n*/\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardLayoutComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-resizable-card-layout', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, template: \"<div\\n #layout\\n class=\\\"fd-resizable-card-layout\\\"\\n [class]=\\\"'fd-resizable-card-layout--' + layoutSize\\\"\\n [style.width.px]=\\\"layoutWidth\\\"\\n [style.height.px]=\\\"layoutHeight\\\"\\n>\\n <ng-content></ng-content>\\n</div>\\n\", styles: [\".fd-resizable-card-layout{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;margin-top:1rem;padding-block:0;padding-inline:0;padding-inline:.5rem;position:relative}.fd-resizable-card-layout:after,.fd-resizable-card-layout:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__item{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;min-width:20rem;position:relative}.fd-resizable-card-layout__item:after,.fd-resizable-card-layout__item:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__card{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;-webkit-box-flex:1;-ms-flex:1;flex:1;height:calc(100% - .0625rem);position:relative}.fd-resizable-card-layout__card:after,.fd-resizable-card-layout__card:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1.5rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1.5rem;padding-block:0;padding-inline:0;width:1.5rem;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;bottom:-.35rem;justify-content:flex-start;position:absolute;right:0;z-index:2}.fd-resizable-card-layout__icon-wrapper:after,.fd-resizable-card-layout__icon-wrapper:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon-wrapper[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon-wrapper{bottom:-.125rem;left:-.25rem;right:auto}.fd-resizable-card-layout__icon{border:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);display:-webkit-box;display:-ms-flexbox;display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1rem;line-height:normal;margin-block:0;margin-inline:0;min-width:1rem;padding-block:0;padding-inline:0;width:1rem;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--sapButton_Lite_TextColor);cursor:nwse-resize;font-family:SAP-icons;font-size:1rem;height:100%;line-height:1rem;position:absolute;width:100%;z-index:2}.fd-resizable-card-layout__icon:after,.fd-resizable-card-layout__icon:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout__icon:before{content:\\\"\\\\e24f\\\";font-family:SAP-icons;height:100%;text-align:center;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;width:100%}.fd-resizable-card-layout__icon[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon{cursor:nesw-resize;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fd-resizable-card-layout__icon--vertical,.fd-resizable-card-layout__icon--vertical[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--vertical{cursor:ns-resize}.fd-resizable-card-layout__icon--horizontal,.fd-resizable-card-layout__icon--horizontal[dir=rtl],[dir=rtl] .fd-resizable-card-layout__icon--horizontal{cursor:ew-resize}.fd-resizable-card-layout__resize--vertical{-webkit-box-ordinal-group:3;-ms-flex-order:2;cursor:ew-resize;order:2;width:.0625rem;z-index:2}.fd-resizable-card-layout__resize--vertical::content{content:\\\"\\\";position:absolute}.fd-resizable-card-layout__resize--horizontal{bottom:0;cursor:ns-resize;height:.0625rem;position:absolute;width:calc(100% - .5rem);z-index:2}.fd-resizable-card-layout__indication-border{border:0;border:.125rem dashed var(--sapContent_DragAndDropActiveColor);-webkit-box-sizing:border-box;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin-block:0;margin-inline:0;padding-block:0;padding-inline:0}.fd-resizable-card-layout__indication-border:after,.fd-resizable-card-layout__indication-border:before{-webkit-box-sizing:inherit;box-sizing:inherit;font-size:inherit}.fd-resizable-card-layout--sm{padding-inline:.5rem}.fd-resizable-card-layout--lg,.fd-resizable-card-layout--md{padding-inline:1rem}.fd-resizable-card-layout--xl{padding-inline:3rem}fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper{right:0}[dir=rtl] fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper,fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper[dir=rtl]{right:auto;left:-.375rem;bottom:0}fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper .fd-resizable-card-layout__icon{width:100%;height:100%}fd-resizable-card-item .fd-resizable-card-layout__icon-wrapper .fd-resizable-card-layout__icon:before{width:100%;height:100%}\\n/*! Bundled license information:\\n\\nfundamental-styles/dist/resizable-card-layout.css:\\n (*!\\n * Fundamental Library Styles v0.40.1\\n * Copyright (c) 2025 SAP SE or an SAP affiliate company.\\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\\n *)\\n*/\\n\"] }]\n }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.RtlService, decorators: [{\n type: Optional\n }] }], propDecorators: { layoutConfig: [{\n type: Input\n }], stepChange: [{\n type: Output\n }], resizing: [{\n type: Output\n }], resized: [{\n type: Output\n }], miniHeaderReached: [{\n type: Output\n }], miniContentReached: [{\n type: Output\n }], layoutChange: [{\n type: Output\n }], resizeCardItems: [{\n type: ContentChildren,\n args: [ResizableCardItemComponent]\n }], _handleKeydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], onResize: [{\n type: HostListener,\n args: ['window:resize']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLWNhcmQtbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9yZXNpemFibGUtY2FyZC1sYXlvdXQvcmVzaXphYmxlLWNhcmQtbGF5b3V0L3Jlc2l6YWJsZS1jYXJkLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvcmVzaXphYmxlLWNhcmQtbGF5b3V0L3Jlc2l6YWJsZS1jYXJkLWxheW91dC9yZXNpemFibGUtY2FyZC1sYXlvdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsUUFBUSxFQUNSLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUNILDBCQUEwQixFQUcxQixHQUFHLEVBQ0gsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixrQkFBa0IsRUFDckIsTUFBTSxxREFBcUQsQ0FBQzs7O0FBYTdELE1BQU0sT0FBTyw0QkFBNEI7SUFrRXJDLGNBQWM7SUFDZCxZQUNxQixHQUFzQixFQUN2QixVQUFzQixFQUNULFdBQXVCO1FBRm5DLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3ZCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDVCxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtR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QUM7UUFDMUIsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFVBQVUsQ0FBQyxTQUFxQyxFQUFFLFVBQXNDO1FBQzVGLE9BQU8sU0FBUyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQzVDLENBQUM7OEdBcGtCUSw0QkFBNEI7a0dBQTVCLDRCQUE0Qiw0YkE4QnBCLDBCQUEwQiw2QkM1RS9DLGdQQVNBOzsyRkRxQ2EsNEJBQTRCO2tCQVJ4QyxTQUFTOytCQUNJLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxjQUN6QixJQUFJOzswQkF3RVgsUUFBUTt5Q0FuRWIsWUFBWTtzQkFEWCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsTUFBTTtnQkFLUCxRQUFRO3NCQURQLE1BQU07Z0JBS1AsT0FBTztzQkFETixNQUFNO2dCQUtQLGlCQUFpQjtzQkFEaEIsTUFBTTtnQkFLUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQUtQLGVBQWU7c0JBRGQsZUFBZTt1QkFBQywwQkFBMEI7Z0JBNkMzQyxjQUFjO3NCQURiLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWNuQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzS2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGNvbXB1dGVkLFxuICAgIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUnRsU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQsXG4gICAgUmVzaXphYmxlQ2FyZEl0ZW1Db25maWcsXG4gICAgUmVzaXplZEV2ZW50LFxuICAgIGdhcCxcbiAgICBob3Jpem9udGFsUmVzaXplT2Zmc2V0LFxuICAgIGhvcml6b250YWxSZXNpemVTdGVwLFxuICAgIHZlcnRpY2FsUmVzaXplU3RlcFxufSBmcm9tICcuL3Jlc2l6YWJsZS1jYXJkLWl0ZW0vcmVzaXphYmxlLWNhcmQtaXRlbS5jb21wb25lbnQnO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRTaXplID0gJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3hsJztcbmV4cG9ydCB0eXBlIFJlc2l6YWJsZUNhcmRMYXlvdXRDb25maWcgPSBBcnJheTxSZXNpemFibGVDYXJkSXRlbUNvbmZpZz47XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0JyxcbiAgICB0ZW1wbGF0ZVVybDogJ3Jlc2l6YWJsZS1jYXJkLWxheW91dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3Jlc2l6YWJsZS1jYXJkLWxheW91dC5jb21wb25lbnQuc2NzcycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZUNhcmRMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIE9iamVjdCBmb3Igc2V0dGluZyBlYWNoIGNhcmQgcHJvcGVydHkgKi9cbiAgICBASW5wdXQoKVxuICAgIGxheW91dENvbmZpZzogUmVzaXphYmxlQ2FyZExheW91dENvbmZpZztcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgcmVzaXplIGlzIHJlYWNoZWQgdG8gb25lIG5ldyBzdGVwIGluIGhvcml6b250YWwgb3IgdmVydGljYWwgZGlyZWN0aW9uICovXG4gICAgQE91dHB1dCgpXG4gICAgc3RlcENoYW5nZTogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgaXMgc3RpbGwgcmVzaXppbmcgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZXNpemluZzogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIGNhcmQgcmVzaXplIGlzIGNvbXBsZXRlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlc2l6ZWQ6IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBjYXJkIGhlaWdodCBpcyByZWR1Y2VkIHRvIHNob3cgb25seSBoZWFkZXIgKi9cbiAgICBAT3V0cHV0KClcbiAgICBtaW5pSGVhZGVyUmVhY2hlZDogRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlc2l6ZWRFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIG1pbmltdW0gaGVpZ2h0IG9mIGNhcmQgY29udGVudCBhcmVhIGlzIHJlYWNoZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBtaW5pQ29udGVudFJlYWNoZWQ6IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVkRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHMgd2hlbiBsYXlvdXQgY2hhbmdlcyAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGxheW91dENoYW5nZTogRXZlbnRFbWl0dGVyPFJlc2l6YWJsZUNhcmRMYXlvdXRDb25maWc+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemFibGVDYXJkTGF5b3V0Q29uZmlnPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50KVxuICAgIHJlc2l6ZUNhcmRJdGVtczogUXVlcnlMaXN0PFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50PjtcblxuICAgIC8qKiB3aWR0aCBmb3IgbGF5b3V0ICovXG4gICAgbGF5b3V0V2lkdGg6IG51bWJlcjtcblxuICAgIC8qKiBoZWlnaHQgZm9yIGxheW91dCAqL1xuICAgIGxheW91dEhlaWdodDogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gTnVtYmVyIG9mIGNvbHVtbnMgaW4gbGF5b3V0LiBjb25zaWRlcmluZyAxIGNvbHVtbiB3aWR0aCAyMHJlbSAqL1xuICAgIHByaXZhdGUgX2NvbHVtbnM6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuIExheW91dCBwYWRkaW5nLiB3aWxsIGJlIGFkZGVkIHRvIGZpcnN0IGNhcmQgcGFkZGluZyBpbiBldmVyeSByb3cgKi9cbiAgICBwcml2YXRlIF9wYWRkaW5nTGVmdDogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gU3RvcmVzIGhlaWdodCBvZiBlYWNoIGNvbHVtbiBvbiBjYXJkIGFycmFuZ2VtZW50ICovXG4gICAgcHJpdmF0ZSBfY29sdW1uc0hlaWdodDogQXJyYXk8bnVtYmVyPjtcblxuICAgIC8qKiBAaGlkZGVuIEF2YWlsYWJsZSBzY3JlZW4gbGF5b3V0ICovXG4gICAgcHJpdmF0ZSBfbGF5b3V0OiBMYXlvdXRTaXplO1xuXG4gICAgLyoqIEBoaWRkZW4gU3RvcmVzIHNvcnRlZCBjYXJkIGJlZm9yZSBwbGFjaW5nIGluIGxheW91dCAqL1xuICAgIHByaXZhdGUgX3NvcnRlZENhcmRzOiBBcnJheTxSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiBGb2N1c0tleU1hbmFnZXIgaW5zdGFuY2UgKi9cbiAgICBwcml2YXRlIF9rZXlib2FyZEV2ZW50c01hbmFnZXI6IEZvY3VzS2V5TWFuYWdlcjxSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xheW91dFNoaWZ0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGlyZWN0aW9uUG9zaXRpb24kID0gY29tcHV0ZWQ8J2xlZnQnIHwgJ3JpZ2h0Jz4oKCkgPT4gKHRoaXMuX3J0bFNlcnZpY2U/LnJ0bFNpZ25hbCgpID8gJ3JpZ2h0JyA6ICdsZWZ0JykpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuIGhhbmRsZXMga2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIF9oYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoIXRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlci5hY3RpdmVJdGVtSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgICBvblJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlTGF5b3V0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29sdW1uc0hlaWdodCA9IG5ldyBBcnJheSh0aGlzLl9jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5fY29sdW1uc0hlaWdodC5maWxsKDApO1xuICAgICAgICAvLyBpbml0aWFsaXNlIHZhbHVlIDBcbiAgICAgICAgLy8gZGV0ZWN0IGluaXRpYWwgd2luZG93IHNpemUgYW5kIHNldCBsYXlvdXRcbiAgICAgICAgdGhpcy5fY3JlYXRlTGF5b3V0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luaXRpYWxTZXR1cCgpO1xuICAgICAgICAvLyBsaXN0ZW4gZm9yIHF1ZXJ5LWxpc3QgY2hhbmdlXG4gICAgICAgIHRoaXMucmVzaXplQ2FyZEl0ZW1zPy5mb3JFYWNoKChjYXJkKSA9PiB7XG4gICAgICAgICAgICBjYXJkPy52ZXJpZnlVcGRhdGVDYXJkV2lkdGgodGhpcy5sYXlvdXRTaXplKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZXNpemVDYXJkSXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5yZXNpemVDYXJkSXRlbXM/LnRvQXJyYXkoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFycmFuZ2VDYXJkcyh0aGlzLnJlc2l6ZUNhcmRJdGVtcz8udG9BcnJheSgpKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FjY2Vzc2liaWxpdHlTZXR1cCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlcj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKiBMYXlvdXQgc2l6ZS4gQXZhaWxhYmxlIG9wdGlvbnMgYXJlICdzbScsICdtZCcsICdsZycgYW5kICd4bCcgKi9cbiAgICBzZXQgbGF5b3V0U2l6ZShsYXlvdXRTaXplOiBMYXlvdXRTaXplKSB7XG4gICAgICAgIHRoaXMuX2xheW91dCA9IGxheW91dFNpemU7XG4gICAgfVxuICAgIGdldCBsYXlvdXRTaXplKCk6IExheW91dFNpemUge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGF5b3V0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFycmFuZ2VzIGNhcmRzIGluIGxheW91dCBiYXNlZCBvbiByYW5rLCB3aWR0aCBhbmQgaGVpZ2h0IG9mIGNhcmRcbiAgICAgKiBAcGFyYW0gY2FyZHMgQXJyYXkgb2YgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnRcbiAgICAgKi9cbiAgICBhcnJhbmdlQ2FyZHMoY2FyZHM6IEFycmF5PFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50Pik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb2x1bW5zSGVpZ2h0ID0gbmV3IEFycmF5KHRoaXMuX2NvbHVtbnMpO1xuICAgICAgICB0aGlzLl9jb2x1bW5zSGVpZ2h0LmZpbGwoMCk7XG4gICAgICAgIC8vIHNvcnQgYmFzZWQgb24gdGhlIGNhcmQgcmFua1xuICAgICAgICB0aGlzLl9zb3J0ZWRDYXJkcyA9IGNhcmRzPy5zb3J0KHRoaXMuX3NvcnRDYXJkcyk7XG5cbiAgICAgICAgdGhpcy5fc29ydGVkQ2FyZHM/LmZvckVhY2goKGNhcmQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDYXJkUG9zaXRpb25WYWx1ZXMoY2FyZCwgaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ29sdW1uc0hlaWdodChjYXJkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGF5b3V0SGVpZ2h0ID0gTWF0aC5tYXguYXBwbHkobnVsbCwgdGhpcy5fY29sdW1uc0hlaWdodCkgKyB2ZXJ0aWNhbFJlc2l6ZVN0ZXA7XG5cbiAgICAgICAgdGhpcy5fZW1pdExheW91dENoYW5nZSgpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHNoaWZ0aW5nIG9mIGNhcmRzIHdpdGggYW5pbWF0aW9uLCB3aGlsZSBjYXJkIGlzIHN0aWxsIHJlc2l6aW5nLlxuICAgICAqIEBwYXJhbSBldmVudCB7UmVzaXplZEV2ZW50fVxuICAgICAqL1xuICAgIGNhcmRSZXNpemluZyhldmVudDogUmVzaXplZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVzaXppbmcuZW1pdChldmVudCk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUhvcml6b250YWxSZXNpemUoZXZlbnQpO1xuICAgICAgICB0aGlzLl9oYW5kbGVWZXJ0aWNhbFJlc2l6ZShldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBhcnJhbmdlbWVudCBvZiBjYXJkcyBpbiBsYXlvdXRcbiAgICAgKiBAcGFyYW0gZXZlbnQge1Jlc2l6ZWRFdmVudH1cbiAgICAgKi9cbiAgICBjYXJkUmVzaXplQ29tcGxldGUoZXZlbnQ6IFJlc2l6ZWRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9sYXlvdXRTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYXJyYW5nZUNhcmRzKHRoaXMucmVzaXplQ2FyZEl0ZW1zLnRvQXJyYXkoKSk7XG4gICAgICAgIHRoaXMucmVzaXplZC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHVwZGF0ZUxheW91dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVDYXJkSXRlbXM/LmZvckVhY2goKGNhcmQpID0+IHtcbiAgICAgICAgICAgIGNhcmQ/LnZlcmlmeVVwZGF0ZUNhcmRXaWR0aCh0aGlzLmxheW91dFNpemUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5yZXNpemVDYXJkSXRlbXM/LnRvQXJyYXkoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbWV0aG9kIHRvIGdldCBzY3JlZW4gd2lkdGhcbiAgICAgKiBAcmV0dXJucyBXaW5kb3cgd2lkdGggaW4gcHhcbiAgICAgKi9cbiAgICBnZXRXaWR0aEF2YWlsYWJsZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU3Vic2NyaWJlIHRvIGV2ZW50cyBmcm9tIGl0ZW1zICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbFNldHVwKCk6IHZvaWQge1xuICAgICAgICAvLyBsaXN0ZW4gZm9yIHJlc2l6aW5nIGV2ZW50IG9mIGNhcmQgaXRlbVxuICAgICAgICB0aGlzLnJlc2l6ZUNhcmRJdGVtcz8uZm9yRWFjaCgocmVzaXplQ2FyZEl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXlvdXRDb25maWcgJiYgdGhpcy5sYXlvdXRDb25maWcubGVuZ3RoID49IGluZGV4ICsgMSkge1xuICAgICAgICAgICAgICAgIHJlc2l6ZUNhcmRJdGVtLmNvbmZpZyA9IHRoaXMubGF5b3V0Q29uZmlnW2luZGV4XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzaXplQ2FyZEl0ZW0ucmVzaXppbmdcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFJlc2l6ZWRFdmVudCkgPT4gdGhpcy5jYXJkUmVzaXppbmcoZXZlbnQpKTtcblxuICAgICAgICAgICAgLy8gbGlzdGVuIGZvciByZXNpemUgY29tcGxldGUgZXZlbnQgb2YgY2FyZCBpdGVtXG4gICAgICAgICAgICByZXNpemVDYXJkSXRlbS5yZXNpemVkXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBSZXNpemVkRXZlbnQpID0+IHRoaXMuY2FyZFJlc2l6ZUNvbXBsZXRlKGV2ZW50KSk7XG5cbiAgICAgICAgICAgIC8vIGxpc3RlbiBmb3IgbWluaS1oZWFkZXIgaGVpZ2h0IGV2ZW50IG9mIGNhcmQgaXRlbVxuICAgICAgICAgICAgcmVzaXplQ2FyZEl0ZW0ubWluaUhlYWRlclJlYWNoZWRcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFJlc2l6ZWRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbmlIZWFkZXJSZWFjaGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGxpc3RlbiBmb3IgbWluaS1jb250ZW50IGhlaWdodCBldmVudCBvZiBjYXJkIGl0ZW1cbiAgICAgICAgICAgIHJlc2l6ZUNhcmRJdGVtLm1pbmlDb250ZW50UmVhY2hlZFxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogUmVzaXplZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWluaUNvbnRlbnRSZWFjaGVkLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWNjZXNzaWJpbGl0eVNldHVwKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXI/LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcih0aGlzLnJlc2l6ZUNhcmRJdGVtcykud2l0aFdyYXAoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBjcmVhdGUgbGF5b3V0IGJhc2VkIG9uIGxheW91dCBzaXplICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlTGF5b3V0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzY3JlZW5XaWR0aCA9IHRoaXMuZ2V0V2lkdGhBdmFpbGFibGUoKTtcbiAgICAgICAgY29uc3QgcHJldkxheW91dFNpemUgPSB0aGlzLmxheW91dFNpemU7XG5cbiAgICAgICAgaWYgKHNjcmVlbldpZHRoID4gMCAmJiBzY3JlZW5XaWR0aCA8PSA2NTYgJiYgcHJldkxheW91dFNpemUgIT09ICdzbScpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0U2l6ZSA9ICdzbSc7XG4gICAgICAgICAgICB0aGlzLl9zZXRMYXlvdXRDb2x1bW5zKHRoaXMubGF5b3V0U2l6ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHNjcmVlbldpZHRoID4gNjU2ICYmIHNjcmVlbldpZHRoIDw9IDk3NSAmJiBwcmV2TGF5b3V0U2l6ZSAhPT0gJ21kJykge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRTaXplID0gJ21kJztcbiAgICAgICAgICAgIHRoaXMuX3NldExheW91dENvbHVtbnModGhpcy5sYXlvdXRTaXplKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NyZWVuV2lkdGggPiA5NzUgJiYgc2NyZWVuV2lkdGggPD0gMTM1OSAmJiBwcmV2TGF5b3V0U2l6ZSAhPT0gJ2xnJykge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRTaXplID0gJ2xnJztcbiAgICAgICAgICAgIHRoaXMuX3NldExheW91dENvbHVtbnModGhpcy5sYXlvdXRTaXplKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2NyZWVuV2lkdGggPiAxMzU5ICYmIHByZXZMYXlvdXRTaXplICE9PSAneGwnKSB7XG4gICAgICAgICAgICB0aGlzLmxheW91dFNpemUgPSAneGwnO1xuICAgICAgICAgICAgdGhpcy5fc2V0TGF5b3V0Q29sdW1ucyh0aGlzLmxheW91dFNpemUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEVtaXQgbGF5b3V0Q2hhbmdlIGV2ZW50IHdpdGggdXBkYXRlZCBjYXJkIGRpbWVuc2lvbnMgKi9cbiAgICBwcml2YXRlIF9lbWl0TGF5b3V0Q2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBsYXRlc3RDYXJkQ29uZmlnOiBSZXNpemFibGVDYXJkTGF5b3V0Q29uZmlnID0gW107XG4gICAgICAgIHRoaXMucmVzaXplQ2FyZEl0ZW1zPy5mb3JFYWNoKChjYXJkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjYXJkQ29uZmlnOiBSZXNpemFibGVDYXJkSXRlbUNvbmZpZyA9IHt9O1xuICAgICAgICAgICAgY2FyZENvbmZpZy5jYXJkV2lkdGhDb2xTcGFuID0gY2FyZC5jYXJkV2lkdGhDb2xTcGFuO1xuICAgICAgICAgICAgY2FyZENvbmZpZy5jYXJkSGVpZ2h0Um93U3BhbiA9IGNhcmQuY2FyZEhlaWdodFJvd1NwYW47XG4gICAgICAgICAgICBjYXJkQ29uZmlnLnJhbmsgPSBjYXJkLnJhbms7XG4gICAgICAgICAgICBjYXJkQ29uZmlnLnRpdGxlID0gY2FyZC50aXRsZTtcbiAgICAgICAgICAgIGNhcmRDb25maWcuY2FyZE1pbmlDb250ZW50Um93U3BhbiA9IGNhcmQuY2FyZE1pbmlDb250ZW50Um93U3BhbjtcbiAgICAgICAgICAgIGNhcmRDb25maWcuY2FyZE1pbmlIZWFkZXJSb3dTcGFuID0gY2FyZC5jYXJkTWluaUhlYWRlclJvd1NwYW47XG4gICAgICAgICAgICBjYXJkQ29uZmlnLnJlc2l6YWJsZSA9IGNhcmQucmVzaXphYmxlO1xuICAgICAgICAgICAgbGF0ZXN0Q2FyZENvbmZpZy5wdXNoKGNhcmRDb25maWcpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sYXlvdXRDaGFuZ2UuZW1pdChsYXRlc3RDYXJkQ29uZmlnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIFNldHMgbnVtYmVyIG9mIGNvbHVtbiBpbiBsYXlvdXQsIGJhc2VkIG9uIExheW91dFNpemUgcGFzc2VkXG4gICAgICogQHBhcmFtIGxheW91dFNpemUgeydzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCd9XG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0TGF5b3V0Q29sdW1ucyhsYXlvdXRTaXplOiBMYXlvdXRTaXplKTogdm9pZCB7XG4gICAgICAgIGxldCBsYXlvdXRXaWR0aERlZmF1bHQ6IG51bWJlcjtcblxuICAgICAgICBzd2l0Y2ggKGxheW91dFNpemUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NtJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zID0gMTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYWRkaW5nTGVmdCA9IDg7XG4gICAgICAgICAgICAgICAgbGF5b3V0V2lkdGhEZWZhdWx0ID0gdGhpcy5fY29sdW1ucyAqIGhvcml6b250YWxSZXNpemVTdGVwICsgMiAqIHRoaXMuX3BhZGRpbmdMZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0V2lkdGggPSBsYXlvdXRXaWR0aERlZmF1bHQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sdW1ucyA9IDI7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFkZGluZ0xlZnQgPSAxNjtcbiAgICAgICAgICAgICAgICBsYXlvdXRXaWR0aERlZmF1bHQgPSB0aGlzLl9jb2x1bW5zICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgKyAyICogdGhpcy5fcGFkZGluZ0xlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRXaWR0aCA9IGxheW91dFdpZHRoRGVmYXVsdCArIGdhcDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xnJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zID0gMztcbiAgICAgICAgICAgICAgICB0aGlzLl9wYWRkaW5nTGVmdCA9IDE2O1xuICAgICAgICAgICAgICAgIGxheW91dFdpZHRoRGVmYXVsdCA9IHRoaXMuX2NvbHVtbnMgKiBob3Jpem9udGFsUmVzaXplU3RlcCArIDIgKiB0aGlzLl9wYWRkaW5nTGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dFdpZHRoID0gbGF5b3V0V2lkdGhEZWZhdWx0ICsgMiAqIGdhcDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3hsJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zID0gNDtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYWRkaW5nTGVmdCA9IDQ4O1xuICAgICAgICAgICAgICAgIGxheW91dFdpZHRoRGVmYXVsdCA9IHRoaXMuX2NvbHVtbnMgKiBob3Jpem9udGFsUmVzaXplU3RlcCArIDIgKiB0aGlzLl9wYWRkaW5nTGVmdDtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dFdpZHRoID0gbGF5b3V0V2lkdGhEZWZhdWx0ICsgMyAqIGdhcDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5fY29sdW1ucyA9IDQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFkZGluZ0xlZnQgPSA0ODtcbiAgICAgICAgICAgICAgICBsYXlvdXRXaWR0aERlZmF1bHQgPSB0aGlzLl9jb2x1bW5zICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgKyAyICogdGhpcy5fcGFkZGluZ0xlZnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXlvdXRXaWR0aCA9IGxheW91dFdpZHRoRGVmYXVsdCArIDMgKiBnYXA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIE1ldGhvZCB0byBoYW5kbGUgY2FyZCB2ZXJ0aWNhbCByZXNpemUgYW5kIHRyaWdnZXIgdGhlIGxheW91dCBjaGFuZ2VcbiAgICAgKiBAcGFyYW0gZXZlbnQge1Jlc2l6ZWRFdmVudH1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYW5kbGVWZXJ0aWNhbFJlc2l6ZShldmVudDogUmVzaXplZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5jYXJkLmNhcmRIZWlnaHRSb3dTcGFuICE9PSBldmVudC5jYXJkLnByZXZpb3VzQ2FyZEhlaWdodFJvd1NwYW4pIHtcbiAgICAgICAgICAgIHRoaXMuYXJyYW5nZUNhcmRzKHRoaXMuX3NvcnRlZENhcmRzKTtcbiAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5zdGVwQ2hhbmdlLmVtaXQoZXZlbnQuY2FyZC5nZXRSZXNpemVkRXZlbnRPYmplY3QoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIE1ldGhvZCB0byBoYW5kbGUgY2FyZCBob3Jpem9udGFsIHJlc2l6ZSBhbmQgdHJpZ2dlciB0aGUgbGF5b3V0IGNoYW5nZVxuICAgICAqIEBwYXJhbSBldmVudCB7UmVzaXplZEV2ZW50fVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUhvcml6b250YWxSZXNpemUoZXZlbnQ6IFJlc2l6ZWRFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyB3aGVuIGluY3JlYXNpbmcgd2lkdGggaGl0IHRoZSBvZmZzZXQsIHNob3cgZXh0ZW5kZWQgYm9yZGVyIGFuZCBzdGFydCBwdXNoaW5nIGRvd24gYm9yZGVyIGNhcmRzXG4gICAgICAgIC8vIHdoZW4gd2lkdGggaXMgZGVjcmVhc2luZyAsIHNob3cgZXh0ZW5kZWQgYm9yZGVyIHRpbGwgaXQgcmVhY2hlcyB0byBvZmZzZXQuXG4gICAgICAgIGNvbnN0IGNhcmRXaWR0aENoYW5nZSA9IGV2ZW50LmNhcmRXaWR0aCAtIGV2ZW50LnByZXZDYXJkV2lkdGg7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZXNpemluZ0l0ZW1JbmRleCA9IHRoaXMuX3NvcnRlZENhcmRzPy5maW5kSW5kZXgoKHgpID0+IHgucmFuayA9PT0gZXZlbnQuY2FyZC5yYW5rKTtcblxuICAgICAgICBpZiAoZXZlbnQuY2FyZFdpZHRoID4gZXZlbnQucHJldkNhcmRXaWR0aCkge1xuICAgICAgICAgICAgLy8gd2hlbiBpbmNyZWFzaW5nIHNpemVcbiAgICAgICAgICAgIC8vIGNhcmQgd2lkdGggaW5jcmVhc2luZyBjdXJyZW50bHlcbiAgICAgICAgICAgIGlmIChldmVudC5jYXJkLmNhcmRTdGF0ZSA9PT0gMSAmJiBjYXJkV2lkdGhDaGFuZ2UgPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0ICsgZ2FwICYmICF0aGlzLl9sYXlvdXRTaGlmdGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gaW5kZXggb2YgdGhpcyBjYXJkLCB0aGVuIGdldCBuZXh0IGNhcmQuIGV4Y2hhbmdlIHJhbmtzXG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydGVkQ2FyZHMuZm9yRWFjaCgoY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gY3VycmVudFJlc2l6aW5nSXRlbUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBhcmUgc29tZSBjYXJkcyBvbiBzYW1lIGhlaWdodC4gbWFrZSB0aGUgY3VycmVudCBjYXJkIHJhbmsgaGlnaGVyIHRoYW4gdGhlc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgbmV4dCBpbmRleCB3aGVyZSBpdCB3aWxsIGZpdC4gdW50aWwgYW55IGNhcmQgaGFzIGxlc3MgY29sdW1uIHNwYW4gdGhhbiB0b3RhbCBjb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBvbmx5IGluIG5leHQgdG9wLCBvbmUgY2FyZCBpcyB0YWtpbmcgZnVsbCBjb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC5zdGFydGluZ0NvbHVtblBvc2l0aW9uICsgY2FyZC5jYXJkV2lkdGhDb2xTcGFuID09PSB0aGlzLl9jb2x1bW5zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC5jYXJkV2lkdGhDb2xTcGFuICE9PSB0aGlzLl9jb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZXQgY2FyZHMgd2l0aCB0b3AgPiBjdXJyZW50IHRvcCAsIGJ1dCBtaW5pbXVtIG9mIGl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhjaGFuZ2UgcmFuayB3aXRoIHRoZXNlIGNhcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlQ2FyZERvd24oaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGF5b3V0U2hpZnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5fc29ydGVkQ2FyZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KGV2ZW50LmNhcmQuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBldmVudC5jYXJkLmNhcmRTdGF0ZSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICBjYXJkV2lkdGhDaGFuZ2UgPCBob3Jpem9udGFsUmVzaXplT2Zmc2V0ICsgZ2FwICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbGF5b3V0U2hpZnRlZFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FyZCB3aWR0aCBkZWNyZWFzaW5nIGN1cnJlbnRseVxuICAgICAgICAgICAgICAgIC8vIG1vdmUgdXAgdGhlIGNhcmRzLCBpZiBpdCB3YXMgc2hpZnRlZCB3aGlsZSBpbmNyZWFzaW5nIHRoZSB3aWR0aFxuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnRlZENhcmRzLmZvckVhY2goKGNhcmQ6IFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNhcmQucmFuayA9IGNhcmQucHJldlJhbmsgPyBjYXJkLnByZXZSYW5rIDogY2FyZC5yYW5rO1xuICAgICAgICAgICAgICAgICAgICBjYXJkLnByZXZSYW5rID0gMDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXlvdXRTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5fc29ydGVkQ2FyZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KGV2ZW50LmNhcmQuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNhcmRXaWR0aCA8IGV2ZW50LnByZXZDYXJkV2lkdGgpIHtcbiAgICAgICAgICAgIC8vIHdoZW4gZGVjcmVhc2luZyBzaXplXG4gICAgICAgICAgICBpZiAoZXZlbnQuY2FyZC5jYXJkU3RhdGUgPT09IC0xICYmIC1jYXJkV2lkdGhDaGFuZ2UgPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0ICYmICF0aGlzLl9sYXlvdXRTaGlmdGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gY2FyZCB3aWR0aCBkZWNyZWFzaW5nIGN1cnJlbnRseVxuICAgICAgICAgICAgICAgIHRoaXMuX2xheW91dFNoaWZ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuYXJyYW5nZUNhcmRzKHRoaXMuX3NvcnRlZENhcmRzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0ZXBDaGFuZ2UuZW1pdChldmVudC5jYXJkLmdldFJlc2l6ZWRFdmVudE9iamVjdCgpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY2FyZC5jYXJkU3RhdGUgPT09IDEgJiYgLWNhcmRXaWR0aENoYW5nZSA8IGhvcml6b250YWxSZXNpemVPZmZzZXQgJiYgdGhpcy5fbGF5b3V0U2hpZnRlZCkge1xuICAgICAgICAgICAgICAgIC8vIGNhcmQgd2lkdGggaW5jcmVhc2luZyBjdXJyZW50bHlcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXlvdXRTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5hcnJhbmdlQ2FyZHModGhpcy5fc29ydGVkQ2FyZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KGV2ZW50LmNhcmQuZ2V0UmVzaXplZEV2ZW50T2JqZWN0KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBNZXRob2QgdG8gbW92ZSBjYXJkIGRvd24sIHdoZW4gYW5vdGhlciBjYXJkIHdpZHRoIGlzIGluY3JlYXNpbmdcbiAgICAgKiBNZXRob2QgdG8gbG9vcCB0aWxsIHRoaXMuX2NvbHVtbnMgLTEgcG9zaXRpb25zIGFuZCBleGNoYW5nZSB0aGUgcmFua1xuICAgICAqIEBwYXJhbSBjdXJyZW50Q2FyZEluZGV4IEluZGV4IG9mIGN1cnJlbnQgY2FyZFxuICAgICAqL1xuICAgIHByaXZhdGUgX21vdmVDYXJkRG93bihjdXJyZW50Q2FyZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gdGFraW5nIHdpZHRoIG9mIGFkamFjZW50IGNhcmQgY29sLXNwYW4gaW50byBhY2NvdW50XG5cbiAgICAgICAgLy8gZWc6IDQgY29sdW1ucyAtIDIgY29sKGFkamFjZW50IGNhcmQpID0gMiBwb3NpdGlvbnMgY2FuIGV4Y2hhbmdlIHJhbmtzXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDYXJkOiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCA9IHRoaXMuX3NvcnRlZENhcmRzW2N1cnJlbnRDYXJkSW5kZXhdO1xuICAgICAgICBsZXQgY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQ7XG5cbiAgICAgICAgLy8gdW5vY2N1cGllZFBvc2l0aW9ucyBwb3NpdGlvbnMgbGVmdCBhZnRlciBjdXJyZW50Q2FyZCBvY2N1cGllcyBpbiBuZXh0IHJvdy5cbiAgICAgICAgbGV0IHVub2NjdXBpZWRQb3NpdGlvbnMgPSB0aGlzLl9jb2x1bW5zIC0gY3VycmVudENhcmQuY2FyZFdpZHRoQ29sU3BhbjtcblxuICAgICAgICBjdXJyZW50Q2FyZC5wcmV2UmFuayA9IGN1cnJlbnRDYXJkLnJhbms7XG5cbiAgICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgICAgd2hpbGUgKHVub2NjdXBpZWRQb3NpdGlvbnMgPiAwKSB7XG4gICAgICAgICAgICAvLyBjb21wYXJlIGZyb20gbmV4dCBjYXJkXG4gICAgICAgICAgICBjYXJkID0gdGhpcy5fc29ydGVkQ2FyZHNbaW5kZXggKyBjdXJyZW50Q2FyZEluZGV4XTtcbiAgICAgICAgICAgIGlmIChjYXJkICYmIHVub2NjdXBpZWRQb3NpdGlvbnMgPj0gY2FyZC5jYXJkV2lkdGhDb2xTcGFuKSB7XG4gICAgICAgICAgICAgICAgY2FyZC5wcmV2UmFuayA9IGNhcmQucmFuaztcbiAgICAgICAgICAgICAgICBjYXJkLnJhbmsgLT0gMTtcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2FyZC5yYW5rID0gY2FyZC5wcmV2UmFuaztcbiAgICAgICAgICAgICAgICB1bm9jY3VwaWVkUG9zaXRpb25zIC09IGNhcmQuY2FyZFdpZHRoQ29sU3BhbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdW5vY2N1cGllZFBvc2l0aW9ucyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiB1cGRhdGVzIGFycmF5IHdpdGggbmV3IGNvbHVtbiBoZWlnaHRzXG4gICAgICogQHBhcmFtIGNhcmQge1Jlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50fVxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUNvbHVtbnNIZWlnaHQoY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uUG9zaXRpb24gPSB0aGlzLl9kaXJlY3Rpb25Qb3NpdGlvbiQoKTtcbiAgICAgICAgY29uc3QgY29sdW1uc1N0YXJ0ID1cbiAgICAgICAgICAgIGNhcmRbZGlyZWN0aW9uUG9zaXRpb25dICE9IG51bGwgPyBNYXRoLmZsb29yKGNhcmRbZGlyZWN0aW9uUG9zaXRpb25dISAvIGhvcml6b250YWxSZXNpemVTdGVwKSA6IDA7XG5cbiAgICAgICAgLy8gR2V0IHdpZHRoIG9mIGN1cnJlbnQgY2FyZCByZXNpemluZyBhbmQgYXNzaWduIHdpZHRoIGhlcmUgZm9yIHRoYXQgY2FyZFxuICAgICAgICBjb25zdCBjYXJkQmFzZUNvbFNwYW4gPSBNYXRoLmZsb29yKGNhcmQuY2FyZFdpZHRoIC8gaG9yaXpvbnRhbFJlc2l6ZVN0ZXApO1xuXG4gICAgICAgIC8vIHRpbGwgd2hpY2ggY29sdW1ucyBjYXJkIHNwYW5zXG4gICAgICAgIGNvbnN0IGNvbHVtbnNTcGFuID1cbiAgICAgICAgICAgIGNhcmQuY2FyZFdpZHRoIC0gY2FyZEJhc2VDb2xTcGFuICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgLSBjYXJkQmFzZUNvbFNwYW4gKiBnYXAgPiBob3Jpem9udGFsUmVzaXplT2Zmc2V0XG4gICAgICAgICAgICAgICAgPyBjYXJkQmFzZUNvbFNwYW4gKyAxXG4gICAgICAgICAgICAgICAgOiBjYXJkQmFzZUNvbFNwYW47XG5cbiAgICAgICAgY29uc3QgY29sdW1uSGVpZ2h0ID0gY2FyZC5jYXJkSGVpZ2h0ICsgY2FyZC50b3A7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5zU3BhbjsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5zSGVpZ2h0W2kgKyBjb2x1bW5zU3RhcnRdID0gY29sdW1uSGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbnNTdGFydCA9PT0gY29sdW1uc1NwYW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNIZWlnaHRbY29sdW1uc1N0YXJ0XSA9IGNvbHVtbkhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gVHJ5IHRvIHNldCBjYXJkIGF0IGF2YWlsYWJsZSBoZWlnaHRzXG4gICAgICogQHBhcmFtIGNhcmQgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnRcbiAgICAgKiBAcGFyYW0gaW5kZXggdmFsdWUgb2YgY2FyZCBpbiBhcnJheSBvZiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgX3NldENhcmRQb3NpdGlvblZhbHVlcyhjYXJkOiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBkaXJlY3Rpb25Qb3NpdGlvbiA9IHRoaXMuX2RpcmVjdGlvblBvc2l0aW9uJCgpO1xuICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIGNhcmRbZGlyZWN0aW9uUG9zaXRpb25dID0gTnVtYmVyKHRoaXMuX3BhZGRpbmdMZWZ0KTtcbiAgICAgICAgICAgIGNhcmQudG9wID0gMDtcbiAgICAgICAgICAgIGNhcmQuc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1bmlxdWVIZWlnaHRzID0gdGhpcy5fZ2V0U29ydGVkVW5pcXVlSGVpZ2h0cygpO1xuICAgICAgICBsZXQgY2FyZFBvc2l0aW9uZWQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHVuaXF1ZUhlaWdodHMubGVuZ3RoICYmICFjYXJkUG9zaXRpb25lZDsgaSsrKSB7XG4gICAgICAgICAgICBjYXJkUG9zaXRpb25lZCA9IHRoaXMuX2lzUG9zaXRpb25TZXRTdWNjZXNzKHVuaXF1ZUhlaWdodHNbaV0sIGNhcmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiB0cnkgdG8gc2V0IGNhcmQgYXQgZ2l2ZW4gaGVpZ2h0LlxuICAgICAqIEBwYXJhbSBoZWlnaHQgaGVpZ2h0IGF0IHdoaWNoIGNhcmQgaXMgZ2V0dGluZyBwb3NpdGlvbmVkLlxuICAgICAqIEBwYXJhbSBjYXJkIFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50XG4gICAgICogQHJldHVybnMgSXQgcmV0dXJucyB0cnVlIHdoZW4gY2FyZCBwb3NpdGlvbiBpZCBmb3VuZCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc1Bvc2l0aW9uU2V0U3VjY2VzcyhoZWlnaHQ6IG51bWJlciwgY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uUG9zaXRpb24gPSB0aGlzLl9kaXJlY3Rpb25Qb3NpdGlvbiQoKTtcbiAgICAgICAgY29uc3QgY29sdW1uUG9zaXRpb25zOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbkhlaWdodCBvZiB0aGlzLl9jb2x1bW5zSGVpZ2h0KSB7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA9PT0gaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgY29sdW1uUG9zaXRpb25zLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIGZvciBlYWNoIGNhcmQgcG9zaXRpb24sIHN0YXJ0aW5nIGZyb20gbGVmdG1vc3RcbiAgICAgICAgbGV0IGlzRml0dGluZyA9IGZhbHNlO1xuICAgICAgICAvLyB0cnkgdG8gZml0IGFzIGxlZnQgKG9yIHJpZ2h0IGlmIFJ0bCkgYXMgcG9zc2libGUgZnJvbSB0aGUgY29sdW1uIHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IHN0YXJ0aW5nQ29sdW1uUG9zaXRpb24gPSB0aGlzLl9maXRDYXJkQ29sdW1uUG9zaXRpb24oY2FyZCwgY29sdW1uUG9zaXRpb25zLCBoZWlnaHQpO1xuXG4gICAgICAgIGlmIChzdGFydGluZ0NvbHVtblBvc2l0aW9uICE9PSAtMSkge1xuICAgICAgICAgICAgaXNGaXR0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhcmRbZGlyZWN0aW9uUG9zaXRpb25dID1cbiAgICAgICAgICAgICAgICBzdGFydGluZ0NvbHVtblBvc2l0aW9uICogaG9yaXpvbnRhbFJlc2l6ZVN0ZXAgK1xuICAgICAgICAgICAgICAgIHRoaXMuX3BhZGRpbmdMZWZ0ICtcbiAgICAgICAgICAgICAgICAoc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbiA+IDAgPyBnYXAgKiBzdGFydGluZ0NvbHVtblBvc2l0aW9uIDogMCk7XG4gICAgICAgICAgICBjYXJkLnRvcCA9IGhlaWdodCArIChoZWlnaHQgPiAwID8gdmVydGljYWxSZXNpemVTdGVwIDogMCk7XG4gICAgICAgICAgICBjYXJkLnN0YXJ0aW5nQ29sdW1uUG9zaXRpb24gPSBzdGFydGluZ0NvbHVtblBvc2l0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0ZpdHRpbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBUcnkgdG8gc3RhcnQgY2FyZCBwb3NpdGlvbiBmcm9tIGxlZnQgbW9zdCBmaXQgcG9zaXRpb24uXG4gICAgICogQHBhcmFtIGNhcmQgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnRcbiAgICAgKiBAcGFyYW0gY29sdW1uUG9zaXRpb25zIHtBcnJheTxudW1iZXI+fSBBcnJheSBvZiBhdmFpbGFibGUgcG9zaXRpb25zIGZvciBjYXJkcy5cbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHtudW1iZXJ9IGhlaWdodCBhdCB3aGljaCBmaXhpbmcgdGhlIGNhcmRcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSByZXR1cm5zIHN0YXJ0aW5nIGNvbHVtbiBwb3NpdGlvbiB3aGVyZSBjYXJkIHdpbGwgZml0LlxuICAgICAqL1xuICAgIHByaXZhdGUgX2ZpdENhcmRDb2x1bW5Qb3NpdGlvbihcbiAgICAgICAgY2FyZDogUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnQsXG4gICAgICAgIGNvbHVtblBvc2l0aW9uczogQXJyYXk8bnVtYmVyPixcbiAgICAgICAgaGVpZ2h0OiBudW1iZXJcbiAgICApOiBudW1iZXIge1xuICAgICAgICAvLyBjaGVjayBmb3IgZWFjaCBjYXJkIHBvc2l0aW9uLCBzdGFydGluZyBmcm9tIGxlZnRtb3N0XG4gICAgICAgIGxldCBpc0ZpdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgbGV0IHN0YXJ0aW5nQ29sdW1uUG9zaXRpb24gPSAtMTtcblxuICAgICAgICAvLyBzdGFydCBmcm9tIHByZXZpb3VzIGluZGV4ZXNcbiAgICAgICAgY29uc3QgY2FyZEJhc2VDb2xTcGFuID0gTWF0aC5mbG9vcihjYXJkLmNhcmRXaWR0aCAvIGhvcml6b250YWxSZXNpemVTdGVwKTtcbiAgICAgICAgY29uc3QgY2FyZENvbFNwYW4gPVxuICAgICAgICAgICAgY2FyZC5jYXJkV2lkdGggLSBjYXJkQmFzZUNvbFNwYW4gKiBob3Jpem9udGFsUmVzaXplU3RlcCAtIGNhcmRCYXNlQ29sU3BhbiAqIGdhcCA+IGhvcml6b250YWxSZXNpemVPZmZzZXRcbiAgICAgICAgICAgICAgICA/IGNhcmRCYXNlQ29sU3BhbiArIDFcbiAgICAgICAgICAgICAgICA6IGNhcmRCYXNlQ29sU3BhbjtcbiAgICAgICAgLy8gdHJ5IHRvIHNldCB0b3dhcmRzIGxlZnQgZnJvbSBhdmFpbGFibGUgY2FyZCBwb3NpdGlvblxuICAgICAgICAvLyBlZy4gWzEsIDIsIDMsIDRdIGNvbHVtbnNQb3NpdGlvbnNcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW5Qb3NpdGlvbiBvZiBjb2x1bW5Qb3NpdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChpc0ZpdHRpbmcpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gc3RhcnRpbmdQb3NpdGlvbiB2YWx1ZXMgd2lsbCBiZSAxLCAyLCAzLCA0XG4gICAgICAgICAgICAvLyB0cnkgdG8gZml0IGFzIGxlZnQgYXMgcG9zc2libGVcbiAgICAgICAgICAgIGxldCBzdGFydGluZ1Bvc2l0aW9uID0gY29sdW1uUG9zaXRpb24gLSAoY2FyZENvbFNwYW4gLSAxKTtcbiAgICAgICAgICAgIHN0YXJ0aW5nUG9zaXRpb24gPSBzdGFydGluZ1Bvc2l0aW9uID4gMCA/IHN0YXJ0aW5nUG9zaXRpb24gOiAxO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IHN0YXJ0aW5nUG9zaXRpb247IGluZGV4IDw9IGNvbHVtblBvc2l0aW9uICYmICFpc0ZpdHRpbmc7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBzcGFuID0gMDsgc3BhbiA8IGNhcmRDb2xTcGFuOyBzcGFuKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbHVtbnNIZWlnaHRbaW5kZXggKyBzcGFuIC0gMV0gPD0gaGVpZ2h0ICYmIGNhcmRDb2xTcGFuICsgaW5kZXggLSAxIDw9IHRoaXMuX2NvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRml0dGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZ0NvbHVtblBvc2l0aW9uID0gaW5kZXggLSAxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXNGaXR0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydGluZ0NvbHVtblBvc2l0aW9uID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RhcnRpbmdDb2x1bW5Qb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiByZXR1cm5zIHNvcnRlZCB1bmlxdWUgaGVpZ2h0IG9mIGNvbHVtbnMgKi9cbiAgICBwcml2YXRlIF9nZXRTb3J0ZWRVbmlxdWVIZWlnaHRzKCk6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgdGVtcEFycmF5ID0gdGhpcy5fY29sdW1uc0hlaWdodC5zbGljZSgpO1xuICAgICAgICBjb25zdCBzb3J0ZWRDb2x1bW5zSGVpZ2h0QXJyYXkgPSB0ZW1wQXJyYXkuc29ydChjb21wYXJlcik7XG4gICAgICAgIGNvbnN0IHVuaXF1ZUhlaWdodHM6IG51bWJlcltdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBzb3J0ZWRIZWlnaHQgb2Ygc29ydGVkQ29sdW1uc0hlaWdodEFycmF5KSB7XG4gICAgICAgICAgICBpZiAodW5pcXVlSGVpZ2h0cy5pbmRleE9mKHNvcnRlZEhlaWdodCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdW5pcXVlSGVpZ2h0cy5wdXNoKHNvcnRlZEhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY29tcGFyZXIoZmlyc3Q6IG51bWJlciwgc2Vjb25kOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICAgICAgcmV0dXJuIGZpcnN0IC0gc2Vjb25kO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmlxdWVIZWlnaHRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQ29tcGFyYXRvciB0byBzb3J0IGNhcmQgYmFzZWQgb24gcmFuay5cbiAgICAgKiBAcGFyYW0gZmlyc3RDYXJkIFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50XG4gICAgICogQHBhcmFtIHNlY29uZENhcmQgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnRcbiAgICAgKiBAcmV0dXJucyA6IHJldHVybnMgZGlmZmVyZW5jZSBiZXR3ZWVuIGZpcnN0IGNhcmQgcmFuayBhbmQgb3RoZXIgY2FyZCByYW5rLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NvcnRDYXJkcyhmaXJzdENhcmQ6IFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50LCBzZWNvbmRDYXJkOiBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBmaXJzdENhcmQucmFuayAtIHNlY29uZENhcmQucmFuaztcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgI2xheW91dFxuICAgIGNsYXNzPVwiZmQtcmVzaXphYmxlLWNhcmQtbGF5b3V0XCJcbiAgICBbY2xhc3NdPVwiJ2ZkLXJlc2l6YWJsZS1jYXJkLWxheW91dC0tJyArIGxheW91dFNpemVcIlxuICAgIFtzdHlsZS53aWR0aC5weF09XCJsYXlvdXRXaWR0aFwiXG4gICAgW3N0eWxlLmhlaWdodC5weF09XCJsYXlvdXRIZWlnaHRcIlxuPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19","import { NgModule } from '@angular/core';\nimport { ResizableCardItemComponent } from './resizable-card-layout/resizable-card-item/resizable-card-item.component';\nimport { ResizableCardLayoutComponent } from './resizable-card-layout/resizable-card-layout.component';\nimport * as i0 from \"@angular/core\";\n/**\n * @deprecated\n * Use direct imports of `ResizableCardLayoutComponent` and `ResizableCardItemComponent`.\n */\nexport class ResizableCardLayoutModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardLayoutModule, imports: [ResizableCardLayoutComponent, ResizableCardItemComponent], exports: [ResizableCardLayoutComponent, ResizableCardItemComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardLayoutModule }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ResizableCardLayoutModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [ResizableCardLayoutComponent, ResizableCardItemComponent],\n exports: [ResizableCardLayoutComponent, ResizableCardItemComponent]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLWNhcmQtbGF5b3V0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9yZXNpemFibGUtY2FyZC1sYXlvdXQvcmVzaXphYmxlLWNhcmQtbGF5b3V0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDOztBQUV2Rzs7O0dBR0c7QUFLSCxNQUFNLE9BQU8seUJBQXlCOzhHQUF6Qix5QkFBeUI7K0dBQXpCLHlCQUF5QixZQUh4Qiw0QkFBNEIsRUFBRSwwQkFBMEIsYUFDeEQsNEJBQTRCLEVBQUUsMEJBQTBCOytHQUV6RCx5QkFBeUI7OzJGQUF6Qix5QkFBeUI7a0JBSnJDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsMEJBQTBCLENBQUM7b0JBQ25FLE9BQU8sRUFBRSxDQUFDLDRCQUE0QixFQUFFLDBCQUEwQixDQUFDO2lCQUN0RSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9yZXNpemFibGUtY2FyZC1sYXlvdXQvcmVzaXphYmxlLWNhcmQtaXRlbS9yZXNpemFibGUtY2FyZC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXNpemFibGVDYXJkTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi9yZXNpemFibGUtY2FyZC1sYXlvdXQvcmVzaXphYmxlLWNhcmQtbGF5b3V0LmNvbXBvbmVudCc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFVzZSBkaXJlY3QgaW1wb3J0cyBvZiBgUmVzaXphYmxlQ2FyZExheW91dENvbXBvbmVudGAgYW5kIGBSZXNpemFibGVDYXJkSXRlbUNvbXBvbmVudGAuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1Jlc2l6YWJsZUNhcmRMYXlvdXRDb21wb25lbnQsIFJlc2l6YWJsZUNhcmRJdGVtQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbUmVzaXphYmxlQ2FyZExheW91dENvbXBvbmVudCwgUmVzaXphYmxlQ2FyZEl0ZW1Db21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIFJlc2l6YWJsZUNhcmRMYXlvdXRNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtcmVzaXphYmxlLWNhcmQtbGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3Jlc2l6YWJsZS1jYXJkLWxheW91dC9mdW5kYW1lbnRhbC1uZ3gtY29yZS1yZXNpemFibGUtY2FyZC1sYXlvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
|