digipay-utility-payment 0.0.2 → 0.0.3

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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"digipay-utility-payment.mjs","sources":["../../../projects/utility-payments/src/lib/services/sdk-state.service.ts","../../../projects/utility-payments/src/lib/services/payments-config.service.ts","../../../projects/utility-payments/src/lib/auth/utility-payments-auth.provider.ts","../../../projects/utility-payments/src/lib/services/payments-api.service.ts","../../../projects/utility-payments/src/lib/services/user.service.ts","../../../projects/utility-payments/src/lib/services/wallet.service.ts","../../../projects/utility-payments/src/lib/base-data.ts","../../../projects/utility-payments/src/lib/utils/user-wallet-normalize.ts","../../../projects/utility-payments/src/lib/services/data.service.ts","../../../projects/utility-payments/src/lib/services/topup-and-billpayment.service.ts","../../../projects/utility-payments/src/lib/services/translation.service.ts","../../../projects/utility-payments/src/lib/shared/shared.module.ts","../../../projects/utility-payments/src/lib/components/utilities/utilities.component.ts","../../../projects/utility-payments/src/lib/components/utilities/utilities.component.html","../../../projects/utility-payments/src/lib/utils.ts","../../../projects/utility-payments/src/lib/utils/aes-ecb-encrypt.util.ts","../../../projects/utility-payments/src/lib/services/transaction.service.ts","../../../projects/utility-payments/src/lib/utils/sdk-debug.ts","../../../projects/utility-payments/src/lib/components/vendor-providers/vendor-providers.component.ts","../../../projects/utility-payments/src/lib/components/vendor-providers/vendor-providers.component.html","../../../projects/utility-payments/src/lib/common/no-data/no-data.component.ts","../../../projects/utility-payments/src/lib/common/horizontal-wrapper.ts","../../../projects/utility-payments/src/lib/common/ng-select.type.component.ts","../../../projects/utility-payments/src/lib/common/formly/formly-datepicker/formly-datepicker.component.ts","../../../projects/utility-payments/src/lib/common/google-map-wrappers.ts","../../../projects/utility-payments/src/lib/common/common-loader/common-loader.component.ts","../../../projects/utility-payments/src/lib/components/bill-workflow/bill-workflow.component.ts","../../../projects/utility-payments/src/lib/components/bill-workflow/bill-workflow.component.html","../../../projects/utility-payments/src/lib/components/work-flow/work-flow.component.ts","../../../projects/utility-payments/src/lib/components/work-flow/work-flow.component.html","../../../projects/utility-payments/src/lib/components/region-commune/region-commune.component.ts","../../../projects/utility-payments/src/lib/components/region-commune/region-commune.component.html","../../../projects/utility-payments/src/lib/common/shimmer-effect/shimmer-card/shimmer-card.component.ts","../../../projects/utility-payments/src/lib/components/vendor-products/vendor-products.component.ts","../../../projects/utility-payments/src/lib/components/vendor-products/vendor-products.component.html","../../../projects/utility-payments/src/lib/components/vendor-plans/vendor-plans.component.ts","../../../projects/utility-payments/src/lib/components/vendor-plans/vendor-plans.component.html","../../../projects/utility-payments/src/lib/components/view-bills/view-bills.component.ts","../../../projects/utility-payments/src/lib/components/view-bills/view-bills.component.html","../../../projects/utility-payments/src/lib/services/user-profile.service.ts","../../../projects/utility-payments/src/lib/common/transaction/transaction-summary/transaction-summary.component.ts","../../../projects/utility-payments/src/lib/services/auth.service.ts","../../../projects/utility-payments/src/lib/shared/classes/transaction.class.ts","../../../projects/utility-payments/src/lib/common/otp-input/otp-input.component.ts","../../../projects/utility-payments/src/lib/common/ui.module.ts","../../../projects/utility-payments/src/lib/common/device-info.ts","../../../projects/utility-payments/src/lib/services/model/transaction-intent.model.ts","../../../projects/utility-payments/src/lib/txn-helper.ts","../../../projects/utility-payments/src/lib/utils/bootstrap-modal.util.ts","../../../projects/utility-payments/src/lib/components/topup-and-billpayment-review/topup-and-billpayment-review.component.ts","../../../projects/utility-payments/src/lib/components/topup-and-billpayment-review/topup-and-billpayment-review.component.html","../../../projects/utility-payments/src/lib/container/utility-payments.container.ts","../../../projects/utility-payments/src/lib/utility-payments.module.ts","../../../projects/utility-payments/src/lib/services/workflow-state.service.ts","../../../projects/utility-payments/src/digipay-utility-payment.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { WorkflowStep } from '../models/workflow-step.model';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdkStateService {\n private activeSubject = new BehaviorSubject<boolean>(false);\n private stepSubject = new BehaviorSubject<WorkflowStep>('CATEGORY');\n\n isActive(): boolean {\n return this.activeSubject.value;\n }\n\n setActive(active: boolean) {\n this.activeSubject.next(active);\n }\n\n get step$() {\n return this.stepSubject.asObservable();\n }\n\n setStep(step: WorkflowStep) {\n this.stepSubject.next(step);\n }\n}\n\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PaymentsConfigService {\n\n config: any;\n\n setConfig(config: any) {\n this.config = config;\n }\n\n getConfig() {\n return this.config;\n }\n\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface UtilityPaymentsAuthProvider {\n getToken(): string | null;\n getCompanyId(): string | null;\n getUserId(): string | null;\n}\n\nexport const UTILITY_PAYMENTS_AUTH_PROVIDER =\n new InjectionToken<UtilityPaymentsAuthProvider>('UTILITY_PAYMENTS_AUTH_PROVIDER');\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { PaymentsConfigService } from './payments-config.service';\nimport { UTILITY_PAYMENTS_AUTH_PROVIDER } from '../auth/utility-payments-auth.provider';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PaymentsApiService {\n private http = inject(HttpClient);\n private config = inject(PaymentsConfigService);\n private authProvider = inject(UTILITY_PAYMENTS_AUTH_PROVIDER, { optional: true });\n\n private get baseUrl(): string {\n const cfg = this.config.getConfig();\n return cfg?.baseUrl ?? '';\n }\n\n private get defaultHeaders(): Record<string, string> {\n const cfg = this.config.getConfig();\n const fromConfig = (cfg?.defaultHeaders ?? {}) as Record<string, string>;\n const fromAuth = this.buildAuthHeaders();\n return { ...fromAuth, ...fromConfig };\n }\n\n private buildAuthHeaders(): Record<string, string> {\n const headers: Record<string, string> = {};\n if (!this.authProvider) return headers;\n const token = this.authProvider.getToken();\n const companyId = this.authProvider.getCompanyId();\n const userId = this.authProvider.getUserId();\n if (token) {\n headers['Authorization'] = token.includes(' ') ? token : `Bearer ${token}`;\n }\n if (companyId != null) headers['companyid'] = String(companyId);\n if (userId != null) headers['userid'] = String(userId);\n return headers;\n }\n\n getVendorDetailsById(id: string): Observable<any> {\n return this.http.get(`${this.baseUrl}/topup_bill_payment/vendor_master/${id}`, { headers: this.defaultHeaders });\n }\n\n getTopupAndBillpaymentCategories(params: any = {}): Observable<any> {\n return this.http.get(`${this.baseUrl}/topup_bill_payment/provider_category_master`, { params, headers: this.defaultHeaders });\n }\n\n getTopupAndBillpaymentCategoryById(id: string): Observable<any> {\n return this.http.get(`${this.baseUrl}/topup_bill_payment/provider_category_master/${id}`, { headers: this.defaultHeaders });\n }\n\n getTopupAndBillpaymentVendorPlans(params: any = {}): Observable<any> {\n return this.http.get(`${this.baseUrl}/topup_bill_payment/vendor_product`, { params, headers: this.defaultHeaders });\n }\n\n getTopupAndBillpaymentVendorProviders(params: any = null): Observable<any> {\n return this.http.get(`${this.baseUrl}/topup_bill_payment/vendor_providers`, { params, headers: this.defaultHeaders });\n }\n\n getTopupAndBillpaymentWorkFlowDetails(params: any = {}): Observable<any> {\n return this.http.get(`${this.baseUrl}/topup_bill_payment/workflow_details`, { params, headers: this.defaultHeaders });\n }\n\n getTopupBillDetails(payload: any): Observable<any> {\n return this.http.post(`${this.baseUrl}/topup_bill_payment/get_bill_details`, payload, { headers: this.defaultHeaders });\n }\n\n getVendorContractDetails(params: any = {}): Observable<any> {\n return this.http.get(`${this.baseUrl}/topup_bill_payment/vendor_contracts`, { params, headers: this.defaultHeaders });\n }\n\n getRevenueConfigDetails(params: any = {}): Observable<any> {\n return this.http.get(`${this.baseUrl}/topup_bill_payment/vendor_revenue_config`, { params, headers: this.defaultHeaders });\n }\n\n getVendorChargeConfig(params: any = {}): Observable<any> {\n return this.http.get(`${this.baseUrl}/topup_bill_payment/vendor_charge_config`, { params, headers: this.defaultHeaders });\n }\n\n getCompanyDetailFromJava(params: any = {}): Observable<any> {\n return this.http.get(`${this.baseUrl}/base/company`, { params, headers: this.defaultHeaders });\n }\n\n getAllCompanyConfigsListUsingJava(params: any = {}): Observable<any> {\n return this.http.get(`${this.baseUrl}/base/company_config`, { params, headers: this.defaultHeaders });\n }\n\n getCurrencyDataFromJava(params: any = {}): Observable<any> {\n return this.http.get(`${this.baseUrl}/base/currency`, { params, headers: this.defaultHeaders });\n }\n\n /**\n * Convenience aliases aligned with the initial SDK shape\n */\n\n getCategories(params: any = {}): Observable<any> {\n return this.getTopupAndBillpaymentCategories(params);\n }\n\n getProviders(params: any = {}): Observable<any> {\n return this.getTopupAndBillpaymentVendorProviders(params);\n }\n\n getWorkflowDetails(params: any = {}): Observable<any> {\n return this.getTopupAndBillpaymentWorkFlowDetails(params);\n }\n\n getBills(payload: any): Observable<any> {\n return this.getTopupBillDetails(payload);\n }\n\n // Intentionally left generic; implement when payment execution endpoint is defined.\n executePayment(payload: any): Observable<any> {\n return this.http.post(`${this.baseUrl}/topup_bill_payment/execute_payment`, payload, { headers: this.defaultHeaders });\n }\n\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { PaymentsConfigService } from './payments-config.service';\nimport { UTILITY_PAYMENTS_AUTH_PROVIDER } from '../auth/utility-payments-auth.provider';\n\n@Injectable({ providedIn: 'root' })\nexport class UserService {\n private http = inject(HttpClient);\n private config = inject(PaymentsConfigService);\n private authProvider = inject(UTILITY_PAYMENTS_AUTH_PROVIDER, { optional: true });\n\n private get baseUrl(): string {\n return this.config.getConfig()?.baseUrl ?? '';\n }\n\n private get defaultHeaders(): Record<string, string> {\n const cfg = this.config.getConfig();\n const fromConfig = (cfg?.defaultHeaders ?? {}) as Record<string, string>;\n const fromAuth = this.buildAuthHeaders();\n return { ...fromAuth, ...fromConfig };\n }\n\n private buildAuthHeaders(): Record<string, string> {\n const headers: Record<string, string> = {};\n if (!this.authProvider) return headers;\n const token = this.authProvider.getToken();\n const companyId = this.authProvider.getCompanyId();\n const userId = this.authProvider.getUserId();\n if (token) headers['Authorization'] = token.startsWith('Bearer ') ? token : `Bearer ${token}`;\n if (companyId != null) headers['companyid'] = String(companyId);\n if (userId != null) headers['userid'] = String(userId);\n return headers;\n }\n\n getUserListUsingJava(params: any = {}): Observable<any> {\n return this.http.get(`${this.baseUrl}/user/users`, { params, headers: this.defaultHeaders });\n }\n\n getUserByIdUsingJava(id: string, params: any = {}): Observable<any> {\n return this.http.get(`${this.baseUrl}/user/user_detail/${id}`, { params, headers: this.defaultHeaders });\n }\n}\n\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { PaymentsConfigService } from './payments-config.service';\nimport { UTILITY_PAYMENTS_AUTH_PROVIDER } from '../auth/utility-payments-auth.provider';\n\n@Injectable({ providedIn: 'root' })\nexport class WalletService {\n private http = inject(HttpClient);\n private config = inject(PaymentsConfigService);\n private authProvider = inject(UTILITY_PAYMENTS_AUTH_PROVIDER, { optional: true });\n\n private get baseUrl(): string {\n return this.config.getConfig()?.baseUrl ?? '';\n }\n\n private get defaultHeaders(): Record<string, string> {\n const cfg = this.config.getConfig();\n const fromConfig = (cfg?.defaultHeaders ?? {}) as Record<string, string>;\n const fromAuth = this.buildAuthHeaders();\n return { ...fromAuth, ...fromConfig };\n }\n\n private buildAuthHeaders(): Record<string, string> {\n const headers: Record<string, string> = {};\n if (!this.authProvider) return headers;\n const token = this.authProvider.getToken();\n const companyId = this.authProvider.getCompanyId();\n const userId = this.authProvider.getUserId();\n if (token) headers['Authorization'] = token.startsWith('Bearer ') ? token : `Bearer ${token}`;\n if (companyId != null) headers['companyid'] = String(companyId);\n if (userId != null) headers['userid'] = String(userId);\n return headers;\n }\n\n getUserWalletDetailsUsingJava(params: any = {}): Observable<any> {\n return this.http.get(`${this.baseUrl}/transaction/user_wallet`, { params, headers: this.defaultHeaders });\n }\n\n getWalletUsingJava(params: any = {}): Observable<any> {\n return this.http.get(`${this.baseUrl}/transaction/wallet`, { params, headers: this.defaultHeaders });\n }\n}\n\n","export const SORTING_ORDER = {\n ASCENDING: 'ASCENDING',\n DESCENDING: 'DESCENDING',\n} as const;\n\nexport const TOPUP_BILL_PAYMENT_FIELD_TYPE = {\n TEXT_BOX: 'TEXT_BOX',\n NUMERIC: 'NUMERIC',\n BUTTON: 'BUTTON',\n} as const;\n\nexport const TOPUP_BILL_PAYMENT_FIELD_ACTIONS = {\n GET_BILL_SCREEN: 'GET_BILL_SCREEN',\n GET_PLAN_SCREEN: 'GET_PLAN_SCREEN',\n GET_REVIEW_SCREEN: 'GET_REVIEW_SCREEN',\n GET_VENDOR_PRODUCT: 'GET_VENDOR_PRODUCT',\n GET_ESIM_PRODUCT: 'GET_ESIM_PRODUCT',\n} as const;\n\nexport const PRODUCT_PRICE_TYPE = {\n FIXED: 'FIXED',\n RANGE: 'RANGE',\n} as const;\n\nexport const PROVIDER_CATEGORY_TYPE = {\n RECHARGE: 'RECHARGE',\n} as const;\n\nexport const PROVIDER_CATEGORY_TYPE_NAME = {\n RECHARGE: 'Recharge',\n BILL_PAYMENT: 'Bill payment',\n} as const;\n\nexport const PRODUCT_MASTER_DICT = {\n NRTA: 'NRTA',\n RCG: 'RCG',\n BP: 'BP',\n} as const;\n\nexport const OTP_TYPES = {\n OTP_TYPE_ADD_CASH_MANUALLY: 'OTP_TYPE_ADD_CASH_MANUALLY',\n} as const;\n\nexport const KAFKA_QUEUE_TYPE = {\n TOPUP_BILL_PAYMENT_PAYMENT_EXTERNAL_SYC: 'TOPUP_BILL_PAYMENT_PAYMENT_EXTERNAL_SYC',\n} as const;\n\nexport const COMPANY_CONFIG_MODULES_MASTER = {\n SETTLEMENT_TYPE: 'SETTLEMENT_TYPE',\n SETTLEMENT_BALANCE_DEDUCT_TYPE: 'SETTLEMENT_BALANCE_DEDUCT_TYPE',\n DEDUCT_BALANCE_ONREQUEST: 'DEDUCT_BALANCE_ONREQUEST',\n ADMIN_REQUEST: 'ADMIN_REQUEST',\n} as const;\n\nexport const USER_TYPES = {\n COMPANY_ADMIN: 1,\n CUSTOMER: 2,\n MERCHANT: 3,\n STAFF: 4,\n AGENT: 5,\n BUSINESS: 7,\n CORPORATE: 8,\n LENDER: 9,\n PARKING_VENDOR: 10,\n MERCHANT_STAFF: 34,\n MERCHANT_AGENT: 35,\n STORE_ADMIN: 11,\n VENDOR: 15,\n} as const;\n\nexport const TRANSFER_MODE = {\n WALLET : 1,\n CARD : 2,\n BANK : 3, // USER BANK\n NODAL_BANK : 4} as const;\n\nexport const PAYMENT_MODE = {\n CASH: 1,\n CARD: 2,\n WALLET: 3,\n NET_BANK: 4,\n UPI: 5,\n} as const;\n\nexport const TIMEZONE_CHOICES: Array<{ tz: string }> = [\n { tz: 'GMT+00:00' },\n];\n\n","/** Coerce Java/user_wallet API rows so UI can use `wallet_balance` consistently. */\nexport function normalizeUserWalletBalance(wallet: unknown): any {\n if (wallet == null || typeof wallet !== 'object') {\n return wallet;\n }\n const w = wallet as Record<string, unknown>;\n if (w['wallet_balance'] !== undefined && w['wallet_balance'] !== null && w['wallet_balance'] !== '') {\n const n = coerceNumber(w['wallet_balance']);\n return Number.isFinite(n) ? { ...w, wallet_balance: n } : wallet;\n }\n const raw =\n w['balance'] ??\n w['available_balance'] ??\n w['current_balance'] ??\n w['walletBalance'] ??\n w['availableBalance'];\n if (raw === undefined || raw === null || raw === '') {\n return wallet;\n }\n const n = coerceNumber(raw);\n if (!Number.isFinite(n)) {\n return wallet;\n }\n return { ...w, wallet_balance: n };\n}\n\nfunction coerceNumber(v: unknown): number {\n if (typeof v === 'number') {\n return v;\n }\n if (typeof v === 'string') {\n return parseFloat(v);\n }\n return NaN;\n}\n","import { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, lastValueFrom } from 'rxjs';\nimport { PaymentsApiService } from './payments-api.service';\nimport { UserService } from './user.service';\nimport { WalletService } from './wallet.service';\nimport { PaymentsConfigService } from './payments-config.service';\nimport { USER_TYPES } from '../base-data';\nimport { normalizeUserWalletBalance } from '../utils/user-wallet-normalize';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DataService {\n private paymentsApi = inject(PaymentsApiService);\n private userService = inject(UserService);\n private walletService = inject(WalletService);\n private configService = inject(PaymentsConfigService);\n\n currentCompanyCurrency = new BehaviorSubject<any | null>(null);\n currentWallet = new BehaviorSubject<any | null>(null);\n userWallet = new BehaviorSubject<any | null>(null);\n companyConfigData = new BehaviorSubject<any[] | null>(null);\n currentUserDetails = new BehaviorSubject<any | null>(null);\n adminUserDetails = new BehaviorSubject<any | null>(null);\n companyDetails = new BehaviorSubject<any | null>(null);\n private walletUserAccountId: string | null = null;\n private contextLoading = false;\n private contextLoaded = false;\n\n getWalletUserAccountId(): string | null {\n return this.walletUserAccountId;\n }\n\n /** Clears loaded context so the next initializeFromApi() runs a full reload (e.g. after host config change). */\n resetApiContext(): void {\n this.contextLoading = false;\n this.contextLoaded = false;\n this.walletUserAccountId = null;\n this.currentCompanyCurrency.next(null);\n this.currentWallet.next(null);\n this.userWallet.next(null);\n this.companyConfigData.next(null);\n this.currentUserDetails.next(null);\n this.adminUserDetails.next(null);\n this.companyDetails.next(null);\n }\n\n saveUserWallet(wallet: any) {\n this.userWallet.next(wallet);\n }\n\n initializeFromApi(): void {\n if (this.contextLoading) {\n return;\n }\n\n const cfg = this.configService.getConfig();\n if (!cfg?.baseUrl) {\n return;\n }\n\n this.contextLoading = true;\n void this.loadContext();\n }\n\n private async loadContext(): Promise<void> {\n try {\n const cfg = this.configService.getConfig();\n const headers = (cfg?.defaultHeaders ?? {}) as Record<string, string>;\n const configuredUserId = (headers['userid'] || headers['userId'] || '').toString().trim();\n\n const [currencyRes, companyRes, configRes] = await Promise.all([\n lastValueFrom(this.paymentsApi.getCurrencyDataFromJava()),\n lastValueFrom(this.paymentsApi.getCompanyDetailFromJava()),\n lastValueFrom(this.paymentsApi.getAllCompanyConfigsListUsingJava()),\n ]);\n\n const currencies = currencyRes?.data?.currency || [];\n const primaryCurrency = currencies.find((item: any) => item?.is_primary_currency) || currencies[0] || null;\n this.currentCompanyCurrency.next(primaryCurrency);\n\n const companyDetail = companyRes?.data?.company?.[0] || null;\n this.companyDetails.next(companyDetail);\n\n const companyConfigs = configRes?.data?.company_config || [];\n this.companyConfigData.next(companyConfigs);\n\n if (!configuredUserId) {\n this.contextLoaded = true;\n return;\n }\n\n const userRes = await lastValueFrom(this.userService.getUserByIdUsingJava(configuredUserId));\n const userDetail = userRes?.data?.user_detail || null;\n this.currentUserDetails.next(userDetail);\n\n // Load real company admin context from API (no host-project dependency/fallback).\n try {\n const adminUsersRes = await lastValueFrom(this.userService.getUserListUsingJava({\n user_type: USER_TYPES.COMPANY_ADMIN,\n }));\n const adminUser = adminUsersRes?.data?.users?.[0] || null;\n this.adminUserDetails.next(adminUser);\n } catch {\n this.adminUserDetails.next(null);\n }\n\n // Match host apps: staff operate under parent agent; agents use their own id (not parent_user_id first).\n const ut = userDetail?.user_type;\n const isStaff = ut === USER_TYPES.STAFF;\n this.walletUserAccountId = String(\n isStaff\n ? (userDetail?.parent_user_id ?? configuredUserId)\n : (userDetail?.id ?? configuredUserId),\n );\n\n if (!primaryCurrency?.id) {\n this.contextLoaded = true;\n return;\n }\n\n const walletRes = await lastValueFrom(this.walletService.getWalletUsingJava({\n is_active: true,\n currency_id: primaryCurrency.id,\n wallet_type: 1,\n }));\n\n const primaryWallet = walletRes?.data?.wallet?.[0] || null;\n this.currentWallet.next(primaryWallet);\n\n if (!primaryWallet?.id) {\n this.contextLoaded = true;\n return;\n }\n\n const userWalletRes = await lastValueFrom(this.walletService.getUserWalletDetailsUsingJava({\n user_id: this.walletUserAccountId,\n currency_id: primaryCurrency.id,\n wallet_id: primaryWallet.id,\n }));\n this.userWallet.next(\n normalizeUserWalletBalance(userWalletRes?.data?.wallet ?? null),\n );\n this.contextLoaded = true;\n } catch {\n // Keep SDK resilient: components can continue and show API-level errors where needed.\n } finally {\n this.contextLoading = false;\n }\n }\n}\n\n","import { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject, distinctUntilChanged } from 'rxjs';\nimport { PaymentsApiService } from './payments-api.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TopupAndBillpaymentService {\n private vendorCategorySubject = new ReplaySubject<any | null>(1);\n vendorCategory = this.vendorCategorySubject.asObservable().pipe(distinctUntilChanged());\n\n private vendorProviderSubject = new ReplaySubject<any | null>(1);\n vendorProvider = this.vendorProviderSubject.asObservable().pipe(distinctUntilChanged());\n\n private vendorPlanSubject = new ReplaySubject<any | null>(1);\n vendorPlan = this.vendorPlanSubject.asObservable().pipe(distinctUntilChanged());\n\n private workFlowUserInputSubject = new ReplaySubject<any | null>(1);\n workFlowUserInput = this.workFlowUserInputSubject.asObservable().pipe(distinctUntilChanged());\n\n private billDataSubject = new ReplaySubject<any | null>(1);\n billData = this.billDataSubject.asObservable().pipe(distinctUntilChanged());\n\n private txnDataSubject = new ReplaySubject<any | null>(1);\n txnData = this.txnDataSubject.asObservable().pipe(distinctUntilChanged());\n\n private workflowScreensSubject = new ReplaySubject<any[] | null>(1);\n workflowScreens = this.workflowScreensSubject.asObservable().pipe(distinctUntilChanged());\n\n private currentScreenIndexSubject = new ReplaySubject<number>(1);\n currentScreenStep = this.currentScreenIndexSubject.asObservable().pipe(distinctUntilChanged());\n\n private workflowDataSubject = new ReplaySubject<any | null>(1);\n workflowData = this.workflowDataSubject.asObservable().pipe(distinctUntilChanged());\n\n constructor(private api: PaymentsApiService) {\n this.currentScreenIndexSubject.next(0);\n }\n\n // State helpers\n\n saveVendorCategory(vendorCategory: any) {\n this.vendorCategorySubject.next(vendorCategory);\n }\n\n deleteVendorCategory() {\n this.vendorCategorySubject.next(null);\n }\n\n saveVendorProvider(vendorProvider: any) {\n this.vendorProviderSubject.next(vendorProvider);\n }\n\n deleteVendorProvider() {\n this.vendorProviderSubject.next(null);\n }\n\n saveVendorPlan(vendorPlan: any) {\n this.vendorPlanSubject.next(vendorPlan);\n }\n\n deleteVendorPlan() {\n this.vendorPlanSubject.next(null);\n }\n\n saveWorkflowUserInput(userInput: any) {\n this.workFlowUserInputSubject.next(userInput);\n }\n\n deleteWorkflowUserInput() {\n this.workFlowUserInputSubject.next(null);\n }\n\n saveBillData(billData: any) {\n this.billDataSubject.next(billData);\n }\n\n deleteBillData() {\n this.billDataSubject.next(null);\n }\n\n saveTxnData(txnData: any) {\n this.txnDataSubject.next(txnData);\n }\n\n deleteTxnData() {\n this.txnDataSubject.next(null);\n }\n\n saveWorkflowScreens(screens: any[]) {\n this.workflowScreensSubject.next(screens);\n }\n\n deleteWorkflowScreens() {\n this.workflowScreensSubject.next(null);\n }\n\n setCurrentScreenStep(index: number) {\n this.currentScreenIndexSubject.next(index);\n }\n\n saveWorkflowData(data: any) {\n this.workflowDataSubject.next(data);\n }\n\n deleteWorkflowData() {\n this.workflowDataSubject.next(null);\n }\n\n // API wrappers\n\n getVendorDetailsById(id: string): Observable<any> {\n return this.api.getVendorDetailsById(id);\n }\n\n getTopupAndBillpaymentCategories(params: any = {}): Observable<any> {\n return this.api.getTopupAndBillpaymentCategories(params);\n }\n\n getTopupAndBillpaymentCategoryById(id: string): Observable<any> {\n return this.api.getTopupAndBillpaymentCategoryById(id);\n }\n\n getTopupAndBillpaymentVendorPlans(params: any = {}): Observable<any> {\n return this.api.getTopupAndBillpaymentVendorPlans(params);\n }\n\n getTopupAndBillpaymentVendorProviders(params: any = {}): Observable<any> {\n return this.api.getTopupAndBillpaymentVendorProviders(params);\n }\n\n getTopupAndBillpaymentWorkFlowDetails(params: any = {}): Observable<any> {\n return this.api.getTopupAndBillpaymentWorkFlowDetails(params);\n }\n\n getTopupBillDetails(payload: any): Observable<any> {\n return this.api.getTopupBillDetails(payload);\n }\n\n getVendorContractDetails(params: any = {}): Observable<any> {\n return this.api.getVendorContractDetails(params);\n }\n\n getRevenueConfigDetails(params: any = {}): Observable<any> {\n return this.api.getRevenueConfigDetails(params);\n }\n\n getVendorChargeConfig(params: any = {}): Observable<any> {\n return this.api.getVendorChargeConfig(params);\n }\n}\n\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TranslationService {\n private static readonly LABELS: Record<string, string> = {\n LABEL_UTILITIES: 'Utilities',\n LABEL_RECHARGE_AND_PAY_BILLS: 'Recharge & Pay Bills',\n LABEL_COMMING_SOON: 'Coming Soon',\n LABEL_SOMETHING_WENT_WRONG: 'Something went wrong',\n LABEL_PROVIDER: 'Provider',\n LABEL_SELECT_PROVIDER: 'Select Provider',\n LABEL_OPERATOR: 'Operator',\n LABEL_SELECT_OPERATOR: 'Select Operator',\n LABEL_RECENT_TRANSACTIONS: 'Recent Transactions',\n LABEL_PLEASE_SELECT_PROVIDER: 'Please select a provider',\n LABEL_PLEASE_SELECT_REGION: 'Please select a region',\n LABEL_PLEASE_SELECT_COMMUNE: 'Please select a commune',\n LABEL_SELECT_REGION: 'Select Region',\n LABEL_SELECT_COMMUNE: 'Select Commune',\n LABEL_PLANS: 'Plans',\n LABEL_PLAN: 'Plan',\n LABEL_BILLS: 'Bills',\n LABEL_BILL_NUMBER: 'Bill Number',\n LABEL_DUE_DATE: 'Due Date',\n LABEL_AMOUNT: 'Amount',\n LABEL_MINIMUM_AMOUNT: 'Minimum Amount',\n LABEL_MAXIMUM_AMOUNT: 'Maximum Amount',\n LABEL_PRODUCT_NAME: 'Product Name',\n LABEL_PROVIDER_NAME: 'Provider Name',\n LABEL_VENDOR_NAME: 'Vendor Name',\n LABEL_CATEGORY_TYPE: 'Category Type',\n LABEL_PAYMENT_SUMMARY: 'Payment Summary',\n LABEL_PAYMENT_SUCCESS: 'Payment submitted successfully',\n TRANSACTION_INITIATE_RECHARGE_BILL_PAYMENT_SUCCESS: 'Recharge / bill payment started successfully',\n LABEL_REVIEW_PAYMENT: 'Review Payment',\n LABEL_BILL_DETAILS: 'Bill Details',\n LABEL_PLAN_DETAILS: 'Plan Details',\n LABEL_USER_INPUT: 'User Input',\n LABEL_METER_NAME: 'Meter Name',\n LABEL_PAYABLE: 'Payable',\n LABEL_BILL_AMOUNT: 'Bill Amount',\n LABEL_PLAN_AMOUNT: 'Plan Amount',\n LABEL_AVAILABLE_BALANCE: 'Available Balance',\n LABEL_AVAILABLE_WALLET_BALANCE: 'Available Wallet Balance',\n LABEL_KWH: 'KWH',\n LABEL_TRANSACTION_SUMMARY: 'Transaction Summary',\n LABEL_TRANSACTION_ID: 'Transaction ID',\n LABEL_DOWNLOAD_INVOICE: 'Download Invoice',\n LABEL_HOME: 'Home',\n LABEL_PLEASE_WAIT: 'Please wait',\n LABEL_OTP_VERIFICATION: 'OTP Verification',\n LABEL_OTP: 'OTP',\n LABEL_PIN: 'PIN',\n LABEL_ENTER_4_DIGIT_NUMBER_SENT_TO: 'Enter the 4-digit number sent to',\n LABEL_ENTER_YOUR_4_DIGIT_TRANSACTION_PIN: 'Enter your 4-digit transaction PIN',\n LABEL_REENTER_4_DIGIT_TRANSACTION_PIN: 'Re-enter your 4-digit transaction PIN',\n LABEL_RESEND_OTP: 'Resend OTP',\n LABEL_YOU_ARE_SENDING_MONEY_TO: 'You are sending money to',\n LABEL_FORGOT_TXN_PIN: 'Forgot transaction PIN?',\n LABEL_CONFIRM_TRANSACTION_PIN: 'Confirm Transaction PIN',\n LABEL_PLEASE_ENTER_VALID_OTP: 'Please enter a valid OTP',\n LABEL_PIN_AND_CONFIRM_PIN_DO_NOT_MATCH: 'PIN and confirm PIN do not match',\n LABEL_FIELDS_NOT_AVAILABLE: 'Fields not available',\n LABEL_BILLS_NOT_AVAILABLE: 'Bills not available',\n LABEL_PRODUCTS_NOT_AVAILABLE: 'Products not available',\n LABEL_PLEASE_FILL_ALL_REQUIRED_FIELDS: 'Please fill all required fields',\n LABEL_IS_REQUIRED: 'is required',\n COMMON_LABEL_CANCEL: 'Cancel',\n COMMON_LABEL_NEXT: 'Next',\n COMMON_LABEL_BACK: 'Back',\n COMMON_LABEL_SUBMIT: 'Submit',\n COMMON_LABEL_CONFIRM: 'Confirm',\n COMMON_LABEL_DESCRIPTION: 'Description',\n COMMON_LABEL_AMOUNT: 'Amount',\n COMMON_LABEL_CHARGES: 'Charges',\n COMMON_LABEL_PLEASE_ENTER: 'Please enter',\n COMMON_LABEL_AMOUNT_MUST_BE_BETWEEN: 'Amount must be between',\n COMMON_LABEL_AND: 'and',\n };\n\n translate(key: string): string {\n return TranslationService.LABELS[key] ?? key;\n }\n}\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { TranslationService } from '../services/translation.service';\n\n@Pipe({\n name: 'translate',\n standalone: false,\n})\nexport class TranslatePipe implements PipeTransform {\n constructor(private translation: TranslationService) {}\n\n transform(value: string): string {\n return this.translation.translate(value);\n }\n}\n\n@Pipe({\n name: 'price',\n standalone: false,\n})\nexport class PricePipe implements PipeTransform {\n transform(value: number | string | null | undefined, args?: { currency?: string | null }): string {\n const num = typeof value === 'number' ? value : parseFloat(String(value ?? 0));\n const currency = args?.currency ?? '';\n if (Number.isNaN(num)) {\n return '';\n }\n const formatted = num.toFixed(2);\n return currency ? `${formatted} ${currency}` : formatted;\n }\n}\n\n@NgModule({\n imports: [CommonModule],\n declarations: [TranslatePipe, PricePipe],\n exports: [CommonModule, TranslatePipe, PricePipe],\n})\nexport class SharedModule {}\n\n","\nimport { Component, OnInit, inject } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\nimport { NgSelectModule } from \"@ng-select/ng-select\";\nimport { FormlyBootstrapModule } from \"@ngx-formly/bootstrap\";\nimport { FormlyModule } from \"@ngx-formly/core\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { TopupAndBillpaymentService } from \"../../services/topup-and-billpayment.service\";\nimport { TranslationService } from \"../../services/translation.service\";\nimport { SharedModule } from \"../../shared/shared.module\";\nimport { SdkStateService } from \"../../services/sdk-state.service\";\n\n@Component({\n selector: \"sdk-utilities\",\n templateUrl: \"./utilities.component.html\",\n standalone: true,\n styles: [`\n .utilities-content {\n overflow: visible;\n min-height: 120px;\n background: #f8f9fa;\n margin: 0 -0.25rem;\n padding: 0.35rem 0.25rem 1.25rem;\n border-radius: 0;\n }\n\n .utilities-header-section {\n margin-bottom: 1rem;\n padding: 0 0.15rem;\n }\n\n .utilities-title {\n font-size: 1.875rem;\n font-weight: 700;\n color: #1e3557;\n margin: 0;\n line-height: 1.2;\n letter-spacing: -0.02em;\n }\n\n .utilities-section {\n padding: 0;\n }\n\n .utilities-card {\n background: #fff;\n border: 1px solid #dee2e6;\n border-radius: 8px;\n box-shadow: 0 1px 2px rgba(30, 53, 87, 0.04);\n overflow: hidden;\n }\n\n .utilities-card-header {\n padding: 0.85rem 1.25rem;\n border-bottom: 1px solid #e9ecef;\n background: #fff;\n }\n\n .utilities-card-title {\n font-size: 1.125rem;\n font-weight: 600;\n margin: 0;\n color: #1e3557;\n }\n\n .utilities-card-body {\n padding: 1.25rem 1.25rem 1.35rem;\n }\n\n .utilities-grid {\n display: flex;\n flex-wrap: wrap;\n gap: 1rem 1.1rem;\n }\n\n .utility-card {\n display: block;\n text-decoration: none;\n color: inherit;\n cursor: pointer;\n border-radius: 8px;\n overflow: visible;\n width: 140px;\n flex: 0 0 auto;\n transition: transform 0.12s ease, box-shadow 0.12s ease;\n }\n\n .utility-card:hover {\n transform: translateY(-1px);\n }\n\n .utility-card:focus-visible {\n outline: 2px solid #0d6efd;\n outline-offset: 2px;\n }\n\n .utility-card-inner {\n background: #fff;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n padding: 1rem 0.6rem 0.85rem;\n text-align: center;\n min-height: 132px;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n box-sizing: border-box;\n }\n\n .utility-card:hover .utility-card-inner {\n border-color: #cbd5e1;\n box-shadow: 0 2px 8px rgba(30, 53, 87, 0.07);\n }\n\n .utility-icon {\n width: 56px;\n height: 56px;\n margin-bottom: 0.75rem;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: #f1ffff;\n border-radius: 50%;\n border: 1px solid #e2e8f0;\n box-sizing: border-box;\n }\n\n .utility-icon img {\n max-width: 36px;\n max-height: 36px;\n object-fit: contain;\n }\n\n .utility-icon-placeholder {\n width: 100%;\n height: 100%;\n border-radius: 999px;\n background: #f1ffff;\n color: #5b7a8c;\n font-size: 1.125rem;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n text-transform: uppercase;\n }\n\n .utility-name {\n font-size: 0.8125rem;\n font-weight: 600;\n color: #212529;\n margin: 0;\n line-height: 1.25;\n word-break: break-word;\n max-width: 100%;\n }\n\n @media (max-width: 767px) {\n .utilities-content {\n margin: 0;\n padding: 0.25rem 0 1rem;\n }\n\n .utilities-title {\n font-size: 1.5rem;\n }\n\n .utilities-grid {\n gap: 0.65rem;\n justify-content: flex-start;\n }\n\n .utility-card {\n width: calc(50% - 0.35rem);\n max-width: 160px;\n }\n\n .utility-card-inner {\n min-height: 120px;\n }\n\n .utilities-card-body {\n padding: 1rem;\n }\n }\n `],\n imports: [\n SharedModule,\n NgSelectModule,\n FormsModule,\n ReactiveFormsModule,\n FormlyBootstrapModule,\n FormlyModule\n]\n})\nexport class UtilitiesComponent implements OnInit {\n private topupAndBillpaymentService = inject(TopupAndBillpaymentService);\n private router = inject(Router);\n private toastrService = inject(ToastrService);\n private translationService = inject(TranslationService);\n private sdkState = inject(SdkStateService, { optional: true });\n\n\n providerCategories: Array<any> = [];\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() { }\n\n ngOnInit(): void {\n this.getProviderCategories();\n }\n\n getProviderCategories() {\n this.topupAndBillpaymentService.getTopupAndBillpaymentCategories().subscribe(\n {\n next: (res) => {\n if (res?.success) {\n this.providerCategories = res?.data?.provider_category_master;\n } else {\n this.providerCategories = [];\n }\n }, error: () => {\n this.toastrService.error(this.translationService.translate(\"LABEL_SOMETHING_WENT_WRONG\"));\n }\n },\n );\n }\n\n navigateToVendorProvider(vendorCategory: any) {\n if (vendorCategory?.is_active) {\n this.topupAndBillpaymentService.saveVendorCategory(vendorCategory);\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"PROVIDER\");\n } else {\n this.router.navigateByUrl(\"/operations/topup-and-billpayment/vendor-providers\");\n }\n } else {\n this.toastrService.error(`${vendorCategory?.category_name} ${this.translationService.translate(\"LABEL_COMMING_SOON\")}`\n );\n }\n }\n\n}\n","<div class=\"utilities-content\">\n <header class=\"utilities-header-section\">\n <h1 class=\"utilities-title\">{{ 'LABEL_UTILITIES' | translate }}</h1>\n </header>\n\n <section class=\"utilities-section\">\n <div class=\"utilities-card\">\n <div class=\"utilities-card-header\">\n <h4 class=\"utilities-card-title\">{{ 'LABEL_RECHARGE_AND_PAY_BILLS' | translate }}</h4>\n </div>\n <div class=\"utilities-card-body\">\n <div class=\"utilities-grid\">\n @for (item of providerCategories; track item?.id ?? item?.category_name) {\n <a class=\"utility-card\" (click)=\"navigateToVendorProvider(item)\" role=\"button\" tabindex=\"0\">\n <div class=\"utility-card-inner\">\n <div class=\"utility-icon\">\n @if (item?.image) {\n <img loading=\"lazy\" [src]=\"item.image\" [alt]=\"item?.category_name ?? ''\" />\n } @else {\n <span class=\"utility-icon-placeholder\">{{ (item?.category_name ?? '') | slice:0:1 }}</span>\n }\n </div>\n <h5 class=\"utility-name\">{{ item?.category_name }}</h5>\n </div>\n </a>\n }\n </div>\n </div>\n </div>\n </section>\n</div>\n","export function isNotNull<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nexport const TXN_STATUS = {\n TXN_STATUS_SUCCESS: 'SUCCESS',\n} as const;\n\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nexport function getDatePipeFormat(dateFormat: any): string {\n // SDK default; host apps can override by passing formatted strings in JwtService.\n // Common Angular DatePipe tokens: 'dd/MM/yyyy', 'MM/dd/yyyy', etc.\n if (typeof dateFormat === 'string' && dateFormat.trim()) {\n return dateFormat;\n }\n return 'dd/MM/yyyy';\n}\n\nexport function getTimePipeFormat(timeFormat: any): string {\n if (typeof timeFormat === 'string' && timeFormat.trim()) {\n return timeFormat;\n }\n return 'HH:mm';\n}\n\nexport function timestampToDatetimeString(\n value: number,\n dateFormat: string,\n timeFormat: string,\n _timezone?: string\n): string {\n // Lightweight, dependency-free formatter.\n // Note: ignores timezone; host app should provide preformatted values if needed.\n const d = new Date(value);\n if (Number.isNaN(d.getTime())) {\n return '-';\n }\n\n const pad2 = (n: number) => String(n).padStart(2, '0');\n const dd = pad2(d.getDate());\n const MM = pad2(d.getMonth() + 1);\n const yyyy = String(d.getFullYear());\n const HH = pad2(d.getHours());\n const mm = pad2(d.getMinutes());\n const ss = pad2(d.getSeconds());\n\n const date =\n dateFormat === 'MM/dd/yyyy'\n ? `${MM}/${dd}/${yyyy}`\n : dateFormat === 'yyyy-MM-dd'\n ? `${yyyy}-${MM}-${dd}`\n : `${dd}/${MM}/${yyyy}`;\n\n const time =\n timeFormat === 'HH:mm:ss'\n ? `${HH}:${mm}:${ss}`\n : timeFormat === 'hh:mm a'\n ? `${((d.getHours() + 11) % 12) + 1}:${mm} ${d.getHours() >= 12 ? 'PM' : 'AM'}`\n : `${HH}:${mm}`;\n\n return `${date} ${time}`;\n}\n\n","import * as CryptoJS from 'crypto-js';\n\n/**\n * AES-256-ECB with PKCS7 padding; key derived from intent_id (UTF-8, padded/truncated to 32 bytes).\n * Returns CryptoJS default Base64 ciphertext string.\n */\nexport function encryptAES256ECB(value: unknown, intentId: string): string | null {\n if (value == null || value === '' || !intentId) {\n return null;\n }\n\n const str = typeof value === 'string' ? value : String(value);\n\n let key = CryptoJS.enc.Utf8.parse(intentId);\n\n if (key.sigBytes < 32) {\n const padLength = 32 - key.sigBytes;\n key = CryptoJS.enc.Utf8.parse(intentId + '\\0'.repeat(padLength));\n } else if (key.sigBytes > 32) {\n const truncated = CryptoJS.enc.Utf8.parse(intentId);\n key = CryptoJS.lib.WordArray.create(truncated.words.slice(0, 8), 32);\n }\n\n const encrypted = CryptoJS.AES.encrypt(str, key, {\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7,\n });\n\n return encrypted.toString();\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { UTILITY_PAYMENTS_AUTH_PROVIDER } from '../auth/utility-payments-auth.provider';\nimport { encryptAES256ECB } from '../utils/aes-ecb-encrypt.util';\nimport { PaymentsConfigService } from './payments-config.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TransactionService {\n private http = inject(HttpClient);\n private config = inject(PaymentsConfigService);\n private authProvider = inject(UTILITY_PAYMENTS_AUTH_PROVIDER, { optional: true });\n\n private get baseUrl(): string {\n const cfg = this.config.getConfig();\n return cfg?.baseUrl ?? '';\n }\n\n private get defaultHeaders(): Record<string, string> {\n const cfg = this.config.getConfig();\n const fromConfig = (cfg?.defaultHeaders ?? {}) as Record<string, string>;\n const fromAuth = this.buildAuthHeaders();\n return { ...fromAuth, ...fromConfig };\n }\n\n private buildAuthHeaders(): Record<string, string> {\n const headers: Record<string, string> = {};\n if (!this.authProvider) return headers;\n const token = this.authProvider.getToken();\n const companyId = this.authProvider.getCompanyId();\n const userId = this.authProvider.getUserId();\n if (token) headers['Authorization'] = token.startsWith('Bearer ') ? token : `${token}`;\n if (companyId != null) headers['companyid'] = String(companyId);\n if (userId != null) headers['userid'] = String(userId);\n return headers;\n }\n\n getTopupBillPaymentTransactions(params: any = {}): Observable<any> {\n return this.http.get(\n `${this.baseUrl}/topup_bill_payment/transactions`,\n { params, headers: this.defaultHeaders }\n );\n }\n\n calculateVendorCharge(payload: any): Observable<any> {\n return this.http.post(\n `${this.baseUrl}/transaction/calculate_vendor_charges`,\n payload,\n { headers: this.defaultHeaders }\n );\n }\n\n createTransactionIntent(payload: any): Observable<any> {\n return this.http.post(\n `${this.baseUrl}/transaction/initiate_recharge_bill_payment`,\n payload,\n { headers: this.defaultHeaders }\n );\n }\n\n createTransactionSession(payload: any): Observable<any> {\n const body = this.withEncryptedMethodValues(payload);\n return this.http.post(\n `${this.baseUrl}/transaction/transaction_sessions`,\n body,\n { headers: this.defaultHeaders }\n );\n }\n\n private withEncryptedMethodValues(payload: any): any {\n if (payload == null || typeof payload !== 'object') {\n return payload;\n }\n const cloneData = { ...payload };\n const intentId = cloneData.intent_id;\n const methodValues = cloneData.method_values;\n if (methodValues != null && methodValues !== '' && intentId) {\n const encrypted = encryptAES256ECB(methodValues, String(intentId));\n if (encrypted != null) {\n cloneData.method_values = encrypted;\n }\n }\n return cloneData;\n }\n\n initiateTopupBillPaymentTransaction(payload: any): Observable<any> {\n return this.http.post(\n `${this.baseUrl}/transaction/initiate_recharge_bill_payment`,\n payload,\n { headers: this.defaultHeaders }\n );\n }\n\n payTopupBill(payload: any): Observable<any> {\n return this.http.post(\n `${this.baseUrl}/topup_bill_payment/pay_bill`,\n payload,\n { headers: this.defaultHeaders }\n );\n }\n\n updateTransactionStatus(payload: any): Observable<any> {\n return this.http.post(\n `${this.baseUrl}/transaction/status_update`,\n payload,\n { headers: this.defaultHeaders }\n );\n }\n\n getKafkaQueueOperationDetailsUsingJava(params: any = {}): Observable<any> {\n return this.http.get(\n `${this.baseUrl}/kafka/queue-operation`,\n { params, headers: this.defaultHeaders }\n );\n }\n\n cashTransferRequest(payload: any): Observable<any> {\n return this.http.post(\n `${this.baseUrl}/cash-transfer/request`,\n payload,\n { headers: this.defaultHeaders }\n );\n }\n\n getCashTransferRequestByID(id: string): Observable<any> {\n return this.http.get(\n `${this.baseUrl}/cash-transfer/request/${id}`,\n { headers: this.defaultHeaders }\n );\n }\n\n getTransactionDetails(id: string): Observable<any> {\n return this.http.get(\n `${this.baseUrl}/transactions/${id}`,\n { headers: this.defaultHeaders }\n );\n }\n}\n\n","/**\n * Bump this string whenever you publish a new package so the host app’s DevTools\n * proves which build is loaded (filter console by \"utility-payments-sdk\").\n */\nexport const UTILITY_PAYMENTS_SDK_BUILD_TAG = 'utility-payments@0.0.2 build sync';\n\nconst LOG_PREFIX = '[utility-payments-sdk]';\n\nexport function utilityPaymentsSdkIsVerboseDebug(): boolean {\n try {\n const g = globalThis as Record<string, unknown>;\n if (g['__UTILITY_PAYMENTS_SDK_DEBUG__'] === true) {\n return true;\n }\n if (typeof localStorage !== 'undefined' && localStorage.getItem('UTILITY_PAYMENTS_SDK_DEBUG') === '1') {\n return true;\n }\n } catch {\n /* ignore */\n }\n return false;\n}\n\n/**\n * @param event - short label for filtering\n * @param detail - optional JSON-safe fields\n *\n * Always logs: CONFIG_APPLIED, VENDOR_PROVIDERS_MOUNTED (so you can confirm the new bundle).\n * Other events only when verbose: set localStorage UTILITY_PAYMENTS_SDK_DEBUG=1 or\n * globalThis.__UTILITY_PAYMENTS_SDK_DEBUG__ = true before loading the page.\n */\nexport function utilityPaymentsSdkDebug(event: string, detail?: Record<string, unknown>): void {\n const always =\n event === 'CONFIG_APPLIED' ||\n event === 'VENDOR_PROVIDERS_MOUNTED' ||\n event === 'SDK_ROOT_INIT';\n if (!always && !utilityPaymentsSdkIsVerboseDebug()) {\n return;\n }\n console.info(LOG_PREFIX, event, { tag: UTILITY_PAYMENTS_SDK_BUILD_TAG, ...detail });\n}\n","import { Component, OnDestroy, OnInit, inject, ChangeDetectorRef } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { TopupAndBillpaymentService } from \"../../services/topup-and-billpayment.service\";\nimport { TXN_STATUS, isNotNull } from \"../../utils\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { DataService } from \"../../services/data.service\";\nimport { TransactionService } from \"../../services/transaction.service\";\nimport * as _ from \"lodash\";\nimport { TranslationService } from \"../../services/translation.service\";\nimport { SdkStateService } from \"../../services/sdk-state.service\";\nimport { utilityPaymentsSdkDebug } from \"../../utils/sdk-debug\";\n\nimport { NgSelectModule } from \"@ng-select/ng-select\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { FormlyBootstrapModule } from \"@ngx-formly/bootstrap\";\nimport { FormlyModule } from \"@ngx-formly/core\";\nimport { SharedModule } from \"../../shared/shared.module\";\n\n@Component({\n selector: \"sdk-vendor-providers\",\n templateUrl: \"./vendor-providers.component.html\",\n standalone: true,\n imports: [\n SharedModule,\n NgSelectModule,\n FormsModule,\n ReactiveFormsModule,\n FormlyBootstrapModule,\n FormlyModule\n ]\n})\nexport class VendorProvidersComponent implements OnInit, OnDestroy {\n private topupAndBillpaymentService = inject(TopupAndBillpaymentService);\n private toasterService = inject(ToastrService);\n private router = inject(Router);\n private transactionService = inject(TransactionService);\n private dataService = inject(DataService);\n private translateService = inject(TranslationService);\n private sdkState = inject(SdkStateService, { optional: true });\n private cdr = inject(ChangeDetectorRef);\n\n\n currentUserId: string | null = null;\n\n vendorProviders: Array<any> = [];\n vendorObject: any = null;\n vendorCategory: any = null;\n\n currency: string | null = null;\n\n recentTxnArray: Array<any> = [];\n\n destroy$: Subject<boolean> = new Subject<boolean>();\n currentVendorKey: any;\n loadingState: boolean = true;\n private apiCallCount: number = 0;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n const topupAndBillpaymentService = this.topupAndBillpaymentService;\n\n this.topupAndBillpaymentService.vendorCategory.pipe(takeUntil(this.destroy$)).subscribe((response) => {\n if (isNotNull(response)) {\n this.vendorCategory = response;\n }\n });\n\n topupAndBillpaymentService.deleteWorkflowUserInput();\n\n this.dataService.currentCompanyCurrency.pipe(takeUntil(this.destroy$)).subscribe(data => {\n if (isNotNull(data)) {\n this.currency = data?.currency_symbol;\n }\n });\n }\n\n ngOnInit(): void {\n utilityPaymentsSdkDebug(\"VENDOR_PROVIDERS_MOUNTED\", {\n categoryKey: this.vendorCategory?.category_key ?? null,\n categoryName: this.vendorCategory?.category_name ?? null,\n selector: \"sdk-vendor-providers\",\n });\n if (isNotNull(this.vendorCategory)) {\n // this.getRecentTransactions();\n this.getVendorProviders();\n this.getVendorProviderById();\n } else {\n this.back();\n }\n }\n\n getRecentTransactions() {\n\n const params = {\n user_id: this.currentUserId,\n provider_category_id: this.vendorCategory?.id,\n status: TXN_STATUS.TXN_STATUS_SUCCESS,\n skip: 0,\n limit: 5,\n unique: true,\n };\n\n this.transactionService.getTopupBillPaymentTransactions(params).subscribe(\n {\n next: (response) => {\n if (response?.success) {\n this.recentTxnArray = response?.data?.txn_topup_bill_payment || [];\n } else {\n this.recentTxnArray = [];\n }\n },\n error: () => {\n this.recentTxnArray = [];\n this.toasterService.error(this.translateService.translate(\"LABEL_SOMETHING_WENT_WRONG\"));\n },\n },\n );\n }\n\n getVendorProviders() {\n const params: any = {\n provider_category_id: this.vendorCategory?.id,\n is_active: true\n };\n\n this.topupAndBillpaymentService.getTopupAndBillpaymentVendorProviders(params).subscribe(\n {\n next: (res) => {\n if (res?.success) {\n this.vendorProviders = res?.data?.vendor_providers;\n } else {\n this.vendorProviders = [];\n }\n this.loadingState = false;\n },\n error: () => {\n this.vendorProviders = [];\n this.loadingState = false;\n },\n },\n );\n }\n\n getVendorProviderById() {\n this.topupAndBillpaymentService.getTopupAndBillpaymentCategoryById(this.vendorCategory?.id).subscribe(\n {\n next: (res) => {\n if (res?.success) {\n this.currentVendorKey = res?.data?.provider_category_master?.category_key;\n }\n this.loadingState = false;\n },\n error: () => {\n this.vendorCategory = null;\n this.loadingState = false;\n this.toasterService.error(this.translateService.translate(\"LABEL_SOMETHING_WENT_WRONG\"));\n },\n });\n }\n\n compareWith = (a: any, b: any) => a?.id === b?.id;\n\n changeVendorProvider(event: any) {\n this.vendorObject = event ?? null;\n this.cdr.detectChanges();\n }\n\n handleRecentTxnClick(obj: any) {\n this.vendorObject = _.find(this.vendorProviders, { id: obj?.payment_request?.vendor_provider_id });\n this.topupAndBillpaymentService.saveWorkflowUserInput(obj?.payment_request);\n\n this.navigateToWorkFlow();\n }\n\n navigateToWorkFlow() {\n if (this.currentVendorKey === \"esim\") {\n if (isNotNull(this.vendorObject)) {\n this.topupAndBillpaymentService.saveVendorProvider(this.vendorObject);\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"PRODUCTS\");\n } else {\n this.router.navigate([\n \"/operations/topup-and-billpayment/vendor-products\",\n ]);\n }\n } else {\n this.toasterService.error(this.translateService.translate(\"LABEL_PLEASE_SELECT_PROVIDER\"));\n }\n } else if (this.currentVendorKey === \"ROAD_TAX\" || this.currentVendorKey === \"road_tax\") {\n if (isNotNull(this.vendorObject)) {\n this.topupAndBillpaymentService.saveVendorProvider(this.vendorObject);\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"REGION\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/region-commune\"\n );\n }\n } else {\n this.toasterService.error(this.translateService.translate(\"LABEL_PLEASE_SELECT_PROVIDER\"));\n }\n } else if (isNotNull(this.vendorObject)) {\n this.topupAndBillpaymentService.saveVendorProvider(this.vendorObject);\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"WORKFLOW\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/topup-details\"\n );\n }\n } else {\n this.toasterService.error(this.translateService.translate(\"LABEL_PLEASE_SELECT_PROVIDER\"));\n }\n }\n\n\n back() {\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"CATEGORY\");\n } else {\n this.router.navigateByUrl(\"/operations/topup-and-billpayment\");\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n}\n","<div class=\"content vendor-providers-content\">\n <header class=\"page-header vendor-providers-page-header d-flex align-items-center justify-content-start container-fluid\">\n <h1 class=\"page-title m-0\">{{ 'LABEL_UTILITIES' | translate }}</h1>\n </header>\n\n <section class=\"page-content container-fluid\">\n <div class=\"card vendor-providers-card\">\n <div class=\"card-header vendor-providers-card-header\">\n <h4 class=\"card-title vendor-providers-category-title m-0\">{{vendorCategory?.category_name}}</h4>\n </div>\n <div class=\"tab-content\">\n <div class=\"tab-pane fadeIn active show\">\n <form role=\"form\" class=\"form-horizontal\">\n <div class=\"card-body vendor-providers-card-body\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12 col-md-10 col-lg-8 vendor-providers-select-col\">\n @if (loadingState) {\n <div class=\"provider-select-wrapper text-center\">\n <div class=\"shimmer shimmer-effect mx-auto\" style=\"height: 20px; width: 100px; margin-bottom: 0.5rem;\"></div>\n <div class=\"shimmer shimmer-effect provider-shimmer-select\" style=\"margin: 0 auto;\"></div>\n </div>\n } @else {\n <div class=\"provider-select-wrapper d-flex align-items-center justify-content-center flex-wrap gap-2\">\n @if (currentVendorKey == \"airtime_credit\" || currentVendorKey == \"airtime_data\") {\n <label class=\"provider-label mb-0\">{{ 'LABEL_OPERATOR' | translate }}</label>\n <ng-select\n name=\"utilityVendorOperator\"\n [(ngModel)]=\"vendorObject\"\n [placeholder]=\"'LABEL_SELECT_OPERATOR' | translate\"\n bindLabel=\"provider_name\"\n [items]=\"vendorProviders\"\n [compareWith]=\"compareWith\"\n clearable=\"true\"\n class=\"provider-select\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n } @else {\n <label class=\"provider-label mb-0\">{{ 'LABEL_PROVIDER' | translate }}</label>\n <ng-select\n name=\"utilityVendorProvider\"\n [(ngModel)]=\"vendorObject\"\n [placeholder]=\"'LABEL_SELECT_PROVIDER' | translate\"\n bindLabel=\"provider_name\"\n [items]=\"vendorProviders\"\n [compareWith]=\"compareWith\"\n clearable=\"true\"\n class=\"provider-select\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n }\n </div>\n }\n </div>\n\n @if (recentTxnArray.length > 0) {\n <div class=\"col-12 mt-2 vendor-providers-recent-section\">\n <div class=\"border-bottom pb-2 mb-2\">\n <h4 class=\"card-title vendor-providers-recent-title font-weight-600 m-0 text-dark\">\n {{ 'LABEL_RECENT_TRANSACTIONS' | translate }}\n </h4>\n </div>\n <div class=\"row g-2\">\n @for (obj of recentTxnArray; track obj) {\n <a (click)=\"handleRecentTxnClick(obj)\">\n <div class=\"card services-box text-center equal-height\">\n <div class=\"card-body\">\n <div class=\"icon\">\n @if (obj?.payment_request?.vendor_provider_image) {\n <img loading=\"lazy\"\n class=\"vendor-recent-txn-icon\"\n [src]=\"obj?.payment_request?.vendor_provider_image\"\n alt=\"\" />\n } @else {\n <i class=\"align-middle fa fa-bookmark vendor-recent-txn-fallback-icon\"></i>\n }\n </div>\n <h5 class=\"font-weight-600 vendor-recent-txn-name mb-1 mt-2\">{{\n obj?.payment_request?.provider_name || \"-\" }}</h5>\n <h6 class=\"m-0 mb-0 vendor-recent-txn-meta text-muted\">{{\n obj?.payment_request?.account_number }}</h6>\n <h6 class=\"m-0 vendor-recent-txn-meta text-muted\">{{obj?.receiver_amount || 0.00 |\n price: { currency } }}</h6>\n </div>\n </div>\n </a>\n }\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"card-footer vendor-providers-footer bg-light d-flex justify-content-end gap-2\">\n <button type=\"button\" class=\"btn btn-secondary btn-sm\" (click)=\"back()\">{{'COMMON_LABEL_CANCEL' | translate}}</button>\n <button type=\"button\" (click)=\"navigateToWorkFlow()\" class=\"btn btn-primary btn-sm\">{{'COMMON_LABEL_NEXT' | translate}}</button>\n </div>\n </form>\n </div>\n </div>\n </div>\n </section>\n</div>\n\n<style>\n .vendor-providers-content {\n overflow: visible;\n min-height: auto;\n }\n\n .vendor-providers-page-header {\n margin-bottom: 0.5rem;\n }\n\n .vendor-providers-select-col {\n margin-top: 0;\n }\n\n .vendor-providers-card {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);\n overflow: visible;\n min-height: 0;\n }\n\n .vendor-providers-card-header {\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n padding: 0.5rem 0.75rem;\n font-weight: 600;\n font-size: 0.9rem;\n color: #212529;\n }\n\n .vendor-providers-category-title {\n font-size: 0.95rem;\n font-weight: 600;\n }\n\n .vendor-providers-card-body {\n padding: 0.65rem 0.75rem;\n overflow: visible;\n min-height: 0;\n }\n\n .page-title {\n font-size: 1rem;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .provider-select-wrapper {\n padding: 0.15rem 0;\n }\n\n .provider-label {\n font-weight: 500;\n font-size: 0.8rem;\n color: #495057;\n }\n\n .provider-select {\n width: 100%;\n max-width: 190px;\n min-width: 0;\n font-size: 0.75rem;\n }\n\n .provider-select ::ng-deep .ng-select-container {\n align-items: center;\n min-height: 26px;\n height: 26px;\n font-size: 0.75rem;\n border-radius: 4px;\n }\n\n .provider-select ::ng-deep .ng-value-container {\n padding-left: 0.4rem;\n padding-top: 0;\n padding-right: 0;\n }\n\n .provider-select ::ng-deep .ng-value-container .ng-value {\n font-size: 0.75rem;\n line-height: 1.2;\n }\n\n .provider-select ::ng-deep .ng-input {\n top: 0;\n padding-left: 0.4rem;\n }\n\n .provider-select ::ng-deep .ng-input > input {\n font-size: 0.75rem;\n min-height: 24px;\n padding: 0.1rem 0;\n }\n\n .provider-select ::ng-deep .ng-placeholder {\n font-size: 0.75rem;\n line-height: 1.2;\n }\n\n .provider-select ::ng-deep .ng-arrow-wrapper {\n width: 20px;\n padding-right: 0.35rem;\n }\n\n .provider-select ::ng-deep .ng-clear-wrapper {\n width: 18px;\n }\n\n .provider-shimmer-select {\n height: 26px;\n width: 100%;\n max-width: 190px;\n }\n\n .vendor-providers-footer {\n padding: 0.35rem 0.6rem;\n }\n\n .vendor-providers-footer .btn {\n font-size: 0.75rem;\n padding: 0.2rem 0.55rem;\n line-height: 1.2;\n border-radius: 4px;\n }\n\n .vendor-providers-recent-title {\n font-size: 0.9rem;\n }\n\n .vendor-providers-recent-section .card-body {\n padding: 0.65rem 0.5rem;\n }\n\n .vendor-recent-txn-icon {\n width: 36px;\n height: 36px;\n border-radius: 50%;\n object-fit: cover;\n }\n\n .vendor-recent-txn-fallback-icon {\n font-size: 1.1rem;\n color: #6c757d;\n }\n\n .vendor-recent-txn-name {\n font-size: 0.8rem;\n line-height: 1.25;\n }\n\n .vendor-recent-txn-meta {\n font-size: 0.72rem;\n line-height: 1.2;\n }\n\n .shimmer-effect {\n border-radius: 10px;\n background-color: #F6F7F8;\n background-image: linear-gradient(to right, #F6F7F8 0, #EDEEF1 20%, #F6F7F8 40%, #F6F7F8 100%);\n background-position: 0 0;\n background-repeat: no-repeat;\n background-size: 1000px 1000px;\n animation: shimmerEffect 1s linear infinite forwards;\n }\n\n .shimmer {\n display: inline-block;\n width: 100%;\n height: 12px;\n }\n\n @keyframes shimmerEffect {\n 0% {\n background-position: -1000px 0;\n }\n 100% {\n background-position: 1000px 0;\n }\n }\n</style>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'sdk-no-data',\n template: `\n <div class=\"text-center py-4\">\n @if (icon) {\n <div class=\"mb-2\">\n <i class=\"la\" [class.icon]=\"icon\"></i>\n </div>\n }\n <p class=\"text-muted\">{{ title }}</p>\n </div>\n `,\n standalone: true,\n})\nexport class NoDataComponent {\n @Input() title: string = 'No data available';\n @Input() icon?: string;\n}\n\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FieldWrapper, FormlyModule } from '@ngx-formly/core';\n\n@Component({\n selector: 'sdk-formly-wrapper-form-field-horizontal',\n standalone: true,\n imports: [CommonModule, FormlyModule],\n template: `\n <div class=\"form-group form-row\">\n <label [attr.for]=\"id\" class=\"control-label text-md-right col-md-4 col-lg-4\">\n {{ to.label }}\n @if (to.required) {\n <em class=\"text-danger\">*</em>\n }\n </label>\n <div class=\"col-md-8\">\n <ng-template #fieldComponent></ng-template>\n @if (showError) {\n <div class=\"invalid-feedback d-block\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </div>\n }\n </div>\n </div>\n `,\n})\nexport class FormlyHorizontalWrapperComponent extends FieldWrapper {}\n","import { Component } from '@angular/core';\nimport { FieldType } from '@ngx-formly/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { Observable, isObservable, of } from 'rxjs';\n\n@Component({\n selector: 'sdk-formly-field-ng-select',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, NgSelectModule],\n template: `\n <ng-select\n [formControl]=\"fc\"\n [items]=\"(options$ | async) || []\"\n [bindLabel]=\"to['bindLabel'] || 'label'\"\n [bindValue]=\"to['bindValue'] || 'value'\"\n [placeholder]=\"to['placeholder'] || ''\"\n [multiple]=\"to['multiple']\"\n >\n </ng-select>\n `,\n})\nexport class FormlyFieldNgSelectComponent extends FieldType {\n get fc(): FormControl {\n return this.formControl as FormControl;\n }\n\n get options$(): Observable<any[]> {\n const opts = this.to?.['options'];\n if (isObservable(opts)) {\n return opts as Observable<any[]>;\n }\n return of((opts as any[]) ?? []);\n }\n}\n","import { Component } from '@angular/core';\nimport { FieldType } from '@ngx-formly/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'sdk-formly-field-db-date-picker',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n template: `\n <input\n type=\"date\"\n class=\"form-control\"\n [formControl]=\"fc\"\n [placeholder]=\"to['placeholder'] || ''\"\n />\n `,\n})\nexport class FormlyDatepickerComponent extends FieldType {\n get fc(): FormControl {\n return this.formControl as FormControl;\n }\n}\n","import { Component } from '@angular/core';\nimport { FieldType } from '@ngx-formly/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'sdk-formly-field-g-map-address-picker',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n template: `\n <input\n type=\"text\"\n class=\"form-control\"\n [formControl]=\"fc\"\n [placeholder]=\"to['placeholder'] || 'Enter address'\"\n />\n `,\n})\nexport class googleMapWrappersComponent extends FieldType {\n get fc(): FormControl {\n return this.formControl as FormControl;\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'sdk-common-loader',\n template: `\n <div class=\"d-flex align-items-center justify-content-center py-4\">\n <div class=\"spinner-border mr-2\" role=\"status\">\n <span class=\"sr-only\">Loading...</span>\n </div>\n <span>{{ message }}</span>\n </div>\n `,\n standalone: true,\n})\nexport class CommonLoaderComponent {\n @Input() message: string = 'Please wait...';\n}\n\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, SimpleChanges, ChangeDetectorRef, AfterViewInit } from \"@angular/core\";\nimport { ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup, Validators } from \"@angular/forms\";\nimport { FormlyFieldConfig, FormlyModule } from \"@ngx-formly/core\";\nimport * as _ from \"lodash\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport {\n SORTING_ORDER,\n TOPUP_BILL_PAYMENT_FIELD_ACTIONS,\n TOPUP_BILL_PAYMENT_FIELD_TYPE,\n PRODUCT_PRICE_TYPE,\n} from \"../../base-data\";\nimport { TopupAndBillpaymentService } from \"../../services/topup-and-billpayment.service\";\nimport { TranslationService } from \"../../services/translation.service\";\nimport { isNotNull } from \"../../utils\";\nimport { Router } from \"@angular/router\";\nimport { SharedModule } from \"../../shared/shared.module\";\nimport { NoDataComponent } from \"../../common/no-data/no-data.component\";\nimport { CommonLoaderComponent } from \"../../common/common-loader/common-loader.component\";\nimport { SdkStateService } from \"../../services/sdk-state.service\";\n\n\n@Component({\n selector: \"sdk-bill-workflow\",\n templateUrl: \"./bill-workflow.component.html\",\n\n imports: [\n SharedModule,\n FormlyModule,\n NoDataComponent,\n ReactiveFormsModule,\n CommonLoaderComponent\n],\n})\nexport class BillWorkflowComponent implements OnInit, OnDestroy, AfterViewInit {\n @Input() billData: any = null;\n @Input() selectedBill: any = null;\n @Output() workflowCompleted = new EventEmitter<any>();\n\n showLoader: boolean = false;\n showWorkflow: boolean = false;\n vendorProvider: any = null;\n workFlowDetails: any = null;\n detailsForm: UntypedFormGroup;\n fieldsArray: FormlyFieldConfig[] = [];\n fieldsModel: any = {};\n buttonData: any = null;\n currentUserDetails: any = null;\n destroy$: Subject<boolean> = new Subject<boolean>();\n workFlowUserInput: any;\n workflowScreens: any[] = [];\n currentScreenIndex: number = 0;\n allWorkflowData: any = {};\n selectedProduct: any = null;\n PRODUCT_PRICE_TYPE = PRODUCT_PRICE_TYPE;\n\n\n constructor(\n private topupAndBillpaymentService: TopupAndBillpaymentService,\n private toasterService: ToastrService,\n private fb: UntypedFormBuilder,\n private translationService: TranslationService,\n private router: Router,\n private cdr: ChangeDetectorRef,\n private sdkState: SdkStateService\n ) {\n\n this.topupAndBillpaymentService.vendorProvider.pipe(takeUntil(this.destroy$)).subscribe(data => {\n if (isNotNull(data)) {\n this.vendorProvider = data;\n }\n });\n\n this.topupAndBillpaymentService.workFlowUserInput.pipe(takeUntil(this.destroy$)).subscribe((data: any) => {\n if (isNotNull(data)) {\n this.workFlowUserInput = data;\n }\n });\n\n this.topupAndBillpaymentService.vendorPlan.pipe(takeUntil(this.destroy$)).subscribe((data: any) => {\n if (isNotNull(data)) {\n this.selectedProduct = data;\n }\n });\n\n this.topupAndBillpaymentService.currentScreenStep.pipe(takeUntil(this.destroy$)).subscribe((index: any) => {\n if (index) {\n this.currentScreenIndex = index;\n }\n });\n\n this.topupAndBillpaymentService.workflowScreens.pipe(takeUntil(this.destroy$)).subscribe((screens: any) => {\n if (isNotNull(screens)) {\n this.workflowScreens = screens;\n if (this.workflowScreens.length > 0 && this.currentScreenIndex < this.workflowScreens.length) {\n this.loadCurrentScreen();\n }\n }\n });\n\n this.topupAndBillpaymentService.workflowData.pipe(takeUntil(this.destroy$)).subscribe((data: any) => {\n if (isNotNull(data)) {\n this.allWorkflowData = data;\n }\n });\n\n // Create form with updateOn: 'change' for real-time validation\n this.detailsForm = this.fb.group({}, { updateOn: 'change' });\n\n }\n\n ngOnInit(): void {\n if (this.workflowScreens.length === 0) {\n if (this.billData) {\n this.checkWorkflowForBill(this.billData);\n } else if (this.selectedBill) {\n this.checkWorkflowForBill(this.selectedBill);\n }\n }\n }\n\n ngAfterViewInit(): void {\n // Detect changes after view initialization to prevent ExpressionChangedAfterItHasBeenCheckedError\n this.cdr.detectChanges();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.workflowScreens.length === 0) {\n if (changes['billData'] && changes['billData'].currentValue) {\n this.checkWorkflowForBill(changes['billData'].currentValue);\n }\n if (changes['selectedBill'] && changes['selectedBill'].currentValue) {\n this.checkWorkflowForBill(changes['selectedBill'].currentValue);\n }\n }\n }\n\n checkWorkflowForBill(billData: any) {\n this.selectedBill = billData;\n this.showLoader = true;\n this.showWorkflow = false;\n\n if (this.workflowScreens.length > 0) {\n this.loadCurrentScreen();\n } else {\n const params = {\n provider_code: this.vendorProvider?.vendor_provider_reference_code,\n sorting: `\"display_order\": \"${SORTING_ORDER.ASCENDING}\"`,\n };\n\n this.topupAndBillpaymentService.getTopupAndBillpaymentWorkFlowDetails(params).subscribe({\n next: res => {\n this.showLoader = false;\n if (res?.success) {\n const workflowDetails = this.normalizeWorkflowDetails(res?.data?.workflow_details);\n const workflowWithOrder2 = workflowDetails?.find(\n (workflow: any) => workflow?.display_order === 2\n );\n\n if (workflowWithOrder2) {\n this.workFlowDetails = workflowWithOrder2;\n this.prepareFormFields(this.workFlowDetails?.screen_config);\n this.showWorkflow = true;\n } else {\n this.proceedToBillReview();\n }\n } else {\n this.toasterService.error(res?.error[0]);\n this.proceedToBillReview();\n }\n },\n error: (error) => {\n this.showLoader = false;\n this.toasterService.error(\"Error checking workflow\");\n this.proceedToBillReview();\n }\n });\n }\n }\n\n loadCurrentScreen() {\n if (this.workflowScreens.length > 0 && (this.currentScreenIndex < this.workflowScreens.length)) {\n this.workFlowDetails = this.workflowScreens[this.currentScreenIndex];\n if (this.detailsForm) {\n this.detailsForm.reset();\n }\n this.fieldsModel = {};\n\n this.prepareFormFields(this.workFlowDetails?.screen_config);\n\n // Set fixed amount value in form if product has fixed price\n if (this.selectedProduct?.product_price_type === PRODUCT_PRICE_TYPE.FIXED) {\n const amountField = this.fieldsArray.find((field: FormlyFieldConfig) => {\n const keyStr = String(field?.key || \"\").toLowerCase();\n const labelStr = String(field?.templateOptions?.label || \"\").toLowerCase();\n return keyStr.includes(\"amount\") || labelStr.includes(\"amount\");\n });\n\n if (amountField && amountField.key != null && this.detailsForm) {\n const fixedAmount = this.selectedProduct?.product_fixed_price || 0;\n const key = String(amountField.key);\n this.detailsForm.patchValue({\n [key]: fixedAmount\n });\n }\n }\n\n this.showWorkflow = true;\n this.showLoader = false;\n\n // Use setTimeout to avoid ExpressionChangedAfterItHasBeenCheckedError\n // Also update form validity after fields are set\n setTimeout(() => {\n // Update form validity after fields are initialized\n if (this.detailsForm) {\n this.detailsForm.updateValueAndValidity();\n }\n this.cdr.detectChanges();\n }, 0);\n } else {\n this.proceedToBillReview();\n }\n }\n\n prepareFormFields(fields: Array<any>) {\n if (fields && fields.length > 0) {\n const fieldsArray: FormlyFieldConfig[] = [];\n fields.forEach(field => {\n const normalizedFieldType = this.normalizeFieldType(field?.field_type);\n if (normalizedFieldType === TOPUP_BILL_PAYMENT_FIELD_TYPE.TEXT_BOX || normalizedFieldType === TOPUP_BILL_PAYMENT_FIELD_TYPE.NUMERIC) {\n const data = this.getExtraFieldsToShow(field);\n if (data) {\n fieldsArray.push(data);\n }\n } else if (normalizedFieldType === TOPUP_BILL_PAYMENT_FIELD_TYPE.BUTTON) {\n this.buttonData = field;\n }\n });\n this.fieldsArray = fieldsArray;\n }\n }\n\n submitForm() {\n // Validate amount range for products with range price type\n if (this.selectedProduct?.product_price_type === PRODUCT_PRICE_TYPE.RANGE) {\n const amountField = this.fieldsArray.find((field: FormlyFieldConfig) => {\n const keyStr = String(field?.key || \"\").toLowerCase();\n const labelStr = String(field?.templateOptions?.label || \"\").toLowerCase();\n return keyStr.includes(\"amount\") || labelStr.includes(\"amount\");\n });\n\n if (amountField) {\n const fieldKey = String(amountField.key ?? '');\n const enteredValue = this.detailsForm?.value[fieldKey];\n\n // Convert to number properly, handling strings and numbers\n let enteredAmount: number | null = null;\n if (enteredValue !== null && enteredValue !== undefined && enteredValue !== '') {\n enteredAmount = typeof enteredValue === 'number' ? enteredValue : parseFloat(String(enteredValue));\n if (isNaN(enteredAmount)) {\n enteredAmount = null;\n }\n }\n\n // Parse range values as numbers, ensuring proper decimal handling\n const rangeMin = Number(this.selectedProduct?.product_range_price?.min) || 0;\n const rangeMax = Number(this.selectedProduct?.product_range_price?.max) || 0;\n\n // Only validate if a valid number was entered\n if (enteredAmount !== null && !isNaN(enteredAmount)) {\n // Use Number comparison to handle decimals properly\n // Allow values that are >= min AND <= max\n if (Number(enteredAmount) < Number(rangeMin) || Number(enteredAmount) > Number(rangeMax)) {\n this.toasterService.error(this.translationService.translate(\"COMMON_LABEL_AMOUNT_MUST_BE_BETWEEN\") + rangeMin + \" \" + this.translationService.translate(\"COMMON_LABEL_AND\") + \" \" + rangeMax);\n const control = this.detailsForm.get(fieldKey);\n control?.setErrors({ range: true });\n control?.markAsTouched();\n return;\n }\n }\n }\n }\n\n if (this.detailsForm.valid) {\n this.showLoader = true;\n const action = this.normalizeFieldAction(this.buttonData?.field_action);\n\n this.saveCurrentScreenData();\n const userInputData: Array<any> = [];\n\n this.fieldsArray.forEach((field: FormlyFieldConfig) => {\n const rawLabel = field?.templateOptions?.label ?? '';\n const label = rawLabel.endsWith(\"*\") ?\n rawLabel.replace(\"*\", \"\") : rawLabel;\n\n const data = {\n key: field?.key,\n value: this.detailsForm?.value[String(field?.key ?? '')],\n label: label,\n };\n userInputData.push(data);\n });\n\n const combinedUserInput = [...userInputData, ...this.workFlowUserInput];\n this.topupAndBillpaymentService.saveWorkflowUserInput(combinedUserInput);\n\n switch (action) {\n case TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_BILL_SCREEN:\n this.handleGetBillScreenAction();\n break;\n case TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_PLAN_SCREEN:\n this.handleGetPlanScreenAction();\n break;\n case TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_REVIEW_SCREEN:\n this.proceedToBillReview();\n break;\n default:\n if (this.currentScreenIndex < this.workflowScreens.length - 1) {\n this.moveToNextScreen();\n } else {\n this.proceedToBillReview();\n }\n break;\n }\n } else {\n Object.keys(this.detailsForm.controls).forEach(key => {\n const control = this.detailsForm.get(key);\n control?.markAsTouched();\n });\n }\n }\n\n saveCurrentScreenData() {\n const screenData = {\n screenIndex: this.currentScreenIndex,\n screenTitle: this.workFlowDetails?.screen_title,\n formData: this.detailsForm.value,\n timestamp: new Date(),\n displayOrder: this.workFlowDetails?.display_order\n };\n\n this.allWorkflowData[`screen_${this.currentScreenIndex}`] = screenData;\n this.topupAndBillpaymentService.saveWorkflowData(this.allWorkflowData);\n }\n\n proceedToBillReview() {\n // If we have a selected product, navigate to review with product\n if (this.selectedProduct) {\n // Ensure product is saved in service\n this.topupAndBillpaymentService.saveVendorPlan(this.selectedProduct);\n\n this.workflowCompleted.emit({\n action: 'proceed_to_review',\n data: this.selectedProduct\n });\n } else {\n // Original bill review flow\n this.topupAndBillpaymentService.saveBillData({\n selectedBill: this.billData,\n user_info: this.billData?.user_info\n });\n\n this.workflowCompleted.emit({\n action: 'proceed_to_bill_review',\n data: this.billData\n });\n }\n }\n\n skipWorkflow() {\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"CATEGORY\");\n } else {\n this.router.navigateByUrl(\"/operations/topup-and-billpayment\");\n }\n }\n\n moveToNextScreen() {\n this.showLoader = true;\n this.showWorkflow = false;\n this.detailsForm.reset();\n this.fieldsModel = {};\n\n this.currentScreenIndex++;\n\n this.topupAndBillpaymentService.setCurrentScreenStep(this.currentScreenIndex);\n setTimeout(() => {\n this.loadCurrentScreen();\n }, 500);\n }\n\n handleGetBillScreenAction() {\n this.saveCurrentWorkflowState();\n this.workflowCompleted.emit({\n action: 'get_bill_screen',\n data: this.selectedBill,\n currentScreenIndex: this.currentScreenIndex,\n workflowScreens: this.workflowScreens,\n allWorkflowData: this.allWorkflowData\n });\n }\n\n handleGetPlanScreenAction() {\n this.saveCurrentWorkflowState();\n this.workflowCompleted.emit({\n action: 'get_plan_screen',\n data: this.selectedBill,\n currentScreenIndex: this.currentScreenIndex,\n workflowScreens: this.workflowScreens,\n allWorkflowData: this.allWorkflowData\n });\n }\n\n saveCurrentWorkflowState() {\n const workflowState = {\n currentScreenIndex: this.currentScreenIndex,\n workflowScreens: this.workflowScreens,\n allWorkflowData: this.allWorkflowData,\n selectedBill: this.selectedBill,\n timestamp: new Date()\n };\n\n this.topupAndBillpaymentService.saveWorkflowData(workflowState);\n }\n\n getExtraFieldsToShow(field: any): FormlyFieldConfig | null {\n if (field) {\n let isReadOnly = false;\n let fieldValue: any = null;\n let customValidators: any = {};\n\n if (field?.external_field_key === \"dial_code\") {\n isReadOnly = true;\n fieldValue = this.currentUserDetails?.dial_code;\n this.fieldsModel = { \"dial_code\": fieldValue };\n }\n\n // Check if this is an amount field and we have a selected product\n const isAmountField = field?.external_field_key?.toLowerCase().includes(\"amount\") ||\n field?.field_title?.toLowerCase().includes(\"amount\");\n\n if (isAmountField && this.selectedProduct) {\n if (this.selectedProduct?.product_price_type === PRODUCT_PRICE_TYPE.FIXED) {\n // Fixed price: make field readonly and set the fixed price\n isReadOnly = true;\n fieldValue = this.selectedProduct?.product_fixed_price || 0;\n if (this.fieldsModel) {\n this.fieldsModel[field.external_field_key] = fieldValue;\n } else {\n this.fieldsModel = { [field.external_field_key]: fieldValue };\n }\n } else if (this.selectedProduct?.product_price_type === PRODUCT_PRICE_TYPE.RANGE) {\n const rangeMin = Number(this.selectedProduct?.product_range_price?.min) || 0;\n const rangeMax = Number(this.selectedProduct?.product_range_price?.max) || 0;\n\n customValidators = {\n // Range validator - checks if value is within the allowed range\n // Allows typing leading zeros (e.g., \"01\", \"08\") but validates the numeric value\n range: {\n expression: (control: any) => {\n const value = control?.value;\n if (value === null || value === undefined || value === '') {\n return true; // No error if empty\n }\n\n const valueStr = String(value).trim();\n\n // Convert string to number (handles leading zeros: \"01\" becomes 1, \"08\" becomes 8)\n const numValue = Number(valueStr);\n\n if (isNaN(numValue) || !isFinite(numValue)) {\n return true; // Skip validation for invalid numbers\n }\n\n // Return true if value is IN range (no error), false if out of range (error)\n return numValue >= rangeMin && numValue <= rangeMax;\n },\n message: () => `${this.translationService.translate(\"COMMON_LABEL_AMOUNT_MUST_BE_BETWEEN\")} ${rangeMin} ${this.translationService.translate(\"COMMON_LABEL_AND\")} ${rangeMax}`\n }\n };\n }\n }\n\n const validations: Array<any> = field?.field_validation || [];\n const normalizedFieldType = this.normalizeFieldType(field?.field_type);\n\n const normalizedValidations = this.normalizeValidations(validations);\n const isRequired: boolean = normalizedValidations.isRequired;\n const minLength: number | undefined = normalizedValidations.minLength;\n const maxLength: number | undefined = normalizedValidations.maxLength;\n let minValue: number | undefined = normalizedValidations.minValue;\n let maxValue: number | undefined = normalizedValidations.maxValue;\n\n // For range products, don't set HTML5 min/max to allow typing any value\n // We'll validate using custom validator only\n // This prevents HTML5 from blocking input before validation\n if (isAmountField && this.selectedProduct?.product_price_type === PRODUCT_PRICE_TYPE.RANGE) {\n // Don't override min/max - let custom validator handle it\n // This allows users to type any value, then validate on blur/submit\n }\n\n let res: FormlyFieldConfig = {\n key: field.external_field_key,\n templateOptions: {} as any,\n className: \"col-12\",\n wrappers: [\"form-field-horizontal\"],\n type: \"input\",\n // Enable real-time validation on change/input\n modelOptions: {\n updateOn: 'change'\n },\n // Show errors in real-time (even when not touched)\n expressionProperties: {\n 'templateOptions.disabled': 'formState.disabled',\n },\n // Mark field as touched on value change to show errors immediately\n hooks: {\n onInit: (field: FormlyFieldConfig) => {\n const control = field.formControl;\n if (control) {\n // Subscribe to value changes and mark as touched to show errors immediately\n control.valueChanges.subscribe(() => {\n if (control.invalid && control.value !== null && control.value !== '') {\n control.markAsTouched();\n }\n });\n }\n }\n }\n };\n\n // Add custom validators if any\n if (Object.keys(customValidators).length > 0) {\n res[\"validators\"] = customValidators;\n }\n\n if (normalizedFieldType == TOPUP_BILL_PAYMENT_FIELD_TYPE.TEXT_BOX) {\n res[\"templateOptions\"] = {\n label: `${field.field_title} `,\n placeholder: `${this.translationService.translate(\"COMMON_LABEL_PLEASE_ENTER\")} ${field.field_title}`,\n required: isRequired,\n minLength: minLength,\n maxLength: maxLength,\n readonly: isReadOnly,\n };\n if (fieldValue !== null) {\n res[\"defaultValue\"] = fieldValue;\n }\n } else if (normalizedFieldType == TOPUP_BILL_PAYMENT_FIELD_TYPE.NUMERIC) {\n // For range products, don't set min/max in templateOptions to allow typing\n // Custom validator will handle validation\n const templateOptions: any = {\n label: `${field.field_title} `,\n placeholder: `${this.translationService.translate(\"COMMON_LABEL_PLEASE_ENTER\")} ${field.field_title}`,\n required: isRequired,\n minLength: minLength,\n maxLength: maxLength,\n readonly: isReadOnly,\n };\n\n // Only set min/max if NOT a range product (to allow typing any value for range products)\n if (!(isAmountField && this.selectedProduct?.product_price_type === PRODUCT_PRICE_TYPE.RANGE)) {\n templateOptions.min = minValue;\n templateOptions.max = maxValue;\n }\n\n res[\"templateOptions\"] = templateOptions;\n res[\"type\"] = \"number-field\";\n if (fieldValue !== null) {\n res[\"defaultValue\"] = fieldValue;\n }\n\n }\n\n return res;\n }\n\n return null;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n private normalizeWorkflowDetails(workflowDetails: any): any[] {\n if (!Array.isArray(workflowDetails)) return [];\n return workflowDetails\n .filter((screen: any) => Number(screen?.screen_status ?? 1) === 1)\n .map((screen: any) => ({\n ...screen,\n display_order: Number(screen?.display_order ?? 0),\n screen_config: Array.isArray(screen?.screen_config)\n ? [...screen.screen_config].sort((a: any, b: any) => Number(a?.display_order ?? 0) - Number(b?.display_order ?? 0))\n : [],\n }))\n .sort((a: any, b: any) => Number(a?.display_order ?? 0) - Number(b?.display_order ?? 0));\n }\n\n private normalizeFieldType(fieldType: any): string {\n if (typeof fieldType === \"number\") {\n if (fieldType === 1) return TOPUP_BILL_PAYMENT_FIELD_TYPE.TEXT_BOX;\n if (fieldType === 2) return TOPUP_BILL_PAYMENT_FIELD_TYPE.NUMERIC;\n if (fieldType === 3) return TOPUP_BILL_PAYMENT_FIELD_TYPE.BUTTON;\n }\n const fieldTypeValue = String(fieldType ?? \"\").toUpperCase();\n if (fieldTypeValue === \"1\") return TOPUP_BILL_PAYMENT_FIELD_TYPE.TEXT_BOX;\n if (fieldTypeValue === \"2\") return TOPUP_BILL_PAYMENT_FIELD_TYPE.NUMERIC;\n if (fieldTypeValue === \"3\") return TOPUP_BILL_PAYMENT_FIELD_TYPE.BUTTON;\n return fieldTypeValue;\n }\n\n private normalizeFieldAction(action: any): string {\n const actionValue = String(action ?? \"\").trim().toUpperCase();\n if (actionValue === \"GET_BILL_SCREEN\") return TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_BILL_SCREEN;\n if (actionValue === \"GET_PLAN_SCREEN\") return TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_PLAN_SCREEN;\n if (actionValue === \"GET_REVIEW_SCREEN\") return TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_REVIEW_SCREEN;\n if (actionValue === \"GET_VENDOR_PRODUCT\") return TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_VENDOR_PRODUCT;\n if (actionValue === \"GET_ESIM_PRODUCT\") return TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_ESIM_PRODUCT;\n return actionValue;\n }\n\n private normalizeValidations(validations: any[]): {\n isRequired: boolean;\n minLength?: number;\n maxLength?: number;\n minValue?: number;\n maxValue?: number;\n } {\n let isRequired = false;\n let minLength: number | undefined;\n let maxLength: number | undefined;\n let minValue: number | undefined;\n let maxValue: number | undefined;\n\n validations.forEach((validation: any) => {\n const key = String(validation?.key ?? \"\").toLowerCase();\n const fieldType = Number(validation?.field_types);\n const value = validation?.value ?? validation?.field_values;\n\n if (key === \"is_mandatory\" || fieldType === 1) {\n isRequired = value === true || value === \"true\" || value === 1 || value === \"1\";\n } else if (key === \"max_length\" || fieldType === 2) {\n maxLength = Number(value);\n } else if (key === \"min_value\" || fieldType === 3) {\n minValue = Number(value);\n } else if (key === \"min_length\" || fieldType === 4) {\n minLength = Number(value);\n if (!isRequired) isRequired = true;\n } else if (key === \"max_value\" || fieldType === 5) {\n maxValue = Number(value);\n }\n });\n\n return { isRequired, minLength, maxLength, minValue, maxValue };\n }\n}\n","<div class=\"content\">\n <header class=\"page-header\">\n <div class=\"d-flex align-items-center flex-wrap\">\n <div class=\"mr-auto\">\n <h1>{{ 'LABEL_UTILITIES' | translate }}</h1>\n </div>\n </div>\n </header>\n\n <section class=\"page-content container-fluid\">\n\n <div class=\"card m-0 border-0\">\n <div class=\"card-header p-t-25 p-b-20\">\n <h4 class=\"card-title font-weight-600 font-size-18 m-0 text-dark\">{{ vendorProvider?.provider_name }}\n </h4>\n </div>\n <div class=\"tab-content\">\n <div class=\"tab-pane fadeIn active show\">\n <form role=\"form\" class=\"form-horizontal\" [formGroup]=\"detailsForm\" (ngSubmit)=\"submitForm()\">\n <div class=\"card-body\">\n <div class=\"mt-3\">\n @if (!showLoader && fieldsArray.length > 0) {\n <div class=\"row\">\n <div class=\"col-xl-10 offset-xl-1\">\n <formly-form [form]=\"detailsForm\" [fields]=\"fieldsArray\" [model]=\"fieldsModel\"></formly-form>\n </div>\n </div>\n }\n @if (!showLoader && fieldsArray.length === 0) {\n <sdk-no-data title=\"LABEL_FIELDS_NOT_AVAILABLE\"></sdk-no-data>\n }\n </div>\n </div>\n <div class=\"card-footer text-right\">\n <button type=\"button\" class=\"btn btn-secondary mr-2\" (click)=\"skipWorkflow()\">\n {{'COMMON_LABEL_CANCEL' | translate}}\n </button>\n <button type=\"submit\" class=\"btn btn-primary\" [disabled]=\"!detailsForm.valid || showLoader\">\n @if (showLoader) {\n <span class=\"spinner-border spinner-border-sm mr-1\"></span>\n }\n {{ buttonData?.field_title }}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n </section>\n</div>\n\n@if(showLoader) {\n <sdk-common-loader></sdk-common-loader>\n}\n","import { Component, OnDestroy, OnInit, inject } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\nimport { FormlyFieldConfig, FormlyModule, provideFormlyCore } from \"@ngx-formly/core\";\nimport * as _ from \"lodash\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport {\n PROVIDER_CATEGORY_TYPE, SORTING_ORDER,\n TOPUP_BILL_PAYMENT_FIELD_ACTIONS, TOPUP_BILL_PAYMENT_FIELD_TYPE,\n} from \"../../base-data\";\nimport { TopupAndBillpaymentService } from \"../../services/topup-and-billpayment.service\";\nimport { TranslationService } from \"../../services/translation.service\";\nimport { isNotNull } from \"../../utils\";\nimport { CommonModule } from \"@angular/common\";\nimport { SharedModule } from \"../../shared/shared.module\";\nimport { NgSelectModule } from \"@ng-select/ng-select\";\nimport { FormlyBootstrapModule } from \"@ngx-formly/bootstrap\";\nimport { FormlyFieldInput } from \"@ngx-formly/bootstrap/input\";\nimport { NoDataComponent } from \"../../common/no-data/no-data.component\";\nimport { FormlyHorizontalWrapperComponent } from \"../../common/horizontal-wrapper\";\nimport { FormlyFieldNgSelectComponent } from \"../../common/ng-select.type.component\";\nimport { FormlyDatepickerComponent } from \"../../common/formly/formly-datepicker/formly-datepicker.component\";\nimport { googleMapWrappersComponent } from \"../../common/google-map-wrappers\";\nimport { BillWorkflowComponent } from \"../bill-workflow/bill-workflow.component\";\nimport { SdkStateService } from \"../../services/sdk-state.service\";\nimport { DataService } from \"../../services/data.service\";\n\n@Component({\n selector: \"sdk-work-flow\",\n templateUrl: \"./work-flow.component.html\",\n standalone:true,\n imports: [\n CommonModule,\n SharedModule,\n NgSelectModule,\n FormsModule,\n ReactiveFormsModule,\n FormlyBootstrapModule,\n FormlyModule,\n NoDataComponent,\n BillWorkflowComponent,\n ],\n providers: [\n provideFormlyCore({\n wrappers: [\n {\n name: \"form-field-horizontal\",\n component: FormlyHorizontalWrapperComponent,\n },\n ],\n validationMessages: [\n { name: \"required\", message: \"This field is required\" },\n ],\n types: [\n {\n name: 'input',\n component: FormlyFieldInput, // Import this from '@ngx-formly/bootstrap/input'\n },\n {\n name: 'number-field',\n extends: 'input', // Extend the built-in input type\n defaultOptions: {\n props: {\n type: 'number', // Set input type to number\n },\n },\n },\n { name: \"ng-select\", component: FormlyFieldNgSelectComponent },\n {\n name: \"app-db-date-picker\",\n component: FormlyDatepickerComponent,\n },\n {\n name: \"app-g-map-address-picker\",\n component: googleMapWrappersComponent,\n },\n ],\n }),\n ],\n})\nexport class WorkFlowComponent implements OnInit, OnDestroy {\n private topupAndBillpaymentService = inject(TopupAndBillpaymentService);\n private toasterService = inject(ToastrService);\n private router = inject(Router);\n private fb = inject(UntypedFormBuilder);\n private translationService = inject(TranslationService);\n private dataService = inject(DataService);\n private sdkState = inject(SdkStateService, { optional: true });\n\n\n showLoader: boolean = false;\n\n vendorProvider: any = null;\n vendorCategory: any = null;\n workFlowDetails: any = null;\n\n detailsForm: UntypedFormGroup;\n fieldsArray: FormlyFieldConfig[] = [];\n fieldsModel: any = {};\n buttonData: any = null;\n currentUserDetails: any = null;\n workFlowUserInput: Array<any> = [];\n\n destroy$: Subject<boolean> = new Subject<boolean>();\n showWorkflowComponent: boolean = false;\n selectedBillForWorkflow: any = null;\n workflowScreens: any[] = [];\n currentScreenIndex: number = 0;\n allWorkflowData: any = {};\n\n constructor(...args: unknown[]);\n\n constructor() {\n\n this.dataService.currentUserDetails.pipe(takeUntil(this.destroy$)).subscribe((data) => {\n if (isNotNull(data)) {\n this.currentUserDetails = data;\n }\n });\n\n this.topupAndBillpaymentService.vendorProvider.pipe(takeUntil(this.destroy$)).subscribe(data => {\n if (isNotNull(data)) {\n this.vendorProvider = data;\n }\n });\n\n this.topupAndBillpaymentService.vendorCategory.pipe(takeUntil(this.destroy$)).subscribe((response) => {\n if (isNotNull(response)) {\n this.vendorCategory = response;\n }\n });\n\n this.detailsForm = this.fb.group({});\n\n this.topupAndBillpaymentService.workFlowUserInput.pipe(takeUntil(this.destroy$)).subscribe(data => {\n if (isNotNull(data)) {\n this.workFlowUserInput = Array.isArray(data) ? [...data] : [];\n this.fieldsModel = data;\n }\n });\n\n }\n\n ngOnInit(): void {\n if (isNotNull(this.vendorProvider)) {\n this.getWorkFlowData();\n } else {\n this.back();\n }\n }\n\n getWorkFlowData() {\n const params: any = {\n category_key: this.vendorCategory?.category_key,\n provider_code: this.vendorProvider?.vendor_provider_reference_code,\n sorting: `\"display_order\": \"${SORTING_ORDER.ASCENDING}\"`,\n };\n\n if (this.vendorCategory?.category_type === PROVIDER_CATEGORY_TYPE.RECHARGE) {\n params[\"vendor_id\"] = this.vendorProvider?.vendor_id;\n }\n\n this.topupAndBillpaymentService.getTopupAndBillpaymentWorkFlowDetails(params).subscribe(\n {\n next: res => {\n if (res?.success) {\n const workflowDetails = this.normalizeWorkflowDetails(res?.data?.workflow_details);\n this.workFlowDetails = workflowDetails[0];\n this.topupAndBillpaymentService.saveWorkflowScreens(workflowDetails);\n\n this.prepareFormFields(this.workFlowDetails?.screen_config);\n } else {\n this.toasterService.error(res?.error[0]);\n }\n },\n },\n );\n }\n\n prepareFormFields(fields: Array<any>) {\n if (fields.length > 0) {\n const fieldsArray: FormlyFieldConfig[] = [];\n fields.forEach(field => {\n const normalizedFieldType = this.normalizeFieldType(field?.field_type);\n if (normalizedFieldType === TOPUP_BILL_PAYMENT_FIELD_TYPE.TEXT_BOX || normalizedFieldType === TOPUP_BILL_PAYMENT_FIELD_TYPE.NUMERIC) {\n const data = this.getExtraFieldsToShow(field);\n if (data) {\n fieldsArray.push(data);\n }\n } else if (normalizedFieldType === TOPUP_BILL_PAYMENT_FIELD_TYPE.BUTTON) {\n this.buttonData = field;\n }\n });\n\n this.fieldsArray = fieldsArray;\n }\n }\n\n submitForm() {\n // Mark all fields as touched to show validation errors\n this.fieldsArray.forEach((field: FormlyFieldConfig) => {\n const key = field.key != null ? String(field.key) : '';\n const formControl = key ? this.detailsForm.get(key) : null;\n if (formControl) {\n formControl.markAsTouched();\n formControl.updateValueAndValidity();\n }\n });\n\n // Check if any required fields are empty\n let hasEmptyFields = false;\n this.fieldsArray.forEach((field: FormlyFieldConfig) => {\n const isRequired = field?.templateOptions?.required;\n const fieldKey = field.key != null ? String(field.key) : '';\n const formControl = fieldKey ? this.detailsForm.get(fieldKey) : null;\n const fieldValue = formControl?.value;\n\n if (isRequired && (!fieldValue || fieldValue === '' || fieldValue === null || fieldValue === undefined)) {\n hasEmptyFields = true;\n if (formControl) {\n formControl.setErrors({ required: true });\n formControl.markAsTouched();\n }\n }\n });\n\n if (hasEmptyFields || !this.detailsForm.valid) {\n // Show error message when form is invalid or has empty required fields\n this.toasterService.error(this.translationService.translate(\"LABEL_PLEASE_FILL_ALL_REQUIRED_FIELDS\"));\n return;\n }\n\n if (this.detailsForm.valid) {\n this.showLoader = true;\n const action = this.normalizeFieldAction(this.buttonData?.field_action);\n\n const userInputData: Array<any> = [];\n\n this.fieldsArray.forEach((field: FormlyFieldConfig) => {\n const rawLabel = field?.templateOptions?.label ?? '';\n const label = rawLabel.endsWith(\"*\") ? rawLabel.replace(\"*\", \"\") : rawLabel;\n\n const data = {\n key: field?.key,\n value: this.detailsForm?.value[String(field?.key ?? '')],\n label: label,\n };\n userInputData.push(data);\n });\n\n const formKeys = this.fieldsArray?.map((f: FormlyFieldConfig) => f?.key);\n const previousInput = (this.workFlowUserInput || [])?.filter((item: any) => !formKeys.includes(item?.key));\n const mergedUserInput = [...previousInput, ...userInputData];\n this.topupAndBillpaymentService?.saveWorkflowUserInput(mergedUserInput);\n\n switch (action) {\n case TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_BILL_SCREEN:\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"BILLS\");\n } else {\n this.router.navigate([\n \"/operations/topup-and-billpayment/bills\",\n ]);\n }\n break;\n case TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_PLAN_SCREEN:\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"PLANS\");\n } else {\n this.router.navigate([\n \"/operations/topup-and-billpayment/plans\",\n ]);\n }\n break;\n case TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_VENDOR_PRODUCT:\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"PRODUCTS\");\n } else {\n this.router.navigate([\n \"/operations/topup-and-billpayment/vendor-products\",\n ]);\n }\n break;\n case TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_ESIM_PRODUCT:\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"PRODUCTS\");\n } else {\n this.router.navigate([\n \"/operations/topup-and-billpayment/vendor-products\",\n ]);\n }\n break;\n default:\n this.handleNoActionFlow();\n break;\n }\n }\n }\n\n handleNoActionFlow() {\n const params: any = {\n category_key: this.vendorCategory?.category_key,\n provider_code: this.vendorProvider?.vendor_provider_reference_code,\n sorting: `\"display_order\": \"${SORTING_ORDER.ASCENDING}\"`,\n };\n\n if (this.vendorCategory?.category_type === PROVIDER_CATEGORY_TYPE.RECHARGE) {\n params[\"vendor_id\"] = this.vendorProvider?.vendor_id;\n }\n\n this.topupAndBillpaymentService.getTopupAndBillpaymentWorkFlowDetails(params).subscribe({\n next: (res) => {\n this.showLoader = false;\n if (res?.success) {\n const allWorkflowScreens = this.normalizeWorkflowDetails(res?.data?.workflow_details);\n const additionalScreens = allWorkflowScreens.filter(\n (workflow: any) => workflow?.display_order > 1\n );\n\n if (additionalScreens.length > 0) {\n this.workflowScreens = additionalScreens;\n this.selectedBillForWorkflow = {\n vendor_provider_reference_code: this.vendorProvider?.vendor_provider_reference_code,\n provider_name: this.vendorProvider?.provider_name,\n category_key: this.vendorCategory?.category_key\n };\n\n this.topupAndBillpaymentService.saveWorkflowScreens(additionalScreens);\n this.topupAndBillpaymentService.setCurrentScreenStep(0);\n this.topupAndBillpaymentService.saveWorkflowData({\n workflowScreens: additionalScreens,\n currentScreenIndex: 0,\n selectedBill: this.selectedBillForWorkflow\n });\n\n this.showWorkflowComponent = true;\n } else {\n this.showWorkflowComponent = false;\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"REVIEW\");\n } else {\n this.router.navigate([\n \"/operations/topup-and-billpayment/review\",\n ]);\n }\n }\n } else {\n this.showWorkflowComponent = false;\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"REVIEW\");\n } else {\n this.router.navigate([\n \"/operations/topup-and-billpayment/review\",\n ]);\n }\n }\n },\n error: (error) => {\n this.showLoader = false;\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"REVIEW\");\n } else {\n this.router.navigate([\n \"/operations/topup-and-billpayment/review\",\n ]);\n }\n }\n });\n }\n\n back() {\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"PROVIDER\");\n } else {\n this.router.navigateByUrl(\"/operations/topup-and-billpayment\");\n }\n }\n\n onWorkflowCompleted(event: any) {\n if (event.action === 'proceed_to_bill_review') {\n this.showWorkflowComponent = false;\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"REVIEW\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/bill-review\"\n );\n }\n } else if (event.action === 'get_bill_screen') {\n this.showWorkflowComponent = false;\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"BILLS\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/bills\"\n );\n }\n } else if (event.action === 'get_plan_screen') {\n this.showWorkflowComponent = false;\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"PLANS\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/plans\"\n );\n }\n }\n }\n isFormEmpty(): boolean {\n const value = this.detailsForm.value;\n return Object.values(value).every(val => val === null || val === '' || (Array.isArray(val) && val.length === 0));\n }\n\n getExtraFieldsToShow(field: any): FormlyFieldConfig | null {\n if (field) {\n let isReadOnly = false;\n if (field?.external_field_key === \"dial_code\") {\n isReadOnly = true;\n this.fieldsModel = { \"dial_code\": this.currentUserDetails?.dial_code };\n }\n\n const validations: Array<any> = field?.field_validation || [];\n const normalizedFieldType = this.normalizeFieldType(field?.field_type);\n\n // Map field_types to validation types\n // field_types: 1 = required, 2 = max_length, 3 = min_value, 4 = min_length, 5 = max_value\n let isRequired: boolean = false;\n let minLength: number | undefined;\n let maxLength: number | undefined;\n let minValue: number | undefined;\n let maxValue: number | undefined;\n const validationMessages: any = {};\n\n validations.forEach((validation: any) => {\n const fieldType = validation?.field_types;\n const fieldValue = validation?.field_values;\n const fieldError = validation?.field_error;\n\n if (fieldType === 1) { // is_mandatory\n isRequired = fieldValue === \"true\" || fieldValue === true || fieldValue === \"1\";\n } else if (fieldType === 2) { // max_length\n maxLength = parseInt(fieldValue);\n if (fieldError) {\n validationMessages.maxlength = fieldError;\n }\n } else if (fieldType === 3) { // min_value\n minValue = parseFloat(fieldValue);\n if (fieldError) {\n validationMessages.min = fieldError;\n }\n } else if (fieldType === 4) { // min_length\n minLength = parseInt(fieldValue);\n if (fieldError) {\n validationMessages.minlength = fieldError;\n }\n // If field has min_length validation, treat it as required\n if (!isRequired) {\n isRequired = true;\n }\n } else if (fieldType === 5) { // max_value\n maxValue = parseFloat(fieldValue);\n if (fieldError) {\n validationMessages.max = fieldError;\n }\n }\n });\n\n let res: FormlyFieldConfig = {\n key: field.external_field_key,\n templateOptions: {} as any,\n className: \"col-12\",\n wrappers: [\"form-field-horizontal\"],\n type: \"input\",\n // Enable real-time validation on change/input\n modelOptions: {\n updateOn: 'change'\n },\n // Show errors in real-time (even when not touched)\n expressionProperties: {\n 'templateOptions.disabled': 'formState.disabled',\n },\n // Mark field as touched on value change to show errors immediately\n hooks: {\n onInit: (field: FormlyFieldConfig) => {\n const control = field.formControl;\n if (control) {\n // Subscribe to value changes and mark as touched to show errors immediately\n control.valueChanges.subscribe(() => {\n if (control.invalid && control.value !== null && control.value !== '') {\n control.markAsTouched();\n }\n });\n }\n }\n }\n };\n\n // Add required validation message if field is required\n if (isRequired) {\n validationMessages.required = `${field.field_title} ${this.translationService.translate(\"LABEL_IS_REQUIRED\")}`;\n }\n\n // Add validation messages if any\n if (Object.keys(validationMessages).length > 0) {\n res[\"validation\"] = {\n messages: validationMessages\n };\n }\n\n if (normalizedFieldType == TOPUP_BILL_PAYMENT_FIELD_TYPE.TEXT_BOX) {\n\n res[\"templateOptions\"] = {\n label: `${field.field_title} `,\n placeholder: `${this.translationService.translate(\"COMMON_LABEL_PLEASE_ENTER\")} ${field.field_title}`,\n required: isRequired,\n minLength: minLength,\n maxLength: maxLength,\n readonly: isReadOnly,\n\n };\n\n } else if (normalizedFieldType == TOPUP_BILL_PAYMENT_FIELD_TYPE.NUMERIC) {\n res[\"templateOptions\"] = {\n label: `${field.field_title} `,\n placeholder: `${this.translationService.translate(\"COMMON_LABEL_PLEASE_ENTER\")} ${field.field_title}`,\n required: isRequired,\n min: minValue,\n max: maxValue,\n minLength: minLength,\n maxLength: maxLength,\n };\n res[\"type\"] = \"number-field\";\n }\n\n return res;\n }\n return null;\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n private normalizeWorkflowDetails(workflowDetails: any): any[] {\n if (!Array.isArray(workflowDetails)) return [];\n return workflowDetails\n .filter((screen: any) => Number(screen?.screen_status ?? 1) === 1)\n .map((screen: any) => ({\n ...screen,\n display_order: Number(screen?.display_order ?? 0),\n screen_config: Array.isArray(screen?.screen_config)\n ? [...screen.screen_config].sort((a: any, b: any) => Number(a?.display_order ?? 0) - Number(b?.display_order ?? 0))\n : [],\n }))\n .sort((a: any, b: any) => Number(a?.display_order ?? 0) - Number(b?.display_order ?? 0));\n }\n\n private normalizeFieldType(fieldType: any): string {\n if (typeof fieldType === \"number\") {\n if (fieldType === 1) return TOPUP_BILL_PAYMENT_FIELD_TYPE.TEXT_BOX;\n if (fieldType === 2) return TOPUP_BILL_PAYMENT_FIELD_TYPE.NUMERIC;\n if (fieldType === 3) return TOPUP_BILL_PAYMENT_FIELD_TYPE.BUTTON;\n }\n const fieldTypeValue = String(fieldType ?? \"\").toUpperCase();\n if (fieldTypeValue === \"1\") return TOPUP_BILL_PAYMENT_FIELD_TYPE.TEXT_BOX;\n if (fieldTypeValue === \"2\") return TOPUP_BILL_PAYMENT_FIELD_TYPE.NUMERIC;\n if (fieldTypeValue === \"3\") return TOPUP_BILL_PAYMENT_FIELD_TYPE.BUTTON;\n return fieldTypeValue;\n }\n\n private normalizeFieldAction(action: any): string {\n const actionValue = String(action ?? \"\").trim().toUpperCase();\n if (actionValue === \"GET_BILL_SCREEN\") return TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_BILL_SCREEN;\n if (actionValue === \"GET_PLAN_SCREEN\") return TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_PLAN_SCREEN;\n if (actionValue === \"GET_REVIEW_SCREEN\") return TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_REVIEW_SCREEN;\n if (actionValue === \"GET_VENDOR_PRODUCT\") return TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_VENDOR_PRODUCT;\n if (actionValue === \"GET_ESIM_PRODUCT\") return TOPUP_BILL_PAYMENT_FIELD_ACTIONS.GET_ESIM_PRODUCT;\n return actionValue;\n }\n}\n","\n\n@if (showWorkflowComponent) {\n \n <sdk-bill-workflow \n [selectedBill]=\"selectedBillForWorkflow\"\n (workflowCompleted)=\"onWorkflowCompleted($event)\">\n </sdk-bill-workflow>\n \n \n}@else { \n <div class=\"content work-flow-content\">\n <header class=\"page-header work-flow-page-header d-flex align-items-center justify-content-between container-fluid\">\n <h1 class=\"page-title work-flow-page-title m-0\">{{ 'LABEL_UTILITIES' | translate }}</h1>\n <button type=\"button\" class=\"btn btn-outline-secondary btn-sm\" (click)=\"back()\">\n <i class=\"fas fa-angle-left me-1\"></i>{{ 'COMMON_LABEL_BACK' | translate }}\n </button>\n </header>\n \n <section class=\"page-content container-fluid work-flow-section\">\n \n <div class=\"card work-flow-card m-0\">\n <div class=\"card-header work-flow-card-header\">\n <h4 class=\"card-title work-flow-card-title m-0 text-dark\">{{ vendorProvider?.provider_name }}</h4>\n </div>\n <div class=\"tab-content\">\n <div class=\"tab-pane fadeIn active show\">\n <form role=\"form\" class=\"form-horizontal work-flow-form\" [formGroup]=\"detailsForm\" (ngSubmit)=\"submitForm()\">\n <div class=\"card-body work-flow-card-body\">\n <div class=\"work-flow-fields\">\n @if (fieldsArray.length > 0) {\n <div class=\"row justify-content-center\">\n <div class=\"col-12 work-flow-form-column\">\n <!-- <div class=\"form-group form-row\">\n <label\n class=\"control-label text-md-right col-md-4 col-lg-3\">Provider</label>\n <div class=\"col-md-5\">\n <ng-select placeholder=\"Select Provider\" bindLabel=\"provider_name\"\n bindValue=\"id\" [items]=\"vendorProviders\"\n (change)=\"changeVendorProvider($event)\">\n </ng-select>\n </div>\n </div> -->\n <!-- <pre>{{fieldsArray|json}}</pre> -->\n <formly-form [fields]=\"fieldsArray\" [model]=\"fieldsModel\" [form]=\"detailsForm\">\n </formly-form>\n </div>\n </div>\n }\n \n @if (fieldsArray.length === 0) {\n <sdk-no-data title=\"LABEL_FIELDS_NOT_AVAILABLE\"></sdk-no-data>\n }\n </div>\n </div>\n <div class=\"card-footer work-flow-footer bg-light d-flex justify-content-end flex-wrap gap-2\">\n <button type=\"button\" class=\"btn btn-secondary btn-sm\" (click)=\"back()\">\n {{'COMMON_LABEL_CANCEL' | translate}}\n </button>\n @if (buttonData) {\n <button type=\"submit\" class=\"btn btn-primary btn-sm\"\n [ngClass]=\"{'qt-loader qt-loader-mini qt-loader-left': showLoader}\"\n [disabled]=\"showLoader || !detailsForm.valid\">\n {{ buttonData?.field_title }}\n </button>\n }\n </div>\n </form>\n </div>\n </div>\n </div>\n </section>\n </div>\n}\n\n<style>\n .work-flow-content {\n overflow: visible;\n }\n\n .work-flow-page-header {\n margin-bottom: 0.5rem;\n }\n\n .work-flow-page-title {\n font-size: 0.95rem;\n font-weight: 600;\n color: #1e3a5f;\n }\n\n .work-flow-section {\n max-width: 100%;\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n }\n\n /* Narrow card: less empty chrome */\n .work-flow-card {\n max-width: 440px;\n margin-left: auto;\n margin-right: auto;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n overflow: visible;\n }\n\n .work-flow-card-header {\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n padding: 0.4rem 0.6rem;\n }\n\n .work-flow-card-title {\n font-size: 0.85rem;\n font-weight: 600;\n color: #1e3a5f;\n }\n\n .work-flow-card-body {\n padding: 0.85rem 0.75rem 1rem;\n border-bottom: 1px solid #e9ecef;\n }\n\n .work-flow-fields {\n margin-top: 0;\n }\n\n .work-flow-form-column {\n max-width: 100%;\n margin-left: 0;\n margin-right: 0;\n padding-left: 0;\n padding-right: 0;\n }\n\n .work-flow-footer {\n padding: 0.45rem 0.6rem;\n border-top: 1px solid #e9ecef;\n background: #fafbfc !important;\n }\n\n .work-flow-footer .btn {\n font-size: 0.7rem;\n padding: 0.18rem 0.45rem;\n line-height: 1.15;\n border-radius: 3px;\n }\n\n /*\n * Reference layout: each row centered in the card; compact inputs (~25–30% of card);\n * labels right-aligned next to the field.\n */\n .work-flow-card-body ::ng-deep formly-field {\n display: block;\n width: 100%;\n }\n\n .work-flow-card-body ::ng-deep .form-group.form-row {\n max-width: 100%;\n margin-left: 0;\n margin-right: 0;\n margin-bottom: 0.65rem;\n align-items: center;\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n\n .work-flow-card-body ::ng-deep .form-group.form-row > .control-label {\n flex: 0 0 8rem;\n max-width: 8rem;\n min-width: 8rem;\n font-size: 0.72rem;\n font-weight: 500;\n color: #3d5a80;\n padding-top: 0;\n padding-right: 0.45rem;\n margin-bottom: 0;\n text-align: right;\n white-space: nowrap;\n }\n\n .work-flow-card-body ::ng-deep .form-group.form-row > .col-md-8 {\n flex: 1 1 auto;\n max-width: none;\n width: auto;\n min-width: 0;\n }\n\n .work-flow-card-body ::ng-deep .form-control {\n display: block;\n width: 100%;\n max-width: 200px;\n box-sizing: border-box;\n font-size: 0.72rem;\n min-height: 26px;\n height: 26px;\n padding: 0.15rem 0.4rem;\n border-radius: 4px;\n line-height: 1.2;\n border: 1px solid #d8dee6;\n background-color: #fff;\n color: #334155;\n }\n\n .work-flow-card-body ::ng-deep .form-control::placeholder {\n color: #94a3b8;\n opacity: 1;\n font-size: 0.7rem;\n }\n\n .work-flow-card-body ::ng-deep textarea.form-control {\n height: auto !important;\n min-height: 3.25rem;\n max-width: 100%;\n }\n\n .work-flow-card-body ::ng-deep .invalid-feedback {\n font-size: 0.65rem;\n margin-top: 0.1rem;\n }\n\n @media (max-width: 400px) {\n .work-flow-card {\n max-width: 100%;\n }\n\n .work-flow-card-body ::ng-deep .form-control {\n max-width: 100%;\n }\n }\n\n</style>","import { Component, OnDestroy, OnInit, inject } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { FormsModule } from \"@angular/forms\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { NgSelectModule } from \"@ng-select/ng-select\";\nimport { SharedModule } from \"../../shared/shared.module\";\nimport { TopupAndBillpaymentService } from \"../../services/topup-and-billpayment.service\";\nimport { TranslationService } from \"../../services/translation.service\";\nimport { isNotNull } from \"../../utils\";\nimport { SdkStateService } from \"../../services/sdk-state.service\";\n\nconst REGION_COMMUNE_DATA = {\n data: {\n region: [\n { nom: \"Conakry\", id: 1, commune: [{ nom: \"Kaloum\", id: 1 }, { nom: \"Dixinn\", id: 2 }, { nom: \"Matam\", id: 3 }, { nom: \"Matoto\", id: 4 }, { nom: \"Ratoma\", id: 5 }, { nom: \"Kassa\", id: 6 }, { nom: \"Coyah\", id: 7 }] },\n { nom: \"Boke\", id: 2, commune: [{ nom: \"Boke\", id: 8 }, { nom: \"Boffa\", id: 9 }, { nom: \"Fria\", id: 10 }, { nom: \"Gaoual\", id: 11 }, { nom: \"Koundara\", id: 12 }] },\n { nom: \"Kindia\", id: 3, commune: [{ nom: \"Kindia\", id: 13 }, { nom: \"Dubreka\", id: 14 }, { nom: \"Forecariah\", id: 15 }, { nom: \"Telimele\", id: 16 }] },\n { nom: \"Mamou\", id: 4, commune: [{ nom: \"Mamou\", id: 17 }, { nom: \"Pita\", id: 18 }, { nom: \"Dalaba\", id: 19 }] },\n { nom: \"Labe\", id: 5, commune: [{ nom: \"Labe\", id: 20 }, { nom: \"Koubia\", id: 21 }, { nom: \"Lelouma\", id: 22 }, { nom: \"Mali\", id: 23 }, { nom: \"Tougue\", id: 24 }] },\n { nom: \"Faranah\", id: 6, commune: [{ nom: \"Faranah\", id: 25 }, { nom: \"Dabola\", id: 26 }, { nom: \"Dinguiraye\", id: 27 }, { nom: \"Kissidougou\", id: 28 }] },\n { nom: \"Kankan\", id: 7, commune: [{ nom: \"Kankan\", id: 29 }, { nom: \"Kerouane\", id: 30 }, { nom: \"Kouroussa\", id: 31 }, { nom: \"Mandiana\", id: 32 }, { nom: \"Siguiri\", id: 33 }] },\n { nom: \"N Zerekore\", id: 8, commune: [{ nom: \"N Zerekore\", id: 34 }, { nom: \"Beyla\", id: 35 }, { nom: \"Guekedou\", id: 36 }, { nom: \"Lola\", id: 37 }, { nom: \"Macenta\", id: 38 }, { nom: \"Yomou\", id: 39 }] },\n ],\n },\n};\n\n@Component({\n selector: \"sdk-region-commune\",\n templateUrl: \"./region-commune.component.html\",\n standalone: true,\n imports: [SharedModule, NgSelectModule, FormsModule],\n})\nexport class RegionCommuneComponent implements OnInit, OnDestroy {\n private topupAndBillpaymentService = inject(TopupAndBillpaymentService);\n private toasterService = inject(ToastrService);\n private router = inject(Router);\n private translationService = inject(TranslationService);\n private sdkState = inject(SdkStateService, { optional: true });\n\n destroy$ = new Subject<boolean>();\n\n regions: Array<{ nom: string; id: number; commune: Array<{ nom: string; id: number }> }> = [];\n communes: Array<{ nom: string; id: number }> = [];\n\n selectedRegion: { nom: string; id: number; commune: Array<{ nom: string; id: number }> } | null = null;\n selectedCommune: { nom: string; id: number } | null = null;\n\n workFlowUserInput: Array<any> = [];\n vendorProvider: any = null;\n vendorCategory: any = null;\n\n constructor() {\n this.topupAndBillpaymentService.vendorProvider.pipe(takeUntil(this.destroy$)).subscribe((data) => {\n if (isNotNull(data)) {\n this.vendorProvider = data;\n }\n });\n\n this.topupAndBillpaymentService.vendorCategory.pipe(takeUntil(this.destroy$)).subscribe((data) => {\n if (isNotNull(data)) {\n this.vendorCategory = data;\n }\n });\n\n this.topupAndBillpaymentService.workFlowUserInput.pipe(takeUntil(this.destroy$)).subscribe((data: any) => {\n if (isNotNull(data) && Array.isArray(data)) {\n this.workFlowUserInput = [...data];\n } else {\n this.workFlowUserInput = [];\n }\n });\n }\n\n ngOnInit(): void {\n this.regions = REGION_COMMUNE_DATA?.data?.region ?? [];\n if (!isNotNull(this.vendorProvider)) {\n this.back();\n }\n }\n\n compareRegion = (a: any, b: any) => a?.id === b?.id;\n compareCommune = (a: any, b: any) => a?.id === b?.id;\n\n onRegionChange(region: { nom: string; id: number; commune: Array<{ nom: string; id: number }> } | null): void {\n this.selectedRegion = region;\n this.selectedCommune = null;\n this.communes = region?.commune ?? [];\n }\n\n onCommuneChange(commune: { nom: string; id: number } | null): void {\n this.selectedCommune = commune;\n }\n\n submit(): void {\n if (!this.selectedRegion) {\n this.toasterService.warning(this.translationService.translate(\"LABEL_PLEASE_SELECT_REGION\"));\n return;\n }\n if (!this.selectedCommune) {\n this.toasterService.warning(this.translationService.translate(\"LABEL_PLEASE_SELECT_COMMUNE\"));\n return;\n }\n\n const keysToReplace = [\"region_name\", \"region_id\", \"commune_name\", \"commune_id\"];\n const existing = this.workFlowUserInput.filter((item) => !keysToReplace.includes(item?.key));\n const userInputData = [\n ...existing,\n { key: \"region_name\", name: this.selectedRegion.nom, label: \"region_name\" },\n { key: \"region_id\", id: this.selectedRegion.id, label: \"region_id\" },\n { key: \"commune_name\", name: this.selectedCommune.nom, label: \"commune_name\" },\n { key: \"commune_id\", id: this.selectedCommune.id, label: \"commune_id\" },\n ];\n this.topupAndBillpaymentService.saveWorkflowUserInput(userInputData);\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"WORKFLOW\");\n } else {\n this.router.navigateByUrl(\"/operations/topup-and-billpayment/topup-details\");\n }\n }\n\n back(): void {\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"PROVIDER\");\n } else {\n this.router.navigateByUrl(\"/operations/topup-and-billpayment\");\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n}\n","<div class=\"content region-commune-content\">\n <header class=\"page-header region-commune-page-header d-flex align-items-center justify-content-between container-fluid\">\n <h1 class=\"page-title m-0\">{{ 'LABEL_UTILITIES' | translate }}</h1>\n <button type=\"button\" class=\"btn btn-outline-secondary btn-sm\" (click)=\"back()\">\n <i class=\"fas fa-angle-left me-1\"></i>{{ 'COMMON_LABEL_BACK' | translate }}\n </button>\n </header>\n\n <section class=\"page-content container-fluid\">\n <div class=\"card region-commune-card\">\n <div class=\"card-header region-commune-card-header\">\n <h4 class=\"card-title region-commune-category-title m-0\">{{ vendorCategory?.category_name }}</h4>\n </div>\n <div class=\"tab-content\">\n <div class=\"tab-pane fadeIn active show\">\n <form role=\"form\" class=\"form-horizontal\" (ngSubmit)=\"submit()\">\n <div class=\"card-body region-commune-card-body\">\n <div class=\"row justify-content-center\">\n <div class=\"col-12 col-md-10 col-lg-8 region-commune-select-col\">\n <div class=\"region-select-wrapper d-flex align-items-center justify-content-center flex-wrap gap-2 mb-2\">\n <label class=\"region-label mb-0\">{{ 'LABEL_SELECT_REGION' | translate }}</label>\n <ng-select\n [placeholder]=\"'LABEL_SELECT_REGION' | translate\"\n bindLabel=\"nom\"\n [items]=\"regions\"\n [(ngModel)]=\"selectedRegion\"\n name=\"region\"\n [compareWith]=\"compareRegion\"\n clearable=\"true\"\n class=\"region-select\"\n (change)=\"onRegionChange($event)\">\n </ng-select>\n </div>\n <div class=\"region-select-wrapper d-flex align-items-center justify-content-center flex-wrap gap-2\">\n <label class=\"region-label mb-0\">{{ 'LABEL_SELECT_COMMUNE' | translate }}</label>\n <ng-select\n [placeholder]=\"'LABEL_SELECT_COMMUNE' | translate\"\n bindLabel=\"nom\"\n [items]=\"selectedRegion?.commune ?? []\"\n [(ngModel)]=\"selectedCommune\"\n name=\"commune\"\n [disabled]=\"!selectedRegion\"\n [compareWith]=\"compareCommune\"\n clearable=\"true\"\n class=\"region-select\"\n (change)=\"onCommuneChange($event)\">\n </ng-select>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-footer region-commune-footer bg-light d-flex justify-content-end gap-2\">\n <button type=\"button\" class=\"btn btn-secondary btn-sm\" (click)=\"back()\">\n {{ 'COMMON_LABEL_CANCEL' | translate }}\n </button>\n <button type=\"submit\" class=\"btn btn-primary btn-sm\" [disabled]=\"!selectedCommune\">\n {{ 'COMMON_LABEL_SUBMIT' | translate }}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n </section>\n</div>\n\n<style>\n .region-commune-content {\n overflow: visible;\n min-height: auto;\n }\n\n .region-commune-page-header {\n margin-bottom: 0.5rem;\n }\n\n .region-commune-select-col {\n margin-top: 0;\n }\n\n .region-commune-card {\n border: 1px solid #e9ecef;\n border-radius: 8px;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);\n overflow: visible;\n min-height: 0;\n }\n\n .region-commune-card-header {\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n padding: 0.5rem 0.75rem;\n font-weight: 600;\n font-size: 0.9rem;\n color: #212529;\n }\n\n .region-commune-category-title {\n font-size: 0.95rem;\n font-weight: 600;\n }\n\n .region-commune-card-body {\n padding: 0.65rem 0.75rem;\n overflow: visible;\n min-height: 0;\n }\n\n .page-title {\n font-size: 1rem;\n font-weight: 600;\n color: #1a1a1a;\n }\n\n .region-select-wrapper {\n padding: 0.15rem 0;\n }\n\n .region-label {\n flex: 0 0 auto;\n min-width: 108px;\n text-align: right;\n font-weight: 500;\n font-size: 0.8rem;\n color: #1e3a5f;\n }\n\n .region-select {\n width: 100%;\n max-width: 190px;\n min-width: 0;\n font-size: 0.75rem;\n }\n\n .region-select ::ng-deep .ng-select-container {\n align-items: center;\n min-height: 26px;\n height: 26px;\n font-size: 0.75rem;\n border-radius: 4px;\n }\n\n .region-select ::ng-deep .ng-value-container {\n padding-left: 0.4rem;\n padding-top: 0;\n padding-right: 0;\n }\n\n .region-select ::ng-deep .ng-value-container .ng-value {\n font-size: 0.75rem;\n line-height: 1.2;\n }\n\n .region-select ::ng-deep .ng-input {\n top: 0;\n padding-left: 0.4rem;\n }\n\n .region-select ::ng-deep .ng-input > input {\n font-size: 0.75rem;\n min-height: 24px;\n padding: 0.1rem 0;\n }\n\n .region-select ::ng-deep .ng-placeholder {\n font-size: 0.75rem;\n line-height: 1.2;\n color: #9ca3af;\n }\n\n .region-select ::ng-deep .ng-arrow-wrapper {\n width: 20px;\n padding-right: 0.35rem;\n }\n\n .region-select ::ng-deep .ng-clear-wrapper {\n width: 18px;\n }\n\n .region-commune-footer {\n padding: 0.35rem 0.6rem;\n }\n\n .region-commune-footer .btn {\n font-size: 0.75rem;\n padding: 0.2rem 0.55rem;\n line-height: 1.2;\n border-radius: 4px;\n }\n</style>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'sdk-shimmer-card',\n template: `\n <div class=\"row\">\n @if (hasCustomCount) {\n @for (i of customCardIndexes; track i) {\n <div class=\"col-xl-4\">\n <div class=\"card bills-hover-box\">\n <div class=\"card-body\">\n <div class=\"shimmer shimmer-effect mb-2\"></div>\n <div class=\"shimmer shimmer-effect mb-1\"></div>\n <div class=\"shimmer shimmer-effect\"></div>\n </div>\n </div>\n </div>\n }\n } @else {\n @for (i of defaultCardIndexes; track i) {\n <div class=\"col-xl-4\">\n <div class=\"card bills-hover-box\">\n <div class=\"card-body\">\n <div class=\"shimmer shimmer-effect mb-2\"></div>\n <div class=\"shimmer shimmer-effect mb-1\"></div>\n <div class=\"shimmer shimmer-effect\"></div>\n </div>\n </div>\n </div>\n }\n }\n </div>\n `,\n styles: [\n `\n .shimmer-effect {\n border-radius: 10px;\n background-color: #f6f7f8;\n background-image: linear-gradient(\n to right,\n #f6f7f8 0,\n #edeef1 20%,\n #f6f7f8 40%,\n #f6f7f8 100%\n );\n background-position: 0 0;\n background-repeat: no-repeat;\n background-size: 1000px 1000px;\n animation: shimmerEffect 1s linear infinite forwards;\n }\n\n .shimmer {\n display: inline-block;\n width: 100%;\n height: 12px;\n }\n\n @keyframes shimmerEffect {\n 0% {\n background-position: -1000px 0;\n }\n 100% {\n background-position: 1000px 0;\n }\n }\n `,\n ],\n standalone: true,\n})\nexport class ShimmerCardComponent {\n readonly defaultCardIndexes = [0, 1, 2];\n customCardIndexes: number[] = [];\n hasCustomCount = false;\n\n @Input() set config(value: { cardCount?: number } | null | undefined) {\n const count = value?.cardCount;\n const normalized = typeof count === 'number' && Number.isFinite(count) ? Math.floor(count) : undefined;\n const safeCount = normalized != null && normalized > 0 ? normalized : undefined;\n\n this.hasCustomCount = safeCount != null;\n this.customCardIndexes = this.hasCustomCount\n ? Array.from({ length: safeCount! }, (_, i) => i)\n : [];\n }\n}\n\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, inject } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { NgSelectModule } from \"@ng-select/ng-select\";\nimport { FormlyBootstrapModule } from \"@ngx-formly/bootstrap\";\nimport { FormlyModule } from \"@ngx-formly/core\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { NoDataComponent } from \"../../common/no-data/no-data.component\";\nimport { CommonLoaderComponent } from \"../../common/common-loader/common-loader.component\";\nimport { DataService } from \"../../services/data.service\";\nimport { TopupAndBillpaymentService } from \"../../services/topup-and-billpayment.service\";\nimport { SharedModule } from \"../../shared/shared.module\";\nimport { isNotNull } from \"../../utils\";\nimport { PRODUCT_PRICE_TYPE, PROVIDER_CATEGORY_TYPE, SORTING_ORDER } from \"../../base-data\";\nimport { BillWorkflowComponent } from \"../bill-workflow/bill-workflow.component\";\nimport { ShimmerCardComponent } from \"../../common/shimmer-effect/shimmer-card/shimmer-card.component\";\nimport { SdkStateService } from \"../../services/sdk-state.service\";\n\n@Component({\n selector: \"sdk-vendor-products\",\n templateUrl: \"./vendor-products.component.html\",\n standalone: true,\n imports: [\n SharedModule,\n NgSelectModule,\n FormsModule,\n ReactiveFormsModule,\n FormlyBootstrapModule,\n FormlyModule,\n NoDataComponent,\n // CommonLoaderComponent,\n BillWorkflowComponent,\n ShimmerCardComponent\n]\n})\nexport class VendorProductsComponent implements OnInit, OnDestroy {\n private dataService = inject(DataService);\n private topupAndBillpaymentService = inject(TopupAndBillpaymentService);\n private router = inject(Router);\n private activatedRoute = inject(ActivatedRoute);\n private toastrService = inject(ToastrService);\n private sdkState = inject(SdkStateService);\n @Output() workflowCompleted = new EventEmitter<any>();\n @Input() billData: any = null;\n\n currency: string | null = null;\n showLoader: boolean = false;\n\n productsArray: Array<any> = [];\n vendorProvider: any = null;\n vendorCategory: any = null;\n workFlowUserInput: any = null;\n\n PRODUCT_PRICE_TYPE = PRODUCT_PRICE_TYPE;\n\n showWorkflowComponent: boolean = false;\n selectedProductForWorkflow: any = null;\n workflowScreens: any[] = [];\n currentScreenIndex: number = 0;\n allWorkflowData: any = {};\n\n destroy$: Subject<boolean> = new Subject<boolean>();\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n this.dataService.currentCompanyCurrency.subscribe(currency => {\n if (isNotNull(currency)) {\n this.currency = currency?.currency_symbol;\n }\n });\n\n this.topupAndBillpaymentService.vendorProvider.pipe(takeUntil(this.destroy$)).subscribe(data => {\n if (isNotNull(data)) {\n this.vendorProvider = data;\n }\n });\n\n this.topupAndBillpaymentService.vendorCategory.pipe(takeUntil(this.destroy$)).subscribe((response) => {\n if (isNotNull(response)) {\n this.vendorCategory = response;\n }\n });\n\n this.topupAndBillpaymentService.workFlowUserInput.pipe(takeUntil(this.destroy$)).subscribe(data => {\n if (isNotNull(data)) {\n this.workFlowUserInput = data;\n }\n });\n\n this.topupAndBillpaymentService.workflowScreens.pipe(takeUntil(this.destroy$)).subscribe((screens: any) => {\n if (isNotNull(screens)) {\n this.workflowScreens = screens;\n }\n });\n\n this.topupAndBillpaymentService.currentScreenStep.pipe(takeUntil(this.destroy$)).subscribe((index: any) => {\n if (index !== undefined && index !== null) {\n this.currentScreenIndex = index;\n }\n });\n\n this.topupAndBillpaymentService.workflowData.pipe(takeUntil(this.destroy$)).subscribe((data: any) => {\n if (isNotNull(data)) {\n this.allWorkflowData = data;\n }\n });\n }\n\n ngOnInit(): void {\n if (!isNotNull(this.vendorProvider)) {\n this.back();\n } else {\n this.showLoader = true;\n this.getProducts();\n }\n }\n\n getProducts() {\n const params: any = {\n // vendor_category_id: this.vendorProvider?.provider_category_id,\n // vendor_id: this.vendorProvider?.vendor_id,\n vendor_provider_id: this.vendorProvider?.id,\n };\n\n this.topupAndBillpaymentService.getTopupAndBillpaymentVendorPlans(params).subscribe(\n {\n next: res => {\n if (res?.success) {\n this.productsArray = res?.data?.vendor_product || [];\n\n // If only one product is found, automatically select it and proceed\n // Keep loader visible during auto-selection\n if (this.productsArray.length === 1) {\n this.handleProductClick(this.productsArray[0]);\n } else {\n // Hide loader if multiple products so user can see the list\n this.showLoader = false;\n }\n } else {\n this.showLoader = false;\n this.toastrService.error(res?.error[0]);\n }\n },\n },\n );\n }\n\n handleProductClick(data: any) {\n this.topupAndBillpaymentService.saveVendorPlan(data);\n this.selectedProductForWorkflow = data;\n this.checkWorkflowForProduct(data);\n }\n\n checkWorkflowForProduct(productData: any) {\n this.showLoader = true;\n const params: any = {\n category_key: this.vendorCategory?.category_key,\n provider_code: this.vendorProvider?.vendor_provider_reference_code,\n sorting: `\"display_order\": \"${SORTING_ORDER.ASCENDING}\"`,\n };\n\n if (this.vendorCategory?.category_type === PROVIDER_CATEGORY_TYPE.RECHARGE) {\n params[\"vendor_id\"] = this.vendorProvider?.vendor_id;\n }\n\n this.topupAndBillpaymentService.getTopupAndBillpaymentWorkFlowDetails(params).subscribe({\n next: (res) => {\n this.showLoader = false;\n if (res?.success) {\n const allWorkflowScreens = res?.data?.workflow_details || [];\n const additionalScreens = allWorkflowScreens.filter(\n (workflow: any) => workflow?.display_order > 1\n );\n\n if (additionalScreens.length > 0) {\n this.workflowScreens = additionalScreens;\n this.selectedProductForWorkflow = {\n ...this.selectedProductForWorkflow,\n vendor_provider_reference_code: this.vendorProvider?.vendor_provider_reference_code,\n provider_name: this.vendorProvider?.provider_name,\n category_key: this.vendorCategory?.category_key\n };\n\n this.topupAndBillpaymentService.saveWorkflowScreens(additionalScreens);\n this.topupAndBillpaymentService.setCurrentScreenStep(0);\n this.topupAndBillpaymentService.saveWorkflowData({\n workflowScreens: additionalScreens,\n currentScreenIndex: 0,\n selectedProduct: this.selectedProductForWorkflow\n });\n\n this.showWorkflowComponent = true;\n } else {\n // No additional workflow screens, prepare product data with all necessary details\n const productWithDetails = {\n ...productData,\n vendor_provider_reference_code: this.vendorProvider?.vendor_provider_reference_code,\n provider_name: this.vendorProvider?.provider_name,\n category_key: this.vendorCategory?.category_key,\n vendor_id: this.vendorProvider?.vendor_id,\n provider_category_id: this.vendorProvider?.provider_category_id\n };\n\n // Save product with all details\n this.topupAndBillpaymentService.saveVendorPlan(productWithDetails);\n\n // Clear any existing workflow data since there are no workflow screens\n this.topupAndBillpaymentService.saveWorkflowScreens([]);\n this.topupAndBillpaymentService.saveWorkflowData(null);\n if (this.sdkState.isActive()) {\n this.sdkState.setStep(\"REVIEW\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/plan-review\"\n );\n }\n // this.proceedToBillReview();\n }\n } else {\n const productWithDetails = {\n ...productData,\n vendor_provider_reference_code: this.vendorProvider?.vendor_provider_reference_code,\n provider_name: this.vendorProvider?.provider_name,\n category_key: this.vendorCategory?.category_key,\n vendor_id: this.vendorProvider?.vendor_id,\n provider_category_id: this.vendorProvider?.provider_category_id\n };\n // Save product with all details\n this.topupAndBillpaymentService.saveVendorPlan(productWithDetails);\n\n // Clear any existing workflow data since there are no workflow screens\n this.topupAndBillpaymentService.saveWorkflowScreens([]);\n this.topupAndBillpaymentService.saveWorkflowData(null);\n if (this.sdkState.isActive()) {\n this.sdkState.setStep(\"REVIEW\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/plan-review\"\n );\n }\n }\n },\n error: (error) => {\n this.showLoader = false;\n this.toastrService.error(error?.error[0]);\n }\n });\n }\n\n proceedToBillReview() {\n // If we have a selected product, navigate to review with product\n if (this.selectedProductForWorkflow) {\n // Ensure product is saved in service\n this.topupAndBillpaymentService.saveVendorPlan(this.selectedProductForWorkflow);\n\n this.workflowCompleted.emit({\n action: 'proceed_to_review',\n data: this.selectedProductForWorkflow\n });\n } else {\n // Original bill review flow\n this.topupAndBillpaymentService.saveBillData({\n selectedBill: this.selectedProductForWorkflow,\n user_info: this.billData?.user_info\n });\n\n this.workflowCompleted.emit({\n action: 'proceed_to_bill_review',\n data: this.billData\n });\n }\n }\n\n onWorkflowCompleted(event: any) {\n if (event.action === 'proceed_to_review') {\n this.showWorkflowComponent = false;\n // Product is already saved in service, just navigate\n if (this.sdkState.isActive()) {\n this.sdkState.setStep(\"REVIEW\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/plan-review\"\n );\n }\n } else if (event.action === 'get_bill_screen') {\n this.showWorkflowComponent = false;\n if (this.sdkState.isActive()) {\n this.sdkState.setStep(\"BILLS\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/bills\"\n );\n }\n } else if (event.action === 'get_plan_screen') {\n this.showWorkflowComponent = false;\n if (this.sdkState.isActive()) {\n this.sdkState.setStep(\"PLANS\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/plans\"\n );\n }\n }\n }\n\n back() {\n if (this.sdkState.isActive()) {\n /* Same as host app: `/operations/topup-and-billpayment` → category grid */\n this.sdkState.setStep(\"CATEGORY\");\n } else {\n this.router.navigateByUrl(\"/operations/topup-and-billpayment\");\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n isFixedPrice(item: any): boolean {\n const type = String(item?.product_price_type ?? \"\").trim().toUpperCase();\n return (\n type === String(PRODUCT_PRICE_TYPE.FIXED).toUpperCase() ||\n type === \"1\" ||\n type === \"FIXED\"\n );\n }\n}\n\n","@if (!showWorkflowComponent) {\n <div class=\"content vendor-products-page\">\n <header class=\"vendor-products-header\">\n <h1 class=\"vendor-products-heading\">{{ 'LABEL_PLANS' | translate }}</h1>\n </header>\n\n <section class=\"page-content container-fluid vendor-products-section\">\n <div class=\"card vendor-products-shell border-0\">\n <div class=\"card-body vendor-products-body\">\n @if (showLoader) {\n <sdk-shimmer-card [config]=\"{ cardCount: 6 }\"></sdk-shimmer-card>\n }\n\n @if (!showLoader && productsArray.length > 0) {\n <div class=\"row g-3 vendor-products-grid\">\n @for (item of productsArray; track item) {\n <div class=\"col-sm-6 col-lg-4\">\n <div\n class=\"card vendor-product-card shadow-none\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"handleProductClick(item)\"\n (keyup.enter)=\"handleProductClick(item)\">\n <div class=\"card-body vendor-product-card-inner\">\n <h2 class=\"vendor-product-title\">{{ item?.product_name }}</h2>\n\n <div class=\"vendor-product-block\">\n <span class=\"vendor-product-label\">{{ 'COMMON_LABEL_DESCRIPTION' | translate }}:</span>\n <span class=\"vendor-product-value text-muted\">\n {{ item?.product_description || '—' }}\n </span>\n </div>\n\n @if (isFixedPrice(item)) {\n <div class=\"vendor-product-block\">\n <span class=\"vendor-product-label\">{{ 'COMMON_LABEL_AMOUNT' | translate }}:</span>\n <strong class=\"vendor-product-amount\">\n {{ item?.product_fixed_price || 0.0 | price: { currency } }}\n </strong>\n </div>\n } @else {\n <div class=\"vendor-product-block\">\n <span class=\"vendor-product-label\">{{ 'LABEL_MINIMUM_AMOUNT' | translate }}:</span>\n <strong class=\"vendor-product-amount\">\n {{ item?.product_range_price?.min || 0.0 | price: { currency } }}\n </strong>\n </div>\n <div class=\"vendor-product-block\">\n <span class=\"vendor-product-label\">{{ 'LABEL_MAXIMUM_AMOUNT' | translate }}:</span>\n <strong class=\"vendor-product-amount\">\n {{ item?.product_range_price?.max || 0.0 | price: { currency } }}\n </strong>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n @if (!showLoader && productsArray.length === 0) {\n <sdk-no-data icon=\"la-shopping-cart\" title=\"LABEL_PRODUCTS_NOT_AVAILABLE\"></sdk-no-data>\n }\n </div>\n <div class=\"card-footer vendor-products-footer bg-white border-top\">\n <div class=\"d-flex justify-content-end\">\n <button type=\"button\" class=\"btn btn-outline-secondary btn-sm vendor-products-back\" (click)=\"back()\">\n {{ 'COMMON_LABEL_BACK' | translate }}\n </button>\n </div>\n </div>\n </div>\n </section>\n </div>\n} @else {\n <sdk-bill-workflow\n [billData]=\"selectedProductForWorkflow\"\n (workflowCompleted)=\"onWorkflowCompleted($event)\">\n </sdk-bill-workflow>\n}\n\n<style>\n .vendor-products-page {\n overflow: visible;\n }\n\n .vendor-products-header {\n margin-bottom: 0.75rem;\n padding-left: 0.15rem;\n }\n\n .vendor-products-heading {\n font-size: 1.35rem;\n font-weight: 700;\n color: #1e3a5f;\n margin: 0;\n letter-spacing: -0.02em;\n }\n\n .vendor-products-section {\n padding-left: 0;\n padding-right: 0;\n }\n\n .vendor-products-shell {\n border: 1px solid #dce3eb !important;\n border-radius: 10px;\n background: #fff;\n overflow: hidden;\n }\n\n .vendor-products-body {\n padding: 1.25rem 1.35rem 1.5rem;\n }\n\n .vendor-product-card {\n border: 1px solid #dce3eb;\n border-radius: 10px;\n cursor: pointer;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n background: #fff;\n }\n\n .vendor-product-card:hover {\n border-color: #9fb4c8;\n box-shadow: 0 2px 8px rgba(30, 58, 95, 0.08);\n }\n\n .vendor-product-card:focus {\n outline: 2px solid #6b8cae;\n outline-offset: 2px;\n }\n\n .vendor-product-card-inner {\n padding: 1rem 1.1rem 1.15rem;\n }\n\n .vendor-product-title {\n font-size: 0.95rem;\n font-weight: 700;\n color: #1e3a5f;\n margin: 0 0 0.85rem 0;\n line-height: 1.3;\n }\n\n .vendor-product-block {\n display: block;\n margin-bottom: 0.45rem;\n font-size: 0.8rem;\n line-height: 1.45;\n color: #1e3a5f;\n }\n\n .vendor-product-block:last-child {\n margin-bottom: 0;\n }\n\n .vendor-product-label {\n font-weight: 600;\n margin-right: 0.35rem;\n }\n\n .vendor-product-value {\n font-weight: 400;\n }\n\n .vendor-product-amount {\n font-weight: 700;\n color: #1e3a5f;\n }\n\n .vendor-products-footer {\n padding: 0.65rem 1.25rem 0.75rem;\n border-color: #e4e9ef !important;\n }\n\n .vendor-products-back {\n font-size: 0.8rem;\n color: #5a7a96;\n border-color: #c5d1dd;\n padding: 0.3rem 0.85rem;\n border-radius: 6px;\n }\n\n .vendor-products-back:hover {\n color: #1e3a5f;\n border-color: #9fb4c8;\n background: #f8fafc;\n }\n</style>\n","\nimport { Component, OnDestroy, OnInit, inject } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\nimport { NgSelectModule } from \"@ng-select/ng-select\";\nimport { FormlyBootstrapModule } from \"@ngx-formly/bootstrap\";\nimport { FormlyModule } from \"@ngx-formly/core\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { NoDataComponent } from \"../../common/no-data/no-data.component\";\nimport { DataService } from \"../../services/data.service\";\nimport { TopupAndBillpaymentService } from \"../../services/topup-and-billpayment.service\";\nimport { SharedModule } from \"../../shared/shared.module\";\nimport { isNotNull } from \"../../utils\";\nimport { SdkStateService } from \"../../services/sdk-state.service\";\nimport { PRODUCT_PRICE_TYPE } from \"../../base-data\";\n\n@Component({\n selector: \"sdk-vendor-plans\",\n templateUrl: \"./vendor-plans.component.html\",\n standalone:true,\n imports: [\n SharedModule,\n NgSelectModule,\n FormsModule,\n ReactiveFormsModule,\n FormlyBootstrapModule,\n FormlyModule,\n NoDataComponent\n]\n})\nexport class VendorPlansComponent implements OnInit, OnDestroy {\n private dataService = inject(DataService);\n private topupAndBillpaymentService = inject(TopupAndBillpaymentService);\n private router = inject(Router);\n private toastrService = inject(ToastrService);\n private sdkState = inject(SdkStateService, { optional: true });\n\n\n currency: string | null = null;\n showLoader: boolean = false;\n\n plansArray: Array<any> = [];\n vendorProvider: any = null;\n workFlowUserInput: any = null;\n\n destroy$: Subject<boolean> = new Subject<boolean>();\n PRODUCT_PRICE_TYPE = PRODUCT_PRICE_TYPE;\n\n /** Inserted by Angular inject() migration for backwards compatibility */\n constructor(...args: unknown[]);\n\n constructor() {\n this.dataService.currentCompanyCurrency.subscribe(currency => {\n if (isNotNull(currency)) {\n this.currency = currency?.currency_symbol;\n }\n });\n\n this.topupAndBillpaymentService.vendorProvider.pipe(takeUntil(this.destroy$)).subscribe(data => {\n if (isNotNull(data)) {\n this.vendorProvider = data;\n }\n });\n\n this.topupAndBillpaymentService.workFlowUserInput.pipe(takeUntil(this.destroy$)).subscribe(data => {\n if (isNotNull(data)) {\n this.workFlowUserInput = data;\n }\n });\n }\n\n ngOnInit(): void {\n if (!isNotNull(this.vendorProvider)) {\n this.back();\n } else {\n this.showLoader = true;\n this.getPlans();\n }\n }\n\n getPlans() {\n const params = {\n vendor_provider_id: this.vendorProvider?.id,\n };\n\n this.topupAndBillpaymentService.getTopupAndBillpaymentVendorPlans(params).subscribe(\n {\n next: res => {\n this.showLoader = false;\n if (res?.success) {\n this.plansArray = res?.data?.vendor_product || [];\n } else {\n this.toastrService.error(res?.error[0]);\n }\n },\n },\n );\n }\n\n handlePlanClick(data: any) {\n this.topupAndBillpaymentService.saveVendorPlan(data);\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"REVIEW\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/plan-review\"\n );\n }\n }\n\n\n back() {\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"WORKFLOW\");\n } else {\n this.router.navigateByUrl(\"/operations/topup-and-billpayment\");\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n isFixedPrice(item: any): boolean {\n const type = String(item?.product_price_type ?? \"\").trim().toUpperCase();\n return (\n type === String(PRODUCT_PRICE_TYPE.FIXED).toUpperCase() ||\n type === \"1\" ||\n type === \"FIXED\"\n );\n }\n}\n","<div class=\"content vendor-plans-page\">\n <header class=\"vendor-plans-header\">\n <h1 class=\"vendor-plans-heading\">{{ 'LABEL_PLANS' | translate }}</h1>\n </header>\n\n <section class=\"page-content container-fluid vendor-plans-section\">\n <div class=\"card vendor-plans-shell border-0\">\n <div class=\"card-body vendor-plans-body\">\n @if (plansArray.length > 0) {\n <div class=\"row g-3 vendor-plans-grid\">\n @for (item of plansArray; track item) {\n <div class=\"col-sm-6 col-lg-4\">\n <div class=\"card vendor-plan-card h-100 shadow-none\" role=\"button\" tabindex=\"0\"\n (click)=\"handlePlanClick(item)\" (keyup.enter)=\"handlePlanClick(item)\">\n <div class=\"card-body vendor-plan-card-inner\">\n <h2 class=\"vendor-plan-title\">{{ item?.product_name }}</h2>\n\n <div class=\"vendor-plan-block\">\n <span class=\"vendor-plan-label\">{{ 'COMMON_LABEL_DESCRIPTION' | translate }}:</span>\n <span class=\"vendor-plan-value text-muted\">{{ item?.product_description || '—' }}</span>\n </div>\n\n @if (isFixedPrice(item)) {\n <div class=\"vendor-plan-block\">\n <span class=\"vendor-plan-label\">{{ 'COMMON_LABEL_AMOUNT' | translate }}:</span>\n <strong class=\"vendor-plan-amount\">\n {{ item?.product_fixed_price || 0.0 | price: { currency } }}\n </strong>\n </div>\n } @else {\n <div class=\"vendor-plan-block\">\n <span class=\"vendor-plan-label\">{{ 'LABEL_MINIMUM_AMOUNT' | translate }}:</span>\n <strong class=\"vendor-plan-amount\">\n {{ item?.product_range_price?.min || 0.0 | price: { currency } }}\n </strong>\n </div>\n <div class=\"vendor-plan-block\">\n <span class=\"vendor-plan-label\">{{ 'LABEL_MAXIMUM_AMOUNT' | translate }}:</span>\n <strong class=\"vendor-plan-amount\">\n {{ item?.product_range_price?.max || 0.0 | price: { currency } }}\n </strong>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n @if (plansArray.length === 0) {\n <sdk-no-data title=\"LABEL_BILLS_NOT_AVAILABLE\"></sdk-no-data>\n }\n </div>\n\n <div class=\"card-footer vendor-plans-footer bg-white border-top\">\n <div class=\"d-flex justify-content-end\">\n <button type=\"button\" class=\"btn btn-outline-secondary btn-sm vendor-plans-back\" (click)=\"back()\">\n {{ 'COMMON_LABEL_BACK' | translate }}\n </button>\n </div>\n </div>\n </div>\n </section>\n</div>\n\n<style>\n .vendor-plans-page {\n overflow: visible;\n }\n\n .vendor-plans-header {\n margin-bottom: 0.75rem;\n padding-left: 0.15rem;\n }\n\n .vendor-plans-heading {\n font-size: 1.35rem;\n font-weight: 700;\n color: #1e3a5f;\n margin: 0;\n letter-spacing: -0.02em;\n }\n\n .vendor-plans-section {\n padding-left: 0;\n padding-right: 0;\n }\n\n .vendor-plans-shell {\n border: 1px solid #dce3eb !important;\n border-radius: 10px;\n background: #fff;\n overflow: hidden;\n }\n\n .vendor-plans-body {\n padding: 1.25rem 1.35rem 1.5rem;\n }\n\n .vendor-plan-card {\n border: 1px solid #dce3eb;\n border-radius: 10px;\n cursor: pointer;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n background: #fff;\n }\n\n .vendor-plan-card:hover {\n border-color: #9fb4c8;\n box-shadow: 0 2px 8px rgba(30, 58, 95, 0.08);\n }\n\n .vendor-plan-card:focus {\n outline: 2px solid #6b8cae;\n outline-offset: 2px;\n }\n\n .vendor-plan-card-inner {\n padding: 1rem 1.1rem 1.15rem;\n }\n\n .vendor-plan-title {\n font-size: 0.95rem;\n font-weight: 700;\n color: #1e3a5f;\n margin: 0 0 0.85rem 0;\n line-height: 1.3;\n }\n\n .vendor-plan-block {\n display: block;\n margin-bottom: 0.45rem;\n font-size: 0.8rem;\n line-height: 1.45;\n color: #1e3a5f;\n }\n\n .vendor-plan-block:last-child {\n margin-bottom: 0;\n }\n\n .vendor-plan-label {\n font-weight: 600;\n margin-right: 0.35rem;\n }\n\n .vendor-plan-value {\n font-weight: 400;\n }\n\n .vendor-plan-amount {\n font-weight: 700;\n color: #1e3a5f;\n }\n\n .vendor-plans-footer {\n padding: 0.65rem 1.25rem 0.75rem;\n border-color: #e4e9ef !important;\n }\n\n .vendor-plans-back {\n font-size: 0.8rem;\n color: #5a7a96;\n border-color: #c5d1dd;\n padding: 0.3rem 0.85rem;\n border-radius: 6px;\n }\n\n .vendor-plans-back:hover {\n color: #1e3a5f;\n border-color: #9fb4c8;\n background: #f8fafc;\n }\n</style>\n","\nimport { Component, OnDestroy, OnInit, inject } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { Router } from \"@angular/router\";\nimport { NgSelectModule } from \"@ng-select/ng-select\";\nimport { FormlyBootstrapModule } from \"@ngx-formly/bootstrap\";\nimport { FormlyModule } from \"@ngx-formly/core\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Subject, takeUntil } from \"rxjs\";\nimport { CommonLoaderComponent } from \"../../common/common-loader/common-loader.component\";\nimport { NoDataComponent } from \"../../common/no-data/no-data.component\";\nimport { DataService } from \"../../services/data.service\";\nimport { TopupAndBillpaymentService } from \"../../services/topup-and-billpayment.service\";\nimport { SharedModule } from \"../../shared/shared.module\";\nimport { isNotNull } from \"../../utils\";\nimport { SORTING_ORDER } from \"../../base-data\";\nimport { BillWorkflowComponent } from \"../bill-workflow/bill-workflow.component\";\nimport { SdkStateService } from \"../../services/sdk-state.service\";\n\n@Component({\n selector: \"sdk-view-bills\",\n templateUrl: \"./view-bills.component.html\",\n standalone:true,\n imports: [\n SharedModule,\n NgSelectModule,\n FormsModule,\n ReactiveFormsModule,\n FormlyBootstrapModule,\n FormlyModule,\n NoDataComponent,\n CommonLoaderComponent,\n BillWorkflowComponent\n]\n})\nexport class ViewBillsComponent implements OnInit, OnDestroy {\n private topupAndBillpaymentService = inject(TopupAndBillpaymentService);\n private toasterService = inject(ToastrService);\n private router = inject(Router);\n private dataService = inject(DataService);\n private sdkState = inject(SdkStateService, { optional: true });\n\n\n currency: string | null = null;\n showLoader: boolean = false;\n\n billsData: any = null;\n vendorProvider: any = null;\n workFlowUserInput: any = [];\n showWorkflowComponent: boolean = false;\n selectedBillForWorkflow: any = null;\n workflowScreens: any[] = [];\n currentScreenIndex: number = 0;\n allWorkflowData: any = {};\n\n destroy$: Subject<boolean> = new Subject<boolean>();\n objectKeys = Object.keys;\n providerCode: any;\n userAmount: any;\n vendorDetails: any;\n screenDetails: any;\n\n constructor(...args: unknown[]);\n\n constructor() {\n\n this.dataService.currentCompanyCurrency.subscribe(currency => {\n if (isNotNull(currency)) {\n this.currency = currency?.currency_symbol;\n }\n });\n\n this.topupAndBillpaymentService.vendorProvider.pipe(takeUntil(this.destroy$)).subscribe(data => {\n if (isNotNull(data)) {\n this.vendorProvider = data;\n this.getVendorDetails()\n\n }\n });\n\n this.topupAndBillpaymentService.workFlowUserInput.pipe(takeUntil(this.destroy$)).subscribe((data: any) => {\n if (isNotNull(data)) {\n this.workFlowUserInput = data;\n console.log(\"workFlowUserInput==>\", this.workFlowUserInput);\n if(data?.length > 1) {\n const latestNumericValue = data?.find((element: any) =>\n element['value'] && typeof element['value'] === 'number'\n )?.value || null;\n\n this.userAmount = latestNumericValue;\n } else {\n this.userAmount = this.billsData?.bill_amount;\n }\n }\n });\n\n this.topupAndBillpaymentService.workflowScreens.pipe(takeUntil(this.destroy$)).subscribe((screens: any) => {\n if (isNotNull(screens)) {\n this.workflowScreens = screens;\n }\n });\n\n this.topupAndBillpaymentService.currentScreenStep.pipe(takeUntil(this.destroy$)).subscribe((index: any) => {\n if (index) {\n this.currentScreenIndex = index;\n }\n });\n\n this.topupAndBillpaymentService.workflowData.pipe(takeUntil(this.destroy$)).subscribe((data: any) => {\n if (isNotNull(data)) {\n this.allWorkflowData = data;\n }\n });\n }\n\n ngOnInit(): void {\n if (!isNotNull(this.vendorProvider) || !isNotNull(this.workFlowUserInput)) {\n this.back();\n } else {\n this.showLoader = true;\n this.getBills();\n }\n }\n\n getVendorDetails() {\n this.topupAndBillpaymentService.getVendorDetailsById(this.vendorProvider?.vendor_id).subscribe(\n {\n next: res => {\n if (res?.success) {\n this.vendorDetails = res?.data?.vendor_master;\n this.providerCode=this.vendorDetails.vendor_code\n }\n },\n },\n );\n }\n\n getBills() {\n const payload: any = {\n provider_code: this.vendorProvider?.vendor_provider_reference_code,\n };\n\n const keysExcludedFromBillPayload = [\"region_name\", \"region_id\", \"commune_name\", \"commune_id\"];\n this.workFlowUserInput.forEach((field: any) => {\n if (field?.key != null && !keysExcludedFromBillPayload.includes(field.key)) {\n payload[field.key] = field?.value ?? field?.name ?? field?.id;\n }\n });\n\n this.topupAndBillpaymentService.getTopupBillDetails(payload).subscribe(\n {\n next: res => {\n this.showLoader = false;\n if (res?.success) {\n this.billsData = res?.data;\n } else {\n this.toasterService.error(res?.error[0]);\n }\n },\n },\n );\n }\n\n handleBillClick(data: any) {\n this.resumeWorkflow(data);\n }\n\n resumeWorkflow(billData: any) {\n this.selectedBillForWorkflow = billData;\n if (this.currentScreenIndex >= this.workflowScreens.length - 1) {\n this.showWorkflowComponent = false;\n this.topupAndBillpaymentService.saveBillData({\n selectedBill: billData,\n user_info: billData?.user_info\n });\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"REVIEW\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/bill-review\"\n );\n }\n } else {\n this.currentScreenIndex++;\n this.topupAndBillpaymentService.setCurrentScreenStep(this.currentScreenIndex);\n if (this.workflowScreens[this.currentScreenIndex]) {\n this.workFlowUserInput['display_order'] = this.workflowScreens[this.currentScreenIndex]?.display_order;\n }\n this.topupAndBillpaymentService.saveWorkflowData({\n workflowScreens: this.workflowScreens,\n currentScreenIndex: this.currentScreenIndex,\n selectedBill: this.selectedBillForWorkflow\n });\n\n this.showWorkflowComponent = true;\n }\n }\n\n checkWorkflowForBill(billData: any) {\n\n this.showLoader = true;\n const params = {\n provider_code: this.vendorProvider?.vendor_provider_reference_code,\n sorting: `\"display_order\": \"${SORTING_ORDER.ASCENDING}\"`,\n };\n\n this.topupAndBillpaymentService.getTopupAndBillpaymentWorkFlowDetails(params).subscribe({\n next: res => {\n this.showLoader = false;\n if (res?.success) {\n const allWorkflowScreens = res?.data?.workflow_details || [];\n const additionalScreens = allWorkflowScreens.filter(\n (workflow: any) => workflow?.display_order > this.currentScreenIndex\n );\n\n if (additionalScreens.length > 0) {\n this.topupAndBillpaymentService.saveWorkflowScreens(additionalScreens);\n this.topupAndBillpaymentService.setCurrentScreenStep(0);\n this.selectedBillForWorkflow = billData;\n this.showWorkflowComponent = true;\n this.workFlowUserInput['display_order'] = additionalScreens[0]?.display_order;\n } else {\n this.topupAndBillpaymentService.saveBillData({\n selectedBill: billData,\n user_info: this.billsData?.user_info,\n });\n this.workFlowUserInput['display_order'] = 1;\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"REVIEW\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/bill-review\"\n );\n }\n }\n } else {\n this.toasterService.error(res?.error[0]);\n this.topupAndBillpaymentService.saveBillData({\n selectedBill: billData,\n user_info: this.billsData?.user_info\n });\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"REVIEW\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/bill-review\"\n );\n }\n }\n },\n error: (error) => {\n this.showLoader = false;\n this.topupAndBillpaymentService.saveBillData({\n selectedBill: billData,\n user_info: this.billsData?.user_info\n });\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"REVIEW\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/bill-review\"\n );\n }\n }\n });\n }\n\n onWorkflowCompleted(event: any) {\n if (event.action === 'proceed_to_bill_review') {\n this.showWorkflowComponent = false;\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"REVIEW\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/bill-review\"\n );\n }\n } else if (event.action === 'get_bill_screen') {\n this.handleDynamicBillScreenAction(event);\n } else if (event.action === 'get_plan_screen') {\n this.handleDynamicPlanScreenAction(event);\n } else if (event.action === 'next_screen') {\n this.handleNextScreen();\n } else if (event.action === 'previous_screen') {\n this.handlePreviousScreen();\n }\n }\n\n handleNextScreen() {\n if (this.currentScreenIndex < this.workflowScreens.length - 1) {\n this.currentScreenIndex++;\n this.topupAndBillpaymentService.setCurrentScreenStep(this.currentScreenIndex);\n this.workFlowUserInput['display_order'] = this.workflowScreens[this.currentScreenIndex]?.display_order;\n } else {\n this.showWorkflowComponent = false;\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"REVIEW\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/bill-review\"\n );\n }\n }\n }\n\n handlePreviousScreen() {\n if (this.currentScreenIndex > 0) {\n this.currentScreenIndex--;\n this.topupAndBillpaymentService.setCurrentScreenStep(this.currentScreenIndex);\n this.workFlowUserInput['display_order'] = this.workflowScreens[this.currentScreenIndex]?.display_order;\n }\n }\n\n handleDynamicBillScreenAction(event: any) {\n if (event.workflowScreens) {\n this.topupAndBillpaymentService.saveWorkflowScreens(event.workflowScreens);\n }\n if (event.currentScreenIndex !== undefined) {\n this.topupAndBillpaymentService.setCurrentScreenStep(event.currentScreenIndex);\n this.currentScreenIndex = event.currentScreenIndex;\n }\n if (event.allWorkflowData) {\n this.topupAndBillpaymentService.saveWorkflowData(event.allWorkflowData);\n }\n this.showWorkflowComponent = false;\n }\n\n handleDynamicPlanScreenAction(event: any) {\n if (event.workflowScreens) {\n this.topupAndBillpaymentService.saveWorkflowScreens(event.workflowScreens);\n }\n if (event.currentScreenIndex !== undefined) {\n this.topupAndBillpaymentService.setCurrentScreenStep(event.currentScreenIndex);\n }\n if (event.allWorkflowData) {\n this.topupAndBillpaymentService.saveWorkflowData(event.allWorkflowData);\n }\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"PLANS\");\n } else {\n this.router.navigateByUrl(\n \"/operations/topup-and-billpayment/plans\"\n );\n }\n }\n\n back() {\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"WORKFLOW\");\n } else {\n this.router.navigateByUrl(\"/operations/topup-and-billpayment\");\n }\n }\n\n removeunderScore(value: string): string {\n return value.replace(/_/g, ' ');\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n}\n","@if (!showWorkflowComponent) {\n <div class=\"content\">\n <header class=\"page-header\">\n <div class=\"d-flex align-items-center flex-wrap\">\n <div class=\"mr-auto\">\n <h1>{{ 'LABEL_BILLS' | translate }}</h1>\n </div>\n <div class=\"m-l-10\">\n <a class=\"btn btn-secondary\" (click)=\"back()\">\n <i class=\"fa fa-angle-left\">&nbsp;</i> {{'COMMON_LABEL_BACK' |translate}}\n </a>\n </div>\n </div>\n </header>\n <section class=\"page-content container-fluid\">\n <div class=\"card m-0 border-0\">\n <div class=\"tab-content\">\n <div class=\"tab-pane fadeIn active show\">\n <div class=\"card-body\">\n <ng-container >\n <div class=\"row\">\n @for (item of billsData?.bills; track item) {\n <div class=\"col-xl-4\">\n <div class=\"card bills-hover-box\" (click)=\"handleBillClick(item)\">\n <div class=\"card-header border-0 p-t-20 justify-content-between\">\n <ul class=\"list-unstyled p-0 m-0\">\n <li class=\"py-2\">\n <label>\n {{ 'LABEL_BILL_NUMBER' | translate }}:\n </label>\n <label>\n @if (providerCode != 'DBA_POSTPAID_ELECTRICITY') {\n <strong class=\"ml-2\">\n {{item?.bill_number || \"-\"}}\n </strong>\n }\n @if (providerCode == 'DBA_POSTPAID_ELECTRICITY') {\n <strong class=\"ml-2\">\n {{item?.bill_code || \"-\"}}\n </strong>\n }\n </label>\n </li>\n @if (item?.bill_due_date) {\n <li class=\"py-2\">\n <label> {{ 'LABEL_DUE_DATE' | translate }}: </label>\n <strong class=\"ml-2\">\n {{ item?.bill_due_date.split(\" \")[0].toString() || \"-\" }}\n </strong>\n </li>\n }\n @if (item?.bill_date) {\n <li class=\"py-2\">\n <label> {{ 'LABEL_DUE_DATE' | translate }}: </label>\n <strong class=\"ml-2\">\n {{ item?.bill_date?.split(\" \")[0].toString()|| \"-\" }}\n </strong>\n </li>\n }\n\n <li class=\"py-2\">\n <label> {{ 'COMMON_LABEL_AMOUNT' | translate }}: </label>\n <strong class=\"ml-2\">\n {{ (userAmount || item?.bill_amount || 0.0) | price: { currency } }}\n </strong>\n <!-- @if (providerCode != 'DBA_PREPAID_ELECTRICITY' && providerCode != 'DBA_POSTPAID_ELECTRICITY') {\n <strong class=\"ml-2\"\n >\n {{ (userAmount || 0.0) | price: { currency } }}\n </strong>\n }\n @if (providerCode == 'DBA_PREPAID_ELECTRICITY') {\n <strong class=\"ml-2\"\n >\n {{ (userAmount || 0.0) | price: { currency } }}\n </strong>\n } -->\n </li>\n @if (item?.bill_meta_data) {\n @for (key of objectKeys(item?.bill_meta_data); track key) {\n <div>\n <label> {{ removeunderScore(key) }} : </label>\n <strong class=\"ml-2\">\n {{ item?.bill_meta_data[key] || \"-\"}}\n </strong> <br>\n </div>\n }\n }\n @if (item?.meta_data) {\n @for (key of objectKeys(item?.meta_data); track key) {\n <div>\n <label> {{ removeunderScore(key) }} : </label>\n <strong class=\"ml-2\">\n {{ \n (item?.meta_data[key] == 0 ? (0 | price: { currency }): item?.meta_data[key]) \n ?? \"-\"}}\n </strong> <br>\n </div>\n }\n }\n </ul>\n </div>\n </div>\n </div>\n }\n </div>\n </ng-container>\n @if ([null, undefined, {}].includes(billsData) || billsData?.bill?.length === 0) {\n <sdk-no-data title=\"LABEL_BILLS_NOT_AVAILABLE\"></sdk-no-data>\n }\n </div>\n </div>\n </div>\n </div>\n </section>\n </div>\n @if (showLoader) {\n <sdk-common-loader message=\"{{ 'LABEL_PLEASE_WAIT' | translate }}...\"></sdk-common-loader>\n }\n}\n@else {\n <sdk-bill-workflow\n [billData]=\"selectedBillForWorkflow\"\n (workflowCompleted)=\"onWorkflowCompleted($event)\">\n </sdk-bill-workflow>\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class UserProfileService {}\n\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'sdk-transaction-summary',\n standalone: true,\n imports: [CommonModule],\n template: ``,\n})\nexport class TransactionSummaryComponent {\n showLoader: boolean = false;\n\n getUserWalletBalance() {}\n\n getTransactionDetails(_txn: any) {}\n}\n\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, of } from 'rxjs';\nimport { PaymentsConfigService } from './payments-config.service';\nimport { UTILITY_PAYMENTS_AUTH_PROVIDER } from '../auth/utility-payments-auth.provider';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthService {\n private http = inject(HttpClient);\n private config = inject(PaymentsConfigService);\n private authProvider = inject(UTILITY_PAYMENTS_AUTH_PROVIDER, { optional: true });\n\n private get baseUrl(): string {\n const cfg = this.config.getConfig();\n return cfg?.baseUrl ?? '';\n }\n\n private get defaultHeaders(): Record<string, string> {\n const cfg = this.config.getConfig();\n const fromConfig = (cfg?.defaultHeaders ?? {}) as Record<string, string>;\n const fromAuth = this.buildAuthHeaders();\n return { ...fromAuth, ...fromConfig };\n }\n\n private buildAuthHeaders(): Record<string, string> {\n const headers: Record<string, string> = {};\n if (!this.authProvider) return headers;\n const token = this.authProvider.getToken();\n const companyId = this.authProvider.getCompanyId();\n const userId = this.authProvider.getUserId();\n if (token) headers['Authorization'] = token.startsWith('Bearer ') ? token : `${token}`;\n if (companyId != null) headers['companyid'] = String(companyId);\n if (userId != null) headers['userid'] = String(userId);\n return headers;\n }\n\n verifyOTP(_payload: any): Observable<any> {\n return of({ success: false });\n }\n\n sendOTP(_payload: any): Observable<any> {\n return of({ success: false });\n }\n\n createTransactionPin(_payload: any): Observable<any> {\n return of({ success: false });\n }\n\n verifyTransactionPin(payload: any): Observable<any> {\n return this.http.post(\n `${this.baseUrl}/auth/verify_transaction_pin`,\n payload,\n { headers: this.defaultHeaders }\n );\n }\n}\n\n","import { inject, signal } from '@angular/core';\nimport { AuthService } from '../../services/auth.service';\nimport { DataService } from '../../services/data.service';\nimport { TransactionService } from '../../services/transaction.service';\n\nexport class TransactionClass {\n protected authService = inject(AuthService);\n protected dataService = inject(DataService);\n protected transactionService = inject(TransactionService);\n\n intentedData = signal<any | null>(null);\n\n isTpinSessionNeeded(): boolean {\n return false;\n }\n}\n\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChildren,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { take } from 'rxjs/operators';\n\n@Component({\n selector: 'sdk-otp-input',\n standalone: true,\n imports: [CommonModule, FormsModule],\n template: `\n <ng-container *ngIf=\"segmented; else singleField\">\n <div class=\"otp-segments\" role=\"group\">\n <input\n *ngFor=\"let _ of segmentIndexes; let i = index; trackBy: trackByIndex\"\n #segInput\n class=\"otp-segment\"\n maxlength=\"1\"\n inputmode=\"numeric\"\n autocomplete=\"one-time-code\"\n spellcheck=\"false\"\n [type]=\"isPassword ? 'password' : 'text'\"\n (input)=\"onSegmentInput($event, i)\"\n (keydown)=\"onSegmentKeydown($event, i)\"\n (paste)=\"onSegmentPaste($event, i)\"\n (focus)=\"onSegmentFocus($event)\"\n />\n </div>\n </ng-container>\n <ng-template #singleField>\n <input\n class=\"form-control\"\n [attr.maxlength]=\"length\"\n name=\"utilityOtpSingle\"\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"emitSingle($event)\"\n [placeholder]=\"placeholder\"\n [type]=\"isPassword ? 'password' : 'text'\"\n />\n </ng-template>\n `,\n styles: [\n `\n :host {\n display: block;\n }\n .otp-segments {\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n justify-content: center;\n gap: 0.65rem;\n width: 100%;\n }\n .otp-segment {\n box-sizing: border-box;\n width: 3.25rem;\n height: 3.25rem;\n border: 1px solid #dee2e6;\n border-radius: 10px;\n text-align: center;\n font-size: 1.15rem;\n font-weight: 600;\n line-height: 1;\n padding: 0;\n color: #1f3f66;\n background: #fff;\n transition:\n border-color 0.15s ease,\n box-shadow 0.15s ease;\n }\n .otp-segment:focus {\n outline: none;\n border-color: #86b7fe;\n box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.2);\n }\n .otp-segment::placeholder {\n color: transparent;\n }\n `,\n ],\n})\nexport class OtpInputComponent implements OnChanges, OnInit, AfterViewInit {\n @Input() length = 4;\n @Input() placeholder = '';\n @Input() isPassword = false;\n /** When true, renders one rounded-rectangle input per digit. */\n @Input() segmented = false;\n /** Focus first segment after view init (useful inside modals). */\n @Input() autoFocus = false;\n\n @Output() inputChange = new EventEmitter<string>();\n @Output() otpChange = new EventEmitter<string>();\n\n @ViewChildren('segInput') segInputs!: QueryList<ElementRef<HTMLInputElement>>;\n\n value = '';\n segmentIndexes: number[] = [];\n digits: string[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['length']) {\n this.syncSegmentArrays();\n }\n }\n\n ngOnInit(): void {\n if (this.segmentIndexes.length !== this.length) {\n this.syncSegmentArrays();\n }\n }\n\n private syncSegmentArrays(): void {\n this.segmentIndexes = Array.from({ length: this.length }, (_, i) => i);\n this.digits = Array(this.length).fill('');\n }\n\n ngAfterViewInit(): void {\n if (!this.segmented || !this.autoFocus) {\n return;\n }\n const focusFirst = (): boolean => {\n const first = this.segInputs?.first?.nativeElement;\n if (first) {\n queueMicrotask(() => {\n first.focus();\n first.select();\n });\n return true;\n }\n return false;\n };\n if (focusFirst()) {\n return;\n }\n this.segInputs.changes.pipe(take(1)).subscribe(() => {\n focusFirst();\n });\n }\n\n trackByIndex(index: number): number {\n return index;\n }\n\n emitSingle(v: string): void {\n this.inputChange.emit(v);\n this.otpChange.emit(v);\n }\n\n private emitJoined(): void {\n const joined = this.digits.join('');\n this.value = joined;\n this.inputChange.emit(joined);\n this.otpChange.emit(joined);\n }\n\n onSegmentInput(event: Event, index: number): void {\n const input = event.target as HTMLInputElement;\n const digitsOnly = input.value.replace(/\\D/g, '');\n const char = digitsOnly.slice(-1) || '';\n this.digits[index] = char;\n input.value = char;\n this.emitJoined();\n if (char && index < this.length - 1) {\n this.focusSegment(index + 1);\n }\n }\n\n onSegmentKeydown(event: KeyboardEvent, index: number): void {\n const input = event.target as HTMLInputElement;\n if (event.key === 'Backspace') {\n if (input.value === '') {\n if (index > 0) {\n event.preventDefault();\n this.digits[index - 1] = '';\n this.syncSegmentDom(index - 1);\n this.emitJoined();\n this.focusSegment(index - 1);\n }\n }\n return;\n }\n if (event.key === 'ArrowLeft' && index > 0) {\n event.preventDefault();\n this.focusSegment(index - 1);\n } else if (event.key === 'ArrowRight' && index < this.length - 1) {\n event.preventDefault();\n this.focusSegment(index + 1);\n }\n }\n\n onSegmentPaste(event: ClipboardEvent, startIndex: number): void {\n event.preventDefault();\n const text = event.clipboardData?.getData('text') ?? '';\n const nums = text.replace(/\\D/g, '').slice(0, this.length);\n for (let i = 0; i < this.length; i++) {\n this.digits[i] = nums[i] ?? '';\n }\n this.emitJoined();\n const arr = this.segInputs?.toArray() ?? [];\n for (let i = 0; i < this.length; i++) {\n if (arr[i]) {\n arr[i].nativeElement.value = this.digits[i] ?? '';\n }\n }\n const nextEmpty = this.digits.findIndex((d) => !d);\n const target = nextEmpty === -1 ? this.length - 1 : nextEmpty;\n this.focusSegment(target);\n }\n\n onSegmentFocus(event: FocusEvent): void {\n const input = event.target as HTMLInputElement;\n queueMicrotask(() => input.select());\n }\n\n private focusSegment(i: number): void {\n const el = this.segInputs?.get(i)?.nativeElement;\n if (el) {\n queueMicrotask(() => {\n el.focus();\n el.select();\n });\n }\n }\n\n private syncSegmentDom(i: number): void {\n const el = this.segInputs?.get(i)?.nativeElement;\n if (el) {\n el.value = this.digits[i] ?? '';\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { OtpInputComponent } from './otp-input/otp-input.component';\nimport { CommonLoaderComponent } from './common-loader/common-loader.component';\n\n@NgModule({\n imports: [OtpInputComponent, CommonLoaderComponent],\n exports: [OtpInputComponent, CommonLoaderComponent],\n})\nexport class UtilityPaymentsUiModule {}\n\n","export function deviceInfo(): any {\n return {};\n}\n\n","export enum AuthenticationMethod {\n TPIN = 'TPIN',\n OTP = 'OTP',\n}\n\nexport interface TransactionIntentResponse {\n intent_id: string;\n auth_methods: AuthenticationMethod;\n}\n\n","export async function checkUserProfiles(_args: any): Promise<any> {\n return null;\n}\n\nexport async function calculateCharges(_args: any): Promise<any> {\n return null;\n}\n\nexport async function getUserConfigDetails(_args: any): Promise<any> {\n return null;\n}\n\n","/// <reference path=\"../globals.d.ts\" />\nimport Modal from 'bootstrap/js/dist/modal';\n\n/** Opens a Bootstrap 5 modal using the SDK-bundled Modal (no `window.bootstrap` required). */\nexport function openUtilityBootstrapModal(element: HTMLElement | null): boolean {\n if (!element) {\n return false;\n }\n try {\n Modal.getOrCreateInstance(element).show();\n return true;\n } catch {\n return false;\n }\n}\n\n/** Hides a modal that was opened with this SDK’s bundled Bootstrap `Modal` instance. */\nexport function closeUtilityBootstrapModal(element: HTMLElement | null): boolean {\n if (!element) {\n return false;\n }\n try {\n const inst = Modal.getInstance(element);\n if (!inst) {\n return false;\n }\n inst.hide();\n return true;\n } catch {\n return false;\n }\n}\n","/// <reference path=\"../../globals.d.ts\" />\ndeclare let swal: any;\nimport { Component, OnDestroy, OnInit, ViewChild, inject } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { firstValueFrom, lastValueFrom, Subject, takeUntil } from \"rxjs\";\nimport {\n COMPANY_CONFIG_MODULES_MASTER,\n OTP_TYPES,\n PAYMENT_MODE,\n PRODUCT_MASTER_DICT,\n PROVIDER_CATEGORY_TYPE,\n PROVIDER_CATEGORY_TYPE_NAME,\n TRANSFER_MODE,\n USER_TYPES,\n} from \"../../base-data\";\nimport { TopupAndBillpaymentService } from \"../../services/topup-and-billpayment.service\";\nimport { isNotNull } from \"../../utils\";\nimport { TranslationService } from \"../../services/translation.service\";\nimport * as _ from \"lodash\";\nimport { UserService } from \"../../services/user.service\";\nimport { WalletService } from \"../../services/wallet.service\";\nimport { UserProfileService } from \"../../services/user-profile.service\";\nimport { FormsModule, ReactiveFormsModule, UntypedFormBuilder, UntypedFormGroup, Validators } from \"@angular/forms\";\nimport { TransactionSummaryComponent } from \"../../common/transaction/transaction-summary/transaction-summary.component\";\nimport { CommonModule } from \"@angular/common\";\nimport { SharedModule } from \"../../shared/shared.module\";\nimport { TransactionClass } from \"../../shared/classes/transaction.class\";\nimport { NgSelectModule } from \"@ng-select/ng-select\";\nimport { FormlyBootstrapModule } from \"@ngx-formly/bootstrap\";\nimport { FormlyModule } from \"@ngx-formly/core\";\nimport { UtilityPaymentsUiModule } from \"../../common/ui.module\";\nimport { deviceInfo } from \"../../common/device-info\";\nimport { AuthenticationMethod, TransactionIntentResponse } from \"../../services/model/transaction-intent.model\";\nimport { finalize } from \"rxjs/operators\";\nimport { SdkStateService } from \"../../services/sdk-state.service\";\nimport { calculateCharges, checkUserProfiles, getUserConfigDetails } from \"../../txn-helper\";\nimport { PaymentsConfigService } from \"../../services/payments-config.service\";\nimport { closeUtilityBootstrapModal, openUtilityBootstrapModal } from \"../../utils/bootstrap-modal.util\";\nimport { normalizeUserWalletBalance } from \"../../utils/user-wallet-normalize\";\n\n@Component({\n selector: \"sdk-topup-and-billpayment-review\",\n templateUrl: \"./topup-and-billpayment-review.component.html\",\n standalone: true,\n imports: [\n CommonModule,\n SharedModule,\n NgSelectModule,\n FormsModule,\n ReactiveFormsModule,\n FormlyBootstrapModule,\n FormlyModule,\n UtilityPaymentsUiModule\n ]\n})\nexport class TopupAndBillpaymentReviewComponent extends TransactionClass implements OnInit, OnDestroy {\n private topupAndBillpaymentService = inject(TopupAndBillpaymentService);\n private toasterService = inject(ToastrService);\n private router = inject(Router);\n private translationService = inject(TranslationService);\n private activateRoute = inject(ActivatedRoute);\n private userService = inject(UserService);\n private walletService = inject(WalletService);\n private userprofileService = inject(UserProfileService);\n private fb = inject(UntypedFormBuilder);\n private sdkState = inject(SdkStateService, { optional: true });\n private paymentsConfigService = inject(PaymentsConfigService);\n\n\n walletId: string | null = null;\n currency: string | null = null;\n currencyId: string | null = null;\n showLoader: boolean = false;\n currentUserDetails: any = null;\n agentUserWallet: any = null;\n adminUserDetails: any = null;\n otpForm: UntypedFormGroup;\n\n providerCategoryTypes = PROVIDER_CATEGORY_TYPE_NAME;\n vendorProvider: any = null;\n vendorCategory: any = null;\n vendorDetails: any = null;\n workFlowUserInput: Array<any> = [];\n billData: any = null;\n planData: any = null;\n amount: any;\n isBillReview: boolean = false;\n communeId: any;\n regionName: any;\n regionId: any;\n communeName: any;\n\n get mobileNumberInput(): any {\n return this.workFlowUserInput.find(item => item.label && item.label.trim() === \"Mobile Number\");\n }\n\n isPlanReview: boolean = false;\n meterName: any;\n\n destroy$: Subject<boolean> = new Subject<boolean>();\n requestType: any;\n deductBalanceOnRequest: boolean = false;\n objectKeys = Object.keys;\n proceedToPayment: boolean = true;\n calculateCharges: any;\n paybleAmount: any;\n walletData: any;\n companyDetail: any;\n userAmount: any;\n providerCode: any;\n userAmountWithoutCharge: any;\n otpReset: boolean = false;\n interval: any;\n inValidTxnPin: boolean = false;\n isTxnPinCreated: boolean = false;\n pinAuthentication: string = \"\";\n formErrors: any = {\n otp: null,\n pin: null,\n confirmPin: null\n };\n chargeData: any = null;\n taxData: any = null;\n cashTransferAmount: number = 0;\n productCode: any = PRODUCT_MASTER_DICT.NRTA;\n adminUserWalletId: any;\n userWallet: any;\n currentCompanyDetail: any;\n senderReceiverStore: any = {};\n txnData: any = {};\n txnAmount: any;\n currentTab: number = 0;\n @ViewChild(TransactionSummaryComponent) txnSummaryComp!: TransactionSummaryComponent;\n otpResendTime: number = 0;\n timer: number = 0;\n otpConfirm: boolean = false;\n txnPINForm: UntypedFormGroup;\n enteredPIN: string | null = null;\n pinLength: number = 4;\n allowTransactionPin: boolean = false;\n kwh: any;\n vendorCharge: any;\n vendorContractDetails: any;\n revenueConfigDetails: any;\n companyShareValue: number = 0;\n vendorShareValue: number = 0;\n vendorUserDetails: any = null;\n private lastWalletFetchKey: string | null = null;\n private latestTransactionPayload: any = null;\n private isTpinVerifiedForPayment: boolean = false;\n\n constructor(...args: unknown[]);\n\n constructor() {\n super();\n\n if (this.activateRoute.snapshot.queryParams) {\n this.meterName = this.activateRoute.snapshot.queryParams;\n }\n\n this.dataService.currentWallet.subscribe(data => {\n if (isNotNull(data)) {\n this.walletData = data\n this.walletId = data?.id;\n }\n });\n\n this.dataService.currentCompanyCurrency.subscribe(currency => {\n if (isNotNull(currency)) {\n this.currency = currency?.currency_symbol;\n this.currencyId = currency?.id;\n }\n });\n\n\n\n this.topupAndBillpaymentService.vendorCategory.pipe(takeUntil(this.destroy$)).subscribe(data => {\n if (isNotNull(data)) {\n this.vendorCategory = data;\n }\n });\n\n\n this.topupAndBillpaymentService.billData.pipe(takeUntil(this.destroy$)).subscribe(data => {\n if (isNotNull(data)) {\n this.billData = data;\n this.kwh = this.billData?.selectedBill?.meta_data?.Kwh ?? null;\n if (this.billData?.selectedBill?.bill_meta_data && this.billData?.selectedBill?.bill_meta_data?.debt_amount >= this.billData?.bill_amount) {\n this.proceedToPayment = false\n } else {\n this.proceedToPayment = true\n }\n }\n });\n this.topupAndBillpaymentService.workFlowUserInput.pipe(takeUntil(this.destroy$)).subscribe((data: any) => {\n if (isNotNull(data)) {\n this.workFlowUserInput = data;\n\n // Find amount from workflow user input - check for \"submit_details\" key first, then \"amount\"\n const amountInput = data?.find((element: any) => {\n const keyStr = String(element?.key || \"\").toLowerCase();\n return keyStr === \"submit_details\" || keyStr.includes(\"amount\");\n });\n\n if (amountInput) {\n const enteredAmount = amountInput?.value;\n this.userAmount = typeof enteredAmount === 'number' ? enteredAmount : parseFloat(enteredAmount) || null;\n this.userAmountWithoutCharge = this.userAmount;\n } else if (data?.length > 1) {\n const latestNumericValue = data?.find((element: any) =>\n element['value'] && typeof element['value'] === 'number'\n )?.value || null;\n\n this.userAmount = latestNumericValue;\n this.userAmountWithoutCharge = this.userAmount;\n } else {\n this.userAmount = this.billData?.bill_amount;\n this.userAmountWithoutCharge = this.userAmount;\n }\n }\n });\n\n this.topupAndBillpaymentService.vendorPlan.pipe(takeUntil(this.destroy$)).subscribe(data => {\n if (isNotNull(data)) {\n this.planData = data;\n }\n });\n\n this.loadCurrentUserDetailsFromApi();\n\n this.dataService.adminUserDetails.pipe(takeUntil(this.destroy$)).subscribe((data) => {\n if (isNotNull(data)) {\n this.adminUserDetails = data;\n }\n });\n\n this.dataService.currentWallet.pipe(takeUntil(this.destroy$)).subscribe((wallet) => {\n if (isNotNull(wallet)) {\n this.walletData = wallet;\n this.walletId = wallet?.id;\n this.fetchAgentWalletFromApi();\n }\n });\n\n this.dataService.currentCompanyCurrency.pipe(takeUntil(this.destroy$)).subscribe((currency) => {\n if (isNotNull(currency)) {\n this.currencyId = currency?.id;\n this.fetchAgentWalletFromApi();\n }\n });\n\n this.dataService.userWallet.pipe(takeUntil(this.destroy$)).subscribe((wallet) => {\n if (isNotNull(wallet)) {\n this.agentUserWallet = normalizeUserWalletBalance(wallet);\n }\n });\n\n this.dataService?.companyConfigData?.subscribe({\n next: res => {\n if (isNotNull(res)) {\n this.requestType = res?.find(data => data?.config_key == COMPANY_CONFIG_MODULES_MASTER.SETTLEMENT_TYPE)?.config_value;\n this.deductBalanceOnRequest = res?.find(data =>\n data?.config_key == COMPANY_CONFIG_MODULES_MASTER.SETTLEMENT_BALANCE_DEDUCT_TYPE)?.config_value ==\n COMPANY_CONFIG_MODULES_MASTER.DEDUCT_BALANCE_ONREQUEST ? true : false;\n }\n },\n });\n\n this.dataService.companyDetails.pipe(takeUntil(this.destroy$)).subscribe((data) => {\n if (isNotNull(data)) {\n this.companyDetail = data;\n }\n });\n\n this.txnPINForm = this.fb.group({\n pin: [null, Validators.required],\n });\n\n this.otpForm = this.fb.group({\n otp: [null, Validators.required],\n });\n\n }\n\n ngOnInit(): void {\n this.topupAndBillpaymentService.vendorProvider.pipe(takeUntil(this.destroy$)).subscribe(data => {\n if (isNotNull(data)) {\n this.vendorProvider = data;\n this.getVendorDetails();\n } else {\n this.calculatCharge();\n }\n });\n const sdkActive = this.sdkState?.isActive() === true;\n\n if (sdkActive) {\n if (isNotNull(this.billData)) {\n this.isBillReview = true;\n } else if (isNotNull(this.planData)) {\n this.isPlanReview = true;\n } else {\n this.amount = parseFloat(\n _.find(this.workFlowUserInput, { key: \"amount\" })?.value\n ) || 0.0;\n\n if (this.workFlowUserInput.length === 0) {\n this.back();\n }\n }\n } else {\n if (this.router.url.endsWith(\"bill-review\")) {\n this.isBillReview = true;\n if (!isNotNull(this.billData)) {\n this.back();\n }\n } else if (this.router.url.endsWith(\"plan-review\")) {\n this.isPlanReview = true;\n if (!isNotNull(this.planData)) {\n this.back();\n }\n } else {\n this.amount = parseFloat(\n _.find(this.workFlowUserInput, { key: \"amount\" })?.value\n ) || 0.0;\n\n if (this.workFlowUserInput.length === 0) {\n this.back();\n }\n }\n }\n\n // this.calculatCharge();\n this.userDetail();\n }\n\n async calculatCharge() {\n\n this.showLoader = true\n\n let profileDetails: any = {\n \"userProfileService\": this.userprofileService,\n \"userId\": this.dataService.getWalletUserAccountId(),\n \"walletId\": this.walletId,\n \"userType\": USER_TYPES.AGENT,\n \"currencyId\": this.currencyId,\n };\n if (this.vendorDetails?.vendor_code == \"SOCHIETEL\") {\n profileDetails.product_code = PRODUCT_MASTER_DICT.RCG;\n } else {\n profileDetails.product_code = PRODUCT_MASTER_DICT.BP;\n }\n\n const verifyKYCProfile = await checkUserProfiles(profileDetails);\n\n if (verifyKYCProfile) {\n\n const profileData = await checkUserProfiles(profileDetails);\n\n if (isNotNull(profileData)) {\n const chargeParams: any = {\n walletService: this.walletService,\n tree_id: verifyKYCProfile?.tree_id,\n tree_level_id: verifyKYCProfile?.tree_level_id,\n productCode: PRODUCT_MASTER_DICT.BP,\n amount: this.userAmount || this.amount || this.billData?.selectedBill?.bill_amount || this.planData?.product_fixed_price,\n currencyId: this.currencyId,\n userType: USER_TYPES.AGENT,\n walletId: this.walletId,\n };\n if (this.vendorDetails?.vendor_code == \"SOCHIETEL\") {\n chargeParams.productCode = PRODUCT_MASTER_DICT.RCG;\n }\n this.calculateCharges = await calculateCharges(chargeParams);\n this.calculateShareValues();\n\n } else {\n this.calculateShareValues();\n }\n\n if (this.calculateCharges) {\n if (this.calculateCharges?.is_included) {\n this.showLoader = false\n this.paybleAmount = (this.userAmount || this.amount || this.billData?.selectedBill?.bill_amount || this.planData?.product_fixed_price);\n } else {\n this.showLoader = false\n this.paybleAmount = parseFloat(this.calculateCharges?.total_charges) + (this.userAmount || this.amount || this.billData?.selectedBill?.bill_amount || this.planData?.product_fixed_price);\n\n }\n } else {\n this.showLoader = false\n this.paybleAmount = (this.userAmount || this.amount || this.billData?.selectedBill?.bill_amount || this.planData?.product_fixed_price);\n this.calculateShareValues();\n }\n // Recalculate payable amount with vendor charges if available\n this.updatePayableAmountWithVendorCharges();\n } else {\n this.paybleAmount = (this.userAmount || this.amount || this.billData?.selectedBill?.bill_amount || this.planData?.product_fixed_price);\n this.showLoader = false\n this.calculateShareValues();\n // Recalculate payable amount with vendor charges if available\n this.updatePayableAmountWithVendorCharges();\n }\n }\n\n async userDetail() {\n const configParams = {\n userService: this.userService,\n userId: this.currentUserDetails?.id,\n };\n\n const userConfig = await getUserConfigDetails(configParams);\n let productCode = this.vendorCategory?.category_type === PROVIDER_CATEGORY_TYPE.RECHARGE ?\n PRODUCT_MASTER_DICT.RCG : PRODUCT_MASTER_DICT.BP\n if ((userConfig?.value?.allow_product_codes || []).includes(productCode)) {\n this.allowTransactionPin = true;\n } else {\n this.allowTransactionPin = false;\n }\n }\n\n getVendorDetails() {\n this.topupAndBillpaymentService.getVendorDetailsById(this.vendorProvider?.vendor_id).subscribe(\n {\n next: res => {\n if (res?.success) {\n this.vendorDetails = res?.data?.vendor_master;\n this.providerCode = this.vendorDetails.vendor_code;\n if (this.providerCode == \"SOCHIETEL\") {\n this.amount = parseFloat(_.find(this.workFlowUserInput, { key: \"submit_details\" })?.value) || 0.0;\n }\n if (this.providerCode == \"VPC_VIGNETTE\") {\n this.regionName = _.find(this.workFlowUserInput, { key: \"region_name\" })?.name;\n this.regionId = _.find(this.workFlowUserInput, { key: \"region_id\" })?.id;\n this.communeName = _.find(this.workFlowUserInput, { key: \"commune_name\" })?.name;\n this.communeId = _.find(this.workFlowUserInput, { key: \"commune_id\" })?.id\n ?? _.find(this.workFlowUserInput, (item) => item?.id != null && !item?.key)?.id;\n }\n this.calculatCharge();\n this.calculateVendorCharge();\n } else {\n this.calculatCharge();\n }\n }, error: () => {\n this.calculatCharge();\n }\n },\n );\n }\n\n calculateVendorCharge() {\n this.getVendorContractDetails(this.vendorDetails?.id);\n const params = {\n // vendor_type_id: this.vendorDetails?.id,\n provider_id: this.vendorProvider?.id,\n amount: this.userAmount || this.amount || this.billData?.selectedBill?.bill_amount || this.planData?.product_fixed_price,\n }\n this.transactionService.calculateVendorCharge(params).subscribe(\n {\n next: res => {\n if (res?.success) {\n this.vendorCharge = res?.data?.vendor_txn_charges;\n this.calculateShareValues();\n this.updatePayableAmountWithVendorCharges();\n } else {\n this.calculateShareValues();\n this.updatePayableAmountWithVendorCharges();\n }\n },\n error: () => {\n this.calculateShareValues();\n this.updatePayableAmountWithVendorCharges();\n }\n }\n );\n }\n getVendorContractDetails(vendorId: string) {\n const params = {\n vendor_type_id: vendorId,\n }\n this.topupAndBillpaymentService.getVendorContractDetails(params).subscribe({\n next: res => {\n if (res?.success) {\n // Handle both array and object responses\n this.vendorContractDetails = Array.isArray(res?.data?.data)\n ? res?.data?.data[0]\n : res?.data?.data;\n\n this.getRevenueConfigDetails(this.vendorContractDetails?.id);\n } else {\n this.calculateShareValues();\n }\n },\n error: () => {\n this.calculateShareValues();\n }\n }\n );\n }\n\n\n getRevenueConfigDetails(id: string) {\n const params = {\n vendor_contract_id: id,\n }\n this.topupAndBillpaymentService.getRevenueConfigDetails(params).subscribe({\n next: res => {\n if (res?.success) {\n this.revenueConfigDetails = res?.data?.data;\n this.calculateShareValues();\n } else {\n this.calculateShareValues();\n }\n },\n error: () => {\n this.calculateShareValues();\n }\n });\n }\n\n calculateShareValues() {\n // Get the revenue config (assuming first item or active one)\n const revenueConfig = Array.isArray(this.revenueConfigDetails)\n ? this.revenueConfigDetails[0]\n : this.revenueConfigDetails;\n\n if (!revenueConfig) {\n // Revenue config not available yet, will recalculate when it arrives\n return;\n }\n\n // Get total charges from calculateCharges API\n const totalCharges = this.calculateCharges?.total_charges\n ? parseFloat(this.calculateCharges.total_charges)\n : 0;\n\n // Get vendor charges from calculateVendorCharge API\n const vendorCharges = this.vendorCharge?.total_charges\n ? parseFloat(this.vendorCharge?.total_charges)\n : 0;\n\n // Calculate total charges (sum of both)\n const combinedCharges = totalCharges + vendorCharges;\n\n // Get share percentages\n const vendorSharePercent = revenueConfig?.vendor_share || 0;\n const companySharePercent = revenueConfig?.company_share || 0;\n\n // Calculate share values based on percentages\n this.vendorShareValue = (combinedCharges * vendorSharePercent) / 100;\n this.companyShareValue = (combinedCharges * companySharePercent) / 100;\n }\n\n updatePayableAmountWithVendorCharges() {\n if (!this.vendorCharge) {\n return;\n }\n\n const baseAmount = this.userAmount || this.amount || this.billData?.selectedBill?.bill_amount || this.planData?.product_fixed_price || 0;\n let calculatedPayableAmount = baseAmount;\n\n // Handle calculateCharges\n if (this.calculateCharges) {\n if (!this.calculateCharges?.is_included) {\n const calculateChargesTotal = parseFloat(this.calculateCharges?.total_charges) || 0;\n calculatedPayableAmount += calculateChargesTotal;\n }\n }\n\n // Handle vendorCharge - always add vendor charges to amount\n if (this.vendorCharge) {\n const vendorChargesTotal = parseFloat(this.vendorCharge?.total_charges) || 0;\n calculatedPayableAmount += vendorChargesTotal;\n }\n\n this.paybleAmount = calculatedPayableAmount;\n }\n\n submitOTPForm() {\n this.otpReset = false;\n if (this.otpForm.valid) {\n this.showLoader = true;\n\n const data: any = {\n dial_code: this.currentUserDetails?.dial_code,\n phone_number: this.currentUserDetails?.phone_number,\n otp: this.otpForm.value.otp,\n otp_type: OTP_TYPES.OTP_TYPE_ADD_CASH_MANUALLY,\n };\n\n this.authService.verifyOTP(data).subscribe({\n next: (response) => {\n this.showLoader = false;\n if (response.success) {\n clearInterval(this.interval);\n this.hideModal(\"OTPVerification\");\n this.toasterService.success(response?.data?.message);\n if (this.inValidTxnPin) {\n this.inValidTxnPin = false;\n this.isTxnPinCreated = false;\n this.showModal(\"TransactionPIN\");\n }\n else if (this.isTpinSessionNeeded()) {\n this.showModal(\"TransactionPIN\");\n } else {\n this.createIntent();\n }\n this.otpReset = true;\n\n } else {\n this.toasterService.error(response?.error[0]);\n }\n },\n error: () => {\n this.showLoader = false;\n },\n },\n );\n } else {\n this.formErrors[\"otp\"] = this.translationService.translate(\"LABEL_PLEASE_ENTER_VALID_OTP\");\n }\n }\n\n cashTransferRequest(txnId: any) {\n\n const receiver = this.senderReceiverStore?.receiver;\n const sender = this.senderReceiverStore?.sender;\n let payload: any = {\n to_user_type: null,\n from_user_type: null,\n to_user_detail: {\n dial_code: receiver?.dial_code,\n first_name: receiver?.first_name,\n last_name: receiver?.last_name,\n phone_number: receiver?.phone_number,\n user_id: \"\",\n user_type: 0,\n },\n currency_id: this.currencyId,\n from_user_detail: {\n dial_code: sender?.dial_code,\n first_name: sender?.first_name,\n last_name: sender?.last_name,\n phone_number: sender?.phone_number,\n user_id: \"\",\n user_type: \"\",\n },\n amount: this.cashTransferAmount,\n from_agent_id: this.currentUserDetails?.id,\n sender_txn_id: txnId,\n receiver_txn_id: \"\",\n note: \"\",\n };\n\n this.transactionService.cashTransferRequest(payload).subscribe(\n {\n next: async (res) => {\n if (res?.success) {\n const txnId = res?.data?.cash_transfer_request_id;\n\n\n const cashTransferResponse = await firstValueFrom(this.transactionService.getCashTransferRequestByID(txnId));\n\n if (cashTransferResponse?.success) {\n const data = cashTransferResponse?.data?.cash_transfer_request;\n this.txnData[\"reference_number\"] = data?.reference_number;\n }\n\n this.currentTab = 5;\n this.hideModal(\"TransactionPIN\");\n this.hideModal(\"OTPVerification\");\n\n setTimeout(() => {\n this.txnSummaryComp.showLoader = true;\n this.txnSummaryComp.getUserWalletBalance();\n this.txnSummaryComp.getTransactionDetails(cashTransferResponse?.data?.cash_transfer_request);\n }, 500);\n }\n },\n },\n );\n }\n onOtpChange(otp: string) {\n this.otpForm.patchValue({ otp });\n }\n\n forgotTxnPin() {\n this.hideModal(\"TransactionPIN\");\n this.sendOTPToAgent();\n }\n sendOTPToAgent() {\n this.showLoader = true;\n\n const data: any = {\n dial_code: this.currentUserDetails?.dial_code,\n phone_number: this.currentUserDetails?.phone_number,\n // user_type: USER_TYPES.AGENT,\n email: this.currentUserDetails?.email,\n otp_type: OTP_TYPES.OTP_TYPE_ADD_CASH_MANUALLY,\n };\n\n this.authService.sendOTP(data).subscribe({\n next: (response) => {\n this.showLoader = false;\n if (response.success) {\n this.toasterService.success(response?.data?.message);\n\n this.showModal(\"OTPVerification\");\n\n if (this.otpResendTime > 0) {\n this.timer = this.otpResendTime;\n\n this.interval = setInterval(() => {\n if (this.timer > 0) {\n this.timer--;\n } else {\n clearInterval(this.interval);\n }\n }, 1000);\n }\n } else {\n this.toasterService.error(response?.error[0]);\n }\n },\n error: () => {\n this.showLoader = false;\n },\n });\n }\n\n enterTxnPin() {\n this.createIntent();\n }\n\n submitPINForm() {\n this.otpConfirm = true;\n this.formErrors = {};\n this.showLoader = false;\n\n if (this.txnPINForm.valid) {\n const pin = this.txnPINForm.value.pin;\n\n if (!this.isTxnPinCreated) {\n this.enteredPIN = pin;\n this.txnPINForm.reset();\n this.hideModal(\"TransactionPIN\");\n this.showModal(\"ConfirmTransactionPIN\");\n } else {\n this.verifyTransactionPin(pin);\n }\n }\n }\n verifyTransactionPin(pin: string) {\n this.otpReset = false;\n this.showLoader = true;\n\n this.authService.verifyTransactionPin({ transaction_pin: pin }).subscribe({\n next: (res) => {\n this.showLoader = false;\n if (res?.success) {\n this.isTpinVerifiedForPayment = true;\n this.hideModal(\"TransactionPIN\");\n this.hideModal(\"OTPVerification\");\n this.otpReset = true;\n this.createIntent();\n } else {\n this.otpReset = true;\n this.txnPINForm.patchValue({ pin: null });\n this.inValidTxnPin = true;\n const apiError = res?.error?.[0] || res?.error || this.translationService.translate(\"LABEL_SOMETHING_WENT_WRONG\");\n this.toasterService.error(this.translationService.translate(apiError));\n }\n },\n error: (error) => {\n this.showLoader = false;\n const apiError = error?.error?.error?.[0]\n || error?.error?.error\n || error?.error?.message\n || this.translationService.translate(\"LABEL_SOMETHING_WENT_WRONG\");\n this.toasterService.error(apiError);\n },\n });\n }\n\n onTxnPinChange(pin: string) {\n this.txnPINForm.patchValue({ pin });\n }\n\n submitConfirmPINForm() {\n this.formErrors = {};\n if (this.txnPINForm.valid) {\n const confirmPin = this.txnPINForm.value.pin;\n\n if (this.enteredPIN !== confirmPin) {\n this.formErrors.confirmPin = this.translationService.translate(\"LABEL_PIN_AND_CONFIRM_PIN_DO_NOT_MATCH\");\n this.txnPINForm.patchValue({ pin: null });\n return;\n }\n\n this.showLoader = true;\n const data = { user_id: this.currentUserDetails?.id, transaction_pin: this.enteredPIN };\n\n this.authService.createTransactionPin(data).subscribe({\n next: (res) => {\n this.showLoader = false;\n if (res?.success) {\n this.toasterService.success(res?.data.message);\n this.createSession(this.enteredPIN ?? undefined);\n this.hideModal(\"ConfirmTransactionPIN\");\n } else {\n this.toasterService.error(res?.error[0]);\n }\n },\n error: () => {\n this.showLoader = false;\n this.toasterService.error(this.translationService.translate(\"LABEL_SOMETHING_WENT_WRONG\"));\n },\n });\n }\n }\n\n getTimerString(seconds: number) {\n const minutes = Math.floor(this.timer / 60);\n const remainingSeconds = this.timer % 60;\n\n const paddedMinutes = minutes < 10 ? `0${minutes}` : `${minutes}`;\n const paddedSeconds = remainingSeconds < 10 ? `0${remainingSeconds}` : `${remainingSeconds}`;\n\n return `${paddedMinutes}:${paddedSeconds}`;\n }\n\n\n async createIntent() {\n this.showLoader = true;\n\n let txnAmount: number;\n\n if (this.isBillReview && this.providerCode != 'DBA_PREPAID_ELECTRICITY' && this.providerCode != 'DBA_POSTPAID_ELECTRICITY') {\n txnAmount = parseFloat(this.billData?.selectedBill?.bill_amount);\n } else if (this.isPlanReview) {\n txnAmount = parseFloat(this.planData?.product_fixed_price);\n } else if (this.providerCode == 'DBA_PREPAID_ELECTRICITY' || this.providerCode == 'DBA_POSTPAID_ELECTRICITY') {\n txnAmount = parseFloat(this.userAmount);\n } else {\n txnAmount = parseFloat(this.amount);\n }\n\n if (this.calculateCharges?.length) {\n if (this.calculateCharges?.is_included) {\n this.showLoader = false\n txnAmount = this.userAmount || this.amount || this.billData?.selectedBill?.bill_amount;\n } else {\n this.showLoader = false\n txnAmount = parseFloat(this.calculateCharges?.total_charges) + (this.userAmount || this.amount || this.billData?.selectedBill?.bill_amount);\n }\n } else {\n this.showLoader = false\n txnAmount = this.userAmount || this.amount || this.billData?.selectedBill?.bill_amount || this.planData?.product_fixed_price;\n }\n\n // Always add vendor charges to transaction amount\n // if (this.vendorCharge) {\n // const vendorChargesTotal = parseFloat(this.vendorCharge?.total_charges) || 0;\n // txnAmount += vendorChargesTotal;\n // }\n // if(this.providerCode == 'SOCHIETEL') {\n // txnAmount = parseFloat(this.planData?.product_fixed_price);\n // }\n\n if (txnAmount > (this.agentUserWallet?.wallet_balance || 0)) {\n this.toasterService.error(this.translationService.translate(\n \"LABEL_INSUFFICIENT_BALANCE\"));\n return;\n }\n\n const params = {\n user_type: USER_TYPES.COMPANY_ADMIN,\n };\n const companyAdminResponse = await lastValueFrom(this.userService.getUserListUsingJava(params));\n const companyAdminDetails = companyAdminResponse.data.users[0];\n\n this.showLoader = true;\n\n const txnCode: string = this.vendorCategory?.category_type === PROVIDER_CATEGORY_TYPE.RECHARGE ?\n PRODUCT_MASTER_DICT.RCG : PRODUCT_MASTER_DICT.BP;\n\n // Create a modified copy of calculateCharges with companyShareValue as total_charges\n let modifiedChargesInfo = null;\n if (this.calculateCharges) {\n // Update charges array to set final_charge to companyShareValue\n const updatedCharges = (this.calculateCharges?.charges || []).map((charge: any) => ({\n ...charge,\n final_charge: this.companyShareValue || 0\n }));\n\n modifiedChargesInfo = {\n ...this.calculateCharges,\n total_charges: this.companyShareValue || 0,\n charges: updatedCharges\n };\n } else {\n // Use vendorCharge charges and update final_charge to companyShareValue\n const updatedCharges = (this.vendorCharge?.charges || []).map((charge: any) => ({\n ...charge,\n final_charge: this.companyShareValue || 0\n }));\n\n modifiedChargesInfo = {\n is_included: false,\n total_charges: this.companyShareValue || 0,\n charges: updatedCharges\n };\n }\n\n let modifiedVendorTxnCharges = null;\n if (this.vendorCharge) {\n // Update charges array to set final_charge to vendorShareValue\n const updatedVendorCharges = (this.vendorCharge?.charges || []).map((charge: any) => ({\n ...charge,\n final_charge: this.vendorShareValue || 0\n }));\n\n modifiedVendorTxnCharges = {\n ...this.vendorCharge,\n total_charges: this.vendorShareValue || 0,\n charges: updatedVendorCharges\n };\n } else {\n // Use calculateCharges charges and update final_charge to vendorShareValue\n const updatedCharges = (this.calculateCharges?.charges || []).map((charge: any) => ({\n ...charge,\n final_charge: this.vendorShareValue || 0\n }));\n\n modifiedVendorTxnCharges = {\n total_charges: this.vendorShareValue || 0,\n charges: updatedCharges\n };\n }\n\n let initiatePaymentData: any = {\n // wallet_id: this.walletId,\n charges_info: modifiedChargesInfo,\n vendor_txn_charges: modifiedVendorTxnCharges,\n payment_response: null,\n debit_user_info: {\n currency_id: this.currencyId,\n debit_type: TRANSFER_MODE.WALLET,\n debit_type_id: this.walletId,\n debit_account_type: USER_TYPES.AGENT,\n debit_account_type_id: this.dataService.getWalletUserAccountId(),\n username: this.currentUserDetails?.first_name + \" \" + this.currentUserDetails?.last_name,\n },\n credit_user_info: {\n currency_id: this.currencyId,\n credit_type: TRANSFER_MODE.WALLET,\n credit_type_id: this.walletId,\n credit_account_type: USER_TYPES.VENDOR,\n credit_account_type_id: this.vendorContractDetails?.user_id,\n username: this.vendorContractDetails?.contact_person_name,\n },\n\n\n txn_amount: 10, // (this.providerCode == 'DBA_PREPAID_ELECTRICITY' || this.providerCode == 'DBA_POSTPAID_ELECTRICITY') ? parseFloat(this.userAmountWithoutCharge) : txnAmount,\n txn_code: txnCode,\n payment_mode: PAYMENT_MODE.WALLET,\n txn_device_info: null,\n note: \"\",\n // vendor_id: this.state.vendorId,\n // vendor_provider_id: this.state.vendorProviderId,\n // vendor_product_id: this.state.vendorProductId\n };\n const metaData: any = {\n \"is_deduct_balance_on_request\": false,\n };\n\n if (this.requestType == COMPANY_CONFIG_MODULES_MASTER.ADMIN_REQUEST) {\n initiatePaymentData[\"meta_data\"] = metaData;\n } else {\n metaData[\"is_deduct_balance_on_request\"] = false;\n }\n metaData[\"is_deduct_balance_on_request\"] = false;\n initiatePaymentData[\"meta_data\"] = metaData;\n\n\n if (this.providerCode == \"VPC_VIGNETTE\") {\n metaData[\"region_name\"] = this.regionName;\n metaData[\"region_id\"] = this.regionId;\n metaData[\"commune_name\"] = this.communeName;\n metaData[\"commune_id\"] = this.communeId;\n }\n\n const additionalData: any = {\n provider_code: this.vendorProvider?.vendor_provider_reference_code,\n vendor_id: this.vendorProvider?.vendor_id,\n vendor_provider_id: this.vendorProvider?.id,\n vendor_product_id: this.planData?.id,\n vendor_code: this.vendorDetails?.vendor_code,\n provider_category_id: this.vendorProvider?.provider_category_id,\n };\n\n const paymentRequest: any = {\n vendor_id: this.vendorProvider?.vendor_id,\n vendor_provider_id: this.vendorProvider?.id,\n vendor_product_id: this.planData?.id,\n vendor_provider_image: this.vendorProvider?.provider_image,\n provider_code: this.vendorProvider?.vendor_provider_reference_code,\n provider_name: this.vendorProvider?.provider_name,\n provier_category_id: this.vendorProvider?.provider_category_id,\n category_type: this.vendorCategory?.category_type,\n };\n\n initiatePaymentData[\"txn_device_info\"] = deviceInfo();\n if (isNotNull(this.billData) && this.isBillReview) {\n additionalData[\"bill_info\"] = this.billData?.selectedBill;\n\n if (isNotNull(this.billData?.user_info)) {\n Object.assign(additionalData, this.billData?.user_info);\n }\n }\n\n if (isNotNull(this.planData) && this.isPlanReview) {\n additionalData[\"amount\"] = this.planData?.product_fixed_price;\n additionalData[\"vendor_plan\"] = this.planData\n }\n\n if (this.workFlowUserInput.length > 0) {\n const phoneNumber = _.find(this.workFlowUserInput, { key: \"phone_number\" });\n const dialCode = _.find(this.workFlowUserInput, { key: \"dial_code\" });\n\n this.workFlowUserInput.forEach((field: any) => {\n additionalData[field?.key] = field?.value;\n\n if (field?.key === \"consumer_number\") {\n paymentRequest[\"account_number\"] = field?.value || `${dialCode} ${phoneNumber}`;\n paymentRequest[\"consumer_number\"] = field?.value;\n }\n });\n }\n\n const txnPayload = { ...initiatePaymentData, ...additionalData, payment_request: paymentRequest };\n this.latestTransactionPayload = txnPayload;\n // txnPayload.amount = Math.floor(Math.random() + Math.floor(Math.random() + 2))\n\n if (!this.proceedToPayment) {\n this.toasterService.error('LABEL_BILL_OVER_DUE');\n this.showLoader = false;\n return;\n }\n\n if (!this.isTpinVerifiedForPayment) {\n this.showLoader = false;\n this.otpReset = true;\n this.showModal(\"TransactionPIN\");\n return;\n }\n\n this.transactionService.initiateTopupBillPaymentTransaction(txnPayload).pipe(finalize(() => {\n this.showLoader = false;\n })).subscribe({\n next: response => {\n if (response.success) {\n const data = response?.data;\n const initiatedTxnId: string = data?.transaction?.txn_id ?? data?.txn_id;\n const initiatedTxnNumber: string = data?.transaction?.txn_number ?? '';\n\n if (!initiatedTxnId) {\n this.toasterService.error(this.translationService.translate(\"LABEL_SOMETHING_WENT_WRONG\"));\n return;\n }\n\n const payBillPayload = this.buildPayBillPayload(initiatedTxnId);\n this.showLoader = true;\n this.transactionService.payTopupBill(payBillPayload).subscribe({\n next: (payBillResponse) => {\n if (payBillResponse && (payBillResponse.success === true || payBillResponse.success === 1)) {\n const payBillData = payBillResponse?.data;\n const statusUpdatePayload = this.buildStatusUpdatePayload(payBillData, initiatedTxnId);\n this.transactionService.updateTransactionStatus(statusUpdatePayload).subscribe({\n next: (statusResponse) => {\n if (statusResponse && (statusResponse.success === true || statusResponse.success === 1)) {\n const txnObj: any = {\n txnId: payBillData?.txn_id ?? initiatedTxnId,\n txnNumber: initiatedTxnNumber,\n txnStatus: payBillData?.status ?? data?.transaction?.txn_status,\n message: statusResponse?.data?.message || \"LABEL_PAYMENT_SUCCESS\",\n txnCode: txnCode,\n txnAmount: this.userAmount || txnAmount,\n txnDate: new Date().getTime(),\n };\n this.topupAndBillpaymentService.saveTxnData(txnObj);\n this.showLoader = false;\n this.toasterService.success(this.translationService.translate(txnObj.message));\n this.goToMainAfterSuccessfulPayment();\n } else {\n this.showLoader = false;\n this.toasterService.error(statusResponse?.error?.[0] || this.translationService.translate(\"LABEL_SOMETHING_WENT_WRONG\"));\n }\n },\n error: (statusError) => {\n this.showLoader = false;\n this.toasterService.error(statusError?.error?.error || this.translationService.translate(\"LABEL_SOMETHING_WENT_WRONG\"));\n },\n });\n } else {\n this.showLoader = false;\n this.toasterService.error(payBillResponse?.error?.[0] || this.translationService.translate(\"LABEL_SOMETHING_WENT_WRONG\"));\n }\n },\n error: (payBillError) => {\n this.showLoader = false;\n this.toasterService.error(payBillError?.error?.error || this.translationService.translate(\"LABEL_SOMETHING_WENT_WRONG\"));\n },\n });\n }\n },\n error: () => undefined,\n });\n }\n\n createSession(value?: string) {\n this.showLoader = true;\n this.transactionService.createTransactionSession({\n intent_id: this.intentedData()?.intent_id,\n method: this.intentedData()?.auth_methods ?? AuthenticationMethod.TPIN,\n method_values: value\n }).subscribe({\n next: (res) => {\n this.showLoader = false;\n if (res?.success) {\n this.completeTopupBillPayment(res.data.transaction_token);\n }\n },\n error: () => {\n this.showLoader = false;\n },\n });\n }\n\n completeTopupBillPayment(token: string) {\n this.showLoader = true;\n\n let txnAmount: number;\n\n if (this.isBillReview && this.providerCode != 'DBA_PREPAID_ELECTRICITY' && this.providerCode != 'DBA_POSTPAID_ELECTRICITY') {\n txnAmount = parseFloat(this.billData?.selectedBill?.bill_amount);\n } else if (this.isPlanReview) {\n txnAmount = parseFloat(this.planData?.product_fixed_price);\n } else if (this.providerCode == 'DBA_PREPAID_ELECTRICITY' || this.providerCode == 'DBA_POSTPAID_ELECTRICITY') {\n txnAmount = parseFloat(this.userAmount);\n } else {\n txnAmount = parseFloat(this.amount);\n }\n\n const txnCode: string = this.vendorCategory?.category_type === PROVIDER_CATEGORY_TYPE.RECHARGE ?\n PRODUCT_MASTER_DICT.RCG : PRODUCT_MASTER_DICT.BP;\n\n const payload = {\n transaction_data: this.latestTransactionPayload,\n intent_id: this.intentedData()?.intent_id,\n txn_token: token,\n };\n\n this.transactionService.initiateTopupBillPaymentTransaction(payload).subscribe({\n next: (response) => {\n if (response && (response.success === true || response.success === 1)) {\n const data = response?.data;\n const initiatedTxnId: string = data?.transaction?.txn_id ?? data?.txn_id;\n const initiatedTxnNumber: string = data?.transaction?.txn_number ?? '';\n\n if (!initiatedTxnId) {\n this.showLoader = false;\n this.toasterService.error(this.translationService.translate(\"LABEL_SOMETHING_WENT_WRONG\"));\n return;\n }\n\n const payBillPayload = this.buildPayBillPayload(initiatedTxnId);\n this.transactionService.payTopupBill(payBillPayload).subscribe({\n next: (payBillResponse) => {\n if (payBillResponse && (payBillResponse.success === true || payBillResponse.success === 1)) {\n const payBillData = payBillResponse?.data;\n const statusUpdatePayload = this.buildStatusUpdatePayload(payBillData, initiatedTxnId);\n this.transactionService.updateTransactionStatus(statusUpdatePayload).subscribe({\n next: (statusResponse) => {\n if (statusResponse && (statusResponse.success === true || statusResponse.success === 1)) {\n const txnObj: any = {\n txnId: payBillData?.txn_id ?? initiatedTxnId,\n txnNumber: initiatedTxnNumber,\n txnStatus: payBillData?.status ?? data?.transaction?.txn_status,\n message: statusResponse?.data?.message || \"LABEL_PAYMENT_SUCCESS\",\n txnCode: txnCode,\n txnAmount: this.userAmount || txnAmount,\n txnDate: new Date().getTime(),\n };\n this.topupAndBillpaymentService.saveTxnData(txnObj);\n\n this.showLoader = false;\n this.toasterService.success(this.translationService.translate(txnObj.message));\n this.goToMainAfterSuccessfulPayment();\n } else {\n this.showLoader = false;\n this.toasterService.error(statusResponse?.error?.[0] || this.translationService.translate(\"LABEL_SOMETHING_WENT_WRONG\"));\n }\n },\n error: (statusError) => {\n this.showLoader = false;\n this.toasterService.error(statusError?.error?.error || this.translationService.translate(\"LABEL_SOMETHING_WENT_WRONG\"));\n },\n });\n } else {\n this.showLoader = false;\n this.toasterService.error(payBillResponse?.error?.[0] || this.translationService.translate(\"LABEL_SOMETHING_WENT_WRONG\"));\n }\n },\n error: (payBillError) => {\n this.showLoader = false;\n this.toasterService.error(payBillError?.error?.error || this.translationService.translate(\"LABEL_SOMETHING_WENT_WRONG\"));\n },\n });\n } else {\n this.showLoader = false;\n this.toasterService.error(response?.error[0]);\n }\n },\n error: (error) => {\n this.showLoader = false;\n this.toasterService.error(error?.error?.error);\n },\n });\n }\n\n private buildPayBillPayload(txnId: string): any {\n const currentAmount = this.userAmount || this.amount || this.billData?.selectedBill?.bill_amount || this.planData?.product_fixed_price || 0;\n const totalCharges = (parseFloat(this.calculateCharges?.total_charges) || 0) + (parseFloat(this.vendorCharge?.total_charges) || 0);\n const workflowConsumerNumber = _.find(this.workFlowUserInput, { key: \"consumer_number\" })?.value;\n const paymentRequestConsumer = this.latestTransactionPayload?.payment_request?.consumer_number\n || this.latestTransactionPayload?.payment_request?.account_number;\n const billInfoConsumer = this.latestTransactionPayload?.bill_info?.account_number\n || this.latestTransactionPayload?.bill_info?.bill_number;\n const consumerNumber = this.latestTransactionPayload?.consumer_number\n || workflowConsumerNumber\n || paymentRequestConsumer\n || billInfoConsumer;\n const providerCode = this.latestTransactionPayload?.provider_code\n || this.latestTransactionPayload?.payment_request?.provider_code\n || this.vendorProvider?.vendor_provider_reference_code\n || this.providerCode;\n const billInfo = this.latestTransactionPayload?.bill_info\n || this.billData?.selectedBill\n || this.billData?.bill_info\n || this.billData\n || null;\n\n return {\n consumer_number: consumerNumber,\n provider_code: providerCode,\n txn_id: txnId,\n first_name: this.currentUserDetails?.first_name ?? \"\",\n last_name: this.currentUserDetails?.last_name ?? \"\",\n phone_number: this.currentUserDetails?.phone_number ?? \"\",\n address: this.currentUserDetails?.address ?? \"\",\n bill_info: billInfo,\n amount: currentAmount,\n dial_code: this.currentUserDetails?.dial_code ?? \"\",\n vendor_id: this.latestTransactionPayload?.vendor_id,\n vendor_provider_id: this.latestTransactionPayload?.vendor_provider_id,\n vendor_product_id: this.latestTransactionPayload?.vendor_product_id,\n total_charges: totalCharges,\n has_outstanding_amount: false,\n vendor_txn_charges: this.latestTransactionPayload?.vendor_txn_charges ?? {},\n meta_data: this.latestTransactionPayload?.meta_data ?? {},\n };\n }\n\n private buildStatusUpdatePayload(payBillData: any, initiatedTxnId: string): any {\n const cfg = (this.paymentsConfigService.getConfig() ?? {}) as any;\n const cfgHeaders = (cfg?.defaultHeaders ?? {}) as Record<string, string>;\n const companyId = payBillData?.company_id\n || cfgHeaders[\"companyid\"]\n || cfgHeaders[\"companyId\"]\n || this.companyDetail?.id\n || null;\n const combinedVendorCharges = payBillData?.vendor_txn_charges\n || this.latestTransactionPayload?.vendor_txn_charges\n || {};\n const totalCharges = payBillData?.total_charges\n ?? ((parseFloat(this.calculateCharges?.total_charges) || 0) + (parseFloat(this.vendorCharge?.total_charges) || 0));\n\n return {\n company_id: companyId,\n txn_id: payBillData?.txn_id || initiatedTxnId,\n status: payBillData?.status ?? 3,\n token_user_id: payBillData?.token_user_id || this.currentUserDetails?.id || null,\n third_party_txn_commission_fees: payBillData?.third_party_txn_commission_fees ?? null,\n vendor_txn_charges: combinedVendorCharges,\n total_charges: totalCharges,\n is_success: payBillData?.is_success ?? null,\n sochietel_response: payBillData?.sochietel_response ?? null,\n provider_txn_info: payBillData?.provider_txn_info ?? null,\n payment_request_map: payBillData?.payment_request_map ?? null,\n payment_response_map: payBillData?.payment_response_map ?? null,\n status_reason: payBillData?.status_reason ?? null,\n api_map: payBillData?.api_map ?? null,\n };\n }\n\n private goToMainAfterSuccessfulPayment(): void {\n this.isTpinVerifiedForPayment = false;\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"CATEGORY\");\n } else {\n this.router.navigateByUrl(\"/operations/topup-and-billpayment\");\n }\n }\n\n back() {\n this.isTpinVerifiedForPayment = false;\n if (this.sdkState?.isActive()) {\n this.sdkState.setStep(\"CATEGORY\");\n } else {\n this.router.navigateByUrl(\"/operations/topup-and-billpayment\");\n }\n }\n\n closeTransactionPinModal() {\n this.hideModal(\"TransactionPIN\");\n }\n\n cancel() {\n const swalRef: any = (globalThis as any)?.swal;\n const cancelTitle = \"Are You sure want to Cancel Transaction?\";\n\n if (!swalRef?.fire || typeof swalRef.fire !== \"function\") {\n const confirmed = (globalThis as any)?.confirm?.(cancelTitle) === true;\n if (confirmed) {\n this.back();\n }\n return;\n }\n\n swalRef.fire({\n title: cancelTitle,\n icon: \"warning\",\n showCancelButton: true,\n confirmButtonText: \"Yes\",\n cancelButtonText: \"No\",\n }).then((result: any) => {\n if (result?.isConfirmed || result?.value) {\n this.back();\n }\n }).catch(() => undefined);\n }\n\n removeunderScore(value: string): string {\n return value.replace(/_/g, ' ').split(' ').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n\n private walletUserIdForReview(): string | null {\n const u = this.currentUserDetails;\n if (!u?.id && !u?.parent_user_id) {\n return null;\n }\n return u.user_type === USER_TYPES.STAFF\n ? String(u.parent_user_id ?? \"\")\n : String(u.id ?? \"\");\n }\n\n private fetchAgentWalletFromApi(): void {\n const walletUserAccountId =\n this.dataService.getWalletUserAccountId() || this.walletUserIdForReview() || null;\n const walletId = this.walletId;\n const currencyId = this.currencyId;\n\n if (!walletUserAccountId || !walletId || !currencyId) {\n return;\n }\n\n const fetchKey = `${walletUserAccountId}:${walletId}:${currencyId}`;\n if (this.lastWalletFetchKey === fetchKey && isNotNull(this.agentUserWallet)) {\n return;\n }\n\n this.lastWalletFetchKey = fetchKey;\n this.walletService.getUserWalletDetailsUsingJava({\n user_id: walletUserAccountId,\n wallet_id: walletId,\n currency_id: currencyId,\n }).subscribe({\n next: (res) => {\n if (res?.success) {\n this.agentUserWallet = normalizeUserWalletBalance(res?.data?.wallet ?? null);\n }\n },\n });\n }\n\n private loadCurrentUserDetailsFromApi(): void {\n const cfg = (this.paymentsConfigService.getConfig() ?? {}) as any;\n const cfgHeaders = (cfg?.defaultHeaders ?? {}) as Record<string, string>;\n const userId = (cfgHeaders[\"userid\"] ?? cfgHeaders[\"userId\"] ?? cfg?.userId ?? \"\").toString().trim();\n\n if (!userId) {\n return;\n }\n\n this.userService.getUserByIdUsingJava(userId).subscribe({\n next: (res: any) => {\n if (res?.success) {\n const userDetail = res?.data?.user_detail || null;\n this.currentUserDetails = userDetail;\n this.isTxnPinCreated = Boolean(userDetail?.transaction_pin);\n this.fetchAgentWalletFromApi();\n }\n },\n });\n }\n\n private showModal(modalId: string): void {\n const g: any = globalThis as any;\n const doc = g?.document as Document | undefined;\n const el = doc?.getElementById(modalId) ?? null;\n\n const jq = g?.$;\n if (jq && typeof jq === \"function\") {\n const modalEl = jq(`#${modalId}`);\n if (modalEl?.length && typeof modalEl.modal === \"function\") {\n modalEl.modal(\"show\");\n return;\n }\n }\n\n if (el && openUtilityBootstrapModal(el)) {\n return;\n }\n\n const BootstrapModal = g?.bootstrap?.Modal;\n if (el && BootstrapModal && typeof BootstrapModal.getOrCreateInstance === \"function\") {\n try {\n BootstrapModal.getOrCreateInstance(el).show();\n return;\n } catch {\n /* fall through to DOM */\n }\n }\n\n if (!el) {\n return;\n }\n\n el.classList.add(\"show\");\n (el as HTMLElement).style.display = \"block\";\n el.removeAttribute(\"aria-hidden\");\n el.setAttribute(\"aria-modal\", \"true\");\n\n if (!doc?.querySelector(\".utility-payments-modal-backdrop\")) {\n const backdrop = doc!.createElement(\"div\");\n backdrop.className = \"modal-backdrop fade show utility-payments-modal-backdrop\";\n doc!.body.appendChild(backdrop);\n }\n doc!.body.classList.add(\"modal-open\");\n }\n\n private hideModal(modalId: string): void {\n const g: any = globalThis as any;\n const doc = g?.document as Document | undefined;\n const el = doc?.getElementById(modalId) ?? null;\n\n const jq = g?.$;\n if (jq && typeof jq === \"function\") {\n const modalEl = jq(`#${modalId}`);\n if (modalEl?.length && typeof modalEl.modal === \"function\") {\n modalEl.modal(\"hide\");\n return;\n }\n }\n\n if (el && closeUtilityBootstrapModal(el)) {\n return;\n }\n\n const BootstrapModal = g?.bootstrap?.Modal;\n if (el && BootstrapModal && typeof BootstrapModal.getInstance === \"function\") {\n try {\n const inst = BootstrapModal.getInstance(el);\n inst?.hide();\n return;\n } catch {\n /* fall through to DOM */\n }\n }\n\n if (el) {\n el.classList.remove(\"show\");\n (el as HTMLElement).style.display = \"none\";\n el.setAttribute(\"aria-hidden\", \"true\");\n el.removeAttribute(\"aria-modal\");\n }\n\n doc?.querySelectorAll(\".utility-payments-modal-backdrop\").forEach((node) => node.remove());\n doc?.body.classList.remove(\"modal-open\");\n }\n}\n","<div class=\"content review-payment-page\">\n <header class=\"page-header\">\n <div class=\"d-flex align-items-center flex-wrap\">\n <div class=\"mr-auto\">\n <h1>{{ 'LABEL_REVIEW_PAYMENT' | translate }}</h1>\n </div>\n </div>\n </header>\n\n <section class=\"page-content container-fluid review-payment-section\">\n <div class=\"card m-0 border-0 review-payment-shell\">\n <form role=\"form\">\n <div class=\"card-body review-payment-body\">\n <div class=\"review-payment-content\">\n <div class=\"row g-3\">\n <div class=\"col-xl-8\">\n <h5 class=\"border-bottom pb-3 font-weight-600 section-heading\"> {{ 'LABEL_PAYMENT_SUMMARY' | translate\n }} </h5>\n <div class=\"border-bottom table-responsive payment-summary-table review-table\">\n <table aria-label class=\"table m-0\">\n <tbody>\n <!-- <tr>\n <td>{{ 'LABEL_CATEGORY_TYPE' | translate }}</td>\n <td class=\"text-right\">{{\n providerCategoryTypes[vendorCategory?.category_type] || \"-\" |\n translate}}</td>\n </tr> -->\n @if(providerCode != \"SOCHIETEL\"){\n <tr>\n <td>{{ 'LABEL_BILL_NUMBER' | translate }}</td>\n @if (providerCode != 'DBA_POSTPAID_ELECTRICITY') {\n <td class=\"text-right\">{{ billData?.selectedBill?.bill_number || \"-\" }}</td>\n }\n @if (providerCode == 'DBA_POSTPAID_ELECTRICITY') {\n <td class=\"text-right\">{{ billData?.selectedBill?.bill_code || \"-\" }}</td>\n }\n </tr>\n }\n <tr>\n <td>{{ 'LABEL_PROVIDER_NAME' | translate }}</td>\n <td class=\"text-right\">{{ vendorProvider?.provider_name || \"-\" }}</td>\n </tr>\n <!-- <tr>\n <td>{{ 'LABEL_VENDOR_NAME' | translate }}</td>\n <td class=\"text-right\">{{ vendorDetails?.vendor_name }}</td>\n </tr> -->\n <!-- @if(providerCode == \"SOCHIETEL\"){ -->\n @if( vendorCategory?.category_key == \"airtime_data\"){\n <tr>\n <td>{{ 'LABEL_PRODUCT_NAME' | translate }}</td>\n <td class=\"text-right\">{{ planData?.product_name || \"-\" }}</td>\n </tr>\n }\n\n @if(vendorCategory?.category_key == \"road_tax\" || vendorCategory?.category_key == \"ROAD_TAX\"){\n @if (billData?.selectedBill?.meta_data) {\n @for (key of objectKeys(billData?.selectedBill?.meta_data); track key) {\n <tr>\n <td>{{ removeunderScore(key) }}</td>\n <td class=\"text-right\">\n {{ \n (billData?.selectedBill?.meta_data[key] == 0 ? (0 | price: { currency }): billData?.selectedBill?.meta_data[key]) \n ?? \"-\"}}\n </td>\n </tr>\n }\n }\n }\n\n <!-- } -->\n <!-- <tr>\n <td>{{ 'COMMON_LABEL_DESCRIPTION' | translate }}</td>\n <td class=\"text-right\">{{ planData?.product_description || \"-\" }}</td>\n </tr> -->\n @if(mobileNumberInput){\n <tr>\n <td>{{ mobileNumberInput?.label || \"-\" }}</td>\n <td class=\"text-right\">{{ mobileNumberInput?.value || \"-\" }}</td>\n </tr>\n }\n @if(planData?.product_price_type == 1){\n <tr>\n <td>{{ 'LABEL_AMOUNT' | translate }}</td>\n <td class=\"text-right\">{{ planData?.product_fixed_price || 0.0 | price: { currency } }}</td>\n </tr>\n }@if(planData?.product_price_type == 2){\n <tr>\n <td>{{ 'LABEL_MINIMUM_AMOUNT' | translate }}: </td>\n <td class=\"text-right\">{{ planData?.product_range_price?.min || 0.0 | price: { currency } }}</td>\n </tr>\n <tr>\n <td>{{ 'LABEL_MAXIMUM_AMOUNT' | translate }}: </td>\n <td class=\"text-right\">{{ planData?.product_range_price?.max || 0.0 | price: { currency } }}</td>\n </tr>\n }\n @if(kwh){\n <tr>\n <td>{{ 'LABEL_KWH' | translate }}</td>\n <td class=\"text-right\">{{ kwh }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <h5 class=\"border-bottom pb-3 mb-4 font-weight-600 mt-3 section-heading\">\n {{'Debited From'}}\n </h5>\n <div class=\"media d-user align-items-center\">\n <img loading=\"lazy\" [src]=\"companyDetail?.logo ? companyDetail?.logo : 'assets/avatars/profile.jpg'\"\n alt=\"\" class=\"h-50 w-50 rounded-circle mr-3\" />\n <div class=\"media-body\">\n <h5 class=\"mb-1 fontsize14 font-weight-600\">{{ walletData?.wallet_name }}\n </h5>\n <span class=\"text-muted\"> {{\"LABEL_AVAILABLE_BALANCE\" | translate}} :\n {{agentUserWallet?.wallet_balance | price : {currency} }}</span>\n </div>\n </div>\n\n <!-- <ng-container *ngIf=\"calculateCharges?.charges?.length > 0\">\n <h5 class=\"border-bottom pb-3 mb-3 mt-3 font-weight-600\"> {{ 'COMMON_LABEL_CHARGES'\n |\n translate }} </h5>\n <div class=\"table-responsive payment-summary-table\">\n <table aria-label class=\"table m-0\">\n <tbody>\n <tr *ngFor=\"let obj of calculateCharges?.charges\">\n <td>{{ obj?.charge_name }}</td>\n <td class=\"text-right\">{{ obj?.final_charge || 0.0 | price: {\n currency } }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container> -->\n\n <!-- <ng-container *ngIf=\"workFlowUserInput?.length > 0\">\n <h5 class=\"border-bottom pb-3 mb-3 mt-3 font-weight-600\"> {{ 'LABEL_USER_INPUT' |\n translate }} </h5>\n <div class=\"table-responsive payment-summary-table\">\n <table aria-label class=\"table m-0\">\n <tbody>\n <tr *ngIf=\"meterName?.customer_name\">\n <td>{{ 'LABEL_METER_NAME' | translate }}</td>\n <td class=\"text-right\">{{ meterName?.customer_name }}</td>\n </tr>\n <tr *ngFor=\"let obj of workFlowUserInput\">\n <td>{{ obj?.label }}</td>\n <td class=\"text-right\">{{ obj?.value }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container> -->\n\n @if (isPlanReview && planData) {\n <h5 class=\"border-bottom pb-3 mb-3 mt-3 font-weight-600 section-heading\"> {{ 'LABEL_PLAN_DETAILS' |\n translate }} </h5>\n <div class=\"table-responsive payment-summary-table review-table\">\n <table aria-label class=\"table m-0\">\n <tbody>\n @if( vendorCategory?.category_key != \"airtime_credit\"){\n <tr>\n <td>{{ 'LABEL_PRODUCT_NAME' | translate }}</td>\n <td class=\"text-right\">{{ planData?.product_name }}</td>\n </tr>\n }\n <tr>\n <td class=\"font-weight-600\">{{ 'COMMON_LABEL_AMOUNT' | translate }}\n </td>\n <td class=\"font-weight-600 text-right\">{{\n planData?.product_fixed_price || this.amount || 0.0| price: {\n currency } }}</td>\n </tr>\n @if (calculateCharges?.charges?.length > 0) {\n @for (obj of calculateCharges?.charges; track obj) {\n <tr>\n <td>{{ obj?.charge_name }}</td>\n <td class=\"text-right\">{{ obj?.final_charge || 0.0 | price: {\n currency } }}</td>\n </tr>\n }\n }\n @if (vendorCharge?.charges?.length > 0) {\n @for (obj of vendorCharge?.charges; track obj) {\n <tr>\n <td>{{ obj?.charge_name }}</td>\n <td class=\"text-right\">{{ obj?.final_charge || 0.0 | price: {\n currency } }}</td>\n </tr>\n }\n }\n <tr>\n <td class=\"font-weight-600\">{{ 'LABEL_PAYABLE' | translate }}\n </td>\n <td class=\"font-weight-600 text-right\">{{\n paybleAmount || planData?.product_fixed_price || 0.0 |\n price: { currency }\n }}</td>\n </tr>\n </tbody>\n </table>\n </div>\n }\n\n @if (isBillReview && billData) {\n <h5 class=\"border-bottom pb-3 mb-3 mt-3 font-weight-600 section-heading\"> {{ 'LABEL_BILL_DETAILS' |\n translate }} </h5>\n <div class=\"table-responsive payment-summary-table review-table\">\n <table aria-label class=\"table m-0\">\n <tbody>\n <!-- <tr>\n <td>{{ 'LABEL_BILL_NUMBER' | translate }}</td>\n <td class=\"text-right\">{{ billData?.selectedBill?.bill_number }}\n </td>\n </tr> -->\n <tr>\n <td class=\"font-weight-600\">{{ 'COMMON_LABEL_AMOUNT' | translate }}\n </td>\n <!-- @if (providerCode != 'DBA_PREPAID_ELECTRICITY') { -->\n <td class=\"font-weight-600 text-right\">{{\n userAmountWithoutCharge || billData?.selectedBill?.bill_amount || 0.0 |\n price: { currency }\n }}\n </td>\n <!-- } -->\n <!-- @if (providerCode == 'DBA_PREPAID_ELECTRICITY') {\n <td class=\"font-weight-600 text-right\">{{\n userAmountWithoutCharge || 0.0 |\n price: { currency }\n }}\n </td>\n } -->\n </tr>\n @if (calculateCharges?.charges?.length > 0) {\n @for (obj of calculateCharges?.charges; track obj) {\n <tr>\n <td>{{ obj?.charge_name }}</td>\n <td class=\"text-right\">{{ obj?.final_charge || 0.0 | price: {\n currency } }}</td>\n </tr>\n }\n }\n @if (vendorCharge?.charges?.length > 0) {\n @for (obj of vendorCharge?.charges; track obj) {\n <tr>\n <td>{{ obj?.charge_name }}</td>\n <td class=\"text-right\">{{ obj?.final_charge || 0.0 | price: {\n currency } }}</td>\n </tr>\n }\n }\n <tr>\n <td class=\"font-weight-600\">{{ 'LABEL_PAYABLE' | translate }}\n </td>\n <!-- @if (providerCode != 'DBA_PREPAID_ELECTRICITY' && providerCode != 'DBA_POSTPAID_ELECTRICITY') { -->\n <td class=\"font-weight-600 text-right\">{{\n paybleAmount || billData?.selectedBill?.bill_amount || 0.0 |\n price: { currency }\n }}</td>\n <!-- } -->\n <!-- @if (providerCode == 'DBA_POSTPAID_ELECTRICITY') {\n <td class=\"font-weight-600 text-right\" >{{\n userAmount || billData?.selectedBill?.bill_amount || 0.0 |\n price: { currency }\n }}</td>\n }\n @if (providerCode == 'DBA_PREPAID_ELECTRICITY') {\n <td class=\"font-weight-600 text-right\" >{{\n userAmount || billData?.selectedBill?.bill_amount || 0.0 |\n price: { currency }\n }}</td>\n } -->\n </tr>\n @if (billData?.selectedBill?.bill_meta_data) {\n @for (key of objectKeys(billData?.selectedBill?.bill_meta_data); track key) {\n <tr>\n <td class=\"font-weight-600\"> {{ removeunderScore(key) }}</td>\n <td class=\"font-weight-600 text-right\">\n {{ billData?.selectedBill?.bill_meta_data[key] || \"-\"}}\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n\n <div class=\"col-xl-4\">\n <div\n class=\"card review-amount-card equal-height d-flex align-items-center justify-content-center m-0 shadow-none border\">\n <div class=\"card-body d-flex align-items-center py-4\">\n <div class=\"text-center\">\n @if (isBillReview) {\n <h6 class=\"d-block m-b-15 text-grey font-size-16 amount-label\"> {{\n 'LABEL_BILL_AMOUNT' | translate }}\n </h6>\n @if (providerCode != 'DBA_PREPAID_ELECTRICITY' && providerCode != 'DBA_POSTPAID_ELECTRICITY') {\n <h2 class=\"mb-0 font-size-26 font-weight-600\"> {{\n paybleAmount || billData?.selectedBill?.bill_amount || 0.0 | price:\n { currency } }}\n </h2>\n }\n @if (providerCode == 'DBA_PREPAID_ELECTRICITY') {\n <h2 class=\"mb-0 font-size-26 font-weight-600\"> {{\n userAmountWithoutCharge || 0.0 | price:\n { currency } }}\n </h2>\n }\n @if (providerCode == 'DBA_POSTPAID_ELECTRICITY') {\n <h2 class=\"mb-0 font-size-26 font-weight-600\"> {{\n userAmountWithoutCharge || 0.0 | price:\n { currency } }}\n </h2>\n }\n }\n @if (isPlanReview) {\n <h6 class=\"d-block m-b-15 text-grey font-size-16 amount-label\"> {{\n 'LABEL_PLAN_AMOUNT' | translate }}\n </h6>\n <h2 class=\"mb-0 font-size-26 font-weight-600\"> {{\n paybleAmount || planData?.product_fixed_price || 0.0 | price: { currency } }} </h2>\n }\n @if (!isPlanReview && !isBillReview) {\n <h6 class=\"d-block m-b-15 text-grey font-size-16 amount-label\"> {{\n 'COMMON_LABEL_AMOUNT' | translate }}\n </h6>\n <h2 class=\"mb-0 font-size-26 font-weight-600\"> {{ amount || 0.0 | price:\n { currency } }} </h2>\n\n }\n \n\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-footer review-payment-footer text-right\">\n <button type=\"button\" class=\"btn btn-outline-secondary btn-sm\" (click)=\"cancel()\">{{ 'COMMON_LABEL_CANCEL' |\n translate }}</button>\n <button type=\"button\" class=\"btn btn-primary btn-sm\" [disabled]=\"showLoader\" (click)=\"enterTxnPin()\">{{\n 'COMMON_LABEL_SUBMIT' | translate }}</button>\n </div>\n </form>\n </div>\n </section>\n</div>\n\n<style>\n .review-payment-page .page-header h1 {\n font-size: 1.35rem;\n font-weight: 700;\n color: #1e3a5f;\n margin-bottom: 0.25rem;\n }\n\n .review-payment-section {\n padding-left: 0;\n padding-right: 0;\n }\n\n .review-payment-shell {\n border: 1px solid #dce3eb !important;\n border-radius: 8px;\n background: #fff;\n overflow: hidden;\n }\n\n .review-payment-body {\n padding: 1.1rem 1.2rem 0.8rem;\n }\n\n .review-payment-content {\n margin-top: 0.2rem;\n }\n\n .section-heading {\n color: #1e3a5f;\n font-size: 0.95rem;\n font-weight: 700;\n margin-bottom: 0.7rem !important;\n }\n\n .review-table table td {\n font-size: 0.8rem;\n color: #264563;\n padding: 0.5rem 0.25rem;\n vertical-align: middle;\n border-top-color: #edf1f5;\n }\n\n .review-amount-card {\n min-height: 100%;\n border: 1px solid #dce3eb !important;\n border-radius: 6px;\n background: #f6f8fa;\n }\n\n .amount-label {\n color: #7b8fa6 !important;\n font-weight: 600;\n letter-spacing: 0.01em;\n margin-bottom: 0.55rem !important;\n }\n\n .review-amount-card h2 {\n color: #1e3a5f;\n font-size: 2rem !important;\n font-weight: 700;\n }\n\n .review-payment-footer {\n border-top: 1px solid #e4e9ef;\n background: #fff;\n padding: 0.65rem 1rem;\n }\n\n .review-payment-footer .btn {\n min-width: 86px;\n margin-left: 0.45rem;\n }\n\n .txn-pin-modal-dialog {\n max-width: 420px;\n }\n\n .txn-pin-modal-content {\n border: 1px solid #e8edf3;\n border-radius: 12px;\n box-shadow: 0 0.5rem 1.5rem rgba(15, 34, 58, 0.12);\n overflow: hidden;\n }\n\n .txn-pin-modal-header {\n padding: 0.75rem 1rem;\n border-bottom: 1px solid #eef2f6;\n }\n\n .txn-pin-title {\n margin: 0;\n font-size: 1.05rem;\n font-weight: 700;\n color: #1f3f66;\n }\n\n .txn-pin-modal-body {\n padding: 0.9rem 1rem 0.75rem;\n }\n\n .txn-pin-subtitle {\n margin: 0 0 0.75rem;\n font-size: 0.8rem;\n color: #8d9fb2;\n }\n\n .txn-pin-modal-footer {\n border-top: 1px solid #eef2f6;\n padding: 0.55rem 0.85rem;\n gap: 0.5rem;\n justify-content: flex-end;\n }\n\n .txn-pin-close-btn,\n .txn-pin-submit-btn {\n min-width: 74px;\n padding: 0.22rem 0.85rem;\n font-size: 0.75rem;\n border-radius: 4px;\n }\n\n .txn-pin-forgot-btn {\n margin-right: auto;\n font-size: 0.76rem;\n color: #0d6efd;\n text-decoration: none;\n }\n</style>\n\n@if (showLoader) {\n<sdk-common-loader message=\"{{ 'LABEL_PLEASE_WAIT' | translate }}...\"></sdk-common-loader>\n}\n<div id=\"OTPVerification\" class=\"modal fade\" role=\"dialog\" aria-labelledby=\"OTPVerificationLabel\" data-backdrop=\"static\"\n data-keyboard=\"false\">\n <div class=\"modal-dialog\" role=\"document\">\n <form [formGroup]=\"otpForm\" (ngSubmit)=\"submitOTPForm()\" role=\"form\" aria-label>\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\"> {{'LABEL_OTP_VERIFICATION' |translate}} </h3>\n </div>\n <div class=\"modal-body py-4\">\n <div class=\"form-group\">\n <p class=\"m-b-20 text-muted\">{{'LABEL_ENTER_4_DIGIT_NUMBER_SENT_TO'|translate}}\n <span class=\"font-weight-600 ml-1 text-dark\">{{ currentUserDetails?.dial_code + \" \" +\n currentUserDetails?.phone_number }}</span>\n </p>\n <label for=\"inputOTP\" class=\"sr-only\">{{'LABEL_OTP' |translate}}</label>\n <sdk-otp-input (inputChange)=\"onOtpChange($event)\" [length]=\"pinLength\"\n [isPassword]=\"true\"> </sdk-otp-input>\n @if (formErrors.otp) {\n <span class=\"help-block\" [innerHTML]=\"formErrors.otp\"></span>\n }\n\n @if (otpResendTime > 0) {\n @if (timer === 0) {\n <button type=\"button\" class=\"p-2 mt-1 btn-link\" (click)=\"sendOTPToAgent()\">\n {{ 'LABEL_RESEND_OTP' | translate }}\n </button>\n } @else {\n <p class=\"p-2 mt-1 text-muted\">\n {{ 'LABEL_RESEND_OTP' | translate }}\n <span class=\"font-weight-600\">{{ getTimerString(timer) }}</span>\n </p>\n }\n }\n </div>\n <button type=\"submit\" class=\"btn btn-primary btn-block btn-lg mt-2\"\n [ngClass]=\"{'qt-loader qt-loader-mini qt-loader-left': showLoader}\" [disabled]=\"showLoader\">\n {{'COMMON_LABEL_CONFIRM'\n |translate}}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n\n\n<!-- Transaction PIN Modal -->\n<div id=\"TransactionPIN\" class=\"modal fade\" role=\"dialog\" aria-labelledby=\"TransactionPINLabel\" data-backdrop=\"static\"\n data-keyboard=\"false\">\n <div class=\"modal-dialog txn-pin-modal-dialog\" role=\"document\">\n <form [formGroup]=\"txnPINForm\" (ngSubmit)=\"submitPINForm()\" role=\"form\" aria-label>\n <div class=\"modal-content txn-pin-modal-content\">\n <div class=\"modal-header txn-pin-modal-header\">\n <h3 class=\"modal-title txn-pin-title\">Transaction Pin</h3>\n </div>\n <div class=\"modal-body txn-pin-modal-body\">\n <div class=\"form-group mb-0\">\n <p class=\"txn-pin-subtitle\">Enter your transaction Pin to proceed</p>\n <label for=\"inputOTP\" class=\"sr-only\">{{'LABEL_PIN' |translate}}</label>\n @if (otpReset) {\n <sdk-otp-input\n class=\"txn-pin-input\"\n [segmented]=\"true\"\n [autoFocus]=\"true\"\n (inputChange)=\"onTxnPinChange($event)\"\n [length]=\"pinLength\"\n [isPassword]=\"true\"\n ></sdk-otp-input>\n }\n @if (formErrors.pin) {\n <span class=\"help-block\" [innerHTML]=\"formErrors.pin\"></span>\n }\n </div>\n </div>\n <div class=\"modal-footer txn-pin-modal-footer\">\n <!-- @if (inValidTxnPin) {\n <button type=\"button\" class=\"btn btn-link txn-pin-forgot-btn px-0\" (click)=\"forgotTxnPin()\">\n {{ 'LABEL_FORGOT_TXN_PIN' | translate }}\n </button>\n } -->\n <button type=\"button\" class=\"btn btn-light btn-sm txn-pin-close-btn\" (click)=\"closeTransactionPinModal()\">\n Close\n </button>\n <button type=\"submit\" class=\"btn btn-primary btn-sm txn-pin-submit-btn\" [disabled]=\"showLoader\">\n Submit\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>\n\n<!-- Confirm Transaction PIN Modal -->\n<div id=\"ConfirmTransactionPIN\" class=\"modal fade\" role=\"dialog\" aria-labelledby=\"ConfirmTransactionPINLabel\"\n data-backdrop=\"static\" data-keyboard=\"false\">\n <div class=\"modal-dialog modal-md\" role=\"document\">\n <form [formGroup]=\"txnPINForm\" (ngSubmit)=\"submitConfirmPINForm()\" role=\"form\" aria-label>\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\">{{ 'LABEL_CONFIRM_TRANSACTION_PIN' | translate }}</h3>\n </div>\n <div class=\"modal-body py-4\">\n <div class=\"form-group\">\n <p class=\"m-b-20 text-muted\">{{ 'LABEL_REENTER_4_DIGIT_TRANSACTION_PIN' | translate }}</p>\n @if (otpConfirm) {\n <sdk-otp-input\n #otpInputComp\n [segmented]=\"true\"\n [autoFocus]=\"true\"\n (inputChange)=\"onTxnPinChange($event)\"\n [length]=\"pinLength\"\n [isPassword]=\"true\"\n ></sdk-otp-input>\n }\n @if (formErrors.confirmPin) {\n <span class=\"help-block\" [innerHTML]=\"formErrors.confirmPin\"></span>\n }\n </div>\n <!-- <p\n class=\"card bg-light text-center p-2 flex-row justify-content-center flex-wrap rounded mt-4 mb-3\">\n {{'LABEL_YOU_ARE_SENDING_MONEY_TO' |translate}} <span class=\"font-weight-600 ml-2\"> {{\n senderReceiverStore?.receiver?.first_name + \" \" +\n senderReceiverStore?.receiver?.last_name }}</span></p> -->\n <button type=\"submit\" class=\"btn btn-primary btn-block btn-lg mt-2\"\n [ngClass]=\"{'qt-loader qt-loader-mini qt-loader-left': showLoader}\" [disabled]=\"showLoader\">\n {{ 'COMMON_LABEL_CONFIRM' | translate }}\n </button>\n </div>\n </div>\n </form>\n </div>\n</div>","import { Component, OnInit, OnDestroy, OnChanges, SimpleChanges, inject, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { SdkStateService } from '../services/sdk-state.service';\nimport { PaymentsConfigService } from '../services/payments-config.service';\nimport { DataService } from '../services/data.service';\nimport { UtilitiesComponent } from '../components/utilities/utilities.component';\nimport { VendorProvidersComponent } from '../components/vendor-providers/vendor-providers.component';\nimport { WorkFlowComponent } from '../components/work-flow/work-flow.component';\nimport { RegionCommuneComponent } from '../components/region-commune/region-commune.component';\nimport { VendorProductsComponent } from '../components/vendor-products/vendor-products.component';\nimport { VendorPlansComponent } from '../components/vendor-plans/vendor-plans.component';\nimport { ViewBillsComponent } from '../components/view-bills/view-bills.component';\nimport { TopupAndBillpaymentReviewComponent } from '../components/topup-and-billpayment-review/topup-and-billpayment-review.component';\nimport { Subject, takeUntil } from 'rxjs';\nimport type { UtilityPaymentsConfigInput } from '../models/utility-payments-config.model';\nimport {\n UTILITY_PAYMENTS_SDK_BUILD_TAG,\n utilityPaymentsSdkDebug,\n utilityPaymentsSdkIsVerboseDebug,\n} from '../utils/sdk-debug';\n\n/**\n * Embeddable utilities / bill-pay flow. Host apps should:\n * - Mount `<sdk-utility-payments [config]=\"...\">` with `baseUrl` and `defaultHeaders` (auth, companyid, userid, etc.).\n * - Mount only inside a route or lazy-loaded chunk so the SDK is not in the initial bundle unless needed.\n * - Rely on internal step state when `SdkStateService` is active (default here) so host routes/layout stay unchanged.\n *\n * Optional dev form: set global `UTILITY_PAYMENTS_TEST_MODE` / env flags, or use demo app — not required in production hosts.\n */\n@Component({\n selector: 'sdk-utility-payments',\n standalone: true,\n host: {\n class: 'sdk-utility-payments-root',\n },\n imports: [\n CommonModule,\n ReactiveFormsModule,\n UtilitiesComponent,\n VendorProvidersComponent,\n WorkFlowComponent,\n RegionCommuneComponent,\n VendorProductsComponent,\n VendorPlansComponent,\n ViewBillsComponent,\n TopupAndBillpaymentReviewComponent,\n ],\n styles: [`\n :host {\n display: block;\n }\n\n :host ::ng-deep .sdk-utility-payments-container {\n font-size: 13px;\n line-height: 1.3;\n }\n\n :host ::ng-deep .content {\n padding: 0.75rem !important;\n }\n\n :host ::ng-deep .page-header {\n margin-bottom: 0.6rem !important;\n }\n\n :host ::ng-deep .page-header h1 {\n font-size: 1.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n\n /* Category grid: large page title like main agent panel (do not shrink with inner steps) */\n :host ::ng-deep sdk-utilities .utilities-title {\n font-size: 1.875rem !important;\n font-weight: 700 !important;\n line-height: 1.2 !important;\n letter-spacing: -0.02em;\n }\n\n :host ::ng-deep .card {\n border-radius: 8px;\n }\n\n :host ::ng-deep .card-header {\n padding: 0.6rem 0.9rem !important;\n }\n\n :host ::ng-deep .card-title {\n font-size: 1rem !important;\n margin-bottom: 0 !important;\n }\n\n :host ::ng-deep .card-body {\n padding: 0.8rem !important;\n }\n\n :host ::ng-deep .form-control,\n :host ::ng-deep .ng-select .ng-select-container {\n min-height: 34px !important;\n font-size: 13px !important;\n }\n\n :host ::ng-deep .form-label,\n :host ::ng-deep label {\n font-size: 13px !important;\n margin-bottom: 0.25rem !important;\n }\n\n :host ::ng-deep .btn {\n font-size: 13px !important;\n padding: 0.3rem 0.65rem !important;\n }\n\n /* Work flow: narrow card + compact fields (overrides globals above) */\n :host ::ng-deep .work-flow-card {\n max-width: 400px !important;\n width: 100% !important;\n margin-left: auto !important;\n margin-right: auto !important;\n }\n\n :host ::ng-deep .work-flow-page-header .page-title,\n :host ::ng-deep .work-flow-page-header h1 {\n font-size: 0.95rem !important;\n }\n\n :host ::ng-deep .work-flow-card .card-header {\n padding: 0.4rem 0.6rem !important;\n }\n\n :host ::ng-deep .work-flow-card .card-title {\n font-size: 0.85rem !important;\n }\n\n :host ::ng-deep .work-flow-card .card-body {\n padding: 0.55rem 0.65rem 0.7rem !important;\n }\n\n :host ::ng-deep .work-flow-card .form-group.form-row {\n display: flex !important;\n flex-direction: row !important;\n flex-wrap: nowrap !important;\n align-items: center !important;\n margin-bottom: 0.55rem !important;\n }\n\n :host ::ng-deep .work-flow-card .form-group.form-row > label.control-label {\n flex: 0 0 8.5rem !important;\n max-width: 8.5rem !important;\n width: 8.5rem !important;\n margin-bottom: 0 !important;\n padding-top: 0 !important;\n text-align: right !important;\n font-size: 0.72rem !important;\n }\n\n :host ::ng-deep .work-flow-card .form-group.form-row > .col-md-8 {\n flex: 1 1 auto !important;\n max-width: none !important;\n width: auto !important;\n }\n\n :host ::ng-deep .work-flow-card .form-control {\n min-height: 26px !important;\n height: 26px !important;\n max-width: 200px !important;\n width: 100% !important;\n font-size: 0.72rem !important;\n padding: 0.1rem 0.35rem !important;\n }\n\n :host ::ng-deep .work-flow-card textarea.form-control {\n height: auto !important;\n min-height: 3rem !important;\n max-width: 100% !important;\n }\n\n :host ::ng-deep .work-flow-card .work-flow-footer .btn {\n font-size: 0.7rem !important;\n padding: 0.15rem 0.45rem !important;\n }\n\n :host ::ng-deep .vendor-products-shell > .card-body {\n padding: 1.25rem 1.35rem 1.5rem !important;\n }\n\n :host ::ng-deep .vendor-products-shell .vendor-product-card .form-control {\n min-height: auto !important;\n height: auto !important;\n max-width: none !important;\n }\n `],\n template: `\n <div class=\"sdk-utility-payments-container\">\n @if (!isConfigured && isTestMode) {\n <div class=\"card p-4\">\n <h4 class=\"mb-2\">SDK Configuration</h4>\n <p class=\"text-muted mb-4\">Enter Java endpoint and company details before loading utility payments.</p>\n <form [formGroup]=\"configForm\" (ngSubmit)=\"saveRuntimeConfig()\">\n <div class=\"row g-3\">\n <div class=\"col-md-6\">\n <label class=\"form-label\">Java Endpoint *</label>\n <input type=\"url\" class=\"form-control\" formControlName=\"baseUrl\" placeholder=\"https://api.example.com/digipay/v3\" />\n @if (isControlInvalid('baseUrl')) {\n <small class=\"text-danger\">Java endpoint is required.</small>\n }\n </div>\n <div class=\"col-md-6\">\n <label class=\"form-label\">Company Id *</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"companyId\" placeholder=\"Enter company id\" />\n @if (isControlInvalid('companyId')) {\n <small class=\"text-danger\">Company id is required.</small>\n }\n </div>\n <div class=\"col-md-6\">\n <label class=\"form-label\">User Id (optional)</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"userId\" placeholder=\"Enter user id\" />\n </div>\n <div class=\"col-md-6\">\n <label class=\"form-label\">Auth Token (optional)</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"token\" placeholder=\"Bearer token or raw token\" />\n </div>\n </div>\n <div class=\"mt-4 d-flex justify-content-end\">\n <button class=\"btn btn-primary\" type=\"submit\">Load SDK</button>\n </div>\n </form>\n </div>\n } @else if (!isConfigured) {\n <div class=\"card p-4\">\n <h4 class=\"mb-2\">SDK Configuration Missing</h4>\n <p class=\"text-muted mb-0\">\n Pass runtime config from host app. The pre-load config form is available only when test mode is enabled.\n </p>\n </div>\n } @else {\n @switch (currentStep) {\n @case ('CATEGORY') {\n <sdk-utilities />\n }\n @case ('PROVIDER') {\n <sdk-vendor-providers />\n }\n @case ('REGION') {\n <sdk-region-commune />\n }\n @case ('WORKFLOW') {\n <sdk-work-flow />\n }\n @case ('BILLS') {\n <sdk-view-bills />\n }\n @case ('PLANS') {\n <sdk-vendor-plans />\n }\n @case ('PRODUCTS') {\n <sdk-vendor-products />\n }\n @case ('REVIEW') {\n <sdk-topup-and-billpayment-review />\n }\n @case ('SUMMARY') {\n <div class=\"p-4 text-center\">\n <h4>Transaction Complete</h4>\n <p class=\"text-muted\">Summary view (transaction-summary component excluded from build)</p>\n <button type=\"button\" class=\"btn btn-primary\"\n (click)=\"sdkState.setStep('CATEGORY')\">Start Over</button>\n </div>\n }\n @default {\n <sdk-utilities />\n }\n }\n }\n </div>\n `,\n})\nexport class UtilityPaymentsContainerComponent implements OnInit, OnDestroy, OnChanges {\n sdkState = inject(SdkStateService);\n private configService = inject(PaymentsConfigService);\n private dataService = inject(DataService);\n private formBuilder = inject(FormBuilder);\n private destroy$ = new Subject<void>();\n private readonly runtimeConfigStorageKey = '__utility_payments_runtime_config__';\n\n @Input() config?: UtilityPaymentsConfigInput | any;\n\n currentStep: string = 'CATEGORY';\n isConfigured = false;\n isTestMode = false;\n configForm = this.formBuilder.group({\n baseUrl: ['http://192.168.1.10:40/digipay/v3', Validators.required],\n companyId: ['dc9e651cb694c6faa4f7709503c4120', Validators.required],\n userId: ['ffdfc59c76cc4228a1b00cede74a3f7a'],\n token: ['Token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJmZmRmYzU5Yzc2Y2M0MjI4YTFiMDBjZWRlNzRhM2Y3YSIsImV4cCI6MTc3NjE0NDMzNSwicm9sZXMiOlsiUk9MRV9BR0VOVCJdfQ.9m6WfzGtMueLjXvEcbXa9qH9OaB1oMyDatXXevh5a8s'],\n });\n\n ngOnInit(): void {\n this.sdkState.setActive(true);\n this.isTestMode = this.resolveTestMode();\n this.loadRuntimeConfigFromStorage();\n try {\n (globalThis as Record<string, unknown>)['__UTILITY_PAYMENTS_SDK_BUILD_TAG__'] = UTILITY_PAYMENTS_SDK_BUILD_TAG;\n } catch {\n /* ignore */\n }\n utilityPaymentsSdkDebug('SDK_ROOT_INIT', { testMode: this.isTestMode });\n this.applyConfig();\n this.sdkState.step$.pipe(takeUntil(this.destroy$)).subscribe((step) => {\n this.currentStep = step;\n if (utilityPaymentsSdkIsVerboseDebug()) {\n utilityPaymentsSdkDebug('STEP', { step });\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['config']) {\n this.applyConfig();\n }\n }\n\n private applyConfig(): void {\n if (this.config?.baseUrl) {\n this.dataService.resetApiContext();\n this.configService.setConfig(this.normalizeConfig(this.config));\n this.dataService.initializeFromApi();\n this.isConfigured = true;\n this.sdkState.setStep('CATEGORY');\n utilityPaymentsSdkDebug('CONFIG_APPLIED', {\n source: 'host-input',\n baseUrl: this.shortUrlForLog(this.config.baseUrl),\n });\n return;\n }\n\n const formValue = this.configForm.getRawValue();\n if (this.isTestMode && formValue.baseUrl && formValue.companyId) {\n this.dataService.resetApiContext();\n this.configService.setConfig(this.buildRuntimeConfig(formValue));\n this.dataService.initializeFromApi();\n this.isConfigured = true;\n this.sdkState.setStep('CATEGORY');\n utilityPaymentsSdkDebug('CONFIG_APPLIED', {\n source: 'test-form',\n baseUrl: this.shortUrlForLog(formValue.baseUrl),\n });\n return;\n }\n\n this.isConfigured = false;\n }\n\n saveRuntimeConfig(): void {\n this.configForm.markAllAsTouched();\n if (this.configForm.invalid) {\n return;\n }\n\n const value = this.configForm.getRawValue();\n this.persistRuntimeConfigToStorage(value);\n this.config = this.buildRuntimeConfig(value);\n this.applyConfig();\n }\n\n isControlInvalid(controlName: 'baseUrl' | 'companyId'): boolean {\n const control = this.configForm.get(controlName);\n return Boolean(control?.invalid && (control?.dirty || control?.touched));\n }\n\n private resolveTestMode(): boolean {\n const globalRef: any = globalThis as any;\n const env = globalRef?.process?.env ?? {};\n const rawValue =\n globalRef?.UTILITY_PAYMENTS_TEST_MODE ??\n globalRef?.__UTILITY_PAYMENTS_TEST_MODE__ ??\n globalRef?.__env?.UTILITY_PAYMENTS_TEST_MODE ??\n env.UTILITY_PAYMENTS_TEST_MODE ??\n env.NG_APP_UTILITY_PAYMENTS_TEST_MODE ??\n env.VITE_UTILITY_PAYMENTS_TEST_MODE ??\n '';\n\n if (typeof rawValue === 'boolean') {\n return rawValue;\n }\n\n const normalized = String(rawValue).trim().toLowerCase();\n return normalized === '1' || normalized === 'true' || normalized === 'yes' || normalized === 'on';\n }\n\n private buildRuntimeConfig(value: { baseUrl?: string | null; companyId?: string | null; userId?: string | null; token?: string | null }): any {\n const normalizedBaseUrl = (value.baseUrl ?? '').trim().replace(/\\/+$/, '');\n const token = (value.token ?? '').trim();\n const companyId = (value.companyId ?? '').trim();\n const userId = (value.userId ?? '').trim();\n\n return {\n baseUrl: normalizedBaseUrl,\n defaultHeaders: {\n ...(token ? { Authorization: token.includes(' ') ? token : `Bearer ${token}` } : {}),\n ...(companyId ? { companyid: companyId } : {}),\n ...(userId ? { userid: userId } : {}),\n },\n };\n }\n\n private normalizeConfig(inputConfig: any): any {\n const formValue = this.configForm.getRawValue();\n const incomingHeaders = (inputConfig?.defaultHeaders ?? {}) as Record<string, string>;\n const tokenFromIncoming = incomingHeaders['Authorization'] ?? inputConfig?.token ?? '';\n const companyIdFromIncoming = incomingHeaders['companyid'] ?? inputConfig?.companyId ?? '';\n const userIdFromIncoming = incomingHeaders['userid'] ?? inputConfig?.userId ?? '';\n\n return this.buildRuntimeConfig({\n baseUrl: inputConfig?.baseUrl ?? formValue.baseUrl ?? '',\n token: tokenFromIncoming || formValue.token || '',\n companyId: companyIdFromIncoming || formValue.companyId || '',\n userId: userIdFromIncoming || formValue.userId || '',\n });\n }\n\n private loadRuntimeConfigFromStorage(): void {\n try {\n const raw = localStorage.getItem(this.runtimeConfigStorageKey);\n if (!raw) return;\n const saved = JSON.parse(raw);\n this.configForm.patchValue({\n baseUrl: saved?.baseUrl ?? '',\n companyId: saved?.companyId ?? '',\n userId: saved?.userId ?? '',\n token: saved?.token ?? '',\n });\n } catch {\n // Ignore malformed local storage values.\n }\n }\n\n private persistRuntimeConfigToStorage(value: { baseUrl?: string | null; companyId?: string | null; userId?: string | null; token?: string | null }): void {\n localStorage.setItem(this.runtimeConfigStorageKey, JSON.stringify({\n baseUrl: value.baseUrl ?? '',\n companyId: value.companyId ?? '',\n userId: value.userId ?? '',\n token: value.token ?? '',\n }));\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.sdkState.setActive(false);\n }\n\n private shortUrlForLog(url: string | null | undefined): string {\n const u = (url ?? '').trim();\n if (!u) return '';\n try {\n const parsed = new URL(u.startsWith('http') ? u : `https://${u}`);\n return `${parsed.origin}${parsed.pathname.length > 48 ? `${parsed.pathname.slice(0, 45)}…` : parsed.pathname}`;\n } catch {\n return u.length > 64 ? `${u.slice(0, 61)}…` : u;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UtilityPaymentsContainerComponent } from './container/utility-payments.container';\n\n@NgModule({\n imports: [\n CommonModule,\n UtilityPaymentsContainerComponent\n ],\n exports: [\n UtilityPaymentsContainerComponent\n ]\n})\nexport class UtilityPaymentsModule {}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WorkflowStateService {\n\n private stepSubject = new BehaviorSubject<string>('CATEGORY');\n\n step$ = this.stepSubject.asObservable();\n\n setStep(step: string) {\n this.stepSubject.next(step);\n }\n\n nextStep(step: string) {\n this.stepSubject.next(step);\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.PaymentsApiService","i1.TranslationService","i2.TranslatePipe","i1","i3.TranslatePipe","i3.PricePipe","i2","i3","i1.TopupAndBillpaymentService","i4.TranslationService","i6.SdkStateService","i7","i8.TranslatePipe","i4.TranslatePipe","i1.TranslatePipe","i1.PricePipe","i3.OtpInputComponent","i4.CommonLoaderComponent","i5.TranslatePipe","i5.PricePipe"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;MAOa,eAAe,CAAA;AAClB,IAAA,aAAa,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC;AACnD,IAAA,WAAW,GAAG,IAAI,eAAe,CAAe,UAAU,CAAC;IAEnE,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK;IACjC;AAEA,IAAA,SAAS,CAAC,MAAe,EAAA;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;IACjC;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;IACxC;AAEA,IAAA,OAAO,CAAC,IAAkB,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;wGAlBW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA;;4FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCDY,qBAAqB,CAAA;AAEhC,IAAA,MAAM;AAEN,IAAA,SAAS,CAAC,MAAW,EAAA;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;IAEA,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;wGAVW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA;;4FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCIY,8BAA8B,GACzC,IAAI,cAAc,CAA8B,gCAAgC;;MCArE,kBAAkB,CAAA;AACrB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC;IACtC,YAAY,GAAG,MAAM,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEjF,IAAA,IAAY,OAAO,GAAA;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACnC,QAAA,OAAO,GAAG,EAAE,OAAO,IAAI,EAAE;IAC3B;AAEA,IAAA,IAAY,cAAc,GAAA;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QACnC,MAAM,UAAU,IAAI,GAAG,EAAE,cAAc,IAAI,EAAE,CAA2B;AACxE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,UAAU,EAAE;IACvC;IAEQ,gBAAgB,GAAA;QACtB,MAAM,OAAO,GAA2B,EAAE;QAC1C,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,OAAO;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;QAC5C,IAAI,KAAK,EAAE;YACT,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAA,OAAA,EAAU,KAAK,EAAE;QAC5E;QACA,IAAI,SAAS,IAAI,IAAI;YAAE,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;QAC/D,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;AACtD,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,oBAAoB,CAAC,EAAU,EAAA;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,kCAAA,EAAqC,EAAE,CAAA,CAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IAClH;IAEA,gCAAgC,CAAC,SAAc,EAAE,EAAA;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,4CAAA,CAA8C,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IAC/H;AAEA,IAAA,kCAAkC,CAAC,EAAU,EAAA;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,6CAAA,EAAgD,EAAE,CAAA,CAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IAC7H;IAEA,iCAAiC,CAAC,SAAc,EAAE,EAAA;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,kCAAA,CAAoC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACrH;IAEA,qCAAqC,CAAC,SAAc,IAAI,EAAA;QACtD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,oCAAA,CAAsC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACvH;IAEA,qCAAqC,CAAC,SAAc,EAAE,EAAA;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,oCAAA,CAAsC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACvH;AAEA,IAAA,mBAAmB,CAAC,OAAY,EAAA;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,oCAAA,CAAsC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACzH;IAEA,wBAAwB,CAAC,SAAc,EAAE,EAAA;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,oCAAA,CAAsC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACvH;IAEA,uBAAuB,CAAC,SAAc,EAAE,EAAA;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,yCAAA,CAA2C,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IAC5H;IAEA,qBAAqB,CAAC,SAAc,EAAE,EAAA;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,wCAAA,CAA0C,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IAC3H;IAEA,wBAAwB,CAAC,SAAc,EAAE,EAAA;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,aAAA,CAAe,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IAChG;IAEA,iCAAiC,CAAC,SAAc,EAAE,EAAA;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,oBAAA,CAAsB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACvG;IAEA,uBAAuB,CAAC,SAAc,EAAE,EAAA;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,cAAA,CAAgB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACjG;AAEA;;AAEG;IAEH,aAAa,CAAC,SAAc,EAAE,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,gCAAgC,CAAC,MAAM,CAAC;IACtD;IAEA,YAAY,CAAC,SAAc,EAAE,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,qCAAqC,CAAC,MAAM,CAAC;IAC3D;IAEA,kBAAkB,CAAC,SAAc,EAAE,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,qCAAqC,CAAC,MAAM,CAAC;IAC3D;AAEA,IAAA,QAAQ,CAAC,OAAY,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;IAC1C;;AAGA,IAAA,cAAc,CAAC,OAAY,EAAA;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,mCAAA,CAAqC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACxH;wGA1GW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCDY,WAAW,CAAA;AACd,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC;IACtC,YAAY,GAAG,MAAM,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEjF,IAAA,IAAY,OAAO,GAAA;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,OAAO,IAAI,EAAE;IAC/C;AAEA,IAAA,IAAY,cAAc,GAAA;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QACnC,MAAM,UAAU,IAAI,GAAG,EAAE,cAAc,IAAI,EAAE,CAA2B;AACxE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,UAAU,EAAE;IACvC;IAEQ,gBAAgB,GAAA;QACtB,MAAM,OAAO,GAA2B,EAAE;QAC1C,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,OAAO;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;AAC5C,QAAA,IAAI,KAAK;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,KAAK,GAAG,CAAA,OAAA,EAAU,KAAK,EAAE;QAC7F,IAAI,SAAS,IAAI,IAAI;YAAE,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;QAC/D,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;AACtD,QAAA,OAAO,OAAO;IAChB;IAEA,oBAAoB,CAAC,SAAc,EAAE,EAAA;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,WAAA,CAAa,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IAC9F;AAEA,IAAA,oBAAoB,CAAC,EAAU,EAAE,MAAA,GAAc,EAAE,EAAA;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,kBAAA,EAAqB,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1G;wGAlCW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA;;4FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCCrB,aAAa,CAAA;AAChB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC;IACtC,YAAY,GAAG,MAAM,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEjF,IAAA,IAAY,OAAO,GAAA;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,OAAO,IAAI,EAAE;IAC/C;AAEA,IAAA,IAAY,cAAc,GAAA;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QACnC,MAAM,UAAU,IAAI,GAAG,EAAE,cAAc,IAAI,EAAE,CAA2B;AACxE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,UAAU,EAAE;IACvC;IAEQ,gBAAgB,GAAA;QACtB,MAAM,OAAO,GAA2B,EAAE;QAC1C,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,OAAO;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;AAC5C,QAAA,IAAI,KAAK;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,KAAK,GAAG,CAAA,OAAA,EAAU,KAAK,EAAE;QAC7F,IAAI,SAAS,IAAI,IAAI;YAAE,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;QAC/D,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;AACtD,QAAA,OAAO,OAAO;IAChB;IAEA,6BAA6B,CAAC,SAAc,EAAE,EAAA;QAC5C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,wBAAA,CAA0B,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IAC3G;IAEA,kBAAkB,CAAC,SAAc,EAAE,EAAA;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,mBAAA,CAAqB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACtG;wGAlCW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA;;4FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACN3B,MAAM,aAAa,GAAG;AAC3B,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,UAAU,EAAE,YAAY;CAChB;AAEH,MAAM,6BAA6B,GAAG;AAC3C,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,MAAM,EAAE,QAAQ;CACR;AAEH,MAAM,gCAAgC,GAAG;AAC9C,IAAA,eAAe,EAAE,iBAAiB;AAClC,IAAA,eAAe,EAAE,iBAAiB;AAClC,IAAA,iBAAiB,EAAE,mBAAmB;AACtC,IAAA,kBAAkB,EAAE,oBAAoB;AACxC,IAAA,gBAAgB,EAAE,kBAAkB;CAC5B;AAEH,MAAM,kBAAkB,GAAG;AAChC,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,KAAK,EAAE,OAAO;CACN;AAEH,MAAM,sBAAsB,GAAG;AACpC,IAAA,QAAQ,EAAE,UAAU;CACZ;AAEH,MAAM,2BAA2B,GAAG;AACzC,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,YAAY,EAAE,cAAc;CACpB;AAEH,MAAM,mBAAmB,GAAG;AACjC,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,EAAE,EAAE,IAAI;CACA;AAEH,MAAM,SAAS,GAAG;AACvB,IAAA,0BAA0B,EAAE,4BAA4B;CAChD;AAEH,MAAM,gBAAgB,GAAG;AAC9B,IAAA,uCAAuC,EAAE,yCAAyC;CAC1E;AAEH,MAAM,6BAA6B,GAAG;AAC3C,IAAA,eAAe,EAAE,iBAAiB;AAClC,IAAA,8BAA8B,EAAE,gCAAgC;AAChE,IAAA,wBAAwB,EAAE,0BAA0B;AACpD,IAAA,aAAa,EAAE,eAAe;CACtB;AAEH,MAAM,UAAU,GAAG;AACxB,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,MAAM,EAAE,EAAE;CACF;AAEH,MAAM,aAAa,GAAG;AACzB,IAAA,MAAM,EAAG,CAAC;AACV,IAAA,IAAI,EAAG,CAAC;IACR,IAAI,EAAG,CAAC;AACR,IAAA,UAAU,EAAG;CAAW;AAErB,MAAM,YAAY,GAAG;AAC1B,IAAA,IAAI,EAAE,CAAC;AACP,IAAA,IAAI,EAAE,CAAC;AACP,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,GAAG,EAAE,CAAC;CACE;AAEH,MAAM,gBAAgB,GAA0B;IACrD,EAAE,EAAE,EAAE,WAAW,EAAE;CACpB;;ACtFD;AACM,SAAU,0BAA0B,CAAC,MAAe,EAAA;IACxD,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAChD,QAAA,OAAO,MAAM;IACf;IACA,MAAM,CAAC,GAAG,MAAiC;IAC3C,IAAI,CAAC,CAAC,gBAAgB,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,gBAAgB,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE;QACnG,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,GAAG,MAAM;IAClE;AACA,IAAA,MAAM,GAAG,GACP,CAAC,CAAC,SAAS,CAAC;QACZ,CAAC,CAAC,mBAAmB,CAAC;QACtB,CAAC,CAAC,iBAAiB,CAAC;QACpB,CAAC,CAAC,eAAe,CAAC;QAClB,CAAC,CAAC,kBAAkB,CAAC;AACvB,IAAA,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE;AACnD,QAAA,OAAO,MAAM;IACf;AACA,IAAA,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AACvB,QAAA,OAAO,MAAM;IACf;IACA,OAAO,EAAE,GAAG,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE;AACpC;AAEA,SAAS,YAAY,CAAC,CAAU,EAAA;AAC9B,IAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACzB,QAAA,OAAO,CAAC;IACV;AACA,IAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AACzB,QAAA,OAAO,UAAU,CAAC,CAAC,CAAC;IACtB;AACA,IAAA,OAAO,GAAG;AACZ;;MCtBa,WAAW,CAAA;AACd,IAAA,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACxC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,aAAa,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAErD,IAAA,sBAAsB,GAAG,IAAI,eAAe,CAAa,IAAI,CAAC;AAC9D,IAAA,aAAa,GAAG,IAAI,eAAe,CAAa,IAAI,CAAC;AACrD,IAAA,UAAU,GAAG,IAAI,eAAe,CAAa,IAAI,CAAC;AAClD,IAAA,iBAAiB,GAAG,IAAI,eAAe,CAAe,IAAI,CAAC;AAC3D,IAAA,kBAAkB,GAAG,IAAI,eAAe,CAAa,IAAI,CAAC;AAC1D,IAAA,gBAAgB,GAAG,IAAI,eAAe,CAAa,IAAI,CAAC;AACxD,IAAA,cAAc,GAAG,IAAI,eAAe,CAAa,IAAI,CAAC;IAC9C,mBAAmB,GAAkB,IAAI;IACzC,cAAc,GAAG,KAAK;IACtB,aAAa,GAAG,KAAK;IAE7B,sBAAsB,GAAA;QACpB,OAAO,IAAI,CAAC,mBAAmB;IACjC;;IAGA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC3B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;AAC/B,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;AACtC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;AAEA,IAAA,cAAc,CAAC,MAAW,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9B;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB;QACF;QAEA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AAC1C,QAAA,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE;YACjB;QACF;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,QAAA,KAAK,IAAI,CAAC,WAAW,EAAE;IACzB;AAEQ,IAAA,MAAM,WAAW,GAAA;AACvB,QAAA,IAAI;YACF,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;YAC1C,MAAM,OAAO,IAAI,GAAG,EAAE,cAAc,IAAI,EAAE,CAA2B;YACrE,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE;AAEzF,YAAA,MAAM,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AAC7D,gBAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,uBAAuB,EAAE,CAAC;AACzD,gBAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE,CAAC;AAC1D,gBAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,iCAAiC,EAAE,CAAC;AACpE,aAAA,CAAC;YAEF,MAAM,UAAU,GAAG,WAAW,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE;YACpD,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,IAAI,EAAE,mBAAmB,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI;AAC1G,YAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC;AAEjD,YAAA,MAAM,aAAa,GAAG,UAAU,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI;AAC5D,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC;YAEvC,MAAM,cAAc,GAAG,SAAS,EAAE,IAAI,EAAE,cAAc,IAAI,EAAE;AAC5D,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC;YAE3C,IAAI,CAAC,gBAAgB,EAAE;AACrB,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;gBACzB;YACF;AAEA,YAAA,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;YAC5F,MAAM,UAAU,GAAG,OAAO,EAAE,IAAI,EAAE,WAAW,IAAI,IAAI;AACrD,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;;AAGxC,YAAA,IAAI;gBACF,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC;oBAC9E,SAAS,EAAE,UAAU,CAAC,aAAa;AACpC,iBAAA,CAAC,CAAC;AACH,gBAAA,MAAM,SAAS,GAAG,aAAa,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI;AACzD,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;YACvC;AAAE,YAAA,MAAM;AACN,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAClC;;AAGA,YAAA,MAAM,EAAE,GAAG,UAAU,EAAE,SAAS;AAChC,YAAA,MAAM,OAAO,GAAG,EAAE,KAAK,UAAU,CAAC,KAAK;AACvC,YAAA,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAC/B;AACE,mBAAG,UAAU,EAAE,cAAc,IAAI,gBAAgB;mBAC9C,UAAU,EAAE,EAAE,IAAI,gBAAgB,CAAC,CACzC;AAED,YAAA,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE;AACxB,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;gBACzB;YACF;YAEA,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC;AAC1E,gBAAA,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,eAAe,CAAC,EAAE;AAC/B,gBAAA,WAAW,EAAE,CAAC;AACf,aAAA,CAAC,CAAC;AAEH,YAAA,MAAM,aAAa,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI;AAC1D,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;AAEtC,YAAA,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE;AACtB,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;gBACzB;YACF;YAEA,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC;gBACzF,OAAO,EAAE,IAAI,CAAC,mBAAmB;gBACjC,WAAW,EAAE,eAAe,CAAC,EAAE;gBAC/B,SAAS,EAAE,aAAa,CAAC,EAAE;AAC5B,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAClB,0BAA0B,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,CAChE;AACD,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;QAC3B;AAAE,QAAA,MAAM;;QAER;gBAAU;AACR,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC7B;IACF;wGAzIW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA;;4FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCJY,0BAA0B,CAAA;AA4BjB,IAAA,GAAA;AA3BZ,IAAA,qBAAqB,GAAG,IAAI,aAAa,CAAa,CAAC,CAAC;AAChE,IAAA,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE/E,IAAA,qBAAqB,GAAG,IAAI,aAAa,CAAa,CAAC,CAAC;AAChE,IAAA,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE/E,IAAA,iBAAiB,GAAG,IAAI,aAAa,CAAa,CAAC,CAAC;AAC5D,IAAA,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAEvE,IAAA,wBAAwB,GAAG,IAAI,aAAa,CAAa,CAAC,CAAC;AACnE,IAAA,iBAAiB,GAAG,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAErF,IAAA,eAAe,GAAG,IAAI,aAAa,CAAa,CAAC,CAAC;AAC1D,IAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAEnE,IAAA,cAAc,GAAG,IAAI,aAAa,CAAa,CAAC,CAAC;AACzD,IAAA,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAEjE,IAAA,sBAAsB,GAAG,IAAI,aAAa,CAAe,CAAC,CAAC;AACnE,IAAA,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAEjF,IAAA,yBAAyB,GAAG,IAAI,aAAa,CAAS,CAAC,CAAC;AAChE,IAAA,iBAAiB,GAAG,IAAI,CAAC,yBAAyB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAEtF,IAAA,mBAAmB,GAAG,IAAI,aAAa,CAAa,CAAC,CAAC;AAC9D,IAAA,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAEnF,IAAA,WAAA,CAAoB,GAAuB,EAAA;QAAvB,IAAA,CAAA,GAAG,GAAH,GAAG;AACrB,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC;;AAIA,IAAA,kBAAkB,CAAC,cAAmB,EAAA;AACpC,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC;IACjD;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;IACvC;AAEA,IAAA,kBAAkB,CAAC,cAAmB,EAAA;AACpC,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC;IACjD;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;IACvC;AAEA,IAAA,cAAc,CAAC,UAAe,EAAA;AAC5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;IACzC;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IACnC;AAEA,IAAA,qBAAqB,CAAC,SAAc,EAAA;AAClC,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC;IAC/C;IAEA,uBAAuB,GAAA;AACrB,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1C;AAEA,IAAA,YAAY,CAAC,QAAa,EAAA;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;IACrC;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;AAEA,IAAA,WAAW,CAAC,OAAY,EAAA;AACtB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;IACnC;IAEA,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;AAEA,IAAA,mBAAmB,CAAC,OAAc,EAAA;AAChC,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;IAC3C;IAEA,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxC;AAEA,IAAA,oBAAoB,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5C;AAEA,IAAA,gBAAgB,CAAC,IAAS,EAAA;AACxB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;IACrC;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;IACrC;;AAIA,IAAA,oBAAoB,CAAC,EAAU,EAAA;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;IAC1C;IAEA,gCAAgC,CAAC,SAAc,EAAE,EAAA;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,gCAAgC,CAAC,MAAM,CAAC;IAC1D;AAEA,IAAA,kCAAkC,CAAC,EAAU,EAAA;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,EAAE,CAAC;IACxD;IAEA,iCAAiC,CAAC,SAAc,EAAE,EAAA;QAChD,OAAO,IAAI,CAAC,GAAG,CAAC,iCAAiC,CAAC,MAAM,CAAC;IAC3D;IAEA,qCAAqC,CAAC,SAAc,EAAE,EAAA;QACpD,OAAO,IAAI,CAAC,GAAG,CAAC,qCAAqC,CAAC,MAAM,CAAC;IAC/D;IAEA,qCAAqC,CAAC,SAAc,EAAE,EAAA;QACpD,OAAO,IAAI,CAAC,GAAG,CAAC,qCAAqC,CAAC,MAAM,CAAC;IAC/D;AAEA,IAAA,mBAAmB,CAAC,OAAY,EAAA;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC;IAC9C;IAEA,wBAAwB,CAAC,SAAc,EAAE,EAAA;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,MAAM,CAAC;IAClD;IAEA,uBAAuB,CAAC,SAAc,EAAE,EAAA;QACtC,OAAO,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,MAAM,CAAC;IACjD;IAEA,qBAAqB,CAAC,SAAc,EAAE,EAAA;QACpC,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC;IAC/C;wGA9IW,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA;;4FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCDY,kBAAkB,CAAA;IACrB,OAAgB,MAAM,GAA2B;AACvD,QAAA,eAAe,EAAE,WAAW;AAC5B,QAAA,4BAA4B,EAAE,sBAAsB;AACpD,QAAA,kBAAkB,EAAE,aAAa;AACjC,QAAA,0BAA0B,EAAE,sBAAsB;AAClD,QAAA,cAAc,EAAE,UAAU;AAC1B,QAAA,qBAAqB,EAAE,iBAAiB;AACxC,QAAA,cAAc,EAAE,UAAU;AAC1B,QAAA,qBAAqB,EAAE,iBAAiB;AACxC,QAAA,yBAAyB,EAAE,qBAAqB;AAChD,QAAA,4BAA4B,EAAE,0BAA0B;AACxD,QAAA,0BAA0B,EAAE,wBAAwB;AACpD,QAAA,2BAA2B,EAAE,yBAAyB;AACtD,QAAA,mBAAmB,EAAE,eAAe;AACpC,QAAA,oBAAoB,EAAE,gBAAgB;AACtC,QAAA,WAAW,EAAE,OAAO;AACpB,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,WAAW,EAAE,OAAO;AACpB,QAAA,iBAAiB,EAAE,aAAa;AAChC,QAAA,cAAc,EAAE,UAAU;AAC1B,QAAA,YAAY,EAAE,QAAQ;AACtB,QAAA,oBAAoB,EAAE,gBAAgB;AACtC,QAAA,oBAAoB,EAAE,gBAAgB;AACtC,QAAA,kBAAkB,EAAE,cAAc;AAClC,QAAA,mBAAmB,EAAE,eAAe;AACpC,QAAA,iBAAiB,EAAE,aAAa;AAChC,QAAA,mBAAmB,EAAE,eAAe;AACpC,QAAA,qBAAqB,EAAE,iBAAiB;AACxC,QAAA,qBAAqB,EAAE,gCAAgC;AACvD,QAAA,kDAAkD,EAAE,8CAA8C;AAClG,QAAA,oBAAoB,EAAE,gBAAgB;AACtC,QAAA,kBAAkB,EAAE,cAAc;AAClC,QAAA,kBAAkB,EAAE,cAAc;AAClC,QAAA,gBAAgB,EAAE,YAAY;AAC9B,QAAA,gBAAgB,EAAE,YAAY;AAC9B,QAAA,aAAa,EAAE,SAAS;AACxB,QAAA,iBAAiB,EAAE,aAAa;AAChC,QAAA,iBAAiB,EAAE,aAAa;AAChC,QAAA,uBAAuB,EAAE,mBAAmB;AAC5C,QAAA,8BAA8B,EAAE,0BAA0B;AAC1D,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,yBAAyB,EAAE,qBAAqB;AAChD,QAAA,oBAAoB,EAAE,gBAAgB;AACtC,QAAA,sBAAsB,EAAE,kBAAkB;AAC1C,QAAA,UAAU,EAAE,MAAM;AAClB,QAAA,iBAAiB,EAAE,aAAa;AAChC,QAAA,sBAAsB,EAAE,kBAAkB;AAC1C,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,kCAAkC,EAAE,kCAAkC;AACtE,QAAA,wCAAwC,EAAE,oCAAoC;AAC9E,QAAA,qCAAqC,EAAE,uCAAuC;AAC9E,QAAA,gBAAgB,EAAE,YAAY;AAC9B,QAAA,8BAA8B,EAAE,0BAA0B;AAC1D,QAAA,oBAAoB,EAAE,yBAAyB;AAC/C,QAAA,6BAA6B,EAAE,yBAAyB;AACxD,QAAA,4BAA4B,EAAE,0BAA0B;AACxD,QAAA,sCAAsC,EAAE,kCAAkC;AAC1E,QAAA,0BAA0B,EAAE,sBAAsB;AAClD,QAAA,yBAAyB,EAAE,qBAAqB;AAChD,QAAA,4BAA4B,EAAE,wBAAwB;AACtD,QAAA,qCAAqC,EAAE,iCAAiC;AACxE,QAAA,iBAAiB,EAAE,aAAa;AAChC,QAAA,mBAAmB,EAAE,QAAQ;AAC7B,QAAA,iBAAiB,EAAE,MAAM;AACzB,QAAA,iBAAiB,EAAE,MAAM;AACzB,QAAA,mBAAmB,EAAE,QAAQ;AAC7B,QAAA,oBAAoB,EAAE,SAAS;AAC/B,QAAA,wBAAwB,EAAE,aAAa;AACvC,QAAA,mBAAmB,EAAE,QAAQ;AAC7B,QAAA,oBAAoB,EAAE,SAAS;AAC/B,QAAA,yBAAyB,EAAE,cAAc;AACzC,QAAA,mCAAmC,EAAE,wBAAwB;AAC7D,QAAA,gBAAgB,EAAE,KAAK;KACxB;AAED,IAAA,SAAS,CAAC,GAAW,EAAA;QACnB,OAAO,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG;IAC9C;wGA/EW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCKY,aAAa,CAAA;AACJ,IAAA,WAAA;AAApB,IAAA,WAAA,CAAoB,WAA+B,EAAA;QAA/B,IAAA,CAAA,WAAW,GAAX,WAAW;IAAuB;AAEtD,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC;IAC1C;wGALW,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAb,aAAa,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA;;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE,KAAK;AAClB,iBAAA;;MAaY,SAAS,CAAA;IACpB,SAAS,CAAC,KAAyC,EAAE,IAAmC,EAAA;QACtF,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;AAC9E,QAAA,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,EAAE;AACrC,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AACrB,YAAA,OAAO,EAAE;QACX;QACA,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAChC,QAAA,OAAO,QAAQ,GAAG,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,GAAG,SAAS;IAC1D;wGATW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;sGAAT,SAAS,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA;;4FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBAJrB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,UAAU,EAAE,KAAK;AAClB,iBAAA;;MAkBY,YAAY,CAAA;wGAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAAZ,YAAY,EAAA,YAAA,EAAA,CA7BZ,aAAa,EAYb,SAAS,CAAA,EAAA,OAAA,EAAA,CAaV,YAAY,CAAA,EAAA,OAAA,EAAA,CAEZ,YAAY,EA3BX,aAAa,EAYb,SAAS,CAAA,EAAA,CAAA;yGAiBT,YAAY,EAAA,OAAA,EAAA,CAJb,YAAY,EAEZ,YAAY,CAAA,EAAA,CAAA;;4FAEX,YAAY,EAAA,UAAA,EAAA,CAAA;kBALxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,YAAY,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;AACxC,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,SAAS,CAAC;AAClD,iBAAA;;;MCiKY,kBAAkB,CAAA;AACnB,IAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC/D,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAC/C,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAG9D,kBAAkB,GAAe,EAAE;AAKnC,IAAA,WAAA,GAAA,EAAgB;IAEhB,QAAQ,GAAA;QACJ,IAAI,CAAC,qBAAqB,EAAE;IAChC;IAEA,qBAAqB,GAAA;AACjB,QAAA,IAAI,CAAC,0BAA0B,CAAC,gCAAgC,EAAE,CAAC,SAAS,CACxE;AACI,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACV,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;oBACd,IAAI,CAAC,kBAAkB,GAAG,GAAG,EAAE,IAAI,EAAE,wBAAwB;gBACjE;qBAAO;AACH,oBAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;gBAChC;AACJ,YAAA,CAAC,EAAE,KAAK,EAAE,MAAK;AACX,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;YAC7F;AACH,SAAA,CACJ;IACL;AAEA,IAAA,wBAAwB,CAAC,cAAmB,EAAA;AACxC,QAAA,IAAI,cAAc,EAAE,SAAS,EAAE;AAC3B,YAAA,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,cAAc,CAAC;AAClE,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;YACrC;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,oDAAoD,CAAC;YACnF;QACJ;aAAO;YACH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA,EAAG,cAAc,EAAE,aAAa,CAAA,CAAA,EAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAA,CAAE,CACrH;QACL;IACJ;wGA/CS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtM/B,+xCA+BA,EAAA,MAAA,EAAA,CAAA,uwEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED+JI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,qBAAqB,8BACrB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAGH,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAzL9B,SAAS;+BACI,eAAe,EAAA,UAAA,EAEb,IAAI,EAAA,OAAA,EA6KP;wBACT,YAAY;wBACZ,cAAc;wBACd,WAAW;wBACX,mBAAmB;wBACnB,qBAAqB;wBACrB;AACH,qBAAA,EAAA,QAAA,EAAA,+xCAAA,EAAA,MAAA,EAAA,CAAA,uwEAAA,CAAA,EAAA;;;AEpMK,SAAU,SAAS,CAAI,KAA2B,EAAA;AACtD,IAAA,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAC9C;AAEO,MAAM,UAAU,GAAG;AACxB,IAAA,kBAAkB,EAAE,SAAS;CACrB;AAEJ,SAAU,SAAS,CAAI,KAA2B,EAAA;AACtD,IAAA,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAC9C;AAEM,SAAU,iBAAiB,CAAC,UAAe,EAAA;;;IAG/C,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE;AACvD,QAAA,OAAO,UAAU;IACnB;AACA,IAAA,OAAO,YAAY;AACrB;AAEM,SAAU,iBAAiB,CAAC,UAAe,EAAA;IAC/C,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE;AACvD,QAAA,OAAO,UAAU;IACnB;AACA,IAAA,OAAO,OAAO;AAChB;AAEM,SAAU,yBAAyB,CACvC,KAAa,EACb,UAAkB,EAClB,UAAkB,EAClB,SAAkB,EAAA;;;AAIlB,IAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;IACzB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE;AAC7B,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IACtD,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;IAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AAE/B,IAAA,MAAM,IAAI,GACR,UAAU,KAAK;AACb,UAAE,CAAA,EAAG,EAAE,IAAI,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA;UACnB,UAAU,KAAK;AACf,cAAE,CAAA,EAAG,IAAI,IAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA;cACnB,GAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,IAAI,EAAE;AAE7B,IAAA,MAAM,IAAI,GACR,UAAU,KAAK;AACb,UAAE,CAAA,EAAG,EAAE,IAAI,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA;UACjB,UAAU,KAAK;AACf,cAAE,CAAA,EAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA;AAC7E,cAAE,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,EAAE;AAErB,IAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,IAAI,EAAE;AAC1B;;AC9DA;;;AAGG;AACG,SAAU,gBAAgB,CAAC,KAAc,EAAE,QAAgB,EAAA;IAC/D,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC9C,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAE7D,IAAA,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AAE3C,IAAA,IAAI,GAAG,CAAC,QAAQ,GAAG,EAAE,EAAE;AACrB,QAAA,MAAM,SAAS,GAAG,EAAE,GAAG,GAAG,CAAC,QAAQ;AACnC,QAAA,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClE;AAAO,SAAA,IAAI,GAAG,CAAC,QAAQ,GAAG,EAAE,EAAE;AAC5B,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QACnD,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IACtE;IAEA,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/C,QAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG;AACvB,QAAA,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK;AAC5B,KAAA,CAAC;AAEF,IAAA,OAAO,SAAS,CAAC,QAAQ,EAAE;AAC7B;;MCnBa,kBAAkB,CAAA;AACrB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC;IACtC,YAAY,GAAG,MAAM,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEjF,IAAA,IAAY,OAAO,GAAA;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACnC,QAAA,OAAO,GAAG,EAAE,OAAO,IAAI,EAAE;IAC3B;AAEA,IAAA,IAAY,cAAc,GAAA;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QACnC,MAAM,UAAU,IAAI,GAAG,EAAE,cAAc,IAAI,EAAE,CAA2B;AACxE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,UAAU,EAAE;IACvC;IAEQ,gBAAgB,GAAA;QACtB,MAAM,OAAO,GAA2B,EAAE;QAC1C,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,OAAO;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;AAC5C,QAAA,IAAI,KAAK;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,KAAK,GAAG,CAAA,EAAG,KAAK,EAAE;QACtF,IAAI,SAAS,IAAI,IAAI;YAAE,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;QAC/D,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;AACtD,QAAA,OAAO,OAAO;IAChB;IAEA,+BAA+B,CAAC,SAAc,EAAE,EAAA;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,gCAAA,CAAkC,EACjD,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CACzC;IACH;AAEA,IAAA,qBAAqB,CAAC,OAAY,EAAA;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,qCAAA,CAAuC,EACtD,OAAO,EACP,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CACjC;IACH;AAEA,IAAA,uBAAuB,CAAC,OAAY,EAAA;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,2CAAA,CAA6C,EAC5D,OAAO,EACP,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CACjC;IACH;AAEA,IAAA,wBAAwB,CAAC,OAAY,EAAA;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC;QACpD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,iCAAA,CAAmC,EAClD,IAAI,EACJ,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CACjC;IACH;AAEQ,IAAA,yBAAyB,CAAC,OAAY,EAAA;QAC5C,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAClD,YAAA,OAAO,OAAO;QAChB;AACA,QAAA,MAAM,SAAS,GAAG,EAAE,GAAG,OAAO,EAAE;AAChC,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS;AACpC,QAAA,MAAM,YAAY,GAAG,SAAS,CAAC,aAAa;QAC5C,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,KAAK,EAAE,IAAI,QAAQ,EAAE;YAC3D,MAAM,SAAS,GAAG,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AAClE,YAAA,IAAI,SAAS,IAAI,IAAI,EAAE;AACrB,gBAAA,SAAS,CAAC,aAAa,GAAG,SAAS;YACrC;QACF;AACA,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,mCAAmC,CAAC,OAAY,EAAA;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,2CAAA,CAA6C,EAC5D,OAAO,EACP,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CACjC;IACH;AAEA,IAAA,YAAY,CAAC,OAAY,EAAA;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,4BAAA,CAA8B,EAC7C,OAAO,EACP,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CACjC;IACH;AAEA,IAAA,uBAAuB,CAAC,OAAY,EAAA;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,0BAAA,CAA4B,EAC3C,OAAO,EACP,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CACjC;IACH;IAEA,sCAAsC,CAAC,SAAc,EAAE,EAAA;QACrD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,sBAAA,CAAwB,EACvC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CACzC;IACH;AAEA,IAAA,mBAAmB,CAAC,OAAY,EAAA;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,sBAAA,CAAwB,EACvC,OAAO,EACP,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CACjC;IACH;AAEA,IAAA,0BAA0B,CAAC,EAAU,EAAA;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,uBAAA,EAA0B,EAAE,CAAA,CAAE,EAC7C,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CACjC;IACH;AAEA,IAAA,qBAAqB,CAAC,EAAU,EAAA;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAE,EACpC,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CACjC;IACH;wGAhIW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA;;4FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACTD;;;AAGG;AACI,MAAM,8BAA8B,GAAG;AAE9C,MAAM,UAAU,GAAG,wBAAwB;SAE3B,gCAAgC,GAAA;AAC9C,IAAA,IAAI;QACF,MAAM,CAAC,GAAG,UAAqC;AAC/C,QAAA,IAAI,CAAC,CAAC,gCAAgC,CAAC,KAAK,IAAI,EAAE;AAChD,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI,OAAO,YAAY,KAAK,WAAW,IAAI,YAAY,CAAC,OAAO,CAAC,4BAA4B,CAAC,KAAK,GAAG,EAAE;AACrG,YAAA,OAAO,IAAI;QACb;IACF;AAAE,IAAA,MAAM;;IAER;AACA,IAAA,OAAO,KAAK;AACd;AAEA;;;;;;;AAOG;AACG,SAAU,uBAAuB,CAAC,KAAa,EAAE,MAAgC,EAAA;AACrF,IAAA,MAAM,MAAM,GACV,KAAK,KAAK,gBAAgB;AAC1B,QAAA,KAAK,KAAK,0BAA0B;QACpC,KAAK,KAAK,eAAe;AAC3B,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,gCAAgC,EAAE,EAAE;QAClD;IACF;AACA,IAAA,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,8BAA8B,EAAE,GAAG,MAAM,EAAE,CAAC;AACrF;;MCRa,wBAAwB,CAAA;AACzB,IAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC/D,IAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AACtC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,gBAAgB,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAC7C,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtD,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAGvC,aAAa,GAAkB,IAAI;IAEnC,eAAe,GAAe,EAAE;IAChC,YAAY,GAAQ,IAAI;IACxB,cAAc,GAAQ,IAAI;IAE1B,QAAQ,GAAkB,IAAI;IAE9B,cAAc,GAAe,EAAE;AAE/B,IAAA,QAAQ,GAAqB,IAAI,OAAO,EAAW;AACnD,IAAA,gBAAgB;IAChB,YAAY,GAAY,IAAI;IACpB,YAAY,GAAW,CAAC;AAKhC,IAAA,WAAA,GAAA;AACI,QAAA,MAAM,0BAA0B,GAAG,IAAI,CAAC,0BAA0B;QAElE,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;AACjG,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;AACrB,gBAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;YAClC;AACJ,QAAA,CAAC,CAAC;QAEF,0BAA0B,CAAC,uBAAuB,EAAE;AAEpD,QAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AACpF,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,eAAe;YACzC;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;QACJ,uBAAuB,CAAC,0BAA0B,EAAE;AAChD,YAAA,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,IAAI,IAAI;AACtD,YAAA,YAAY,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,IAAI,IAAI;AACxD,YAAA,QAAQ,EAAE,sBAAsB;AACnC,SAAA,CAAC;AACF,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;;YAEhC,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,qBAAqB,EAAE;QAChC;aAAO;YACH,IAAI,CAAC,IAAI,EAAE;QACf;IACJ;IAEA,qBAAqB,GAAA;AAEjB,QAAA,MAAM,MAAM,GAAG;YACX,OAAO,EAAE,IAAI,CAAC,aAAa;AAC3B,YAAA,oBAAoB,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE;YAC7C,MAAM,EAAE,UAAU,CAAC,kBAAkB;AACrC,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE,IAAI;SACf;QAED,IAAI,CAAC,kBAAkB,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC,SAAS,CACrE;AACI,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACf,gBAAA,IAAI,QAAQ,EAAE,OAAO,EAAE;oBACnB,IAAI,CAAC,cAAc,GAAG,QAAQ,EAAE,IAAI,EAAE,sBAAsB,IAAI,EAAE;gBACtE;qBAAO;AACH,oBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;gBAC5B;YACJ,CAAC;YACD,KAAK,EAAE,MAAK;AACR,gBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;YAC5F,CAAC;AACJ,SAAA,CACJ;IACL;IAEA,kBAAkB,GAAA;AACd,QAAA,MAAM,MAAM,GAAQ;AAChB,YAAA,oBAAoB,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE;AAC7C,YAAA,SAAS,EAAE;SACd;QAED,IAAI,CAAC,0BAA0B,CAAC,qCAAqC,CAAC,MAAM,CAAC,CAAC,SAAS,CACnF;AACI,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACV,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;oBACd,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE,IAAI,EAAE,gBAAgB;gBACtD;qBAAO;AACH,oBAAA,IAAI,CAAC,eAAe,GAAG,EAAE;gBAC7B;AACA,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YAC7B,CAAC;YACD,KAAK,EAAE,MAAK;AACR,gBAAA,IAAI,CAAC,eAAe,GAAG,EAAE;AACzB,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YAC7B,CAAC;AACJ,SAAA,CACJ;IACL;IAEA,qBAAqB,GAAA;AACjB,QAAA,IAAI,CAAC,0BAA0B,CAAC,kCAAkC,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,SAAS,CACjG;AACI,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACV,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;oBACd,IAAI,CAAC,gBAAgB,GAAG,GAAG,EAAE,IAAI,EAAE,wBAAwB,EAAE,YAAY;gBAC7E;AACA,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YAC7B,CAAC;YACD,KAAK,EAAE,MAAK;AACR,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;YAC5F,CAAC;AACJ,SAAA,CAAC;IACV;AAEA,IAAA,WAAW,GAAG,CAAC,CAAM,EAAE,CAAM,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;AAEjD,IAAA,oBAAoB,CAAC,KAAU,EAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,IAAI,IAAI;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC5B;AAEA,IAAA,oBAAoB,CAAC,GAAQ,EAAA;QACzB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC;QAClG,IAAI,CAAC,0BAA0B,CAAC,qBAAqB,CAAC,GAAG,EAAE,eAAe,CAAC;QAE3E,IAAI,CAAC,kBAAkB,EAAE;IAC7B;IAEA,kBAAkB,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,MAAM,EAAE;AAClC,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBAC9B,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;AACrE,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;gBACrC;qBAAO;AACH,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;wBACjB,mDAAmD;AACtD,qBAAA,CAAC;gBACN;YACJ;iBAAO;AACH,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;YAC9F;QACJ;AAAO,aAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,UAAU,IAAI,IAAI,CAAC,gBAAgB,KAAK,UAAU,EAAE;AACrF,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBAC9B,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;AACrE,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACnC;qBAAO;AACH,oBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,kDAAkD,CACrD;gBACL;YACJ;iBAAO;AACH,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;YAC9F;QACJ;AAAO,aAAA,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACrC,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;AACrE,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;YACrC;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,iDAAiD,CACpD;YACL;QACJ;aAAO;AACH,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAC9F;IACJ;IAGA,IAAI,GAAA;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QACrC;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,mCAAmC,CAAC;QAClE;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;IAC/B;wGAtMS,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChCrC,mmSA2RA,EAAA,MAAA,EAAA,CAAA,67EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnQQ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,OAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,qBAAqB,8BACrB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA;;4FAGP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAbpC,SAAS;+BACI,sBAAsB,EAAA,UAAA,EAEpB,IAAI,EAAA,OAAA,EACP;wBACL,YAAY;wBACZ,cAAc;wBACd,WAAW;wBACX,mBAAmB;wBACnB,qBAAqB;wBACrB;AACH,qBAAA,EAAA,QAAA,EAAA,mmSAAA,EAAA;;;MEdQ,eAAe,CAAA;IACjB,KAAK,GAAW,mBAAmB;AACnC,IAAA,IAAI;wGAFF,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZhB;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;4FAGU,eAAe,EAAA,UAAA,EAAA,CAAA;kBAd3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE;;;;;;;;;AAST,EAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAEE;;sBACA;;;ACSG,MAAO,gCAAiC,SAAQ,YAAY,CAAA;wGAArD,gCAAgC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnBjC;;;;;;;;;;;;;;;;;GAiBT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAlBS,YAAY,8BAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,6BAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,CAAA,EAAA,CAAA;;4FAoBzB,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAvB5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0CAA0C;AACpD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;AACrC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA;AACF,iBAAA;;;ACHK,MAAO,4BAA6B,SAAQ,SAAS,CAAA;AACzD,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,WAA0B;IACxC;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;AACjC,QAAA,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;AACtB,YAAA,OAAO,IAAyB;QAClC;AACA,QAAA,OAAO,EAAE,CAAE,IAAc,IAAI,EAAE,CAAC;IAClC;wGAXW,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAZ7B;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAXS,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,2BAAA,EAAA,YAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,QAAA,EAAA,YAAA,EAAA,WAAA,EAAA,QAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,EAAA,OAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA;;4FAahD,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAhBxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,EAAE,cAAc,CAAC;AAC5D,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;AACF,iBAAA;;;ACJK,MAAO,yBAA0B,SAAQ,SAAS,CAAA;AACtD,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,WAA0B;IACxC;wGAHW,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAT1B;;;;;;;GAOT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EARS,YAAY,8BAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAUhC,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAbrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iCAAiC;AAC3C,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC;AAC5C,oBAAA,QAAQ,EAAE;;;;;;;AAOT,EAAA,CAAA;AACF,iBAAA;;;ACCK,MAAO,0BAA2B,SAAQ,SAAS,CAAA;AACvD,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,WAA0B;IACxC;wGAHW,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA1B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAT3B;;;;;;;GAOT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EARS,YAAY,8BAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAUhC,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAbtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uCAAuC;AACjD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC;AAC5C,oBAAA,QAAQ,EAAE;;;;;;;AAOT,EAAA,CAAA;AACF,iBAAA;;;MCHY,qBAAqB,CAAA;IACvB,OAAO,GAAW,gBAAgB;wGADhC,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAVtB;;;;;;;AAOT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;4FAGU,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAZjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE;;;;;;;AAOT,EAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;sBAEE;;;MCmBU,qBAAqB,CAAA;AAwBlB,IAAA,0BAAA;AACA,IAAA,cAAA;AACA,IAAA,EAAA;AACA,IAAA,kBAAA;AACA,IAAA,MAAA;AACA,IAAA,GAAA;AACA,IAAA,QAAA;IA7BH,QAAQ,GAAQ,IAAI;IACpB,YAAY,GAAQ,IAAI;AACvB,IAAA,iBAAiB,GAAG,IAAI,YAAY,EAAO;IAErD,UAAU,GAAY,KAAK;IAC3B,YAAY,GAAY,KAAK;IAC7B,cAAc,GAAQ,IAAI;IAC1B,eAAe,GAAQ,IAAI;AAC3B,IAAA,WAAW;IACX,WAAW,GAAwB,EAAE;IACrC,WAAW,GAAQ,EAAE;IACrB,UAAU,GAAQ,IAAI;IACtB,kBAAkB,GAAQ,IAAI;AAC9B,IAAA,QAAQ,GAAqB,IAAI,OAAO,EAAW;AACnD,IAAA,iBAAiB;IACjB,eAAe,GAAU,EAAE;IAC3B,kBAAkB,GAAW,CAAC;IAC9B,eAAe,GAAQ,EAAE;IACzB,eAAe,GAAQ,IAAI;IAC3B,kBAAkB,GAAG,kBAAkB;AAGvC,IAAA,WAAA,CACY,0BAAsD,EACtD,cAA6B,EAC7B,EAAsB,EACtB,kBAAsC,EACtC,MAAc,EACd,GAAsB,EACtB,QAAyB,EAAA;QANzB,IAAA,CAAA,0BAA0B,GAA1B,0BAA0B;QAC1B,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QAClB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAGhB,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AAC3F,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;YAC9B;AACJ,QAAA,CAAC,CAAC;QAED,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAS,KAAI;AACtG,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;YACjC;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAS,KAAI;AAC9F,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC/B;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;YACtG,IAAI,KAAK,EAAE;AACP,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YACnC;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAY,KAAI;AACtG,YAAA,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,eAAe,GAAG,OAAO;AAC9B,gBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;oBAC1F,IAAI,CAAC,iBAAiB,EAAE;gBAC5B;YACJ;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAS,KAAI;AAChG,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC/B;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAEhE;IAEA,QAAQ,GAAA;QACJ,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC5C;AAAO,iBAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AAC1B,gBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC;YAChD;QACJ;IACJ;IAEA,eAAe,GAAA;;AAEX,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC5B;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAC9B,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,EAAE;gBACzD,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC;YAC/D;AACA,YAAA,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,YAAY,EAAE;gBACjE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC;YACnE;QACJ;IACJ;AAEA,IAAA,oBAAoB,CAAC,QAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QAEzB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YACjC,IAAI,CAAC,iBAAiB,EAAE;QAC5B;aAAO;AACH,YAAA,MAAM,MAAM,GAAG;AACX,gBAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,8BAA8B;AAClE,gBAAA,OAAO,EAAE,CAAA,kBAAA,EAAqB,aAAa,CAAC,SAAS,CAAA,CAAA,CAAG;aAC3D;YAED,IAAI,CAAC,0BAA0B,CAAC,qCAAqC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;gBACpF,IAAI,EAAE,GAAG,IAAG;AACR,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,oBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;AACd,wBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC;AAClF,wBAAA,MAAM,kBAAkB,GAAG,eAAe,EAAE,IAAI,CAC5C,CAAC,QAAa,KAAK,QAAQ,EAAE,aAAa,KAAK,CAAC,CACnD;wBAED,IAAI,kBAAkB,EAAE;AACpB,4BAAA,IAAI,CAAC,eAAe,GAAG,kBAAkB;4BACzC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC;AAC3D,4BAAA,IAAI,CAAC,YAAY,GAAG,IAAI;wBAC5B;6BAAO;4BACH,IAAI,CAAC,mBAAmB,EAAE;wBAC9B;oBACJ;yBAAO;AACH,wBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;wBACxC,IAAI,CAAC,mBAAmB,EAAE;oBAC9B;gBACJ,CAAC;AACD,gBAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACb,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,oBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,yBAAyB,CAAC;oBACpD,IAAI,CAAC,mBAAmB,EAAE;gBAC9B;AACH,aAAA,CAAC;QACN;IACJ;IAEA,iBAAiB,GAAA;QACb,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;YAC5F,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACpE,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;YAC5B;AACA,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;YAErB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC;;YAG3D,IAAI,IAAI,CAAC,eAAe,EAAE,kBAAkB,KAAK,kBAAkB,CAAC,KAAK,EAAE;gBACvE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAwB,KAAI;AACnE,oBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;AACrD,oBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;AAC1E,oBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnE,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAI,WAAW,IAAI,WAAW,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;oBAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,mBAAmB,IAAI,CAAC;oBAClE,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC;AACnC,oBAAA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;wBACxB,CAAC,GAAG,GAAG;AACV,qBAAA,CAAC;gBACN;YACJ;AAEA,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;;YAIvB,UAAU,CAAC,MAAK;;AAEZ,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,oBAAA,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE;gBAC7C;AACA,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;YAC5B,CAAC,EAAE,CAAC,CAAC;QACT;aAAO;YACH,IAAI,CAAC,mBAAmB,EAAE;QAC9B;IACJ;AAEA,IAAA,iBAAiB,CAAC,MAAkB,EAAA;QAChC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,MAAM,WAAW,GAAwB,EAAE;AAC3C,YAAA,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;gBACnB,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC;AACtE,gBAAA,IAAI,mBAAmB,KAAK,6BAA6B,CAAC,QAAQ,IAAI,mBAAmB,KAAK,6BAA6B,CAAC,OAAO,EAAE;oBACjI,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;oBAC7C,IAAI,IAAI,EAAE;AACN,wBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC1B;gBACJ;AAAO,qBAAA,IAAI,mBAAmB,KAAK,6BAA6B,CAAC,MAAM,EAAE;AACrE,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;gBAC3B;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;QAClC;IACJ;IAEA,UAAU,GAAA;;QAEN,IAAI,IAAI,CAAC,eAAe,EAAE,kBAAkB,KAAK,kBAAkB,CAAC,KAAK,EAAE;YACvE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAwB,KAAI;AACnE,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;AACrD,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;AAC1E,gBAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnE,YAAA,CAAC,CAAC;YAEF,IAAI,WAAW,EAAE;gBACb,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC;;gBAGtD,IAAI,aAAa,GAAkB,IAAI;AACvC,gBAAA,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,EAAE,EAAE;AAC5E,oBAAA,aAAa,GAAG,OAAO,YAAY,KAAK,QAAQ,GAAG,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAClG,oBAAA,IAAI,KAAK,CAAC,aAAa,CAAC,EAAE;wBACtB,aAAa,GAAG,IAAI;oBACxB;gBACJ;;AAGA,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,mBAAmB,EAAE,GAAG,CAAC,IAAI,CAAC;AAC5E,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,mBAAmB,EAAE,GAAG,CAAC,IAAI,CAAC;;gBAG5E,IAAI,aAAa,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;;;oBAGjD,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE;AACtF,wBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,qCAAqC,CAAC,GAAG,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG,GAAG,GAAG,QAAQ,CAAC;wBAC7L,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAC9C,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;wBACnC,OAAO,EAAE,aAAa,EAAE;wBACxB;oBACJ;gBACJ;YACJ;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;YAEvE,IAAI,CAAC,qBAAqB,EAAE;YAC5B,MAAM,aAAa,GAAe,EAAE;YAEpC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAwB,KAAI;gBAClD,MAAM,QAAQ,GAAG,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAChC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,QAAQ;AAExC,gBAAA,MAAM,IAAI,GAAG;oBACT,GAAG,EAAE,KAAK,EAAE,GAAG;AACf,oBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACxD,oBAAA,KAAK,EAAE,KAAK;iBACf;AACD,gBAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,YAAA,CAAC,CAAC;YAEF,MAAM,iBAAiB,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACvE,YAAA,IAAI,CAAC,0BAA0B,CAAC,qBAAqB,CAAC,iBAAiB,CAAC;YAExE,QAAQ,MAAM;gBACV,KAAK,gCAAgC,CAAC,eAAe;oBACjD,IAAI,CAAC,yBAAyB,EAAE;oBAChC;gBACJ,KAAK,gCAAgC,CAAC,eAAe;oBACjD,IAAI,CAAC,yBAAyB,EAAE;oBAChC;gBACJ,KAAK,gCAAgC,CAAC,iBAAiB;oBACnD,IAAI,CAAC,mBAAmB,EAAE;oBAC1B;AACJ,gBAAA;AACI,oBAAA,IAAI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC3D,IAAI,CAAC,gBAAgB,EAAE;oBAC3B;yBAAO;wBACH,IAAI,CAAC,mBAAmB,EAAE;oBAC9B;oBACA;;QAEZ;aAAO;AACH,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;gBACjD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;gBACzC,OAAO,EAAE,aAAa,EAAE;AAC5B,YAAA,CAAC,CAAC;QACN;IACJ;IAEA,qBAAqB,GAAA;AACjB,QAAA,MAAM,UAAU,GAAG;YACf,WAAW,EAAE,IAAI,CAAC,kBAAkB;AACpC,YAAA,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY;AAC/C,YAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK;YAChC,SAAS,EAAE,IAAI,IAAI,EAAE;AACrB,YAAA,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE;SACvC;QAED,IAAI,CAAC,eAAe,CAAC,CAAA,OAAA,EAAU,IAAI,CAAC,kBAAkB,CAAA,CAAE,CAAC,GAAG,UAAU;QACtE,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC;IAC1E;IAEA,mBAAmB,GAAA;;AAEf,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;;YAEtB,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC;AAEpE,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AACxB,gBAAA,MAAM,EAAE,mBAAmB;gBAC3B,IAAI,EAAE,IAAI,CAAC;AACd,aAAA,CAAC;QACN;aAAO;;AAEH,YAAA,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC;gBACzC,YAAY,EAAE,IAAI,CAAC,QAAQ;AAC3B,gBAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC7B,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AACxB,gBAAA,MAAM,EAAE,wBAAwB;gBAChC,IAAI,EAAE,IAAI,CAAC;AACd,aAAA,CAAC;QACN;IACJ;IAEA,YAAY,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QACrC;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,mCAAmC,CAAC;QAClE;IACJ;IAEA,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;QAErB,IAAI,CAAC,kBAAkB,EAAE;QAEzB,IAAI,CAAC,0BAA0B,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC;QAC7E,UAAU,CAAC,MAAK;YACZ,IAAI,CAAC,iBAAiB,EAAE;QAC5B,CAAC,EAAE,GAAG,CAAC;IACX;IAEA,yBAAyB,GAAA;QACrB,IAAI,CAAC,wBAAwB,EAAE;AAC/B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AACxB,YAAA,MAAM,EAAE,iBAAiB;YACzB,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,eAAe,EAAE,IAAI,CAAC;AACzB,SAAA,CAAC;IACN;IAEA,yBAAyB,GAAA;QACrB,IAAI,CAAC,wBAAwB,EAAE;AAC/B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AACxB,YAAA,MAAM,EAAE,iBAAiB;YACzB,IAAI,EAAE,IAAI,CAAC,YAAY;YACvB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,eAAe,EAAE,IAAI,CAAC;AACzB,SAAA,CAAC;IACN;IAEA,wBAAwB,GAAA;AACpB,QAAA,MAAM,aAAa,GAAG;YAClB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,IAAI;SACtB;AAED,QAAA,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CAAC,aAAa,CAAC;IACnE;AAEA,IAAA,oBAAoB,CAAC,KAAU,EAAA;QAC3B,IAAI,KAAK,EAAE;YACP,IAAI,UAAU,GAAG,KAAK;YACtB,IAAI,UAAU,GAAQ,IAAI;YAC1B,IAAI,gBAAgB,GAAQ,EAAE;AAE9B,YAAA,IAAI,KAAK,EAAE,kBAAkB,KAAK,WAAW,EAAE;gBAC3C,UAAU,GAAG,IAAI;AACjB,gBAAA,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,SAAS;gBAC/C,IAAI,CAAC,WAAW,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE;YAClD;;AAGA,YAAA,MAAM,aAAa,GAAG,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC5D,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAEzE,YAAA,IAAI,aAAa,IAAI,IAAI,CAAC,eAAe,EAAE;gBACvC,IAAI,IAAI,CAAC,eAAe,EAAE,kBAAkB,KAAK,kBAAkB,CAAC,KAAK,EAAE;;oBAEvE,UAAU,GAAG,IAAI;oBACjB,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,mBAAmB,IAAI,CAAC;AAC3D,oBAAA,IAAI,IAAI,CAAC,WAAW,EAAE;wBAClB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,UAAU;oBAC3D;yBAAO;AACH,wBAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,kBAAkB,GAAG,UAAU,EAAE;oBACjE;gBACJ;qBAAO,IAAI,IAAI,CAAC,eAAe,EAAE,kBAAkB,KAAK,kBAAkB,CAAC,KAAK,EAAE;AAC9E,oBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,mBAAmB,EAAE,GAAG,CAAC,IAAI,CAAC;AAC5E,oBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,mBAAmB,EAAE,GAAG,CAAC,IAAI,CAAC;AAE5E,oBAAA,gBAAgB,GAAG;;;AAGf,wBAAA,KAAK,EAAE;AACH,4BAAA,UAAU,EAAE,CAAC,OAAY,KAAI;AACzB,gCAAA,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK;AAC5B,gCAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE;oCACvD,OAAO,IAAI,CAAC;gCAChB;gCAEA,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;;AAGrC,gCAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;gCAEjC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;oCACxC,OAAO,IAAI,CAAC;gCAChB;;AAGA,gCAAA,OAAO,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ;4BACvD,CAAC;4BACD,OAAO,EAAE,MAAM,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,qCAAqC,CAAC,IAAI,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA;AAC9K;qBACJ;gBACL;YACJ;AAEA,YAAA,MAAM,WAAW,GAAe,KAAK,EAAE,gBAAgB,IAAI,EAAE;YAC7D,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC;YAEtE,MAAM,qBAAqB,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC;AACpE,YAAA,MAAM,UAAU,GAAY,qBAAqB,CAAC,UAAU;AAC5D,YAAA,MAAM,SAAS,GAAuB,qBAAqB,CAAC,SAAS;AACrE,YAAA,MAAM,SAAS,GAAuB,qBAAqB,CAAC,SAAS;AACrE,YAAA,IAAI,QAAQ,GAAuB,qBAAqB,CAAC,QAAQ;AACjE,YAAA,IAAI,QAAQ,GAAuB,qBAAqB,CAAC,QAAQ;;;;AAKjE,YAAA,IAAI,aAAa,IAAI,IAAI,CAAC,eAAe,EAAE,kBAAkB,KAAK,kBAAkB,CAAC,KAAK,EAAE;;;YAG5F;AAEA,YAAA,IAAI,GAAG,GAAsB;gBACzB,GAAG,EAAE,KAAK,CAAC,kBAAkB;AAC7B,gBAAA,eAAe,EAAE,EAAS;AAC1B,gBAAA,SAAS,EAAE,QAAQ;gBACnB,QAAQ,EAAE,CAAC,uBAAuB,CAAC;AACnC,gBAAA,IAAI,EAAE,OAAO;;AAEb,gBAAA,YAAY,EAAE;AACV,oBAAA,QAAQ,EAAE;AACb,iBAAA;;AAED,gBAAA,oBAAoB,EAAE;AAClB,oBAAA,0BAA0B,EAAE,oBAAoB;AACnD,iBAAA;;AAED,gBAAA,KAAK,EAAE;AACH,oBAAA,MAAM,EAAE,CAAC,KAAwB,KAAI;AACjC,wBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW;wBACjC,IAAI,OAAO,EAAE;;AAET,4BAAA,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAChC,gCAAA,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;oCACnE,OAAO,CAAC,aAAa,EAAE;gCAC3B;AACJ,4BAAA,CAAC,CAAC;wBACN;oBACJ;AACH;aACJ;;YAGD,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,gBAAA,GAAG,CAAC,YAAY,CAAC,GAAG,gBAAgB;YACxC;AAEA,YAAA,IAAI,mBAAmB,IAAI,6BAA6B,CAAC,QAAQ,EAAE;gBAC/D,GAAG,CAAC,iBAAiB,CAAC,GAAG;AACrB,oBAAA,KAAK,EAAE,CAAA,EAAG,KAAK,CAAC,WAAW,CAAA,CAAA,CAAG;AAC9B,oBAAA,WAAW,EAAE,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,WAAW,CAAA,CAAE;AACrG,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,SAAS,EAAE,SAAS;AACpB,oBAAA,SAAS,EAAE,SAAS;AACpB,oBAAA,QAAQ,EAAE,UAAU;iBACvB;AACD,gBAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACrB,oBAAA,GAAG,CAAC,cAAc,CAAC,GAAG,UAAU;gBACpC;YACJ;AAAO,iBAAA,IAAI,mBAAmB,IAAI,6BAA6B,CAAC,OAAO,EAAE;;;AAGrE,gBAAA,MAAM,eAAe,GAAQ;AACzB,oBAAA,KAAK,EAAE,CAAA,EAAG,KAAK,CAAC,WAAW,CAAA,CAAA,CAAG;AAC9B,oBAAA,WAAW,EAAE,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,WAAW,CAAA,CAAE;AACrG,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,SAAS,EAAE,SAAS;AACpB,oBAAA,SAAS,EAAE,SAAS;AACpB,oBAAA,QAAQ,EAAE,UAAU;iBACvB;;AAGD,gBAAA,IAAI,EAAE,aAAa,IAAI,IAAI,CAAC,eAAe,EAAE,kBAAkB,KAAK,kBAAkB,CAAC,KAAK,CAAC,EAAE;AAC3F,oBAAA,eAAe,CAAC,GAAG,GAAG,QAAQ;AAC9B,oBAAA,eAAe,CAAC,GAAG,GAAG,QAAQ;gBAClC;AAEA,gBAAA,GAAG,CAAC,iBAAiB,CAAC,GAAG,eAAe;AACxC,gBAAA,GAAG,CAAC,MAAM,CAAC,GAAG,cAAc;AAC5B,gBAAA,IAAI,UAAU,KAAK,IAAI,EAAE;AACrB,oBAAA,GAAG,CAAC,cAAc,CAAC,GAAG,UAAU;gBACpC;YAEJ;AAEA,YAAA,OAAO,GAAG;QACd;AAEA,QAAA,OAAO,IAAI;IACf;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;IAC/B;AAEQ,IAAA,wBAAwB,CAAC,eAAoB,EAAA;AACjD,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;AAAE,YAAA,OAAO,EAAE;AAC9C,QAAA,OAAO;AACF,aAAA,MAAM,CAAC,CAAC,MAAW,KAAK,MAAM,CAAC,MAAM,EAAE,aAAa,IAAI,CAAC,CAAC,KAAK,CAAC;AAChE,aAAA,GAAG,CAAC,CAAC,MAAW,MAAM;AACnB,YAAA,GAAG,MAAM;YACT,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,IAAI,CAAC,CAAC;YACjD,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa;AAC9C,kBAAE,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAK,MAAM,CAAC,CAAC,EAAE,aAAa,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,aAAa,IAAI,CAAC,CAAC;AAClH,kBAAE,EAAE;AACX,SAAA,CAAC;aACD,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAK,MAAM,CAAC,CAAC,EAAE,aAAa,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,aAAa,IAAI,CAAC,CAAC,CAAC;IAChG;AAEQ,IAAA,kBAAkB,CAAC,SAAc,EAAA;AACrC,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;YAC/B,IAAI,SAAS,KAAK,CAAC;gBAAE,OAAO,6BAA6B,CAAC,QAAQ;YAClE,IAAI,SAAS,KAAK,CAAC;gBAAE,OAAO,6BAA6B,CAAC,OAAO;YACjE,IAAI,SAAS,KAAK,CAAC;gBAAE,OAAO,6BAA6B,CAAC,MAAM;QACpE;QACA,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;QAC5D,IAAI,cAAc,KAAK,GAAG;YAAE,OAAO,6BAA6B,CAAC,QAAQ;QACzE,IAAI,cAAc,KAAK,GAAG;YAAE,OAAO,6BAA6B,CAAC,OAAO;QACxE,IAAI,cAAc,KAAK,GAAG;YAAE,OAAO,6BAA6B,CAAC,MAAM;AACvE,QAAA,OAAO,cAAc;IACzB;AAEQ,IAAA,oBAAoB,CAAC,MAAW,EAAA;AACpC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QAC7D,IAAI,WAAW,KAAK,iBAAiB;YAAE,OAAO,gCAAgC,CAAC,eAAe;QAC9F,IAAI,WAAW,KAAK,iBAAiB;YAAE,OAAO,gCAAgC,CAAC,eAAe;QAC9F,IAAI,WAAW,KAAK,mBAAmB;YAAE,OAAO,gCAAgC,CAAC,iBAAiB;QAClG,IAAI,WAAW,KAAK,oBAAoB;YAAE,OAAO,gCAAgC,CAAC,kBAAkB;QACpG,IAAI,WAAW,KAAK,kBAAkB;YAAE,OAAO,gCAAgC,CAAC,gBAAgB;AAChG,QAAA,OAAO,WAAW;IACtB;AAEQ,IAAA,oBAAoB,CAAC,WAAkB,EAAA;QAO3C,IAAI,UAAU,GAAG,KAAK;AACtB,QAAA,IAAI,SAA6B;AACjC,QAAA,IAAI,SAA6B;AACjC,QAAA,IAAI,QAA4B;AAChC,QAAA,IAAI,QAA4B;AAEhC,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,UAAe,KAAI;AACpC,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;YACvD,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC;YACjD,MAAM,KAAK,GAAG,UAAU,EAAE,KAAK,IAAI,UAAU,EAAE,YAAY;YAE3D,IAAI,GAAG,KAAK,cAAc,IAAI,SAAS,KAAK,CAAC,EAAE;AAC3C,gBAAA,UAAU,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG;YACnF;iBAAO,IAAI,GAAG,KAAK,YAAY,IAAI,SAAS,KAAK,CAAC,EAAE;AAChD,gBAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;YAC7B;iBAAO,IAAI,GAAG,KAAK,WAAW,IAAI,SAAS,KAAK,CAAC,EAAE;AAC/C,gBAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;YAC5B;iBAAO,IAAI,GAAG,KAAK,YAAY,IAAI,SAAS,KAAK,CAAC,EAAE;AAChD,gBAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AACzB,gBAAA,IAAI,CAAC,UAAU;oBAAE,UAAU,GAAG,IAAI;YACtC;iBAAO,IAAI,GAAG,KAAK,WAAW,IAAI,SAAS,KAAK,CAAC,EAAE;AAC/C,gBAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;YAC5B;AACJ,QAAA,CAAC,CAAC;QAEF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACnE;wGA7mBS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAK,0BAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClClC,gjEAsDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3BI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,eAAe,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAK,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAGZ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAZjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAAA,OAAA,EAGpB;wBACT,YAAY;wBACZ,YAAY;wBACZ,eAAe;wBACf,mBAAmB;wBACnB;AACH,qBAAA,EAAA,QAAA,EAAA,gjEAAA,EAAA;;sBAGI;;sBACA;;sBACA;;;ME4CQ,iBAAiB,CAAA;AAClB,IAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC/D,IAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AACtC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,EAAE,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/B,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACjC,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAG9D,UAAU,GAAY,KAAK;IAE3B,cAAc,GAAQ,IAAI;IAC1B,cAAc,GAAQ,IAAI;IAC1B,eAAe,GAAQ,IAAI;AAE3B,IAAA,WAAW;IACX,WAAW,GAAwB,EAAE;IACrC,WAAW,GAAQ,EAAE;IACrB,UAAU,GAAQ,IAAI;IACtB,kBAAkB,GAAQ,IAAI;IAC9B,iBAAiB,GAAe,EAAE;AAElC,IAAA,QAAQ,GAAqB,IAAI,OAAO,EAAW;IACnD,qBAAqB,GAAY,KAAK;IACtC,uBAAuB,GAAQ,IAAI;IACnC,eAAe,GAAU,EAAE;IAC3B,kBAAkB,GAAW,CAAC;IAC9B,eAAe,GAAQ,EAAE;AAIzB,IAAA,WAAA,GAAA;QAEI,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAClF,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;YAClC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AAC3F,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;YAC9B;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;AACjG,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;AACrB,gBAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;YAClC;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAEpC,QAAA,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AAC9F,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;gBACjB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;AAC7D,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YAC3B;AACJ,QAAA,CAAC,CAAC;IAEN;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;YAChC,IAAI,CAAC,eAAe,EAAE;QAC1B;aAAO;YACH,IAAI,CAAC,IAAI,EAAE;QACf;IACJ;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,MAAM,GAAQ;AAChB,YAAA,YAAY,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY;AAC/C,YAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,8BAA8B;AAClE,YAAA,OAAO,EAAE,CAAA,kBAAA,EAAqB,aAAa,CAAC,SAAS,CAAA,CAAA,CAAG;SAC3D;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,aAAa,KAAK,sBAAsB,CAAC,QAAQ,EAAE;YACxE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS;QACxD;QAEA,IAAI,CAAC,0BAA0B,CAAC,qCAAqC,CAAC,MAAM,CAAC,CAAC,SAAS,CACnF;YACI,IAAI,EAAE,GAAG,IAAG;AACR,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;AACd,oBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC;AAClF,oBAAA,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC;AACzC,oBAAA,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,eAAe,CAAC;oBAEpE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC;gBAC/D;qBAAO;AACH,oBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5C;YACJ,CAAC;AACJ,SAAA,CACJ;IACL;AAEA,IAAA,iBAAiB,CAAC,MAAkB,EAAA;AAChC,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,MAAM,WAAW,GAAwB,EAAE;AAC3C,YAAA,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;gBACnB,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC;AACtE,gBAAA,IAAI,mBAAmB,KAAK,6BAA6B,CAAC,QAAQ,IAAI,mBAAmB,KAAK,6BAA6B,CAAC,OAAO,EAAE;oBACjI,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;oBAC7C,IAAI,IAAI,EAAE;AACN,wBAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC1B;gBACJ;AAAO,qBAAA,IAAI,mBAAmB,KAAK,6BAA6B,CAAC,MAAM,EAAE;AACrE,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;gBAC3B;AACJ,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;QAClC;IACJ;IAEA,UAAU,GAAA;;QAEN,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAwB,KAAI;YAClD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;AACtD,YAAA,MAAM,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;YAC1D,IAAI,WAAW,EAAE;gBACb,WAAW,CAAC,aAAa,EAAE;gBAC3B,WAAW,CAAC,sBAAsB,EAAE;YACxC;AACJ,QAAA,CAAC,CAAC;;QAGF,IAAI,cAAc,GAAG,KAAK;QAC1B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAwB,KAAI;AAClD,YAAA,MAAM,UAAU,GAAG,KAAK,EAAE,eAAe,EAAE,QAAQ;YACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;AAC3D,YAAA,MAAM,WAAW,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI;AACpE,YAAA,MAAM,UAAU,GAAG,WAAW,EAAE,KAAK;AAErC,YAAA,IAAI,UAAU,KAAK,CAAC,UAAU,IAAI,UAAU,KAAK,EAAE,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,CAAC,EAAE;gBACrG,cAAc,GAAG,IAAI;gBACrB,IAAI,WAAW,EAAE;oBACb,WAAW,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;oBACzC,WAAW,CAAC,aAAa,EAAE;gBAC/B;YACJ;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;;AAE3C,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,uCAAuC,CAAC,CAAC;YACrG;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;YAEvE,MAAM,aAAa,GAAe,EAAE;YAEpC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,KAAwB,KAAI;gBAClD,MAAM,QAAQ,GAAG,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,QAAQ;AAE3E,gBAAA,MAAM,IAAI,GAAG;oBACT,GAAG,EAAE,KAAK,EAAE,GAAG;AACf,oBAAA,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACxD,oBAAA,KAAK,EAAE,KAAK;iBACf;AACD,gBAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,YAAA,CAAC,CAAC;AAEF,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAoB,KAAK,CAAC,EAAE,GAAG,CAAC;YACxE,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,IAAS,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC1G,MAAM,eAAe,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC;AAC5D,YAAA,IAAI,CAAC,0BAA0B,EAAE,qBAAqB,CAAC,eAAe,CAAC;YAEvE,QAAQ,MAAM;gBACV,KAAK,gCAAgC,CAAC,eAAe;AACjD,oBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,wBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;oBAClC;yBAAO;AACH,wBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;4BACjB,yCAAyC;AAC5C,yBAAA,CAAC;oBACN;oBACA;gBACJ,KAAK,gCAAgC,CAAC,eAAe;AACjD,oBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,wBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;oBAClC;yBAAO;AACH,wBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;4BACjB,yCAAyC;AAC5C,yBAAA,CAAC;oBACN;oBACA;gBACJ,KAAK,gCAAgC,CAAC,kBAAkB;AACpD,oBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,wBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;oBACrC;yBAAO;AACH,wBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;4BACjB,mDAAmD;AACtD,yBAAA,CAAC;oBACN;oBACA;gBACJ,KAAK,gCAAgC,CAAC,gBAAgB;AAClD,oBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,wBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;oBACrC;yBAAO;AACH,wBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;4BACjB,mDAAmD;AACtD,yBAAA,CAAC;oBACN;oBACA;AACJ,gBAAA;oBACI,IAAI,CAAC,kBAAkB,EAAE;oBACzB;;QAEZ;IACJ;IAEA,kBAAkB,GAAA;AACd,QAAA,MAAM,MAAM,GAAQ;AAChB,YAAA,YAAY,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY;AAC/C,YAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,8BAA8B;AAClE,YAAA,OAAO,EAAE,CAAA,kBAAA,EAAqB,aAAa,CAAC,SAAS,CAAA,CAAA,CAAG;SAC3D;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,aAAa,KAAK,sBAAsB,CAAC,QAAQ,EAAE;YACxE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS;QACxD;QAEA,IAAI,CAAC,0BAA0B,CAAC,qCAAqC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AACpF,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACV,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;AACd,oBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,CAAC;AACrF,oBAAA,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,MAAM,CAC/C,CAAC,QAAa,KAAK,QAAQ,EAAE,aAAa,GAAG,CAAC,CACjD;AAED,oBAAA,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,wBAAA,IAAI,CAAC,eAAe,GAAG,iBAAiB;wBACxC,IAAI,CAAC,uBAAuB,GAAG;AAC3B,4BAAA,8BAA8B,EAAE,IAAI,CAAC,cAAc,EAAE,8BAA8B;AACnF,4BAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa;AACjD,4BAAA,YAAY,EAAE,IAAI,CAAC,cAAc,EAAE;yBACtC;AAED,wBAAA,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;AACtE,wBAAA,IAAI,CAAC,0BAA0B,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACvD,wBAAA,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CAAC;AAC7C,4BAAA,eAAe,EAAE,iBAAiB;AAClC,4BAAA,kBAAkB,EAAE,CAAC;4BACrB,YAAY,EAAE,IAAI,CAAC;AACtB,yBAAA,CAAC;AAEF,wBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;oBACrC;yBAAO;AACH,wBAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,wBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,4BAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;wBACnC;6BAAO;AACH,4BAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;gCACjB,0CAA0C;AAC7C,6BAAA,CAAC;wBACN;oBACJ;gBACJ;qBAAO;AACH,oBAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,oBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,wBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACnC;yBAAO;AACH,wBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;4BACjB,0CAA0C;AAC7C,yBAAA,CAAC;oBACN;gBACJ;YACJ,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACb,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACnC;qBAAO;AACH,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;wBACjB,0CAA0C;AAC7C,qBAAA,CAAC;gBACN;YACJ;AACH,SAAA,CAAC;IACN;IAEA,IAAI,GAAA;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QACrC;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,mCAAmC,CAAC;QAClE;IACJ;AAEA,IAAA,mBAAmB,CAAC,KAAU,EAAA;AAC1B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,EAAE;AAC3C,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;YACnC;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,+CAA+C,CAClD;YACL;QACJ;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE;AAC3C,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;YAClC;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,yCAAyC,CAC5C;YACL;QACJ;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE;AAC3C,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;YAClC;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,yCAAyC,CAC5C;YACL;QACJ;IACJ;IACA,WAAW,GAAA;AACP,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK;AACpC,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IACpH;AAEA,IAAA,oBAAoB,CAAC,KAAU,EAAA;QAC3B,IAAI,KAAK,EAAE;YACP,IAAI,UAAU,GAAG,KAAK;AACtB,YAAA,IAAI,KAAK,EAAE,kBAAkB,KAAK,WAAW,EAAE;gBAC3C,UAAU,GAAG,IAAI;AACjB,gBAAA,IAAI,CAAC,WAAW,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,EAAE;YAC1E;AAEA,YAAA,MAAM,WAAW,GAAe,KAAK,EAAE,gBAAgB,IAAI,EAAE;YAC7D,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC;;;YAItE,IAAI,UAAU,GAAY,KAAK;AAC/B,YAAA,IAAI,SAA6B;AACjC,YAAA,IAAI,SAA6B;AACjC,YAAA,IAAI,QAA4B;AAChC,YAAA,IAAI,QAA4B;YAChC,MAAM,kBAAkB,GAAQ,EAAE;AAElC,YAAA,WAAW,CAAC,OAAO,CAAC,CAAC,UAAe,KAAI;AACpC,gBAAA,MAAM,SAAS,GAAG,UAAU,EAAE,WAAW;AACzC,gBAAA,MAAM,UAAU,GAAG,UAAU,EAAE,YAAY;AAC3C,gBAAA,MAAM,UAAU,GAAG,UAAU,EAAE,WAAW;AAE1C,gBAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACjB,oBAAA,UAAU,GAAG,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,GAAG;gBACnF;AAAO,qBAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACxB,oBAAA,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC;oBAChC,IAAI,UAAU,EAAE;AACZ,wBAAA,kBAAkB,CAAC,SAAS,GAAG,UAAU;oBAC7C;gBACJ;AAAO,qBAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACxB,oBAAA,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC;oBACjC,IAAI,UAAU,EAAE;AACZ,wBAAA,kBAAkB,CAAC,GAAG,GAAG,UAAU;oBACvC;gBACJ;AAAO,qBAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACxB,oBAAA,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC;oBAChC,IAAI,UAAU,EAAE;AACZ,wBAAA,kBAAkB,CAAC,SAAS,GAAG,UAAU;oBAC7C;;oBAEA,IAAI,CAAC,UAAU,EAAE;wBACb,UAAU,GAAG,IAAI;oBACrB;gBACJ;AAAO,qBAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACxB,oBAAA,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC;oBACjC,IAAI,UAAU,EAAE;AACZ,wBAAA,kBAAkB,CAAC,GAAG,GAAG,UAAU;oBACvC;gBACJ;AACJ,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,GAAG,GAAsB;gBACzB,GAAG,EAAE,KAAK,CAAC,kBAAkB;AAC7B,gBAAA,eAAe,EAAE,EAAS;AAC1B,gBAAA,SAAS,EAAE,QAAQ;gBACnB,QAAQ,EAAE,CAAC,uBAAuB,CAAC;AACnC,gBAAA,IAAI,EAAE,OAAO;;AAEb,gBAAA,YAAY,EAAE;AACV,oBAAA,QAAQ,EAAE;AACb,iBAAA;;AAED,gBAAA,oBAAoB,EAAE;AAClB,oBAAA,0BAA0B,EAAE,oBAAoB;AACnD,iBAAA;;AAED,gBAAA,KAAK,EAAE;AACH,oBAAA,MAAM,EAAE,CAAC,KAAwB,KAAI;AACjC,wBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW;wBACjC,IAAI,OAAO,EAAE;;AAET,4BAAA,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;AAChC,gCAAA,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,EAAE;oCACnE,OAAO,CAAC,aAAa,EAAE;gCAC3B;AACJ,4BAAA,CAAC,CAAC;wBACN;oBACJ;AACH;aACJ;;YAGD,IAAI,UAAU,EAAE;AACZ,gBAAA,kBAAkB,CAAC,QAAQ,GAAG,CAAA,EAAG,KAAK,CAAC,WAAW,CAAA,CAAA,EAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,mBAAmB,CAAC,EAAE;YAClH;;YAGA,IAAI,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC5C,GAAG,CAAC,YAAY,CAAC,GAAG;AAChB,oBAAA,QAAQ,EAAE;iBACb;YACL;AAEA,YAAA,IAAI,mBAAmB,IAAI,6BAA6B,CAAC,QAAQ,EAAE;gBAE/D,GAAG,CAAC,iBAAiB,CAAC,GAAG;AACrB,oBAAA,KAAK,EAAE,CAAA,EAAG,KAAK,CAAC,WAAW,CAAA,CAAA,CAAG;AAC9B,oBAAA,WAAW,EAAE,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,WAAW,CAAA,CAAE;AACrG,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,SAAS,EAAE,SAAS;AACpB,oBAAA,SAAS,EAAE,SAAS;AACpB,oBAAA,QAAQ,EAAE,UAAU;iBAEvB;YAEL;AAAO,iBAAA,IAAI,mBAAmB,IAAI,6BAA6B,CAAC,OAAO,EAAE;gBACrE,GAAG,CAAC,iBAAiB,CAAC,GAAG;AACrB,oBAAA,KAAK,EAAE,CAAA,EAAG,KAAK,CAAC,WAAW,CAAA,CAAA,CAAG;AAC9B,oBAAA,WAAW,EAAE,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,WAAW,CAAA,CAAE;AACrG,oBAAA,QAAQ,EAAE,UAAU;AACpB,oBAAA,GAAG,EAAE,QAAQ;AACb,oBAAA,GAAG,EAAE,QAAQ;AACb,oBAAA,SAAS,EAAE,SAAS;AACpB,oBAAA,SAAS,EAAE,SAAS;iBACvB;AACD,gBAAA,GAAG,CAAC,MAAM,CAAC,GAAG,cAAc;YAChC;AAEA,YAAA,OAAO,GAAG;QACd;AACA,QAAA,OAAO,IAAI;IACf;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;IAC/B;AAEQ,IAAA,wBAAwB,CAAC,eAAoB,EAAA;AACjD,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;AAAE,YAAA,OAAO,EAAE;AAC9C,QAAA,OAAO;AACF,aAAA,MAAM,CAAC,CAAC,MAAW,KAAK,MAAM,CAAC,MAAM,EAAE,aAAa,IAAI,CAAC,CAAC,KAAK,CAAC;AAChE,aAAA,GAAG,CAAC,CAAC,MAAW,MAAM;AACnB,YAAA,GAAG,MAAM;YACT,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,IAAI,CAAC,CAAC;YACjD,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa;AAC9C,kBAAE,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAK,MAAM,CAAC,CAAC,EAAE,aAAa,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,aAAa,IAAI,CAAC,CAAC;AAClH,kBAAE,EAAE;AACX,SAAA,CAAC;aACD,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM,KAAK,MAAM,CAAC,CAAC,EAAE,aAAa,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,aAAa,IAAI,CAAC,CAAC,CAAC;IAChG;AAEQ,IAAA,kBAAkB,CAAC,SAAc,EAAA;AACrC,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;YAC/B,IAAI,SAAS,KAAK,CAAC;gBAAE,OAAO,6BAA6B,CAAC,QAAQ;YAClE,IAAI,SAAS,KAAK,CAAC;gBAAE,OAAO,6BAA6B,CAAC,OAAO;YACjE,IAAI,SAAS,KAAK,CAAC;gBAAE,OAAO,6BAA6B,CAAC,MAAM;QACpE;QACA,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;QAC5D,IAAI,cAAc,KAAK,GAAG;YAAE,OAAO,6BAA6B,CAAC,QAAQ;QACzE,IAAI,cAAc,KAAK,GAAG;YAAE,OAAO,6BAA6B,CAAC,OAAO;QACxE,IAAI,cAAc,KAAK,GAAG;YAAE,OAAO,6BAA6B,CAAC,MAAM;AACvE,QAAA,OAAO,cAAc;IACzB;AAEQ,IAAA,oBAAoB,CAAC,MAAW,EAAA;AACpC,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QAC7D,IAAI,WAAW,KAAK,iBAAiB;YAAE,OAAO,gCAAgC,CAAC,eAAe;QAC9F,IAAI,WAAW,KAAK,iBAAiB;YAAE,OAAO,gCAAgC,CAAC,eAAe;QAC9F,IAAI,WAAW,KAAK,mBAAmB;YAAE,OAAO,gCAAgC,CAAC,iBAAiB;QAClG,IAAI,WAAW,KAAK,oBAAoB;YAAE,OAAO,gCAAgC,CAAC,kBAAkB;QACpG,IAAI,WAAW,KAAK,kBAAkB;YAAE,OAAO,gCAAgC,CAAC,gBAAgB;AAChG,QAAA,OAAO,WAAW;IACtB;wGAnfS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,SAAA,EAtCd;AACA,YAAA,iBAAiB,CAAC;AAChB,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,IAAI,EAAE,uBAAuB;AAC7B,wBAAA,SAAS,EAAE,gCAAgC;AAC5C,qBAAA;AACF,iBAAA;AACD,gBAAA,kBAAkB,EAAE;AAClB,oBAAA,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,wBAAwB,EAAE;AACxD,iBAAA;AACD,gBAAA,KAAK,EAAE;AACL,oBAAA;AACI,wBAAA,IAAI,EAAE,OAAO;wBACb,SAAS,EAAE,gBAAgB;AAC5B,qBAAA;AACH,oBAAA;AACI,wBAAA,IAAI,EAAE,cAAc;wBACpB,OAAO,EAAE,OAAO;AAChB,wBAAA,cAAc,EAAE;AACd,4BAAA,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;AACf,6BAAA;AACF,yBAAA;AACF,qBAAA;AACH,oBAAA,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,4BAA4B,EAAE;AAC9D,oBAAA;AACE,wBAAA,IAAI,EAAE,oBAAoB;AAC1B,wBAAA,SAAS,EAAE,yBAAyB;AACrC,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,0BAA0B;AAChC,wBAAA,SAAS,EAAE,0BAA0B;AACtC,qBAAA;AACF,iBAAA;aACF,CAAC;AACH,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/Ef,6jNAwOQ,EAAA,MAAA,EAAA,CAAA,2rEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvMA,YAAY,4HACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,+KACnB,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,eAAe,mFACf,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAM,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAwChB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBArD7B,SAAS;+BACI,eAAe,EAAA,UAAA,EAEd,IAAI,EAAA,OAAA,EACN;wBACL,YAAY;wBACZ,YAAY;wBACZ,cAAc;wBACd,WAAW;wBACX,mBAAmB;wBACnB,qBAAqB;wBACrB,YAAY;wBACZ,eAAe;wBACf,qBAAqB;qBACxB,EAAA,SAAA,EACW;AACA,wBAAA,iBAAiB,CAAC;AAChB,4BAAA,QAAQ,EAAE;AACR,gCAAA;AACE,oCAAA,IAAI,EAAE,uBAAuB;AAC7B,oCAAA,SAAS,EAAE,gCAAgC;AAC5C,iCAAA;AACF,6BAAA;AACD,4BAAA,kBAAkB,EAAE;AAClB,gCAAA,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,wBAAwB,EAAE;AACxD,6BAAA;AACD,4BAAA,KAAK,EAAE;AACL,gCAAA;AACI,oCAAA,IAAI,EAAE,OAAO;oCACb,SAAS,EAAE,gBAAgB;AAC5B,iCAAA;AACH,gCAAA;AACI,oCAAA,IAAI,EAAE,cAAc;oCACpB,OAAO,EAAE,OAAO;AAChB,oCAAA,cAAc,EAAE;AACd,wCAAA,KAAK,EAAE;4CACL,IAAI,EAAE,QAAQ;AACf,yCAAA;AACF,qCAAA;AACF,iCAAA;AACH,gCAAA,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,4BAA4B,EAAE;AAC9D,gCAAA;AACE,oCAAA,IAAI,EAAE,oBAAoB;AAC1B,oCAAA,SAAS,EAAE,yBAAyB;AACrC,iCAAA;AACD,gCAAA;AACE,oCAAA,IAAI,EAAE,0BAA0B;AAChC,oCAAA,SAAS,EAAE,0BAA0B;AACtC,iCAAA;AACF,6BAAA;yBACF,CAAC;AACH,qBAAA,EAAA,QAAA,EAAA,6jNAAA,EAAA;;;AEnEf,MAAM,mBAAmB,GAAG;AACxB,IAAA,IAAI,EAAE;AACF,QAAA,MAAM,EAAE;AACJ,YAAA,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;AACvN,YAAA,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;YACnK,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;AACtJ,YAAA,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;AAChH,YAAA,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;YACrK,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;AAC1J,YAAA,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;AAClL,YAAA,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;AAC/M,SAAA;AACJ,KAAA;CACJ;MAQY,sBAAsB,CAAA;AACvB,IAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC/D,IAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AACtC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAC/C,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE9D,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAW;IAEjC,OAAO,GAAoF,EAAE;IAC7F,QAAQ,GAAuC,EAAE;IAEjD,cAAc,GAAoF,IAAI;IACtG,eAAe,GAAuC,IAAI;IAE1D,iBAAiB,GAAe,EAAE;IAClC,cAAc,GAAQ,IAAI;IAC1B,cAAc,GAAQ,IAAI;AAE1B,IAAA,WAAA,GAAA;QACI,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC7F,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;YAC9B;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC7F,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;YAC9B;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAS,KAAI;AACrG,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACxC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC;YACtC;iBAAO;AACH,gBAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;YAC/B;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;QACJ,IAAI,CAAC,OAAO,GAAG,mBAAmB,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE;QACtD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;YACjC,IAAI,CAAC,IAAI,EAAE;QACf;IACJ;AAEA,IAAA,aAAa,GAAG,CAAC,CAAM,EAAE,CAAM,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;AACnD,IAAA,cAAc,GAAG,CAAC,CAAM,EAAE,CAAM,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;AAEpD,IAAA,cAAc,CAAC,MAAuF,EAAA;AAClG,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC3B,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE;IACzC;AAEA,IAAA,eAAe,CAAC,OAA2C,EAAA;AACvD,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO;IAClC;IAEA,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;YAC5F;QACJ;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;YAC7F;QACJ;QAEA,MAAM,aAAa,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,CAAC;QAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC5F,QAAA,MAAM,aAAa,GAAG;AAClB,YAAA,GAAG,QAAQ;AACX,YAAA,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE;AAC3E,YAAA,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;AACpE,YAAA,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE;AAC9E,YAAA,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;SAC1E;AACD,QAAA,IAAI,CAAC,0BAA0B,CAAC,qBAAqB,CAAC,aAAa,CAAC;AACpE,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QACrC;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iDAAiD,CAAC;QAChF;IACJ;IAEA,IAAI,GAAA;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QACrC;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,mCAAmC,CAAC;QAClE;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;IAC/B;wGAnGS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,8ECjCnC,2oLA8LA,EAAA,MAAA,EAAA,CAAA,0nDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/Jc,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,6gCAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAT,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;4FAE1C,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;+BACI,oBAAoB,EAAA,UAAA,EAElB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,cAAc,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,2oLAAA,EAAA;;;MEsC3C,oBAAoB,CAAA;IACtB,kBAAkB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACvC,iBAAiB,GAAa,EAAE;IAChC,cAAc,GAAG,KAAK;IAEtB,IAAa,MAAM,CAAC,KAAgD,EAAA;AAClE,QAAA,MAAM,KAAK,GAAG,KAAK,EAAE,SAAS;QAC9B,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS;AACtG,QAAA,MAAM,SAAS,GAAG,UAAU,IAAI,IAAI,IAAI,UAAU,GAAG,CAAC,GAAG,UAAU,GAAG,SAAS;AAE/E,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,IAAI,IAAI;AACvC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC5B,cAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAU,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;cAC9C,EAAE;IACR;wGAdW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjErB;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,waAAA,CAAA,EAAA,CAAA;;4FAqCU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAnEhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,QAAA,EAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,EAAA,CAAA,EAAA,UAAA,EAmCW,IAAI,EAAA,MAAA,EAAA,CAAA,waAAA,CAAA,EAAA;;sBAOf;;;MCtCU,uBAAuB,CAAA;AACxB,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC/D,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC;AAChC,IAAA,iBAAiB,GAAG,IAAI,YAAY,EAAO;IAC5C,QAAQ,GAAQ,IAAI;IAE7B,QAAQ,GAAkB,IAAI;IAC9B,UAAU,GAAY,KAAK;IAE3B,aAAa,GAAe,EAAE;IAC9B,cAAc,GAAQ,IAAI;IAC1B,cAAc,GAAQ,IAAI;IAC1B,iBAAiB,GAAQ,IAAI;IAE7B,kBAAkB,GAAG,kBAAkB;IAEvC,qBAAqB,GAAY,KAAK;IACtC,0BAA0B,GAAQ,IAAI;IACtC,eAAe,GAAU,EAAE;IAC3B,kBAAkB,GAAW,CAAC;IAC9B,eAAe,GAAQ,EAAE;AAEzB,IAAA,QAAQ,GAAqB,IAAI,OAAO,EAAW;AAKnD,IAAA,WAAA,GAAA;QACI,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,SAAS,CAAC,QAAQ,IAAG;AACzD,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;AACrB,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,EAAE,eAAe;YAC7C;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AAC3F,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;YAC9B;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;AACjG,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;AACrB,gBAAA,IAAI,CAAC,cAAc,GAAG,QAAQ;YAClC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AAC9F,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;YACjC;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAY,KAAI;AACtG,YAAA,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,eAAe,GAAG,OAAO;YAClC;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;YACtG,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACvC,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YACnC;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAS,KAAI;AAChG,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC/B;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;QACJ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;YACjC,IAAI,CAAC,IAAI,EAAE;QACf;aAAO;AACH,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,WAAW,EAAE;QACtB;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,MAAM,MAAM,GAAQ;;;AAGhB,YAAA,kBAAkB,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE;SAC9C;QAED,IAAI,CAAC,0BAA0B,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC,SAAS,CAC/E;YACI,IAAI,EAAE,GAAG,IAAG;AACR,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;oBACd,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE,IAAI,EAAE,cAAc,IAAI,EAAE;;;oBAIpD,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;wBACjC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;oBAClD;yBAAO;;AAEH,wBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;oBAC3B;gBACJ;qBAAO;AACH,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,oBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3C;YACJ,CAAC;AACJ,SAAA,CACJ;IACL;AAEA,IAAA,kBAAkB,CAAC,IAAS,EAAA;AACxB,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC;AACpD,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI;AACtC,QAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;IACtC;AAEI,IAAA,uBAAuB,CAAC,WAAgB,EAAA;AACxC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,MAAM,MAAM,GAAQ;AAChB,YAAA,YAAY,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY;AAC/C,YAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,8BAA8B;AAClE,YAAA,OAAO,EAAE,CAAA,kBAAA,EAAqB,aAAa,CAAC,SAAS,CAAA,CAAA,CAAG;SAC3D;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,aAAa,KAAK,sBAAsB,CAAC,QAAQ,EAAE;YACxE,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS;QACxD;QAEA,IAAI,CAAC,0BAA0B,CAAC,qCAAqC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AACpF,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACV,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;oBACd,MAAM,kBAAkB,GAAG,GAAG,EAAE,IAAI,EAAE,gBAAgB,IAAI,EAAE;AAC5D,oBAAA,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,MAAM,CAC/C,CAAC,QAAa,KAAK,QAAQ,EAAE,aAAa,GAAG,CAAC,CACjD;AAED,oBAAA,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,wBAAA,IAAI,CAAC,eAAe,GAAG,iBAAiB;wBACxC,IAAI,CAAC,0BAA0B,GAAG;4BAC9B,GAAG,IAAI,CAAC,0BAA0B;AAClC,4BAAA,8BAA8B,EAAE,IAAI,CAAC,cAAc,EAAE,8BAA8B;AACnF,4BAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa;AACjD,4BAAA,YAAY,EAAE,IAAI,CAAC,cAAc,EAAE;yBACtC;AAED,wBAAA,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;AACtE,wBAAA,IAAI,CAAC,0BAA0B,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACvD,wBAAA,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CAAC;AAC7C,4BAAA,eAAe,EAAE,iBAAiB;AAClC,4BAAA,kBAAkB,EAAE,CAAC;4BACrB,eAAe,EAAE,IAAI,CAAC;AACzB,yBAAA,CAAC;AAEF,wBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;oBACrC;yBAAO;;AAEH,wBAAA,MAAM,kBAAkB,GAAG;AACvB,4BAAA,GAAG,WAAW;AACd,4BAAA,8BAA8B,EAAE,IAAI,CAAC,cAAc,EAAE,8BAA8B;AACnF,4BAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa;AACjD,4BAAA,YAAY,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY;AAC/C,4BAAA,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS;AACzC,4BAAA,oBAAoB,EAAE,IAAI,CAAC,cAAc,EAAE;yBAC9C;;AAGD,wBAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,kBAAkB,CAAC;;AAGlE,wBAAA,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,EAAE,CAAC;AACvD,wBAAA,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACtD,wBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE;AAC1B,4BAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;wBACnC;6BAAO;AACH,4BAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,+CAA+C,CAClD;wBACL;;oBAEJ;gBACJ;qBAAO;AACH,oBAAA,MAAM,kBAAkB,GAAG;AACvB,wBAAA,GAAG,WAAW;AACd,wBAAA,8BAA8B,EAAE,IAAI,CAAC,cAAc,EAAE,8BAA8B;AACnF,wBAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa;AACjD,wBAAA,YAAY,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY;AAC/C,wBAAA,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS;AACzC,wBAAA,oBAAoB,EAAE,IAAI,CAAC,cAAc,EAAE;qBAC9C;;AAEF,oBAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,kBAAkB,CAAC;;AAGlE,oBAAA,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,EAAE,CAAC;AACvD,oBAAA,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACtD,oBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE;AAC1B,wBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACnC;yBAAO;AACH,wBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,+CAA+C,CAClD;oBACL;gBACH;YACJ,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACT,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7C;AACP,SAAA,CAAC;IACN;IAEA,mBAAmB,GAAA;;AAEf,QAAA,IAAI,IAAI,CAAC,0BAA0B,EAAE;;YAEjC,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,0BAA0B,CAAC;AAE/E,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AACxB,gBAAA,MAAM,EAAE,mBAAmB;gBAC3B,IAAI,EAAE,IAAI,CAAC;AACd,aAAA,CAAC;QACN;aAAO;;AAEH,YAAA,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC;gBACzC,YAAY,EAAE,IAAI,CAAC,0BAA0B;AAC7C,gBAAA,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC7B,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AACxB,gBAAA,MAAM,EAAE,wBAAwB;gBAChC,IAAI,EAAE,IAAI,CAAC;AACd,aAAA,CAAC;QACN;IACJ;AAEA,IAAA,mBAAmB,CAAC,KAAU,EAAA;AAC1B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,mBAAmB,EAAE;AACtC,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;;AAElC,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;YACnC;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,+CAA+C,CAClD;YACL;QACJ;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE;AAC3C,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;YAClC;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,yCAAyC,CAC5C;YACL;QACJ;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE;AAC3C,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE;AAC1B,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;YAClC;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,yCAAyC,CAC5C;YACL;QACJ;IACJ;IAEA,IAAI,GAAA;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE;;AAE1B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QACrC;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,mCAAmC,CAAC;QAClE;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;IAC/B;AAEA,IAAA,YAAY,CAAC,IAAS,EAAA;AAClB,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QACxE,QACI,IAAI,KAAK,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AACvD,YAAA,IAAI,KAAK,GAAG;YACZ,IAAI,KAAK,OAAO;IAExB;wGArSS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpCpC,4yLA+LA,EAAA,MAAA,EAAA,CAAA,+7CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvKI,YAAY,8BACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,YAAY,+BACZ,eAAe,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;AAEf,gBAAA,qBAAqB,oIACrB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAU,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA;;4FAGX,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAjBnC,SAAS;+BACI,qBAAqB,EAAA,UAAA,EAEnB,IAAI,EAAA,OAAA,EACP;wBACT,YAAY;wBACZ,cAAc;wBACd,WAAW;wBACX,mBAAmB;wBACnB,qBAAqB;wBACrB,YAAY;wBACZ,eAAe;;wBAEf,qBAAqB;wBACrB;AACH,qBAAA,EAAA,QAAA,EAAA,4yLAAA,EAAA;;sBASI;;sBACA;;;MEbQ,oBAAoB,CAAA;AACrB,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC/D,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IACrC,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAG9D,QAAQ,GAAkB,IAAI;IAC9B,UAAU,GAAY,KAAK;IAE3B,UAAU,GAAe,EAAE;IAC3B,cAAc,GAAQ,IAAI;IAC1B,iBAAiB,GAAQ,IAAI;AAE7B,IAAA,QAAQ,GAAqB,IAAI,OAAO,EAAW;IACnD,kBAAkB,GAAG,kBAAkB;AAKvC,IAAA,WAAA,GAAA;QACI,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,SAAS,CAAC,QAAQ,IAAG;AACzD,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;AACrB,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,EAAE,eAAe;YAC7C;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AAC3F,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;YAC9B;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AAC9F,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;YACjC;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;QACJ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;YACjC,IAAI,CAAC,IAAI,EAAE;QACf;aAAO;AACH,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,QAAQ,EAAE;QACnB;IACJ;IAEA,QAAQ,GAAA;AACJ,QAAA,MAAM,MAAM,GAAG;AACX,YAAA,kBAAkB,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE;SAC9C;QAED,IAAI,CAAC,0BAA0B,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC,SAAS,CAC/E;YACI,IAAI,EAAE,GAAG,IAAG;AACR,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;oBACd,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,IAAI,EAAE,cAAc,IAAI,EAAE;gBACrD;qBAAO;AACH,oBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3C;YACJ,CAAC;AACJ,SAAA,CACJ;IACL;AAEA,IAAA,eAAe,CAAC,IAAS,EAAA;AACrB,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC;AACpD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;QACnC;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,+CAA+C,CAClD;QACL;IACJ;IAGA,IAAI,GAAA;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QACrC;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,mCAAmC,CAAC;QAClE;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;IAC/B;AAEA,IAAA,YAAY,CAAC,IAAS,EAAA;AAClB,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QACxE,QACI,IAAI,KAAK,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AACvD,YAAA,IAAI,KAAK,GAAG;YACZ,IAAI,KAAK,OAAO;IAExB;wGArGS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/BjC,oiKA+KA,EAAA,MAAA,EAAA,CAAA,s4CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzJI,YAAY,8BACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,YAAY,+BACZ,eAAe,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA;;4FAGN,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAdhC,SAAS;+BACI,kBAAkB,EAAA,UAAA,EAEjB,IAAI,EAAA,OAAA,EACN;wBACT,YAAY;wBACZ,cAAc;wBACd,WAAW;wBACX,mBAAmB;wBACnB,qBAAqB;wBACrB,YAAY;wBACZ;AACH,qBAAA,EAAA,QAAA,EAAA,oiKAAA,EAAA;;;MEMY,kBAAkB,CAAA;AACnB,IAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC/D,IAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AACtC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACjC,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAG9D,QAAQ,GAAkB,IAAI;IAC9B,UAAU,GAAY,KAAK;IAE3B,SAAS,GAAQ,IAAI;IACrB,cAAc,GAAQ,IAAI;IAC1B,iBAAiB,GAAQ,EAAE;IAC3B,qBAAqB,GAAY,KAAK;IACtC,uBAAuB,GAAQ,IAAI;IACnC,eAAe,GAAU,EAAE;IAC3B,kBAAkB,GAAW,CAAC;IAC9B,eAAe,GAAQ,EAAE;AAEzB,IAAA,QAAQ,GAAqB,IAAI,OAAO,EAAW;AACnD,IAAA,UAAU,GAAG,MAAM,CAAC,IAAI;AACxB,IAAA,YAAY;AACZ,IAAA,UAAU;AACV,IAAA,aAAa;AACb,IAAA,aAAa;AAIb,IAAA,WAAA,GAAA;QAEI,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,SAAS,CAAC,QAAQ,IAAG;AACzD,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;AACrB,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,EAAE,eAAe;YAC7C;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AAC3F,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;gBAC1B,IAAI,CAAC,gBAAgB,EAAE;YAE3B;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAS,KAAI;AACrG,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;gBAC7B,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,iBAAiB,CAAC;AAC3D,gBAAA,IAAG,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE;AACjB,oBAAA,MAAM,kBAAkB,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,OAAY,KAC/C,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,CAC3D,EAAE,KAAK,IAAI,IAAI;AAEhB,oBAAA,IAAI,CAAC,UAAU,GAAG,kBAAkB;gBACxC;qBAAO;oBACH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW;gBACjD;YACJ;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAY,KAAI;AACtG,YAAA,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,eAAe,GAAG,OAAO;YAClC;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAU,KAAI;YACtG,IAAI,KAAK,EAAE;AACP,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;YACnC;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAS,KAAI;AAChG,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;YAC/B;AACJ,QAAA,CAAC,CAAC;IACN;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;YACvE,IAAI,CAAC,IAAI,EAAE;QACf;aAAO;AACH,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YACtB,IAAI,CAAC,QAAQ,EAAE;QACnB;IACJ;IAEA,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,0BAA0B,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,SAAS,CAC1F;YACI,IAAI,EAAE,GAAG,IAAG;AACR,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;oBACd,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE,IAAI,EAAE,aAAa;oBAC7C,IAAI,CAAC,YAAY,GAAC,IAAI,CAAC,aAAa,CAAC,WAAW;gBACpD;YACJ,CAAC;AACJ,SAAA,CACJ;IACL;IAEA,QAAQ,GAAA;AACJ,QAAA,MAAM,OAAO,GAAQ;AACjB,YAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,8BAA8B;SACrE;QAED,MAAM,2BAA2B,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,CAAC;QAC9F,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;AAC1C,YAAA,IAAI,KAAK,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AACxE,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE;YACjE;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,SAAS,CAClE;YACI,IAAI,EAAE,GAAG,IAAG;AACR,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;AACd,oBAAA,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,IAAI;gBAC9B;qBAAO;AACH,oBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5C;YACJ,CAAC;AACJ,SAAA,CACJ;IACL;AAEA,IAAA,eAAe,CAAC,IAAS,EAAA;AACrB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,cAAc,CAAC,QAAa,EAAA;AACxB,QAAA,IAAI,CAAC,uBAAuB,GAAG,QAAQ;AACvC,QAAA,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5D,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,YAAA,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC;AACzC,gBAAA,YAAY,EAAE,QAAQ;gBACtB,SAAS,EAAE,QAAQ,EAAE;AACxB,aAAA,CAAC;AACF,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;YACnC;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,+CAA+C,CAClD;YACL;QACJ;aAAO;YACH,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,0BAA0B,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC;YAC7E,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;AAC/C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,aAAa;YAC1G;AACA,YAAA,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CAAC;gBAC7C,eAAe,EAAE,IAAI,CAAC,eAAe;gBACrC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;gBAC3C,YAAY,EAAE,IAAI,CAAC;AACtB,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;QACrC;IACJ;AAEA,IAAA,oBAAoB,CAAC,QAAa,EAAA;AAE9B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,MAAM,MAAM,GAAG;AACX,YAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,8BAA8B;AAClE,YAAA,OAAO,EAAE,CAAA,kBAAA,EAAqB,aAAa,CAAC,SAAS,CAAA,CAAA,CAAG;SAC3D;QAED,IAAI,CAAC,0BAA0B,CAAC,qCAAqC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;YACpF,IAAI,EAAE,GAAG,IAAG;AACR,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;oBACd,MAAM,kBAAkB,GAAG,GAAG,EAAE,IAAI,EAAE,gBAAgB,IAAI,EAAE;AAC5D,oBAAA,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,MAAM,CAC/C,CAAC,QAAa,KAAK,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC,kBAAkB,CACvE;AAED,oBAAA,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,wBAAA,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;AACtE,wBAAA,IAAI,CAAC,0BAA0B,CAAC,oBAAoB,CAAC,CAAC,CAAC;AACvD,wBAAA,IAAI,CAAC,uBAAuB,GAAG,QAAQ;AACvC,wBAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI;AACjC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,aAAa;oBACjF;yBAAO;AACH,wBAAA,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC;AACzC,4BAAA,YAAY,EAAE,QAAQ;AACtB,4BAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS;AACvC,yBAAA,CAAC;AACF,wBAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,GAAG,CAAC;AAC3C,wBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,4BAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;wBACnC;6BAAO;AACH,4BAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,+CAA+C,CAClD;wBACL;oBACJ;gBACJ;qBAAO;AACH,oBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACxC,oBAAA,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC;AACzC,wBAAA,YAAY,EAAE,QAAQ;AACtB,wBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC9B,qBAAA,CAAC;AACF,oBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,wBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACnC;yBAAO;AACH,wBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,+CAA+C,CAClD;oBACL;gBACJ;YACJ,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACb,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC;AACzC,oBAAA,YAAY,EAAE,QAAQ;AACtB,oBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC9B,iBAAA,CAAC;AACF,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACnC;qBAAO;AACH,oBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,+CAA+C,CAClD;gBACL;YACJ;AACH,SAAA,CAAC;IACN;AAEA,IAAA,mBAAmB,CAAC,KAAU,EAAA;AAC1B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,EAAE;AAC3C,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;YACnC;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,+CAA+C,CAClD;YACL;QACJ;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE;AAC3C,YAAA,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC;QAC7C;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE;AAC3C,YAAA,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC;QAC7C;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,aAAa,EAAE;YACvC,IAAI,CAAC,gBAAgB,EAAE;QAC3B;AAAO,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,EAAE;YAC3C,IAAI,CAAC,oBAAoB,EAAE;QAC/B;IACJ;IAEA,gBAAgB,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3D,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,0BAA0B,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC7E,YAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,aAAa;QAC1G;aAAO;AACH,YAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;AAClC,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;YACnC;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,+CAA+C,CAClD;YACL;QACJ;IACJ;IAEA,oBAAoB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,kBAAkB,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,0BAA0B,CAAC,oBAAoB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC7E,YAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,aAAa;QAC1G;IACJ;AAEA,IAAA,6BAA6B,CAAC,KAAU,EAAA;AACpC,QAAA,IAAI,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,KAAK,CAAC,eAAe,CAAC;QAC9E;AACA,QAAA,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS,EAAE;YACxC,IAAI,CAAC,0BAA0B,CAAC,oBAAoB,CAAC,KAAK,CAAC,kBAAkB,CAAC;AAC9E,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB;QACtD;AACA,QAAA,IAAI,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CAAC,KAAK,CAAC,eAAe,CAAC;QAC3E;AACA,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK;IACtC;AAEA,IAAA,6BAA6B,CAAC,KAAU,EAAA;AACpC,QAAA,IAAI,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,KAAK,CAAC,eAAe,CAAC;QAC9E;AACA,QAAA,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS,EAAE;YACxC,IAAI,CAAC,0BAA0B,CAAC,oBAAoB,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAClF;AACA,QAAA,IAAI,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,CAAC,0BAA0B,CAAC,gBAAgB,CAAC,KAAK,CAAC,eAAe,CAAC;QAC3E;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;QAClC;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CACrB,yCAAyC,CAC5C;QACL;IACJ;IAEA,IAAI,GAAA;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QACrC;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,mCAAmC,CAAC;QAClE;IACJ;AAEA,IAAA,gBAAgB,CAAC,KAAa,EAAA;QAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;IACnC;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;IAC/B;wGAtUS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,0ECnC/B,+7LA8HA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtGI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,cAAc,8BACd,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,qBAAqB,8BACrB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,eAAe,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,qBAAqB,mFACrB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAD,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA;;4FAGZ,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAhB9B,SAAS;+BACI,gBAAgB,EAAA,UAAA,EAEf,IAAI,EAAA,OAAA,EACN;wBACT,YAAY;wBACZ,cAAc;wBACd,WAAW;wBACX,mBAAmB;wBACnB,qBAAqB;wBACrB,YAAY;wBACZ,eAAe;wBACf,qBAAqB;wBACrB;AACH,qBAAA,EAAA,QAAA,EAAA,+7LAAA,EAAA;;;ME9BY,kBAAkB,CAAA;wGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA;;4FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCOrB,2BAA2B,CAAA;IACtC,UAAU,GAAY,KAAK;AAE3B,IAAA,oBAAoB,KAAI;IAExB,qBAAqB,CAAC,IAAS,EAAA,EAAG;wGALvB,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAF5B,CAAA,CAAE,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EADF,YAAY,EAAA,CAAA,EAAA,CAAA;;4FAGX,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,QAAQ,EAAE,CAAA,CAAE;AACb,iBAAA;;;MCDY,WAAW,CAAA;AACd,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC;IACtC,YAAY,GAAG,MAAM,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAEjF,IAAA,IAAY,OAAO,GAAA;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACnC,QAAA,OAAO,GAAG,EAAE,OAAO,IAAI,EAAE;IAC3B;AAEA,IAAA,IAAY,cAAc,GAAA;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QACnC,MAAM,UAAU,IAAI,GAAG,EAAE,cAAc,IAAI,EAAE,CAA2B;AACxE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,QAAA,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,UAAU,EAAE;IACvC;IAEQ,gBAAgB,GAAA;QACtB,MAAM,OAAO,GAA2B,EAAE;QAC1C,IAAI,CAAC,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,OAAO;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;AAC5C,QAAA,IAAI,KAAK;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,KAAK,GAAG,CAAA,EAAG,KAAK,EAAE;QACtF,IAAI,SAAS,IAAI,IAAI;YAAE,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;QAC/D,IAAI,MAAM,IAAI,IAAI;YAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;AACtD,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,SAAS,CAAC,QAAa,EAAA;QACrB,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC/B;AAEA,IAAA,OAAO,CAAC,QAAa,EAAA;QACnB,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC/B;AAEA,IAAA,oBAAoB,CAAC,QAAa,EAAA;QAChC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC/B;AAEA,IAAA,oBAAoB,CAAC,OAAY,EAAA;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,4BAAA,CAA8B,EAC7C,OAAO,EACP,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,CACjC;IACH;wGA/CW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA;;4FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCDrB,gBAAgB,CAAA;AACjB,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAEzD,IAAA,YAAY,GAAG,MAAM,CAAa,IAAI,wDAAC;IAEvC,mBAAmB,GAAA;AACjB,QAAA,OAAO,KAAK;IACd;AACD;;MC+EY,iBAAiB,CAAA;IACnB,MAAM,GAAG,CAAC;IACV,WAAW,GAAG,EAAE;IAChB,UAAU,GAAG,KAAK;;IAElB,SAAS,GAAG,KAAK;;IAEjB,SAAS,GAAG,KAAK;AAEhB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,IAAA,SAAS,GAAG,IAAI,YAAY,EAAU;AAEtB,IAAA,SAAS;IAEnC,KAAK,GAAG,EAAE;IACV,cAAc,GAAa,EAAE;IAC7B,MAAM,GAAa,EAAE;AAErB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;YACrB,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;IAEA,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;YAC9C,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;IAEQ,iBAAiB,GAAA;QACvB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3C;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACtC;QACF;QACA,MAAM,UAAU,GAAG,MAAc;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,aAAa;YAClD,IAAI,KAAK,EAAE;gBACT,cAAc,CAAC,MAAK;oBAClB,KAAK,CAAC,KAAK,EAAE;oBACb,KAAK,CAAC,MAAM,EAAE;AAChB,gBAAA,CAAC,CAAC;AACF,gBAAA,OAAO,IAAI;YACb;AACA,YAAA,OAAO,KAAK;AACd,QAAA,CAAC;QACD,IAAI,UAAU,EAAE,EAAE;YAChB;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAClD,YAAA,UAAU,EAAE;AACd,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,UAAU,CAAC,CAAS,EAAA;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACxB;IAEQ,UAAU,GAAA;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;IAC7B;IAEA,cAAc,CAAC,KAAY,EAAE,KAAa,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI;AACzB,QAAA,KAAK,CAAC,KAAK,GAAG,IAAI;QAClB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC;QAC9B;IACF;IAEA,gBAAgB,CAAC,KAAoB,EAAE,KAAa,EAAA;AAClD,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;AAC7B,YAAA,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;AACtB,gBAAA,IAAI,KAAK,GAAG,CAAC,EAAE;oBACb,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE;AAC3B,oBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC;oBAC9B,IAAI,CAAC,UAAU,EAAE;AACjB,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC9B;YACF;YACA;QACF;QACA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,GAAG,CAAC,EAAE;YAC1C,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC;QAC9B;AAAO,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YAChE,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC;QAC9B;IACF;IAEA,cAAc,CAAC,KAAqB,EAAE,UAAkB,EAAA;QACtD,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;AACvD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;AAC1D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;QAChC;QACA,IAAI,CAAC,UAAU,EAAE;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;AAC3C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;AACV,gBAAA,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE;YACnD;QACF;AACA,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClD,QAAA,MAAM,MAAM,GAAG,SAAS,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS;AAC7D,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAC3B;AAEA,IAAA,cAAc,CAAC,KAAiB,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;QAC9C,cAAc,CAAC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;IACtC;AAEQ,IAAA,YAAY,CAAC,CAAS,EAAA;AAC5B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa;QAChD,IAAI,EAAE,EAAE;YACN,cAAc,CAAC,MAAK;gBAClB,EAAE,CAAC,KAAK,EAAE;gBACV,EAAE,CAAC,MAAM,EAAE;AACb,YAAA,CAAC,CAAC;QACJ;IACF;AAEQ,IAAA,cAAc,CAAC,CAAS,EAAA;AAC9B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa;QAChD,IAAI,EAAE,EAAE;YACN,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE;QACjC;IACF;wGApJW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzElB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mhBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhCS,YAAY,+PAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FA0ExB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA7E7B,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,QAAA,EAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,mhBAAA,CAAA,EAAA;;sBA2CA;;sBACA;;sBACA;;sBAEA;;sBAEA;;sBAEA;;sBACA;;sBAEA,YAAY;uBAAC,UAAU;;;MClGb,uBAAuB,CAAA;wGAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,YAHxB,iBAAiB,EAAE,qBAAqB,CAAA,EAAA,OAAA,EAAA,CACxC,iBAAiB,EAAE,qBAAqB,CAAA,EAAA,CAAA;AAEvC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,YAHxB,iBAAiB,CAAA,EAAA,CAAA;;4FAGhB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;AACnD,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;AACpD,iBAAA;;;SCPe,UAAU,GAAA;AACxB,IAAA,OAAO,EAAE;AACX;;ACFA,IAAY,oBAGX;AAHD,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,oBAAA,CAAA,KAAA,CAAA,GAAA,KAAW;AACb,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;;ACAzB,eAAe,iBAAiB,CAAC,KAAU,EAAA;AAChD,IAAA,OAAO,IAAI;AACb;AAEO,eAAe,gBAAgB,CAAC,KAAU,EAAA;AAC/C,IAAA,OAAO,IAAI;AACb;AAEO,eAAe,oBAAoB,CAAC,KAAU,EAAA;AACnD,IAAA,OAAO,IAAI;AACb;;ACVA;AAGA;AACM,SAAU,yBAAyB,CAAC,OAA2B,EAAA;IACnE,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI;QACF,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;AACzC,QAAA,OAAO,IAAI;IACb;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,KAAK;IACd;AACF;AAEA;AACM,SAAU,0BAA0B,CAAC,OAA2B,EAAA;IACpE,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI;QACF,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,KAAK;QACd;QACA,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,OAAO,IAAI;IACb;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,KAAK;IACd;AACF;;AC/BA;AAwDM,MAAO,kCAAmC,SAAQ,gBAAgB,CAAA;AAC5D,IAAA,0BAA0B,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC/D,IAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AACtC,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,aAAa,GAAG,MAAM,CAAC,cAAc,CAAC;AACtC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,EAAE,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAC/B,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtD,IAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;IAG7D,QAAQ,GAAkB,IAAI;IAC9B,QAAQ,GAAkB,IAAI;IAC9B,UAAU,GAAkB,IAAI;IAChC,UAAU,GAAY,KAAK;IAC3B,kBAAkB,GAAQ,IAAI;IAC9B,eAAe,GAAQ,IAAI;IAC3B,gBAAgB,GAAQ,IAAI;AAC5B,IAAA,OAAO;IAEP,qBAAqB,GAAG,2BAA2B;IACnD,cAAc,GAAQ,IAAI;IAC1B,cAAc,GAAQ,IAAI;IAC1B,aAAa,GAAQ,IAAI;IACzB,iBAAiB,GAAe,EAAE;IAClC,QAAQ,GAAQ,IAAI;IACpB,QAAQ,GAAQ,IAAI;AACpB,IAAA,MAAM;IACN,YAAY,GAAY,KAAK;AAC7B,IAAA,SAAS;AACT,IAAA,UAAU;AACV,IAAA,QAAQ;AACR,IAAA,WAAW;AAEX,IAAA,IAAI,iBAAiB,GAAA;QACjB,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,eAAe,CAAC;IACnG;IAEA,YAAY,GAAY,KAAK;AAC7B,IAAA,SAAS;AAET,IAAA,QAAQ,GAAqB,IAAI,OAAO,EAAW;AACnD,IAAA,WAAW;IACX,sBAAsB,GAAY,KAAK;AACvC,IAAA,UAAU,GAAG,MAAM,CAAC,IAAI;IACxB,gBAAgB,GAAY,IAAI;AAChC,IAAA,gBAAgB;AAChB,IAAA,YAAY;AACZ,IAAA,UAAU;AACV,IAAA,aAAa;AACb,IAAA,UAAU;AACV,IAAA,YAAY;AACZ,IAAA,uBAAuB;IACvB,QAAQ,GAAY,KAAK;AACzB,IAAA,QAAQ;IACR,aAAa,GAAY,KAAK;IAC9B,eAAe,GAAY,KAAK;IAChC,iBAAiB,GAAW,EAAE;AAC9B,IAAA,UAAU,GAAQ;AACd,QAAA,GAAG,EAAE,IAAI;AACT,QAAA,GAAG,EAAE,IAAI;AACT,QAAA,UAAU,EAAE;KACf;IACD,UAAU,GAAQ,IAAI;IACtB,OAAO,GAAQ,IAAI;IACnB,kBAAkB,GAAW,CAAC;AAC9B,IAAA,WAAW,GAAQ,mBAAmB,CAAC,IAAI;AAC3C,IAAA,iBAAiB;AACjB,IAAA,UAAU;AACV,IAAA,oBAAoB;IACpB,mBAAmB,GAAQ,EAAE;IAC7B,OAAO,GAAQ,EAAE;AACjB,IAAA,SAAS;IACT,UAAU,GAAW,CAAC;AACkB,IAAA,cAAc;IACtD,aAAa,GAAW,CAAC;IACzB,KAAK,GAAW,CAAC;IACjB,UAAU,GAAY,KAAK;AAC3B,IAAA,UAAU;IACV,UAAU,GAAkB,IAAI;IAChC,SAAS,GAAW,CAAC;IACrB,mBAAmB,GAAY,KAAK;AACpC,IAAA,GAAG;AACH,IAAA,YAAY;AACZ,IAAA,qBAAqB;AACrB,IAAA,oBAAoB;IACpB,iBAAiB,GAAW,CAAC;IAC7B,gBAAgB,GAAW,CAAC;IAC5B,iBAAiB,GAAQ,IAAI;IACrB,kBAAkB,GAAkB,IAAI;IACxC,wBAAwB,GAAQ,IAAI;IACpC,wBAAwB,GAAY,KAAK;AAIjD,IAAA,WAAA,GAAA;AACI,QAAA,KAAK,EAAE;QAEP,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE;YACzC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW;QAC5D;QAEA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,IAAG;AAC5C,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,EAAE;YAC5B;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,SAAS,CAAC,QAAQ,IAAG;AACzD,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;AACrB,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,EAAE,eAAe;AACzC,gBAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,EAAE,EAAE;YAClC;AACJ,QAAA,CAAC,CAAC;AAIF,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AAC3F,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;YAC9B;AACJ,QAAA,CAAC,CAAC;AAGF,QAAA,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AACrF,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,gBAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,IAAI,IAAI;gBAC9D,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE;AACvI,oBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;gBACjC;qBAAO;AACH,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;gBAChC;YACJ;AACJ,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,0BAA0B,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAS,KAAI;AACrG,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;;gBAG7B,MAAM,WAAW,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,OAAY,KAAI;AAC5C,oBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;oBACvD,OAAO,MAAM,KAAK,gBAAgB,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnE,gBAAA,CAAC,CAAC;gBAEF,IAAI,WAAW,EAAE;AACb,oBAAA,MAAM,aAAa,GAAG,WAAW,EAAE,KAAK;oBACxC,IAAI,CAAC,UAAU,GAAG,OAAO,aAAa,KAAK,QAAQ,GAAG,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,IAAI;AACvG,oBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,UAAU;gBAClD;AAAO,qBAAA,IAAI,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE;AACzB,oBAAA,MAAM,kBAAkB,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,OAAY,KAC/C,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,CAC3D,EAAE,KAAK,IAAI,IAAI;AAEhB,oBAAA,IAAI,CAAC,UAAU,GAAG,kBAAkB;AACpC,oBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,UAAU;gBAClD;qBAAO;oBACH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW;AAC5C,oBAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,UAAU;gBAClD;YACJ;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AACvF,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;YACxB;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,6BAA6B,EAAE;QAEpC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAChF,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;YAChC;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC/E,YAAA,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE;AACnB,gBAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,gBAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,EAAE;gBAC1B,IAAI,CAAC,uBAAuB,EAAE;YAClC;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;AAC1F,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;AACrB,gBAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,EAAE,EAAE;gBAC9B,IAAI,CAAC,uBAAuB,EAAE;YAClC;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC5E,YAAA,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE;AACnB,gBAAA,IAAI,CAAC,eAAe,GAAG,0BAA0B,CAAC,MAAM,CAAC;YAC7D;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,EAAE,iBAAiB,EAAE,SAAS,CAAC;YAC3C,IAAI,EAAE,GAAG,IAAG;AACR,gBAAA,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE;oBAChB,IAAI,CAAC,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,UAAU,IAAI,6BAA6B,CAAC,eAAe,CAAC,EAAE,YAAY;oBACrH,IAAI,CAAC,sBAAsB,GAAG,GAAG,EAAE,IAAI,CAAC,IAAI,IACxC,IAAI,EAAE,UAAU,IAAI,6BAA6B,CAAC,8BAA8B,CAAC,EAAE,YAAY;wBAC/F,6BAA6B,CAAC,wBAAwB,GAAG,IAAI,GAAG,KAAK;gBAC7E;YACJ,CAAC;AACJ,SAAA,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC9E,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YAC7B;AACJ,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AAC5B,YAAA,GAAG,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;AACnC,SAAA,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACzB,YAAA,GAAG,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;AACnC,SAAA,CAAC;IAEN;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,0BAA0B,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,IAAG;AAC3F,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;gBAC1B,IAAI,CAAC,gBAAgB,EAAE;YAC3B;iBAAO;gBACH,IAAI,CAAC,cAAc,EAAE;YACzB;AACJ,QAAA,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,IAAI;QAEpD,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC1B,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YAC5B;AAAO,iBAAA,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;YAC5B;iBAAO;gBACH,IAAI,CAAC,MAAM,GAAG,UAAU,CACpB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,CAC3D,IAAI,GAAG;gBAER,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;oBACrC,IAAI,CAAC,IAAI,EAAE;gBACf;YACJ;QACJ;aAAO;YACH,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AACzC,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;gBACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;oBAC3B,IAAI,CAAC,IAAI,EAAE;gBACf;YACJ;iBAAO,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAChD,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI;gBACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;oBAC3B,IAAI,CAAC,IAAI,EAAE;gBACf;YACJ;iBAAO;gBACH,IAAI,CAAC,MAAM,GAAG,UAAU,CACpB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,CAC3D,IAAI,GAAG;gBAER,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE;oBACrC,IAAI,CAAC,IAAI,EAAE;gBACf;YACJ;QACJ;;QAGA,IAAI,CAAC,UAAU,EAAE;IACrB;AAEA,IAAA,MAAM,cAAc,GAAA;AAEhB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAEtB,QAAA,IAAI,cAAc,GAAQ;YACtB,oBAAoB,EAAE,IAAI,CAAC,kBAAkB;AAC7C,YAAA,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE;YACnD,UAAU,EAAE,IAAI,CAAC,QAAQ;YACzB,UAAU,EAAE,UAAU,CAAC,KAAK;YAC5B,YAAY,EAAE,IAAI,CAAC,UAAU;SAChC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,WAAW,IAAI,WAAW,EAAE;AAChD,YAAA,cAAc,CAAC,YAAY,GAAG,mBAAmB,CAAC,GAAG;QACzD;aAAO;AACH,YAAA,cAAc,CAAC,YAAY,GAAG,mBAAmB,CAAC,EAAE;QACxD;AAEA,QAAA,MAAM,gBAAgB,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC;QAEhE,IAAI,gBAAgB,EAAE;AAElB,YAAA,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC;AAE3D,YAAA,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE;AACxB,gBAAA,MAAM,YAAY,GAAQ;oBACtB,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,OAAO,EAAE,gBAAgB,EAAE,OAAO;oBAClC,aAAa,EAAE,gBAAgB,EAAE,aAAa;oBAC9C,WAAW,EAAE,mBAAmB,CAAC,EAAE;oBACnC,MAAM,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,mBAAmB;oBACxH,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,QAAQ,EAAE,UAAU,CAAC,KAAK;oBAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBAC1B;gBACD,IAAI,IAAI,CAAC,aAAa,EAAE,WAAW,IAAI,WAAW,EAAE;AAChD,oBAAA,YAAY,CAAC,WAAW,GAAG,mBAAmB,CAAC,GAAG;gBACtD;gBACA,IAAI,CAAC,gBAAgB,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC;gBAC5D,IAAI,CAAC,oBAAoB,EAAE;YAE/B;iBAAO;gBACH,IAAI,CAAC,oBAAoB,EAAE;YAC/B;AAEA,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACvB,gBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE;AACpC,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;oBACvB,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC;gBAC1I;qBAAO;AACH,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,oBAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC;gBAE7L;YACJ;iBAAO;AACH,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;gBACvB,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC;gBACtI,IAAI,CAAC,oBAAoB,EAAE;YAC/B;;YAEA,IAAI,CAAC,oCAAoC,EAAE;QAC/C;aAAO;YACH,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AACtI,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YACvB,IAAI,CAAC,oBAAoB,EAAE;;YAE3B,IAAI,CAAC,oCAAoC,EAAE;QAC/C;IACJ;AAEA,IAAA,MAAM,UAAU,GAAA;AACZ,QAAA,MAAM,YAAY,GAAG;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,YAAA,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAAE;SACtC;AAED,QAAA,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC;AAC3D,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,KAAK,sBAAsB,CAAC,QAAQ;YACpF,mBAAmB,CAAC,GAAG,GAAG,mBAAmB,CAAC,EAAE;AACpD,QAAA,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,mBAAmB,IAAI,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE;AACtE,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI;QACnC;aAAO;AACH,YAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK;QACpC;IACJ;IAEA,gBAAgB,GAAA;AACZ,QAAA,IAAI,CAAC,0BAA0B,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,SAAS,CAC1F;YACI,IAAI,EAAE,GAAG,IAAG;AACR,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;oBACd,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE,IAAI,EAAE,aAAa;oBAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW;AAClD,oBAAA,IAAI,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE;wBAClC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG;oBACrG;AACA,oBAAA,IAAI,IAAI,CAAC,YAAY,IAAI,cAAc,EAAE;AACrC,wBAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI;AAC9E,wBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE;AACxE,wBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,IAAI;AAChF,wBAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE;+BACjE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE;oBACvF;oBACA,IAAI,CAAC,cAAc,EAAE;oBACrB,IAAI,CAAC,qBAAqB,EAAE;gBAChC;qBAAO;oBACH,IAAI,CAAC,cAAc,EAAE;gBACzB;AACJ,YAAA,CAAC,EAAE,KAAK,EAAE,MAAK;gBACX,IAAI,CAAC,cAAc,EAAE;YACzB;AACH,SAAA,CACJ;IACL;IAEA,qBAAqB,GAAA;QACjB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;AACrD,QAAA,MAAM,MAAM,GAAG;;AAEX,YAAA,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE;YACpC,MAAM,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,mBAAmB;SAC3H;QACD,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,SAAS,CAC3D;YACI,IAAI,EAAE,GAAG,IAAG;AACR,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;oBACd,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE,IAAI,EAAE,kBAAkB;oBACjD,IAAI,CAAC,oBAAoB,EAAE;oBAC3B,IAAI,CAAC,oCAAoC,EAAE;gBAC/C;qBAAO;oBACH,IAAI,CAAC,oBAAoB,EAAE;oBAC3B,IAAI,CAAC,oCAAoC,EAAE;gBAC/C;YACJ,CAAC;YACD,KAAK,EAAE,MAAK;gBACR,IAAI,CAAC,oBAAoB,EAAE;gBAC3B,IAAI,CAAC,oCAAoC,EAAE;YAC/C;AACH,SAAA,CACJ;IACL;AACA,IAAA,wBAAwB,CAAC,QAAgB,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG;AACX,YAAA,cAAc,EAAE,QAAQ;SAC3B;QACD,IAAI,CAAC,0BAA0B,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;YACvE,IAAI,EAAE,GAAG,IAAG;AACR,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;;AAEd,oBAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI;0BACpD,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACnB,0BAAE,GAAG,EAAE,IAAI,EAAE,IAAI;oBAErB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;gBAChE;qBAAO;oBACH,IAAI,CAAC,oBAAoB,EAAE;gBAC/B;YACJ,CAAC;YACD,KAAK,EAAE,MAAK;gBACR,IAAI,CAAC,oBAAoB,EAAE;YAC/B;AACH,SAAA,CACA;IACL;AAGA,IAAA,uBAAuB,CAAC,EAAU,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG;AACX,YAAA,kBAAkB,EAAE,EAAE;SACzB;QACD,IAAI,CAAC,0BAA0B,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;YACtE,IAAI,EAAE,GAAG,IAAG;AACR,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;oBACd,IAAI,CAAC,oBAAoB,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI;oBAC3C,IAAI,CAAC,oBAAoB,EAAE;gBAC/B;qBAAO;oBACH,IAAI,CAAC,oBAAoB,EAAE;gBAC/B;YACJ,CAAC;YACD,KAAK,EAAE,MAAK;gBACR,IAAI,CAAC,oBAAoB,EAAE;YAC/B;AACH,SAAA,CAAC;IACN;IAEA,oBAAoB,GAAA;;QAEhB,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB;AACzD,cAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC7B,cAAE,IAAI,CAAC,oBAAoB;QAE/B,IAAI,CAAC,aAAa,EAAE;;YAEhB;QACJ;;AAGA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE;cACtC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa;cAC9C,CAAC;;AAGP,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE;cACnC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa;cAC3C,CAAC;;AAGP,QAAA,MAAM,eAAe,GAAG,YAAY,GAAG,aAAa;;AAGpD,QAAA,MAAM,kBAAkB,GAAG,aAAa,EAAE,YAAY,IAAI,CAAC;AAC3D,QAAA,MAAM,mBAAmB,GAAG,aAAa,EAAE,aAAa,IAAI,CAAC;;QAG7D,IAAI,CAAC,gBAAgB,GAAG,CAAC,eAAe,GAAG,kBAAkB,IAAI,GAAG;QACpE,IAAI,CAAC,iBAAiB,GAAG,CAAC,eAAe,GAAG,mBAAmB,IAAI,GAAG;IAC1E;IAEA,oCAAoC,GAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB;QACJ;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,mBAAmB,IAAI,CAAC;QACxI,IAAI,uBAAuB,GAAG,UAAU;;AAGxC,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE;AACrC,gBAAA,MAAM,qBAAqB,GAAG,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,IAAI,CAAC;gBACnF,uBAAuB,IAAI,qBAAqB;YACpD;QACJ;;AAGA,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,MAAM,kBAAkB,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,CAAC;YAC5E,uBAAuB,IAAI,kBAAkB;QACjD;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,uBAAuB;IAC/C;IAEA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAEtB,YAAA,MAAM,IAAI,GAAQ;AACd,gBAAA,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS;AAC7C,gBAAA,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY;AACnD,gBAAA,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG;gBAC3B,QAAQ,EAAE,SAAS,CAAC,0BAA0B;aACjD;YAED,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AACvC,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACf,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,oBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AAClB,wBAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC5B,wBAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;wBACjC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC;AACpD,wBAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACpB,4BAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,4BAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,4BAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;wBACpC;AACK,6BAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;AACjC,4BAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;wBACpC;6BAAO;4BACH,IAAI,CAAC,YAAY,EAAE;wBACvB;AACA,wBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;oBAExB;yBAAO;AACH,wBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;oBACjD;gBACJ,CAAC;gBACD,KAAK,EAAE,MAAK;AACR,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;gBAC3B,CAAC;AACJ,aAAA,CACA;QACL;aAAO;AACH,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,8BAA8B,CAAC;QAC9F;IACJ;AAEA,IAAA,mBAAmB,CAAC,KAAU,EAAA;AAE1B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,QAAQ;AACnD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,MAAM;AAC/C,QAAA,IAAI,OAAO,GAAQ;AACf,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,cAAc,EAAE;gBACZ,SAAS,EAAE,QAAQ,EAAE,SAAS;gBAC9B,UAAU,EAAE,QAAQ,EAAE,UAAU;gBAChC,SAAS,EAAE,QAAQ,EAAE,SAAS;gBAC9B,YAAY,EAAE,QAAQ,EAAE,YAAY;AACpC,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,SAAS,EAAE,CAAC;AACf,aAAA;YACD,WAAW,EAAE,IAAI,CAAC,UAAU;AAC5B,YAAA,gBAAgB,EAAE;gBACd,SAAS,EAAE,MAAM,EAAE,SAAS;gBAC5B,UAAU,EAAE,MAAM,EAAE,UAAU;gBAC9B,SAAS,EAAE,MAAM,EAAE,SAAS;gBAC5B,YAAY,EAAE,MAAM,EAAE,YAAY;AAClC,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,SAAS,EAAE,EAAE;AAChB,aAAA;YACD,MAAM,EAAE,IAAI,CAAC,kBAAkB;AAC/B,YAAA,aAAa,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAAE;AAC1C,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,IAAI,EAAE,EAAE;SACX;QAED,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,SAAS,CAC1D;AACI,YAAA,IAAI,EAAE,OAAO,GAAG,KAAI;AAChB,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;AACd,oBAAA,MAAM,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,wBAAwB;AAGjD,oBAAA,MAAM,oBAAoB,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;AAE5G,oBAAA,IAAI,oBAAoB,EAAE,OAAO,EAAE;AAC/B,wBAAA,MAAM,IAAI,GAAG,oBAAoB,EAAE,IAAI,EAAE,qBAAqB;wBAC9D,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,EAAE,gBAAgB;oBAC7D;AAEA,oBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,oBAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;AAChC,oBAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;oBAEjC,UAAU,CAAC,MAAK;AACZ,wBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,IAAI;AACrC,wBAAA,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE;wBAC1C,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,oBAAoB,EAAE,IAAI,EAAE,qBAAqB,CAAC;oBAChG,CAAC,EAAE,GAAG,CAAC;gBACX;YACJ,CAAC;AACJ,SAAA,CACJ;IACL;AACA,IAAA,WAAW,CAAC,GAAW,EAAA;QACnB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACpC;IAEA,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;QAChC,IAAI,CAAC,cAAc,EAAE;IACzB;IACA,cAAc,GAAA;AACV,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAEtB,QAAA,MAAM,IAAI,GAAQ;AACd,YAAA,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS;AAC7C,YAAA,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY;;AAEnD,YAAA,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,KAAK;YACrC,QAAQ,EAAE,SAAS,CAAC,0BAA0B;SACjD;QAED,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AACrC,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACf,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBAClB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC;AAEpD,oBAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;AAEjC,oBAAA,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;AACxB,wBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa;AAE/B,wBAAA,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,MAAK;AAC7B,4BAAA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;gCAChB,IAAI,CAAC,KAAK,EAAE;4BAChB;iCAAO;AACH,gCAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;4BAChC;wBACJ,CAAC,EAAE,IAAI,CAAC;oBACZ;gBACJ;qBAAO;AACH,oBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjD;YACJ,CAAC;YACD,KAAK,EAAE,MAAK;AACR,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YAC3B,CAAC;AACJ,SAAA,CAAC;IACN;IAEA,WAAW,GAAA;QACP,IAAI,CAAC,YAAY,EAAE;IACvB;IAEA,aAAa,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AAEvB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG;AAErC,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACvB,gBAAA,IAAI,CAAC,UAAU,GAAG,GAAG;AACrB,gBAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;AACvB,gBAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;AAChC,gBAAA,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC;YAC3C;iBAAO;AACH,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;YAClC;QACJ;IACJ;AACA,IAAA,oBAAoB,CAAC,GAAW,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAEtB,QAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC;AACtE,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACV,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;AACd,oBAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI;AACpC,oBAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;AAChC,oBAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;AACjC,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;oBACpB,IAAI,CAAC,YAAY,EAAE;gBACvB;qBAAO;AACH,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;oBACpB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACzC,oBAAA,IAAI,CAAC,aAAa,GAAG,IAAI;oBACzB,MAAM,QAAQ,GAAG,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC;AACjH,oBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC1E;YACJ,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACb,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;gBACvB,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC;uBACjC,KAAK,EAAE,KAAK,EAAE;uBACd,KAAK,EAAE,KAAK,EAAE;AACd,uBAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC;AACtE,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC;YACvC,CAAC;AACJ,SAAA,CAAC;IACN;AAEA,IAAA,cAAc,CAAC,GAAW,EAAA;QACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IACvC;IAEA,oBAAoB,GAAA;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;YACvB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG;AAE5C,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE;AAChC,gBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,wCAAwC,CAAC;gBACxG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;gBACzC;YACJ;AAEA,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,UAAU,EAAE;YAEvF,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AAClD,gBAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACV,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,oBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;wBACd,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC;wBAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC;AAChD,wBAAA,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC;oBAC3C;yBAAO;AACH,wBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC5C;gBACJ,CAAC;gBACD,KAAK,EAAE,MAAK;AACR,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,oBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;gBAC9F,CAAC;AACJ,aAAA,CAAC;QACN;IACJ;AAEA,IAAA,cAAc,CAAC,OAAe,EAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAC3C,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE;AAExC,QAAA,MAAM,aAAa,GAAG,OAAO,GAAG,EAAE,GAAG,CAAA,CAAA,EAAI,OAAO,EAAE,GAAG,CAAA,EAAG,OAAO,EAAE;AACjE,QAAA,MAAM,aAAa,GAAG,gBAAgB,GAAG,EAAE,GAAG,CAAA,CAAA,EAAI,gBAAgB,EAAE,GAAG,CAAA,EAAG,gBAAgB,EAAE;AAE5F,QAAA,OAAO,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,aAAa,EAAE;IAC9C;AAGA,IAAA,MAAM,YAAY,GAAA;AACd,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAEtB,QAAA,IAAI,SAAiB;AAErB,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,yBAAyB,IAAI,IAAI,CAAC,YAAY,IAAI,0BAA0B,EAAE;YACxH,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC;QACpE;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YAC1B,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC;QAC9D;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,IAAI,yBAAyB,IAAI,IAAI,CAAC,YAAY,IAAI,0BAA0B,EAAE;AAC1G,YAAA,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3C;aAAO;AACH,YAAA,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QACvC;AAEA,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE;AACpC,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW;YAC1F;iBAAO;AACH,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;gBACvB,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC;YAC/I;QACJ;aAAO;AACH,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YACvB,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,mBAAmB;QAChI;;;;;;;;;AAWA,QAAA,IAAI,SAAS,IAAI,IAAI,CAAC,eAAe,EAAE,cAAc,IAAI,CAAC,CAAC,EAAE;AACzD,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CACvD,4BAA4B,CAAC,CAAC;YAClC;QACJ;AAEA,QAAA,MAAM,MAAM,GAAG;YACX,SAAS,EAAE,UAAU,CAAC,aAAa;SACtC;AACD,QAAA,MAAM,oBAAoB,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC/F,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAE9D,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAEtB,QAAA,MAAM,OAAO,GAAW,IAAI,CAAC,cAAc,EAAE,aAAa,KAAK,sBAAsB,CAAC,QAAQ;YAC1F,mBAAmB,CAAC,GAAG,GAAG,mBAAmB,CAAC,EAAE;;QAGpD,IAAI,mBAAmB,GAAG,IAAI;AAC9B,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;;AAEvB,YAAA,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,MAAW,MAAM;AAChF,gBAAA,GAAG,MAAM;AACT,gBAAA,YAAY,EAAE,IAAI,CAAC,iBAAiB,IAAI;AAC3C,aAAA,CAAC,CAAC;AAEH,YAAA,mBAAmB,GAAG;gBAClB,GAAG,IAAI,CAAC,gBAAgB;AACxB,gBAAA,aAAa,EAAE,IAAI,CAAC,iBAAiB,IAAI,CAAC;AAC1C,gBAAA,OAAO,EAAE;aACZ;QACL;aAAO;;AAEH,YAAA,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,MAAW,MAAM;AAC5E,gBAAA,GAAG,MAAM;AACT,gBAAA,YAAY,EAAE,IAAI,CAAC,iBAAiB,IAAI;AAC3C,aAAA,CAAC,CAAC;AAEH,YAAA,mBAAmB,GAAG;AAClB,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,aAAa,EAAE,IAAI,CAAC,iBAAiB,IAAI,CAAC;AAC1C,gBAAA,OAAO,EAAE;aACZ;QACL;QAEA,IAAI,wBAAwB,GAAG,IAAI;AACnC,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;;AAEnB,YAAA,MAAM,oBAAoB,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,MAAW,MAAM;AAClF,gBAAA,GAAG,MAAM;AACT,gBAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB,IAAI;AAC1C,aAAA,CAAC,CAAC;AAEH,YAAA,wBAAwB,GAAG;gBACvB,GAAG,IAAI,CAAC,YAAY;AACpB,gBAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,IAAI,CAAC;AACzC,gBAAA,OAAO,EAAE;aACZ;QACL;aAAO;;AAEH,YAAA,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,MAAW,MAAM;AAChF,gBAAA,GAAG,MAAM;AACT,gBAAA,YAAY,EAAE,IAAI,CAAC,gBAAgB,IAAI;AAC1C,aAAA,CAAC,CAAC;AAEH,YAAA,wBAAwB,GAAG;AACvB,gBAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,IAAI,CAAC;AACzC,gBAAA,OAAO,EAAE;aACZ;QACL;AAEA,QAAA,IAAI,mBAAmB,GAAQ;;AAE3B,YAAA,YAAY,EAAE,mBAAmB;AACjC,YAAA,kBAAkB,EAAE,wBAAwB;AAC5C,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,eAAe,EAAE;gBACb,WAAW,EAAE,IAAI,CAAC,UAAU;gBAC5B,UAAU,EAAE,aAAa,CAAC,MAAM;gBAChC,aAAa,EAAE,IAAI,CAAC,QAAQ;gBAC5B,kBAAkB,EAAE,UAAU,CAAC,KAAK;AACpC,gBAAA,qBAAqB,EAAE,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE;AAChE,gBAAA,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,kBAAkB,EAAE,SAAS;AAC3F,aAAA;AACD,YAAA,gBAAgB,EAAE;gBACd,WAAW,EAAE,IAAI,CAAC,UAAU;gBAC5B,WAAW,EAAE,aAAa,CAAC,MAAM;gBACjC,cAAc,EAAE,IAAI,CAAC,QAAQ;gBAC7B,mBAAmB,EAAE,UAAU,CAAC,MAAM;AACtC,gBAAA,sBAAsB,EAAE,IAAI,CAAC,qBAAqB,EAAE,OAAO;AAC3D,gBAAA,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,mBAAmB;AAC5D,aAAA;YAGD,UAAU,EAAE,EAAE;AACd,YAAA,QAAQ,EAAE,OAAO;YACjB,YAAY,EAAE,YAAY,CAAC,MAAM;AACjC,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,IAAI,EAAE,EAAE;;;;SAIX;AACD,QAAA,MAAM,QAAQ,GAAQ;AAClB,YAAA,8BAA8B,EAAE,KAAK;SACxC;QAED,IAAI,IAAI,CAAC,WAAW,IAAI,6BAA6B,CAAC,aAAa,EAAE;AACjE,YAAA,mBAAmB,CAAC,WAAW,CAAC,GAAG,QAAQ;QAC/C;aAAO;AACH,YAAA,QAAQ,CAAC,8BAA8B,CAAC,GAAG,KAAK;QACpD;AACA,QAAA,QAAQ,CAAC,8BAA8B,CAAC,GAAG,KAAK;AAChD,QAAA,mBAAmB,CAAC,WAAW,CAAC,GAAG,QAAQ;AAG3C,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,cAAc,EAAE;AACrC,YAAA,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,UAAU;AACzC,YAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ;AACrC,YAAA,QAAQ,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,WAAW;AAC3C,YAAA,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,SAAS;QAC3C;AAEA,QAAA,MAAM,cAAc,GAAQ;AACxB,YAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,8BAA8B;AAClE,YAAA,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS;AACzC,YAAA,kBAAkB,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE;AAC3C,YAAA,iBAAiB,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpC,YAAA,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW;AAC5C,YAAA,oBAAoB,EAAE,IAAI,CAAC,cAAc,EAAE,oBAAoB;SAClE;AAED,QAAA,MAAM,cAAc,GAAQ;AACxB,YAAA,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS;AACzC,YAAA,kBAAkB,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE;AAC3C,YAAA,iBAAiB,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpC,YAAA,qBAAqB,EAAE,IAAI,CAAC,cAAc,EAAE,cAAc;AAC1D,YAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,8BAA8B;AAClE,YAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa;AACjD,YAAA,mBAAmB,EAAE,IAAI,CAAC,cAAc,EAAE,oBAAoB;AAC9D,YAAA,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa;SACpD;AAED,QAAA,mBAAmB,CAAC,iBAAiB,CAAC,GAAG,UAAU,EAAE;QACrD,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;YAC/C,cAAc,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY;YAEzD,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE;gBACrC,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC3D;QACJ;QAEA,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;YAC/C,cAAc,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,mBAAmB;AAC7D,YAAA,cAAc,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,QAAQ;QACjD;QAEA,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,YAAA,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC;AAC3E,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;YAErE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAU,KAAI;gBAC1C,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,EAAE,KAAK;AAEzC,gBAAA,IAAI,KAAK,EAAE,GAAG,KAAK,iBAAiB,EAAE;AAClC,oBAAA,cAAc,CAAC,gBAAgB,CAAC,GAAG,KAAK,EAAE,KAAK,IAAI,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,WAAW,EAAE;AAC/E,oBAAA,cAAc,CAAC,iBAAiB,CAAC,GAAG,KAAK,EAAE,KAAK;gBACpD;AACJ,YAAA,CAAC,CAAC;QACN;AAEA,QAAA,MAAM,UAAU,GAAG,EAAE,GAAG,mBAAmB,EAAE,GAAG,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE;AACjG,QAAA,IAAI,CAAC,wBAAwB,GAAG,UAAU;;AAG1C,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,qBAAqB,CAAC;AAChD,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YACvB;QACJ;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAChC,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;YAChC;QACJ;AAEA,QAAA,IAAI,CAAC,kBAAkB,CAAC,mCAAmC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAK;AACvF,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AAC3B,QAAA,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACV,IAAI,EAAE,QAAQ,IAAG;AACb,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;AAClB,oBAAA,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI;oBAC3B,MAAM,cAAc,GAAW,IAAI,EAAE,WAAW,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM;oBACxE,MAAM,kBAAkB,GAAW,IAAI,EAAE,WAAW,EAAE,UAAU,IAAI,EAAE;oBAEtE,IAAI,CAAC,cAAc,EAAE;AACjB,wBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;wBAC1F;oBACJ;oBAEA,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC;AAC/D,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;oBACtB,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC;AAC3D,wBAAA,IAAI,EAAE,CAAC,eAAe,KAAI;AACtB,4BAAA,IAAI,eAAe,KAAK,eAAe,CAAC,OAAO,KAAK,IAAI,IAAI,eAAe,CAAC,OAAO,KAAK,CAAC,CAAC,EAAE;AACxF,gCAAA,MAAM,WAAW,GAAG,eAAe,EAAE,IAAI;gCACzC,MAAM,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,cAAc,CAAC;gCACtF,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC;AAC3E,oCAAA,IAAI,EAAE,CAAC,cAAc,KAAI;AACrB,wCAAA,IAAI,cAAc,KAAK,cAAc,CAAC,OAAO,KAAK,IAAI,IAAI,cAAc,CAAC,OAAO,KAAK,CAAC,CAAC,EAAE;AACrF,4CAAA,MAAM,MAAM,GAAQ;AAChB,gDAAA,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,cAAc;AAC5C,gDAAA,SAAS,EAAE,kBAAkB;gDAC7B,SAAS,EAAE,WAAW,EAAE,MAAM,IAAI,IAAI,EAAE,WAAW,EAAE,UAAU;AAC/D,gDAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,IAAI,uBAAuB;AACjE,gDAAA,OAAO,EAAE,OAAO;AAChB,gDAAA,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,SAAS;AACvC,gDAAA,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;6CAChC;AACD,4CAAA,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,MAAM,CAAC;AACnD,4CAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,4CAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;4CAC9E,IAAI,CAAC,8BAA8B,EAAE;wCACzC;6CAAO;AACH,4CAAA,IAAI,CAAC,UAAU,GAAG,KAAK;4CACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;wCAC5H;oCACJ,CAAC;AACD,oCAAA,KAAK,EAAE,CAAC,WAAW,KAAI;AACnB,wCAAA,IAAI,CAAC,UAAU,GAAG,KAAK;wCACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;oCAC3H,CAAC;AACJ,iCAAA,CAAC;4BACN;iCAAO;AACH,gCAAA,IAAI,CAAC,UAAU,GAAG,KAAK;gCACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;4BAC7H;wBACJ,CAAC;AACD,wBAAA,KAAK,EAAE,CAAC,YAAY,KAAI;AACpB,4BAAA,IAAI,CAAC,UAAU,GAAG,KAAK;4BACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;wBAC5H,CAAC;AACJ,qBAAA,CAAC;gBACN;YACJ,CAAC;AACD,YAAA,KAAK,EAAE,MAAM,SAAS;AACzB,SAAA,CAAC;IACN;AAEA,IAAA,aAAa,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC;AAC7C,YAAA,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS;YACzC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,YAAY,IAAI,oBAAoB,CAAC,IAAI;AACtE,YAAA,aAAa,EAAE;SAClB,CAAC,CAAC,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACV,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;oBACd,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC;gBAC7D;YACJ,CAAC;YACD,KAAK,EAAE,MAAK;AACR,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YAC3B,CAAC;AACJ,SAAA,CAAC;IACN;AAEA,IAAA,wBAAwB,CAAC,KAAa,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAEtB,QAAA,IAAI,SAAiB;AAErB,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,yBAAyB,IAAI,IAAI,CAAC,YAAY,IAAI,0BAA0B,EAAE;YACxH,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC;QACpE;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YAC1B,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC;QAC9D;AAAO,aAAA,IAAI,IAAI,CAAC,YAAY,IAAI,yBAAyB,IAAI,IAAI,CAAC,YAAY,IAAI,0BAA0B,EAAE;AAC1G,YAAA,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3C;aAAO;AACH,YAAA,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QACvC;AAEA,QAAA,MAAM,OAAO,GAAW,IAAI,CAAC,cAAc,EAAE,aAAa,KAAK,sBAAsB,CAAC,QAAQ;YAC1F,mBAAmB,CAAC,GAAG,GAAG,mBAAmB,CAAC,EAAE;AAEpD,QAAA,MAAM,OAAO,GAAG;YACZ,gBAAgB,EAAE,IAAI,CAAC,wBAAwB;AAC/C,YAAA,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS;AACzC,YAAA,SAAS,EAAE,KAAK;SACnB;QAED,IAAI,CAAC,kBAAkB,CAAC,mCAAmC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;AAC3E,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACf,gBAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,OAAO,KAAK,CAAC,CAAC,EAAE;AACnE,oBAAA,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI;oBAC3B,MAAM,cAAc,GAAW,IAAI,EAAE,WAAW,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM;oBACxE,MAAM,kBAAkB,GAAW,IAAI,EAAE,WAAW,EAAE,UAAU,IAAI,EAAE;oBAEtE,IAAI,CAAC,cAAc,EAAE;AACjB,wBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,wBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;wBAC1F;oBACJ;oBAEA,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC;oBAC/D,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC;AAC3D,wBAAA,IAAI,EAAE,CAAC,eAAe,KAAI;AACtB,4BAAA,IAAI,eAAe,KAAK,eAAe,CAAC,OAAO,KAAK,IAAI,IAAI,eAAe,CAAC,OAAO,KAAK,CAAC,CAAC,EAAE;AACxF,gCAAA,MAAM,WAAW,GAAG,eAAe,EAAE,IAAI;gCACzC,MAAM,mBAAmB,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,cAAc,CAAC;gCACtF,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC;AAC3E,oCAAA,IAAI,EAAE,CAAC,cAAc,KAAI;AACrB,wCAAA,IAAI,cAAc,KAAK,cAAc,CAAC,OAAO,KAAK,IAAI,IAAI,cAAc,CAAC,OAAO,KAAK,CAAC,CAAC,EAAE;AACrF,4CAAA,MAAM,MAAM,GAAQ;AAChB,gDAAA,KAAK,EAAE,WAAW,EAAE,MAAM,IAAI,cAAc;AAC5C,gDAAA,SAAS,EAAE,kBAAkB;gDAC7B,SAAS,EAAE,WAAW,EAAE,MAAM,IAAI,IAAI,EAAE,WAAW,EAAE,UAAU;AAC/D,gDAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,IAAI,uBAAuB;AACjE,gDAAA,OAAO,EAAE,OAAO;AAChB,gDAAA,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,SAAS;AACvC,gDAAA,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;6CAChC;AACD,4CAAA,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC,MAAM,CAAC;AAEnD,4CAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,4CAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;4CAC9E,IAAI,CAAC,8BAA8B,EAAE;wCACzC;6CAAO;AACH,4CAAA,IAAI,CAAC,UAAU,GAAG,KAAK;4CACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;wCAC5H;oCACJ,CAAC;AACD,oCAAA,KAAK,EAAE,CAAC,WAAW,KAAI;AACnB,wCAAA,IAAI,CAAC,UAAU,GAAG,KAAK;wCACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;oCAC3H,CAAC;AACJ,iCAAA,CAAC;4BACN;iCAAO;AACH,gCAAA,IAAI,CAAC,UAAU,GAAG,KAAK;gCACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;4BAC7H;wBACJ,CAAC;AACD,wBAAA,KAAK,EAAE,CAAC,YAAY,KAAI;AACpB,4BAAA,IAAI,CAAC,UAAU,GAAG,KAAK;4BACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;wBAC5H,CAAC;AACJ,qBAAA,CAAC;gBACN;qBAAO;AACH,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,oBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjD;YACJ,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACb,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;gBACvB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;YAClD,CAAC;AACJ,SAAA,CAAC;IACN;AAEQ,IAAA,mBAAmB,CAAC,KAAa,EAAA;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,mBAAmB,IAAI,CAAC;QAC3I,MAAM,YAAY,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AAClI,QAAA,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,EAAE,KAAK;QAChG,MAAM,sBAAsB,GAAG,IAAI,CAAC,wBAAwB,EAAE,eAAe,EAAE;AACxE,eAAA,IAAI,CAAC,wBAAwB,EAAE,eAAe,EAAE,cAAc;QACrE,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,EAAE,SAAS,EAAE;AAC5D,eAAA,IAAI,CAAC,wBAAwB,EAAE,SAAS,EAAE,WAAW;AAC5D,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,EAAE;eAC/C;eACA;AACA,eAAA,gBAAgB;AACvB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,EAAE;AAC7C,eAAA,IAAI,CAAC,wBAAwB,EAAE,eAAe,EAAE;eAChD,IAAI,CAAC,cAAc,EAAE;eACrB,IAAI,CAAC,YAAY;AACxB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,EAAE;eACzC,IAAI,CAAC,QAAQ,EAAE;eACf,IAAI,CAAC,QAAQ,EAAE;AACf,eAAA,IAAI,CAAC;AACL,eAAA,IAAI;QAEX,OAAO;AACH,YAAA,eAAe,EAAE,cAAc;AAC/B,YAAA,aAAa,EAAE,YAAY;AAC3B,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,IAAI,EAAE;AACrD,YAAA,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,IAAI,EAAE;AACnD,YAAA,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,IAAI,EAAE;AACzD,YAAA,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,IAAI,EAAE;AAC/C,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,MAAM,EAAE,aAAa;AACrB,YAAA,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,IAAI,EAAE;AACnD,YAAA,SAAS,EAAE,IAAI,CAAC,wBAAwB,EAAE,SAAS;AACnD,YAAA,kBAAkB,EAAE,IAAI,CAAC,wBAAwB,EAAE,kBAAkB;AACrE,YAAA,iBAAiB,EAAE,IAAI,CAAC,wBAAwB,EAAE,iBAAiB;AACnE,YAAA,aAAa,EAAE,YAAY;AAC3B,YAAA,sBAAsB,EAAE,KAAK;AAC7B,YAAA,kBAAkB,EAAE,IAAI,CAAC,wBAAwB,EAAE,kBAAkB,IAAI,EAAE;AAC3E,YAAA,SAAS,EAAE,IAAI,CAAC,wBAAwB,EAAE,SAAS,IAAI,EAAE;SAC5D;IACL;IAEQ,wBAAwB,CAAC,WAAgB,EAAE,cAAsB,EAAA;AACrE,QAAA,MAAM,GAAG,IAAI,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE,CAAQ;QACjE,MAAM,UAAU,IAAI,GAAG,EAAE,cAAc,IAAI,EAAE,CAA2B;AACxE,QAAA,MAAM,SAAS,GAAG,WAAW,EAAE;eACxB,UAAU,CAAC,WAAW;eACtB,UAAU,CAAC,WAAW;eACtB,IAAI,CAAC,aAAa,EAAE;AACpB,eAAA,IAAI;AACX,QAAA,MAAM,qBAAqB,GAAG,WAAW,EAAE;eACpC,IAAI,CAAC,wBAAwB,EAAE;AAC/B,eAAA,EAAE;AACT,QAAA,MAAM,YAAY,GAAG,WAAW,EAAE;gBAC1B,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtH,OAAO;AACH,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,MAAM,EAAE,WAAW,EAAE,MAAM,IAAI,cAAc;AAC7C,YAAA,MAAM,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;YAChC,aAAa,EAAE,WAAW,EAAE,aAAa,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,IAAI;AAChF,YAAA,+BAA+B,EAAE,WAAW,EAAE,+BAA+B,IAAI,IAAI;AACrF,YAAA,kBAAkB,EAAE,qBAAqB;AACzC,YAAA,aAAa,EAAE,YAAY;AAC3B,YAAA,UAAU,EAAE,WAAW,EAAE,UAAU,IAAI,IAAI;AAC3C,YAAA,kBAAkB,EAAE,WAAW,EAAE,kBAAkB,IAAI,IAAI;AAC3D,YAAA,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,IAAI,IAAI;AACzD,YAAA,mBAAmB,EAAE,WAAW,EAAE,mBAAmB,IAAI,IAAI;AAC7D,YAAA,oBAAoB,EAAE,WAAW,EAAE,oBAAoB,IAAI,IAAI;AAC/D,YAAA,aAAa,EAAE,WAAW,EAAE,aAAa,IAAI,IAAI;AACjD,YAAA,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,IAAI;SACxC;IACL;IAEQ,8BAA8B,GAAA;AAClC,QAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;AACrC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QACrC;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,mCAAmC,CAAC;QAClE;IACJ;IAEA,IAAI,GAAA;AACA,QAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;AACrC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;QACrC;aAAO;AACH,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,mCAAmC,CAAC;QAClE;IACJ;IAEA,wBAAwB,GAAA;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;IACpC;IAEA,MAAM,GAAA;AACF,QAAA,MAAM,OAAO,GAAS,UAAkB,EAAE,IAAI;QAC9C,MAAM,WAAW,GAAG,0CAA0C;AAE9D,QAAA,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;YACtD,MAAM,SAAS,GAAI,UAAkB,EAAE,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI;YACtE,IAAI,SAAS,EAAE;gBACX,IAAI,CAAC,IAAI,EAAE;YACf;YACA;QACJ;QAEA,OAAO,CAAC,IAAI,CAAC;AACT,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,gBAAgB,EAAE,IAAI;AACzB,SAAA,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW,KAAI;YACpB,IAAI,MAAM,EAAE,WAAW,IAAI,MAAM,EAAE,KAAK,EAAE;gBACtC,IAAI,CAAC,IAAI,EAAE;YACf;QACJ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;IAC7B;AAEA,IAAA,gBAAgB,CAAC,KAAa,EAAA;AAC1B,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAClH;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;IAC/B;IAEQ,qBAAqB,GAAA;AACzB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,kBAAkB;QACjC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,cAAc,EAAE;AAC9B,YAAA,OAAO,IAAI;QACf;AACA,QAAA,OAAO,CAAC,CAAC,SAAS,KAAK,UAAU,CAAC;cAC5B,MAAM,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE;cAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC5B;IAEQ,uBAAuB,GAAA;AAC3B,QAAA,MAAM,mBAAmB,GACrB,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,IAAI,IAAI,CAAC,qBAAqB,EAAE,IAAI,IAAI;AACrF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC9B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;QAElC,IAAI,CAAC,mBAAmB,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE;YAClD;QACJ;QAEA,MAAM,QAAQ,GAAG,CAAA,EAAG,mBAAmB,IAAI,QAAQ,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE;AACnE,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;YACzE;QACJ;AAEA,QAAA,IAAI,CAAC,kBAAkB,GAAG,QAAQ;AAClC,QAAA,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC;AAC7C,YAAA,OAAO,EAAE,mBAAmB;AAC5B,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,WAAW,EAAE,UAAU;SAC1B,CAAC,CAAC,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACV,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;AACd,oBAAA,IAAI,CAAC,eAAe,GAAG,0BAA0B,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC;gBAChF;YACJ,CAAC;AACJ,SAAA,CAAC;IACN;IAEQ,6BAA6B,GAAA;AACjC,QAAA,MAAM,GAAG,IAAI,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE,CAAQ;QACjE,MAAM,UAAU,IAAI,GAAG,EAAE,cAAc,IAAI,EAAE,CAA2B;QACxE,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE;QAEpG,IAAI,CAAC,MAAM,EAAE;YACT;QACJ;QAEA,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC;AACpD,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACf,gBAAA,IAAI,GAAG,EAAE,OAAO,EAAE;oBACd,MAAM,UAAU,GAAG,GAAG,EAAE,IAAI,EAAE,WAAW,IAAI,IAAI;AACjD,oBAAA,IAAI,CAAC,kBAAkB,GAAG,UAAU;oBACpC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,eAAe,CAAC;oBAC3D,IAAI,CAAC,uBAAuB,EAAE;gBAClC;YACJ,CAAC;AACJ,SAAA,CAAC;IACN;AAEQ,IAAA,SAAS,CAAC,OAAe,EAAA;QAC7B,MAAM,CAAC,GAAQ,UAAiB;AAChC,QAAA,MAAM,GAAG,GAAG,CAAC,EAAE,QAAgC;QAC/C,MAAM,EAAE,GAAG,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,IAAI,IAAI;AAE/C,QAAA,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;AACf,QAAA,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAChC,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,OAAO,CAAA,CAAE,CAAC;YACjC,IAAI,OAAO,EAAE,MAAM,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE;AACxD,gBAAA,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;gBACrB;YACJ;QACJ;AAEA,QAAA,IAAI,EAAE,IAAI,yBAAyB,CAAC,EAAE,CAAC,EAAE;YACrC;QACJ;AAEA,QAAA,MAAM,cAAc,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK;QAC1C,IAAI,EAAE,IAAI,cAAc,IAAI,OAAO,cAAc,CAAC,mBAAmB,KAAK,UAAU,EAAE;AAClF,YAAA,IAAI;gBACA,cAAc,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;gBAC7C;YACJ;AAAE,YAAA,MAAM;;YAER;QACJ;QAEA,IAAI,CAAC,EAAE,EAAE;YACL;QACJ;AAEA,QAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;AACvB,QAAA,EAAkB,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;AAC3C,QAAA,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC;AACjC,QAAA,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC;QAErC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,kCAAkC,CAAC,EAAE;YACzD,MAAM,QAAQ,GAAG,GAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,QAAQ,CAAC,SAAS,GAAG,0DAA0D;AAC/E,YAAA,GAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;QACnC;QACA,GAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;IACzC;AAEQ,IAAA,SAAS,CAAC,OAAe,EAAA;QAC7B,MAAM,CAAC,GAAQ,UAAiB;AAChC,QAAA,MAAM,GAAG,GAAG,CAAC,EAAE,QAAgC;QAC/C,MAAM,EAAE,GAAG,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,IAAI,IAAI;AAE/C,QAAA,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;AACf,QAAA,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAChC,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,OAAO,CAAA,CAAE,CAAC;YACjC,IAAI,OAAO,EAAE,MAAM,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE;AACxD,gBAAA,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;gBACrB;YACJ;QACJ;AAEA,QAAA,IAAI,EAAE,IAAI,0BAA0B,CAAC,EAAE,CAAC,EAAE;YACtC;QACJ;AAEA,QAAA,MAAM,cAAc,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK;QAC1C,IAAI,EAAE,IAAI,cAAc,IAAI,OAAO,cAAc,CAAC,WAAW,KAAK,UAAU,EAAE;AAC1E,YAAA,IAAI;gBACA,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC3C,IAAI,EAAE,IAAI,EAAE;gBACZ;YACJ;AAAE,YAAA,MAAM;;YAER;QACJ;QAEA,IAAI,EAAE,EAAE;AACJ,YAAA,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AAC1B,YAAA,EAAkB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC1C,YAAA,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AACtC,YAAA,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC;QACpC;AAEA,QAAA,GAAG,EAAE,gBAAgB,CAAC,kCAAkC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1F,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;IAC5C;wGAz6CS,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kCAAkC,4IA6EhC,2BAA2B,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrI1C,09zBAymBM,EAAA,MAAA,EAAA,CAAA,+sDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3jBE,YAAY,4HACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,WAAW,udACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,YAAY,8BACZ,uBAAuB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA;;4FAGlB,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAf9C,SAAS;+BACI,kCAAkC,EAAA,UAAA,EAEhC,IAAI,EAAA,OAAA,EACP;wBACL,YAAY;wBACZ,YAAY;wBACZ,cAAc;wBACd,WAAW;wBACX,mBAAmB;wBACnB,qBAAqB;wBACrB,YAAY;wBACZ;AACH,qBAAA,EAAA,QAAA,EAAA,09zBAAA,EAAA;;sBA+EA,SAAS;uBAAC,2BAA2B;;;AE/G1C;;;;;;;AAOG;MAwPU,iCAAiC,CAAA;AAC5C,IAAA,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC;AAC1B,IAAA,aAAa,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC7C,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ;IACrB,uBAAuB,GAAG,qCAAqC;AAEvE,IAAA,MAAM;IAEf,WAAW,GAAW,UAAU;IAChC,YAAY,GAAG,KAAK;IACpB,UAAU,GAAG,KAAK;AAClB,IAAA,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAClC,QAAA,OAAO,EAAE,CAAC,mCAAmC,EAAE,UAAU,CAAC,QAAQ,CAAC;AACnE,QAAA,SAAS,EAAE,CAAC,iCAAiC,EAAE,UAAU,CAAC,QAAQ,CAAC;QACnE,MAAM,EAAE,CAAC,kCAAkC,CAAC;QAC5C,KAAK,EAAE,CAAC,uMAAuM,CAAC;AACjN,KAAA,CAAC;IAEF,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE;QACxC,IAAI,CAAC,4BAA4B,EAAE;AACnC,QAAA,IAAI;AACD,YAAA,UAAsC,CAAC,oCAAoC,CAAC,GAAG,8BAA8B;QAChH;AAAE,QAAA,MAAM;;QAER;QACA,uBAAuB,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QACvE,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACpE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YACvB,IAAI,gCAAgC,EAAE,EAAE;AACtC,gBAAA,uBAAuB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC;YAC3C;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;YACrB,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/D,YAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE;AACpC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;YACjC,uBAAuB,CAAC,gBAAgB,EAAE;AACxC,gBAAA,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAClD,aAAA,CAAC;YACF;QACF;QAEA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AAC/C,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,SAAS,EAAE;AAC/D,YAAA,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE;AACpC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;YACjC,uBAAuB,CAAC,gBAAgB,EAAE;AACxC,gBAAA,MAAM,EAAE,WAAW;gBACnB,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC;AAChD,aAAA,CAAC;YACF;QACF;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;AAClC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;YAC3B;QACF;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;AAC3C,QAAA,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,WAAW,EAAE;IACpB;AAEA,IAAA,gBAAgB,CAAC,WAAoC,EAAA;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC;AAChD,QAAA,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1E;IAEQ,eAAe,GAAA;QACrB,MAAM,SAAS,GAAQ,UAAiB;QACxC,MAAM,GAAG,GAAG,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE;AACzC,QAAA,MAAM,QAAQ,GACZ,SAAS,EAAE,0BAA0B;AACrC,YAAA,SAAS,EAAE,8BAA8B;YACzC,SAAS,EAAE,KAAK,EAAE,0BAA0B;AAC5C,YAAA,GAAG,CAAC,0BAA0B;AAC9B,YAAA,GAAG,CAAC,iCAAiC;AACrC,YAAA,GAAG,CAAC,+BAA+B;AACnC,YAAA,EAAE;AAEJ,QAAA,IAAI,OAAO,QAAQ,KAAK,SAAS,EAAE;AACjC,YAAA,OAAO,QAAQ;QACjB;AAEA,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACxD,QAAA,OAAO,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,IAAI;IACnG;AAEQ,IAAA,kBAAkB,CAAC,KAA4G,EAAA;AACrI,QAAA,MAAM,iBAAiB,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AAC1E,QAAA,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;AACxC,QAAA,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,IAAI,EAAE;AAChD,QAAA,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,EAAE;QAE1C,OAAO;AACL,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,cAAc,EAAE;AACd,gBAAA,IAAI,KAAK,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,EAAE,GAAG,EAAE,CAAC;AACpF,gBAAA,IAAI,SAAS,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AAC9C,gBAAA,IAAI,MAAM,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACtC,aAAA;SACF;IACH;AAEQ,IAAA,eAAe,CAAC,WAAgB,EAAA;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;QAC/C,MAAM,eAAe,IAAI,WAAW,EAAE,cAAc,IAAI,EAAE,CAA2B;AACrF,QAAA,MAAM,iBAAiB,GAAG,eAAe,CAAC,eAAe,CAAC,IAAI,WAAW,EAAE,KAAK,IAAI,EAAE;AACtF,QAAA,MAAM,qBAAqB,GAAG,eAAe,CAAC,WAAW,CAAC,IAAI,WAAW,EAAE,SAAS,IAAI,EAAE;AAC1F,QAAA,MAAM,kBAAkB,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,MAAM,IAAI,EAAE;QAEjF,OAAO,IAAI,CAAC,kBAAkB,CAAC;YAC7B,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,SAAS,CAAC,OAAO,IAAI,EAAE;AACxD,YAAA,KAAK,EAAE,iBAAiB,IAAI,SAAS,CAAC,KAAK,IAAI,EAAE;AACjD,YAAA,SAAS,EAAE,qBAAqB,IAAI,SAAS,CAAC,SAAS,IAAI,EAAE;AAC7D,YAAA,MAAM,EAAE,kBAAkB,IAAI,SAAS,CAAC,MAAM,IAAI,EAAE;AACrD,SAAA,CAAC;IACJ;IAEQ,4BAA4B,GAAA;AAClC,QAAA,IAAI;YACF,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC;AAC9D,YAAA,IAAI,CAAC,GAAG;gBAAE;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;AACzB,gBAAA,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE;AAC7B,gBAAA,SAAS,EAAE,KAAK,EAAE,SAAS,IAAI,EAAE;AACjC,gBAAA,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,EAAE;AAC3B,gBAAA,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE;AAC1B,aAAA,CAAC;QACJ;AAAE,QAAA,MAAM;;QAER;IACF;AAEQ,IAAA,6BAA6B,CAAC,KAA4G,EAAA;QAChJ,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,SAAS,CAAC;AAChE,YAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;AAC5B,YAAA,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE;AAChC,YAAA,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE;AAC1B,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE;AACzB,SAAA,CAAC,CAAC;IACL;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACpB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;IAChC;AAEQ,IAAA,cAAc,CAAC,GAA8B,EAAA;QACnD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE;AAC5B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE;AACjB,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAA,QAAA,EAAW,CAAC,CAAA,CAAE,CAAC;AACjE,YAAA,OAAO,CAAA,EAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,CAAA,EAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA,CAAA,CAAG,GAAG,MAAM,CAAC,QAAQ,EAAE;QAChH;AAAE,QAAA,MAAM;YACN,OAAO,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,CAAA,EAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;QACjD;IACF;wGAxLW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,2BAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArFlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0qFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA9OC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,68BACnB,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,sBAAsB,+DACtB,uBAAuB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,oBAAoB,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,kBAAkB,2DAClB,kCAAkC,EAAA,QAAA,EAAA,kCAAA,EAAA,CAAA,EAAA,CAAA;;4FAuOzB,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAvP7C,SAAS;+BACE,sBAAsB,EAAA,UAAA,EACpB,IAAI,EAAA,IAAA,EACV;AACJ,wBAAA,KAAK,EAAE,2BAA2B;qBACnC,EAAA,OAAA,EACQ;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,kBAAkB;wBAClB,wBAAwB;wBACxB,iBAAiB;wBACjB,sBAAsB;wBACtB,uBAAuB;wBACvB,oBAAoB;wBACpB,kBAAkB;wBAClB,kCAAkC;qBACnC,EAAA,QAAA,EAiJS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,0qFAAA,CAAA,EAAA;;sBAUA;;;MChRU,qBAAqB,CAAA;wGAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAP9B,YAAY;AACZ,YAAA,iCAAiC,aAGjC,iCAAiC,CAAA,EAAA,CAAA;AAGxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAP9B,YAAY;YACZ,iCAAiC,CAAA,EAAA,CAAA;;4FAMxB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP;AACD;AACF,iBAAA;;;MCNY,oBAAoB,CAAA;AAEvB,IAAA,WAAW,GAAG,IAAI,eAAe,CAAS,UAAU,CAAC;AAE7D,IAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;AAEvC,IAAA,OAAO,CAAC,IAAY,EAAA;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;AAEA,IAAA,QAAQ,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;wGAZW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACLD;;AAEG;;;;"}